.adsbygoogle{display:none}.app-container{max-width:100%;margin:0 auto;padding:10px;font-family:Arial,sans-serif}header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}h1{margin:0;color:#333;font-size:1.5em}.refresh-button{padding:6px 12px;background-color:#1976d2;color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:12px;transition:background-color .2s}.refresh-button:hover{background-color:#1565c0}.refresh-button:disabled{background-color:#ccc;cursor:not-allowed}.error-message{color:#d32f2f;margin:10px 0;padding:12px 16px;background-color:#ffebee;border-radius:4px;font-size:14px;border:1px solid #ef9a9a;display:flex;align-items:center;justify-content:center;font-weight:500;box-shadow:0 2px 4px #0000001a;animation:fadeIn .3s ease-in}@keyframes fadeIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.table-container{overflow:auto;max-height:70vh;border-radius:4px;box-shadow:0 1px 2px #0000001a;position:relative}.availability-table{width:100%;border-collapse:separate;border-spacing:0;background-color:#fff;min-width:1000px;position:relative}.availability-table th,.availability-table td{padding:0;text-align:center;border:1px solid #e0e0e0;font-size:12px}.availability-table th{background-color:#f5f5f5;font-weight:700;color:#333;position:sticky;top:0;z-index:1;min-width:120px;vertical-align:top;padding:8px;border:1px solid #e0e0e0}.availability-table th:first-child{position:sticky;left:0;top:0;z-index:3;background-color:#f5f5f5;width:60px!important;min-width:60px!important;max-width:60px!important}.availability-table th:not(:first-child){position:sticky;top:0;z-index:2;background-color:#f5f5f5;width:40px;min-width:30px;max-width:60px}.time-cell{font-weight:600;background-color:#f5f5f5;width:60px!important;min-width:60px!important;max-width:60px!important;position:sticky;left:0;z-index:2;color:#333;border:1px solid #e0e0e0;text-align:left!important;padding:8px 8px 8px 12px!important;overflow:hidden;white-space:nowrap;height:40px;display:table-cell;vertical-align:middle}.availability-table td:first-child{position:sticky;left:0;background-color:#f5f5f5;z-index:1;text-align:left!important;padding-left:12px!important;font-weight:600;color:#333;height:40px;vertical-align:middle}.availability-table thead th:first-child{position:sticky;left:0;top:0;z-index:3;background-color:#f5f5f5;text-align:left!important;padding-left:12px!important;font-weight:600;color:#333;height:40px;vertical-align:middle}.availability-table td:first-child:after,.availability-table th:first-child:after{content:"";position:absolute;top:0;right:0;height:100%;width:4px;background:linear-gradient(90deg,#00000014,#0000);pointer-events:none}.availability-table thead{position:sticky;top:0;z-index:2;background-color:#f5f5f5}.availability-table th{position:sticky;top:0;z-index:1;background-color:#f5f5f5;height:40px;vertical-align:middle;border:1px solid #e0e0e0}.availability-table thead th{background-clip:padding-box}.availability-cell{min-width:150px;vertical-align:top}.venue-groups{display:flex;flex-direction:column;gap:8px;width:100%}.venue-group{background:#f8f9fa;border-radius:6px;padding:6px;width:100%}.venue-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px;font-size:.85rem;padding:4px;transition:background-color .2s}.venue-header:hover{background-color:#0000000d;border-radius:4px}.venue-header-right{display:flex;align-items:center;gap:8px}.expand-icon{color:#6c757d;transition:transform .2s}.venue-name{font-weight:600;color:#495057}.venue-count{font-size:.75rem;color:#6c757d;background:#e9ecef;padding:2px 6px;border-radius:4px}.court-badges{display:flex;flex-wrap:wrap;gap:4px;padding-top:4px;animation:slideDown .2s ease-out}@keyframes slideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.court-badge{background:#e9ecef;color:#495057;padding:2px 6px;border-radius:4px;font-size:.75rem;white-space:nowrap;transition:all .2s ease}.court-badge:hover{transform:translateY(-2px);box-shadow:0 2px 4px #0000001a}.venue-group.latham-park-tennis-club{border-left:3px solid #4CAF50}.venue-group.snape-park-tennis-centre{border-left:3px solid #2196F3}.venue-group.sydney-boys-high-school{border-left:3px solid #e0e0e0}.venue-group.coogee{border-left:3px solid #fff176}.venue-group.eastside-tennis-centre{border-left:3px solid #000000}.venue-group.wentworth-tennis-centre{border-left:3px solid #9C27B0}.venue-group.moore-park{border-left:3px solid #607D8B}.venue-group.centennial-park{border-left:3px solid #FF5722}.venue-group.latham-park-tennis-club .venue-name{color:#2e7d32}.venue-group.snape-park-tennis-centre .venue-name{color:#1565c0}.venue-group.sydney-boys-high-school .venue-name{color:#424242}.venue-group.coogee .venue-name{color:#f57f17}.venue-group.eastside-tennis-centre .venue-name{color:#000}.venue-group.wentworth-tennis-centre .venue-name{color:#7b1fa2}.venue-group.moore-park .venue-name{color:#455a64}.venue-group.centennial-park .venue-name{color:#d84315}.venue-group.latham-park-tennis-club .venue-count{background-color:#c8e6c9;color:#2e7d32}.venue-group.snape-park-tennis-centre .venue-count{background-color:#bbdefb;color:#1565c0}.venue-group.sydney-boys-high-school .venue-count{background-color:#e0e0e0;color:#424242}.venue-group.coogee .venue-count{background-color:#fff176;color:#f57f17}.venue-group.eastside-tennis-centre .venue-count{background-color:#e0e0e0;color:#000}.venue-group.wentworth-tennis-centre .venue-count{background-color:#e1bee7;color:#7b1fa2}.venue-group.moore-park .venue-count{background-color:#cfd8dc;color:#455a64}.venue-group.centennial-park .venue-count{background-color:#ffccbc;color:#d84315}.venue-group.latham-park-tennis-club .court-badge{background-color:#c8e6c9;color:#2e7d32}.venue-group.snape-park-tennis-centre .court-badge{background-color:#bbdefb;color:#1565c0}.venue-group.sydney-boys-high-school .court-badge{background-color:#e0e0e0;color:#424242}.venue-group.coogee .court-badge{background-color:#fff176;color:#f57f17}.venue-group.eastside-tennis-centre .court-badge{background-color:#e0e0e0;color:#000}.venue-group.wentworth-tennis-centre .court-badge{background-color:#e1bee7;color:#7b1fa2}.venue-group.moore-park .court-badge{background-color:#cfd8dc;color:#455a64}.venue-group.centennial-park .court-badge{background-color:#ffccbc;color:#d84315}.venue-group.centennial .court-badge{background-color:#c24e0a;color:#bd6213}.venue-group.centennial-tennis-centre .court-badge{background-color:#e0e0e0;color:#000}.court-number{font-weight:500}@media (max-width: 768px){.app-container{padding:5px}header{flex-direction:column;gap:5px;text-align:center}.availability-table th,.availability-table td{padding:4px}.time-cell{width:50px!important;min-width:50px!important;max-width:50px!important;font-size:11px;padding:2px!important}.venue-groups{gap:6px}.venue-group{padding:4px}.venue-header{font-size:.8rem}.venue-count,.court-badge{font-size:.7rem;padding:1px 4px}}.filter-controls{display:flex;gap:16px;margin:10px 0;padding:16px;background:linear-gradient(135deg,#f8f9fa,#e9ecef);border-radius:12px;flex-wrap:wrap;justify-content:center;box-shadow:0 2px 8px #0000001a;border:1px solid #dee2e6}.filter-control{display:flex;align-items:center;gap:8px;min-width:90px;padding:8px 12px;transition:all .2s ease;cursor:pointer}.filter-control:hover{transform:translateY(-1px)}.filter-control input[type=checkbox]{margin:0;cursor:pointer;width:18px;height:18px;accent-color:#007bff;border-radius:4px}.filter-label-latham{color:#4caf50;font-weight:600;font-size:14px}.filter-label-snape{color:#2196f3;font-weight:600;font-size:14px}.filter-label-boyhs{color:#424242;font-weight:600;font-size:14px}.filter-label-coogee{color:#f57f17;font-weight:600;font-size:14px}.filter-label-eastside{color:#000;font-weight:600;font-size:14px}.filter-label-wentworth{color:#9c27b0;font-weight:600;font-size:14px}.filter-label-moore{color:#7a7e82;font-weight:600;font-size:14px}.filter-label-centennial{color:#ff5722;font-weight:600;font-size:14px}.filter-label-temperature{color:#ff6384;font-weight:600;font-size:14px}.filter-label-min-temp{color:#4bc0c0;font-weight:600;font-size:14px}.filter-label-max-temp{color:#96f;font-weight:600;font-size:14px}.filter-label-humidity{color:#ffcd56;font-weight:600;font-size:14px}.filter-label-clouds{color:#36a2eb;font-weight:600;font-size:14px}.filter-label-rain{color:#4bc0c0;font-weight:600;font-size:14px}.table-loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;background:linear-gradient(135deg,#f8f9fa,#e9ecef);border-radius:12px;margin:20px 0;box-shadow:0 2px 8px #0000001a;border:1px solid #dee2e6}.loading-spinner{width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #007bff;border-radius:50%;animation:spin 1s linear infinite;margin-bottom:16px}.loading-text{color:#6c757d;font-size:16px;font-weight:500;margin:0}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.cell-loading{display:flex;justify-content:center;align-items:center;height:100%;min-height:40px}.cell-loading-dot{width:8px;height:8px;background-color:#007bff;border-radius:50%;animation:pulse 1.5s ease-in-out infinite}@keyframes pulse{0%,to{opacity:.3;transform:scale(.8)}50%{opacity:1;transform:scale(1.2)}}.date-header{display:flex;flex-direction:column;gap:4px;padding:4px;background-color:#f5f5f5;height:100%}.weather-info{font-size:11px;color:#333;background-color:#ffffffe6;border-radius:4px;padding:4px;margin-top:4px}.weather-main{display:flex;align-items:center;gap:4px;margin-bottom:4px}.weather-icon{width:32px;height:32px}.weather-description{text-transform:capitalize;font-weight:500}.weather-details{display:flex;flex-direction:column;gap:2px}.weather-temp{font-weight:500;display:flex;gap:8px;align-items:center}.weather-humidity,.weather-wind{font-size:10px;opacity:.8}.weather-secondary{display:flex;justify-content:space-between;font-size:10px;opacity:.8}.weather-uv,.weather-dew{background-color:#0000000d;padding:2px 4px;border-radius:3px}.app-header{background:linear-gradient(135deg,#1a237e,#0d47a1);padding:1.5rem 2rem;margin:-1rem -1rem 1rem;border-radius:0 0 1rem 1rem;box-shadow:0 2px 4px #0000001a;display:flex;flex-direction:column;align-items:center;text-align:center}.app-title{color:#fff;font-size:2rem;margin:0;font-weight:600;text-shadow:0 2px 4px rgba(0,0,0,.2)}.app-summary{color:#ffffffe6;font-size:1rem;margin:.75rem 0 1.5rem;font-weight:400;max-width:800px;text-align:center;line-height:1.4}.booking-link{color:#ffffffe6;text-decoration:none;font-size:1rem;padding:.5rem 1rem;border-radius:.5rem;background:#ffffff1a;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);transition:all .2s ease;display:inline-block;margin-bottom:1rem}.booking-link:hover{background:#fff3;transform:translateY(-1px);color:#fff}.booking-link:active{transform:translateY(0)}.button-group{display:flex;gap:1rem;margin-top:.5rem;justify-content:center;width:100%}.action-button{display:flex;align-items:center;gap:.5rem;padding:.75rem 1.25rem;border:none;border-radius:.5rem;font-size:1rem;font-weight:500;cursor:pointer;transition:all .2s ease;background:#ffffff1a;color:#fff;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.action-button:hover{background:#fff3;transform:translateY(-1px)}.action-button:active{transform:translateY(0)}.action-button:disabled{opacity:.6;cursor:not-allowed;transform:none}.button-icon{font-size:1.25rem}.weather-button{background:linear-gradient(135deg,#2196f3,#1976d2)}.refresh-button{background:linear-gradient(135deg,#4caf50,#388e3c)}.availability-cell{min-width:120px;padding:8px!important;vertical-align:middle!important;text-align:center!important}@media (max-width: 768px){.availability-cell{min-width:100px;padding:6px!important}}.bg-destructive{background-color:#ef4444;padding:4px 12px!important}.text-destructive-foreground{color:#fff}.hover\:bg-destructive\/80:hover{background-color:#ef4444cc}.inline-flex{display:inline-flex}.items-center{align-items:center}.rounded-full{border-radius:9999px}.text-xs{font-size:.75rem;line-height:1rem}.font-semibold{font-weight:600}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: rgba(147, 197, 253, .5)}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}@media (max-width: 768px){.filter-controls{gap:8px;padding:6px}.filter-control{min-width:auto;font-size:.85rem}.filter-control input[type=checkbox]{width:14px;height:14px}}@media (max-width: 480px){.filter-controls{gap:6px;padding:4px}.filter-control{font-size:.75rem}}.forecast-graphs{background:#fff;padding:16px;border-radius:8px;box-shadow:0 1px 3px #0000001a;margin-bottom:16px}.recharts-bar-rectangle{transition:opacity .2s}.recharts-bar-rectangle:hover{opacity:.8}.app-footer{margin-top:2rem;padding:1rem;text-align:center;border-top:1px solid #eaeaea;color:#666;font-size:.9rem}.footer-content{display:flex;align-items:center;justify-content:center;gap:.5rem}.heart-icon{color:#ff4081;font-size:1.2rem;animation:heartbeat 1.5s ease-in-out infinite}.tennis-icon{color:#4caf50;font-size:1.2rem;animation:bounce 1s ease-in-out infinite}@keyframes heartbeat{0%,to{transform:scale(1)}50%{transform:scale(1.2)}}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;background-color:#242424;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{margin:0;padding:0;box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#fff}}
