:root { color-scheme: light dark; font-family: Inter, ui-sans-serif, system-ui, -apple-system, sans-serif; }
* { box-sizing: border-box; }
body { margin: 0; color: light-dark(#17231d,#edf7f1); background: light-dark(#f4f7f4,#101713); }
.topbar { height: 64px; display:flex;align-items:center;justify-content:space-between;padding:0 24px;background:light-dark(#fff,#172019);border-bottom:1px solid light-dark(#dfe7e1,#2b3931); }
.brand { display:flex;align-items:center;gap:10px;color:inherit;text-decoration:none;font-weight:750; }
.mark { width:30px;height:30px;display:grid;place-items:center;border-radius:9px;background:#198754;color:#fff; }
.environment,.sample { font:700 11px/1 ui-monospace,monospace;padding:7px 9px;border-radius:999px;color:light-dark(#19724b,#baf0d2);background:light-dark(#e8f6ee,#203329);white-space:nowrap; }
.shell { min-height:calc(100vh - 64px);display:grid;grid-template-columns:220px minmax(0,1fr); }
.sidebar { padding:24px 16px;border-right:1px solid light-dark(#dfe7e1,#2b3931);background:light-dark(#fafcfb,#141c17); }
.nav-label { margin:0 10px 10px;color:light-dark(#78867e,#829188);font-size:11px;font-weight:750;text-transform:uppercase;letter-spacing:.08em; }
.nav-item { display:block;margin-bottom:4px;padding:10px 12px;border-radius:10px;color:light-dark(#506058,#a7b5ad);text-decoration:none;font-size:14px; }
.nav-item.active { color:light-dark(#12623f,#baf0d2);background:light-dark(#e8f4ed,#203329);font-weight:750; }
.content { width:min(980px,100%);padding:30px; }
h1 { margin:0;font-size:26px;letter-spacing:-.035em; } h2 { margin:0;font-size:15px; }
.subtitle,.panel-head p { color:light-dark(#68766f,#98a59e);font-size:13px;margin:6px 0 0; }
.ticker-field { margin-top:22px;width:min(420px,100%);padding:11px 13px;border:1px solid light-dark(#ccd7d0,#3a493f);background:light-dark(#fff,#1c2720);border-radius:10px;display:flex;flex-direction:column;gap:4px; }
.forecast-city-buttons{display:flex;gap:10px;flex-wrap:wrap;margin:18px 0 4px}.forecast-city-buttons a{padding:9px 15px;border:1px solid light-dark(#bdcbc2,#43564a);border-radius:9px;color:inherit;text-decoration:none;font-weight:750;background:light-dark(#fff,#1c2720)}.forecast-city-buttons a:hover{border-color:#168454}.forecast-city-buttons a[aria-current="page"]{background:#168454;border-color:#168454;color:#fff}
.forecast-city-segments{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}.forecast-city-segments a{text-align:center}
.input-date-control{display:flex;align-items:end;gap:10px;margin-top:12px}.input-date-control label{display:grid;gap:6px;color:light-dark(#64726a,#99a69f);font-size:11px;font-weight:750;text-transform:uppercase;letter-spacing:.04em}.input-date-control input{height:38px;padding:0 10px;border:1px solid light-dark(#ccd7d0,#3a493f);border-radius:9px;background:light-dark(#fff,#1c2720);color:inherit}
.input-overview-table th,.input-overview-table td{text-align:center;min-width:92px}.input-overview-table th:first-child,.input-overview-table td:first-child{text-align:left;min-width:190px}.input-overview-table th a{display:block;color:inherit;text-decoration:none}.input-overview-table th small{display:block;margin-top:3px;font-size:9px}.input-overview-table .selected-day{background:light-dark(#eef8f2,#203329);box-shadow:inset 2px 0 #168454,inset -2px 0 #168454}.input-overview-table thead .selected-day{box-shadow:inset 2px 2px #168454,inset -2px 0 #168454}.input-overview-table tbody tr:last-child .selected-day{box-shadow:inset 2px 0 #168454,inset -2px -2px #168454}
.input-badge{display:inline-flex;margin-left:7px;padding:3px 5px;border-radius:4px;font-size:8px;font-weight:850;vertical-align:middle}.input-badge.provisional{color:#9a5900;background:#fff0cf;border:1px solid #ebb34f}.input-badge.confirmed{color:#087242;background:#e2f5ea;border:1px solid #54ae7d}
.input-timeline-grid{display:grid;grid-template-columns:minmax(0,1.8fr) minmax(280px,.9fr);gap:14px}.input-chart-panel,.input-snapshot-panel{margin-top:14px}.input-chart{display:block;width:100%;height:auto;margin-top:10px;overflow:visible}.input-chart-empty{padding:70px 12px;text-align:center;color:light-dark(#849189,#829088)}.input-chart-empty[hidden]{display:none}.chart-grid{stroke:light-dark(#e2e9e4,#344239);stroke-width:1;stroke-dasharray:3 4}.chart-label{fill:light-dark(#718078,#93a199);font-size:10px}.metar-line,.hfmetar-line,.maxt-line{fill:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}.metar-line{stroke:#1769c2}.hfmetar-line{stroke:#db7516;stroke-dasharray:2 6}.maxt-line{stroke:#168454}.metar-point{fill:#1769c2}.run-marker{stroke:#1d2922;stroke-width:1;stroke-dasharray:5 4;cursor:pointer;opacity:.5}.run-marker:hover,.run-marker:focus{stroke:#168454;stroke-width:3;opacity:1}.input-chart-legend{display:flex;justify-content:center;gap:22px;color:light-dark(#56645c,#a7b4ac);font-size:11px}.input-chart-legend span::before{content:'';display:inline-block;width:22px;margin-right:7px;border-top:3px solid;vertical-align:middle}.input-chart-legend .metar::before{border-color:#1769c2}.input-chart-legend .hfmetar::before{border-color:#db7516;border-style:dotted}.input-chart-legend .maxt::before{border-color:#168454}
.snapshot-values{margin:18px 0}.snapshot-values div{display:flex;justify-content:space-between;gap:12px;padding:12px 0;border-bottom:1px solid light-dark(#e7ece9,#314037)}.snapshot-values dt{font-size:11px;font-weight:700}.snapshot-values dd{margin:0;text-align:right;font-size:12px}.raw-link{display:block;padding:11px;border:1px solid #168454;border-radius:9px;color:#168454;text-align:center;text-decoration:none;font-weight:800;font-size:12px}.raw-input-groups{display:grid;gap:9px;margin-top:14px}.raw-input-groups details{padding:0 15px;border:1px solid light-dark(#dce5df,#344239);border-radius:11px;background:light-dark(#fff,#1a241e)}.raw-input-groups summary{display:flex;justify-content:space-between;padding:14px 0;color:inherit}.raw-input-groups summary b{color:light-dark(#718078,#93a199);font-size:11px}.raw-input-groups .table-wrap{max-height:340px;overflow:auto}
.ticker-field span,.forecast-summary span { color:light-dark(#718078,#93a199);font-size:11px; }
.source-row { margin-top:14px;padding:13px 14px;display:flex;align-items:center;gap:12px;background:light-dark(#fff,#1a241e);border:1px solid light-dark(#dce5df,#344239);border-radius:12px; }
.source-row div { min-width:0;flex:1;font-size:13px; }.source-row small { display:block;color:light-dark(#718078,#93a199);font-size:11px;margin-top:3px; }
.status-dot { width:9px;height:9px;border-radius:50%;background:#20a867;box-shadow:0 0 0 4px rgba(32,168,103,.12); }.timestamp { color:light-dark(#718078,#93a199);font-size:11px;white-space:nowrap; }
.panel { margin-top:14px;padding:19px;background:light-dark(#fff,#1a241e);border:1px solid light-dark(#dce5df,#344239);border-radius:14px; }
.panel-head,.forecast-summary { display:flex;align-items:flex-start;justify-content:space-between;gap:18px; }
.actions { display:flex;align-items:center;gap:8px; }.actions form { margin:0; }
button { min-height:38px;padding:0 13px;border:0;border-radius:9px;background:#177f50;color:#fff;font-weight:750;cursor:pointer; }
.forecast-summary { align-items:flex-end;margin-top:19px;padding-bottom:18px;border-bottom:1px solid light-dark(#e0e7e2,#344239); }
.forecast-summary div>strong { display:block;margin-top:3px;font-size:38px;letter-spacing:-.05em; }.forecast-summary strong small { font-size:14px;color:light-dark(#718078,#93a199); }.likely { text-align:right; }.likely strong { color:#168a55;font-size:18px!important;letter-spacing:0!important; }
.table-wrap { overflow-x:auto; } table { width:100%;border-collapse:collapse;margin-top:14px;font-size:12px; } th { text-align:left;padding:0 9px 10px;color:light-dark(#77847d,#93a198);font-size:10px;text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid light-dark(#e0e7e2,#344239); } td { padding:12px 9px;border-bottom:1px solid light-dark(#edf1ee,#2a372f);white-space:nowrap; } tbody tr:last-child td { border-bottom:0; }
.positive { color:#168a55;font-weight:750; }.negative { color:#b44d28; }
.date-filter { display:flex;align-items:end;gap:10px;margin-bottom:20px; }.date-filter label { display:grid;gap:6px;color:light-dark(#64726a,#99a69f);font-size:11px;font-weight:750;text-transform:uppercase;letter-spacing:.04em; }.date-filter input,.date-filter select { height:38px;padding:0 10px;border:1px solid light-dark(#ccd7d0,#3a493f);border-radius:9px;background:light-dark(#fff,#1c2720);color:inherit; }
.data-note { margin:-8px 0 18px;color:light-dark(#718078,#93a199);font-size:11px; }
.save-confirmation { margin:14px 0 0;padding:10px 12px;border-radius:9px;color:light-dark(#12623f,#baf0d2);background:light-dark(#e8f6ee,#203329);font-size:12px;font-weight:700; }
.model-input-summary { margin:14px 0 0;color:light-dark(#718078,#93a199);font-size:11px;line-height:1.6; }
.seven-day-table th,.seven-day-table td { text-align:center;min-width:84px; }
.seven-day-table th small { display:block;margin-top:3px;font-size:10px;font-weight:600;letter-spacing:0;text-transform:none; }
.seven-day-table .sticky-column { position:sticky;left:0;z-index:1;min-width:92px;text-align:left;background:light-dark(#fff,#1a241e);box-shadow:1px 0 light-dark(#e0e7e2,#344239); }
.seven-day-table thead .sticky-column { z-index:2; }
.seven-day-table .daily-high-row td { color:light-dark(#12623f,#baf0d2);background:light-dark(#edf8f1,#203329);font-weight:800;border-bottom:2px solid light-dark(#cfe5d7,#3a5444); }
.seven-day-table .daily-high-row .sticky-column { background:light-dark(#edf8f1,#203329); }
.seven-day-table td.closest-high { color:light-dark(#c7352d,#ff7068);font-weight:900; }
.missing { color:light-dark(#a4aea8,#6f7d75); }
.status-grid { display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:18px; }
.status-grid div { padding:14px;border-radius:10px;background:light-dark(#f5f8f6,#202b24); }
.status-grid span { display:block;color:light-dark(#718078,#93a199);font-size:10px;text-transform:uppercase;letter-spacing:.05em; }
.status-grid strong { display:block;margin-top:6px;font-size:13px; }
.job-badge,.run-status { display:inline-flex;align-items:center;justify-content:center;min-width:76px;padding:8px 12px;border-radius:999px;font-family:Inter,ui-sans-serif,system-ui,-apple-system,sans-serif;font-size:12px;font-weight:800;line-height:1.2;letter-spacing:.04em;white-space:nowrap; }
.job-badge.healthy,.run-status.success { color:light-dark(#0b5736,#d8f8e6);background:light-dark(#dff3e8,#245138);border:1px solid light-dark(#b9dfca,#397553); }
.job-badge.running { color:light-dark(#735c00,#ffe08a);background:light-dark(#fff5cc,#3d351d); }
.job-badge.failed,.run-status.failed { color:light-dark(#9b342d,#ffaaa5);background:light-dark(#fdecea,#442724); }
.job-badge.waiting { color:light-dark(#53635a,#b6c3bb);background:light-dark(#edf1ee,#29352d); }
.job-error { margin:14px 0 0;padding:11px;border-radius:9px;color:light-dark(#9b342d,#ffaaa5);background:light-dark(#fdecea,#442724);font-size:12px; }
.snapshot-detail { min-width:220px;margin-top:8px;padding:9px;border-radius:8px;background:light-dark(#f5f8f6,#202b24);font-size:11px;line-height:1.6;white-space:normal; }
.snapshot-detail a { color:#168a55;font-weight:750; }
summary { color:#168a55;cursor:pointer;font-weight:750; }
.status-dot-paused { background:#d89a25;box-shadow:0 0 0 4px rgba(216,154,37,.14); }
.strict-badge { display:inline-flex;padding:5px 8px;border-radius:999px;color:light-dark(#0b5736,#d8f8e6);background:light-dark(#dff3e8,#245138);font-size:10px;font-weight:850;letter-spacing:.05em; }
.rule-grid { display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;margin-top:16px; }
.rule-grid span { padding:12px;border-radius:9px;background:light-dark(#f5f8f6,#202b24);font-size:12px;font-weight:700; }
.rule-grid span::before { content:'✓';margin-right:7px;color:#168a55; }
.opportunity-card { border-color:light-dark(#b9dfca,#397553); }
.risk-badge { display:inline-flex;padding:7px 10px;border-radius:999px;color:light-dark(#8a4f00,#ffd98b);background:light-dark(#fff2d9,#42351d);font-size:10px;font-weight:850;letter-spacing:.05em;white-space:nowrap; }
.trade-pair { display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:12px;margin-top:18px; }
.trade-leg { display:grid;gap:5px;padding:15px;border:1px solid light-dark(#dce5df,#344239);border-radius:11px;color:inherit;text-decoration:none;background:light-dark(#f9fbfa,#202b24); }
.trade-leg span,.economics-grid span { color:light-dark(#718078,#93a199);font-size:10px;font-weight:750;letter-spacing:.05em; }
.trade-leg strong { font-size:14px; }.trade-leg b { color:#168a55;font-size:25px; }
.pair-plus { color:light-dark(#718078,#93a199);font-weight:850; }
.economics-grid { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px;margin-top:12px; }
.economics-grid div { padding:13px;border-radius:9px;background:light-dark(#f5f8f6,#202b24); }
.economics-grid strong { display:block;margin-top:5px;font-size:19px; }.profit-box strong { color:#168a55; }
.fee-detail { margin-top:13px; }.risk-note { margin:12px 0 0;color:light-dark(#8a4f00,#ffd98b);font-size:11px;line-height:1.5; }
.days-form label { display:grid;gap:5px;color:light-dark(#718078,#93a199);font-size:10px;font-weight:750;letter-spacing:.05em; }
.days-form select { height:34px;padding:0 9px;border:1px solid light-dark(#ccd7d0,#3a493f);border-radius:8px;background:light-dark(#fff,#1c2720);color:inherit; }
.history-note { margin:12px 0 0;line-height:1.5; }
@media (max-width:700px) { .shell{grid-template-columns:1fr}.sidebar{display:flex;gap:4px;padding:10px 14px;border-right:0;border-bottom:1px solid light-dark(#dfe7e1,#2b3931);overflow-x:auto}.nav-label{display:none}.nav-item{margin:0;white-space:nowrap}.content{padding:22px 14px}.source-row,.panel-head,.forecast-summary{align-items:flex-start;flex-direction:column}.likely{text-align:left}.date-filter,.input-date-control{align-items:stretch;flex-direction:column}.date-filter button,.input-date-control button{align-self:flex-start}.timestamp{white-space:normal}.status-grid,.rule-grid,.economics-grid,.input-timeline-grid{grid-template-columns:1fr}.trade-pair{grid-template-columns:1fr}.pair-plus{text-align:center}.forecast-city-segments{display:flex}.input-chart-legend{flex-wrap:wrap;justify-content:flex-start} }

/* Input timeline semantics: standard METAR is discrete; high-frequency Temp T is continuous. */
.metar-dot{fill:#e9a0a0;stroke:#fff;stroke-width:1.5}.hfmetar-line{stroke:#064f9e;stroke-width:3;stroke-dasharray:none}.maxt-dot{fill:#168454;stroke:#fff;stroke-width:2}.input-chart-legend .metar::before{width:9px;height:9px;border:1.5px solid #fff;border-radius:50%;background:#e9a0a0;vertical-align:-2px}.input-chart-legend .hfmetar::before{border-color:#064f9e;border-style:solid}.input-chart-legend .maxt::before{width:12px;height:12px;border:2px solid #fff;border-radius:50%;background:#168454;vertical-align:-3px}
.chart-hover-target{fill:transparent;stroke:none;cursor:crosshair}.metar-dot,.maxt-dot{cursor:crosshair}.chart-tooltip{pointer-events:none}.chart-tooltip rect{fill:#17231c;stroke:#fff;stroke-width:1;filter:drop-shadow(0 2px 5px #0004)}.chart-tooltip-value{fill:#fff;font-size:13px;font-weight:800}.chart-tooltip-time{fill:#c9d5cd;font-size:10px}
