:root{font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}#root{width:100%;max-width:1400px;margin:0 auto}body{margin:0}*{box-sizing:border-box}:root{--bg:#0a0a1a;--bg-card:#12122a;--bg-hover:#1a1a3a;--text:#c8c8d8;--text-bright:#eeeef8;--text-dim:#888898;--accent:#4fc3f7;--accent-dim:#2a7aaa;--green:#66bb6a;--yellow:#ffd54f;--orange:#ff9800;--red:#ef5350;--border:#2a2a4a}body{background:var(--bg);color:var(--text);margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;line-height:1.5}.app{max-width:1400px;margin:0 auto;padding:20px}.app-header{text-align:center;margin-bottom:30px}.app-header h1{color:var(--text-bright);margin:0;font-size:2rem}.subtitle{color:var(--text-dim);margin:4px 0 0}.controls{flex-wrap:wrap;gap:20px;margin-bottom:30px;display:flex}.location-input{flex:1;min-width:300px}.location-input label,.year-selector label{color:var(--text-dim);margin-bottom:6px;font-size:.85rem;display:block}.location-form{gap:8px;display:flex}.coord-inputs{gap:6px;display:flex}.coord-inputs input{background:var(--bg-card);border:1px solid var(--border);width:100px;color:var(--text-bright);border-radius:6px;padding:8px 10px;font-size:.9rem}.coord-inputs button,.year-buttons button{background:var(--bg-card);border:1px solid var(--border);color:var(--text);cursor:pointer;border-radius:6px;padding:8px 14px;font-size:.85rem;transition:all .2s}.coord-inputs button:hover,.year-buttons button:hover{background:var(--bg-hover);border-color:var(--accent-dim)}.year-buttons{gap:6px;display:flex}.year-buttons button.active,.coord-inputs button:active{background:var(--accent-dim);border-color:var(--accent);color:var(--text-bright)}.presets{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.preset{background:var(--bg-card);border:1px solid var(--border);color:var(--text-dim);cursor:pointer;border-radius:12px;padding:4px 10px;font-size:.75rem;transition:all .2s}.preset:hover{border-color:var(--accent-dim);color:var(--text)}.preset.active{border-color:var(--accent);color:var(--accent)}.location-name{color:var(--accent);margin-left:8px;font-size:.85rem}.section{margin-bottom:30px}.section h2{color:var(--text-bright);margin:0 0 6px;font-size:1.3rem}.section-desc{color:var(--text-dim);margin:0 0 16px;font-size:.85rem}.visibility-chart{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;padding:20px}.best-dates-legend{flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px;display:flex}.legend-title{color:var(--text-dim);font-size:.85rem}.legend-date{background:var(--bg);border:1px solid var(--border);color:var(--text);cursor:pointer;border-radius:8px;padding:4px 10px;font-size:.8rem;transition:all .2s}.legend-date:hover{border-color:var(--accent-dim)}.legend-date.active{border-color:var(--accent);background:var(--accent-dim);color:var(--text-bright)}.legend-score{color:var(--text-dim);font-size:.7rem;display:block}.date-grid{grid-template-columns:repeat(auto-fill,minmax(65px,1fr));gap:4px;max-height:400px;display:grid;overflow-y:auto}.date-cell{cursor:pointer;background:var(--bg-card);border:1px solid #0000;border-radius:8px;flex-direction:column;align-items:center;padding:6px 4px;font-size:.75rem;transition:all .2s;display:flex}.date-cell:hover{border-color:var(--accent-dim)}.date-cell.selected{border-color:var(--accent);box-shadow:0 0 8px #4fc3f74d}.date-weekday{color:var(--text-dim);font-size:.65rem}.date-day{color:var(--text-bright);font-size:1.1rem;font-weight:600}.date-month{color:var(--text-dim);font-size:.65rem}.date-month-group{margin-bottom:12px}.date-month-header{color:var(--text-dim);margin:0 0 6px;font-size:.85rem;font-weight:600}.date-moon{margin-top:2px;font-size:.65rem}.date-cell.excellent{background:#1a3a1a}.date-cell.excellent .date-moon{color:var(--green)}.date-cell.good{background:#2a3a1a}.date-cell.good .date-moon{color:var(--yellow)}.date-cell.fair{background:#2a2a1a}.date-cell.fair .date-moon{color:var(--orange)}.date-cell.poor{background:#1a1a1a}.date-cell.poor .date-moon{color:var(--red)}.date-legend{flex-wrap:wrap;align-items:center;gap:12px;margin-top:10px;display:flex}.legend-item{border-radius:4px;padding:2px 8px;font-size:.75rem}.legend-item.excellent{color:var(--green);background:#1a3a1a}.legend-item.good{color:var(--yellow);background:#2a3a1a}.legend-item.fair{color:var(--orange);background:#2a2a1a}.legend-item.poor{color:var(--red);background:#1a1a1a}.legend-label{color:var(--text-dim);font-size:.75rem}.night-info h2{margin-bottom:16px}.night-info-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;display:grid}.info-card{background:var(--bg-card);border:1px solid var(--border);border-radius:10px;flex-direction:column;gap:2px;padding:14px;display:flex}.info-card.highlight{border-color:var(--accent-dim);background:linear-gradient(135deg, var(--bg-card), #1a2a3a)}.info-icon{font-size:1.2rem}.info-label{color:var(--text-dim);font-size:.75rem}.info-value{color:var(--text-bright);font-size:1rem;font-weight:500}.marathon-schedule{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;overflow:hidden}.schedule-controls{border-bottom:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;padding:14px 16px;display:flex}.progress-bar{background:var(--bg);border-radius:14px;width:200px;height:28px;position:relative;overflow:hidden}.progress-fill{background:linear-gradient(90deg, var(--accent-dim), var(--green));border-radius:14px;height:100%;transition:width .3s}.progress-text{color:var(--text-bright);justify-content:center;align-items:center;font-size:.8rem;font-weight:500;display:flex;position:absolute;inset:0}.filter-buttons{gap:4px;display:flex}.filter-buttons button{background:var(--bg);border:1px solid var(--border);color:var(--text-dim);cursor:pointer;border-radius:6px;padding:6px 12px;font-size:.8rem;transition:all .2s}.filter-buttons button.active{background:var(--accent-dim);border-color:var(--accent);color:var(--text-bright)}.sort-buttons{align-items:center;gap:4px;display:flex}.sort-label{color:var(--text-dim);margin-right:2px;font-size:.8rem}.sort-buttons button{background:var(--bg);border:1px solid var(--border);color:var(--text-dim);cursor:pointer;border-radius:6px;padding:6px 12px;font-size:.8rem;transition:all .2s}.sort-buttons button.active{background:var(--accent-dim);border-color:var(--accent);color:var(--text-bright)}.schedule-table{overflow-x:auto}.schedule-header,.schedule-row{grid-template-columns:30px 35px 50px 120px 120px 90px 40px 55px 55px 45px 110px 55px 1fr;align-items:center;gap:4px;min-width:900px;padding:8px 12px;font-size:.82rem;display:grid}.schedule-header{background:var(--bg);color:var(--text-dim);border-bottom:1px solid var(--border);font-size:.75rem;font-weight:600;position:sticky;top:0}.schedule-row{border-bottom:1px solid #1a1a2a;transition:background .15s}.schedule-row:hover{background:var(--bg-hover)}.schedule-row.checked{opacity:.5}.schedule-row.current{border-left:3px solid var(--accent);background:#1a2a3a}.schedule-row.invisible-row{opacity:.6}.col-check input{accent-color:var(--accent);cursor:pointer}.col-id{color:var(--accent);font-weight:600}.col-name{color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;font-size:.78rem;overflow:hidden}.col-type{color:var(--text-dim);font-size:.75rem}.col-ra,.col-dec{color:var(--text-dim);font-family:monospace;font-size:.78rem}.status-visible{color:var(--green)}.status-impossible{color:var(--red);font-size:.75rem}.status-difficult{color:var(--orange);font-size:.75rem}.status-twilight{color:var(--yellow);font-size:.75rem}.timeline-bar{background:#1a1a2a;border-radius:3px;min-width:100px;height:16px;position:relative}.timeline-fill{background:linear-gradient(90deg, var(--accent-dim), var(--accent));opacity:.6;border-radius:2px;height:12px;position:absolute;top:2px}.timeline-suggested{background:var(--green);width:2px;height:16px;position:absolute;top:0}.timeline-now{background:var(--red);z-index:1;width:2px;height:16px;position:absolute;top:0}.timeline-invisible .timeline-fill{opacity:.4;background:#333;border:1px dashed #555}.status-tag{opacity:.7;font-size:.75em}.sleep-window-banner{color:#88c;background:linear-gradient(90deg,#0000,#6464b426,#0000);border-top:1px dashed #445;border-bottom:1px dashed #445;justify-content:center;align-items:center;gap:8px;padding:6px 12px;font-size:.85em;font-style:italic;display:flex}.sleep-icon{font-style:normal}.loading{color:var(--text-dim);text-align:center;padding:40px}.loading-overlay{background:var(--bg-card);border:1px solid var(--accent-dim);color:var(--accent);z-index:100;border-radius:10px;padding:12px 20px;font-size:.9rem;position:fixed;bottom:20px;right:20px;box-shadow:0 4px 20px #00000080}.error{border:1px solid var(--red);color:var(--red);background:#3a1a1a;border-radius:8px;margin-bottom:20px;padding:12px 16px}.section-header-row{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px;display:flex}.action-buttons{flex-shrink:0;gap:8px;display:flex}.action-btn{background:var(--bg-card);border:1px solid var(--border);color:var(--text);cursor:pointer;border-radius:6px;padding:8px 16px;font-size:.85rem;transition:all .2s}.action-btn:hover{background:var(--bg-hover);border-color:var(--accent-dim)}.moon-chart-details{margin-top:16px}.moon-chart-details summary{color:var(--text-dim);cursor:pointer;padding:6px 0;font-size:.85rem}.moon-chart-details summary:hover{color:var(--text)}.date-objects{color:var(--accent);margin-top:1px;font-size:.6rem}.sky-path-chart{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;padding:16px}.sky-path-svg{width:100%;height:auto}.sky-path-legend{flex-wrap:wrap;align-items:center;gap:12px;margin-top:10px;padding:0 4px;display:flex}.sky-legend-item{color:var(--text-dim);align-items:center;gap:4px;font-size:.75rem;display:flex}.sky-legend-dot{border-radius:50%;width:8px;height:8px;display:inline-block}.sky-legend-sep{color:var(--border);font-size:.75rem}@media (width<=768px){.app{padding:12px}.controls{flex-direction:column}.schedule-header,.schedule-row{grid-template-columns:25px 30px 45px 100px 100px 80px 40px 50px 50px 45px 120px 55px 80px;font-size:.75rem}.night-info-grid{grid-template-columns:repeat(2,1fr)}}
