:root{font-family:Arial,Helvetica,sans-serif;color:#17202a;background:#f4f7f9}*{box-sizing:border-box}body{margin:0}.top{background:#17324d;color:#fff;display:flex;align-items:center;gap:22px;padding:0 22px;min-height:58px}.brand{font-size:21px;font-weight:bold;margin-right:12px}.nav{display:flex;gap:4px;align-items:stretch;flex:1}.nav a,.dropbtn{color:#fff;text-decoration:none;padding:20px 13px;display:block;background:transparent;border:0;font-size:14px;cursor:pointer}.nav a:hover,.dropdown:hover .dropbtn{background:#244b6f}.dropdown{position:relative}.dropdown-content{display:none;position:absolute;z-index:1000;min-width:230px;background:#fff;box-shadow:0 6px 18px rgba(0,0,0,.2)}.dropdown-content a{color:#17202a;padding:12px 15px}.dropdown-content a:hover{background:#eef4f8}.dropdown:hover .dropdown-content{display:block}.user{font-size:13px;white-space:nowrap}.user a{color:#dbefff}.wrap{max-width:1450px;margin:0 auto;padding:22px}.card{background:#fff;border:1px solid #dfe7ed;border-radius:8px;padding:18px;margin-bottom:18px;box-shadow:0 1px 2px rgba(0,0,0,.04)}h1{font-size:24px;margin:0 0 18px}h2{font-size:18px;margin:0 0 14px}.btn{display:inline-block;background:#1e6ea5;color:#fff!important;text-decoration:none;border:0;border-radius:5px;padding:9px 13px;cursor:pointer}.btn.secondary{background:#667784}.btn.danger{background:#a53a32}.btn.small{padding:6px 9px;font-size:12px}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:15px}.weather-now{font-size:34px;font-weight:bold}.muted{color:#667784;font-size:13px}.forecast-row{display:flex;gap:12px;overflow:auto}.day{min-width:135px;text-align:center;border:1px solid #e3eaef;border-radius:7px;padding:12px}.weather-icon{font-size:34px}table{width:100%;border-collapse:collapse;background:#fff}th,td{padding:9px 10px;border-bottom:1px solid #e4eaee;text-align:left;font-size:13px}th{background:#eef4f7;position:sticky;top:0}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(250px,1fr));gap:14px}.field label{display:block;font-size:12px;font-weight:bold;margin-bottom:5px}.field input,.field select,.field textarea{width:100%;padding:9px;border:1px solid #cbd5dc;border-radius:4px;background:#fff}.field.full{grid-column:1/-1}.checks{display:flex;gap:22px;align-items:center;flex-wrap:wrap}.msg{padding:10px 12px;border-radius:5px;margin-bottom:14px}.ok{background:#e9f7ef;color:#21613b}.err{background:#fdecea;color:#8d2d27}.login{max-width:420px;margin:90px auto;padding:25px}.login input{width:100%;padding:11px;margin:7px 0 13px;border:1px solid #cbd5dc;border-radius:4px}.map{height:70vh;min-height:480px;border-radius:8px;overflow:hidden}.toolbar{display:flex;gap:10px;align-items:end;flex-wrap:wrap;margin-bottom:14px}.toolbar .field{min-width:160px}.code{font-family:monospace;background:#f1f4f6;padding:2px 5px;border-radius:3px}@media(max-width:800px){.top{align-items:flex-start;flex-wrap:wrap;padding:10px}.nav{overflow:auto}.form-grid{grid-template-columns:1fr}.user{width:100%}}
.table-wrap{overflow:auto}.kpi{font-size:30px;font-weight:bold;margin:4px 0}.status{display:inline-block;padding:4px 8px;border-radius:999px;font-size:11px;font-weight:bold;background:#e9eef2}.status.ok{background:#e9f7ef;color:#21613b}.status.error,.status.timeout{background:#fdecea;color:#8d2d27}.status.running{background:#e8f2fb;color:#145b8c}.status.queued{background:#fff3cd;color:#745b00}.status.degraded{background:#fff3cd;color:#745b00}.cleanup-preview{padding:12px;background:#f6f8fa;border:1px solid #dfe7ed;border-radius:6px;margin:12px 0}.ops-summary .card{min-height:120px}
/* MyWeather 1.2 UI */
.lang-switch{display:flex;gap:5px;align-items:center;font-size:12px;white-space:nowrap}.lang-switch a{color:#bcd5e8;text-decoration:none;font-weight:bold}.lang-switch a.active{color:#fff;text-decoration:underline}.section-head{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.section-head h2{margin:0}.inline-form{display:flex;gap:8px;align-items:center;font-size:12px}.inline-form select{padding:7px;border:1px solid #cbd5dc;border-radius:4px;background:#fff}.forecast-card{min-width:150px;max-width:170px;overflow:hidden}.forecast-card>*{max-width:100%}.forecast-date{white-space:nowrap}.weather-label{font-size:12px;line-height:1.25;min-height:30px;overflow-wrap:anywhere;word-break:normal}.forecast-meta{display:flex;flex-direction:column;gap:5px;align-items:center;margin-top:6px;font-size:11px;color:#667784}.forecast-temp{margin:2px 0}.hourly-list{display:flex;flex-direction:column;gap:8px}.hour-card{border:1px solid #e1e8ed;border-radius:7px;overflow:hidden}.hour-main{display:grid;grid-template-columns:minmax(145px,1.3fr) repeat(4,minmax(90px,.8fr)) minmax(150px,1fr);gap:10px;align-items:center;padding:10px 12px}.hour-time{display:grid;grid-template-columns:auto 38px;gap:2px 8px;align-items:center}.hour-time .weather-label{grid-column:1/-1;min-height:0}.weather-icon.small{font-size:26px}.hour-metric{display:flex;flex-direction:column;align-items:center;text-align:center}.hour-metric b{font-size:15px}.hour-metric small{font-size:10px;color:#667784}.hour-status{text-align:right;font-size:11px;color:#667784}.forecast-details{border-top:1px solid #e5ebef;background:#fafcfd;padding:8px 12px}.forecast-details>summary{cursor:pointer;font-weight:bold;color:#1e6ea5}.calc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:8px;margin:12px 0}.calc-grid>div{background:#fff;border:1px solid #e3e9ed;border-radius:5px;padding:8px}.calc-grid span{display:block;font-size:11px;color:#667784}.calc-grid b{display:block;margin-top:3px;font-size:13px}.technical pre{white-space:pre-wrap;overflow-wrap:anywhere;font-size:11px;background:#f0f3f5;padding:8px;border-radius:4px}.compact th,.compact td{padding:6px 8px;font-size:11px;white-space:nowrap}.map-tools{display:flex;justify-content:space-between;gap:10px;align-items:center;margin-bottom:10px;flex-wrap:wrap}.sat-status{font-size:12px;padding:5px 8px;border-radius:5px;background:#eef2f4}.sat-status.ok{background:#e9f7ef;color:#21613b}.sat-status.error{background:#fdecea;color:#8d2d27}.sat-status.loading{background:#fff3cd;color:#745b00}
@media(max-width:900px){.hour-main{grid-template-columns:repeat(2,minmax(130px,1fr))}.hour-status{text-align:left}.forecast-card{min-width:145px}.top{gap:10px}.lang-switch{order:3}}
/* MyWeather 1.2.1 sortable/filterable tables */
th.sortable{cursor:pointer;user-select:none;padding-right:22px;position:sticky}
th.sortable::after{content:"↕";position:absolute;right:7px;opacity:.45;font-size:11px}
th.sortable[data-sort-dir="asc"]::after{content:"▲";opacity:.9}
th.sortable[data-sort-dir="desc"]::after{content:"▼";opacity:.9}
.column-filters th{top:34px;background:#f7fafc;padding:5px 6px;z-index:2}
.column-filters input{width:100%;min-width:75px;padding:6px 7px;border:1px solid #cbd5dc;border-radius:4px;background:#fff;font-size:11px;font-weight:normal}

/* MyWeather 1.2.2 Actual summary view */
.analysis-hint{font-size:12px;color:#526574;margin-top:-4px}.actual-summary th,.actual-summary td{text-align:center}.actual-summary th:first-child,.actual-summary td:first-child,.actual-summary th:nth-child(2),.actual-summary td:nth-child(2),.actual-summary th:nth-child(11),.actual-summary td:nth-child(11),.actual-summary th:nth-child(12),.actual-summary td:nth-child(12){text-align:left}

/* MyWeather 1.4.0 data explorer / paging / help */
.app-footer{max-width:1450px;margin:0 auto 20px;padding:0 22px;text-align:right;color:#748491;font-size:11px}.version-badge{font-size:11px;color:#c7d9e8;white-space:nowrap}.data-tabs{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:16px}.data-tabs a{padding:8px 11px;border:1px solid #cfdbe3;border-radius:999px;background:#fff;text-decoration:none;color:#29485f;font-size:12px}.data-tabs a.active{background:#1e6ea5;color:#fff;border-color:#1e6ea5}.server-table th{white-space:nowrap}.sort-link{border:0;background:transparent;font:inherit;font-weight:bold;padding:0;cursor:pointer;color:inherit}.sort-link.active{color:#1e6ea5}.wrap-cell{white-space:normal;min-width:240px;max-width:520px;overflow-wrap:anywhere}.pager,.client-pager{display:flex;gap:6px;align-items:center;justify-content:flex-end;margin:12px 0 20px;flex-wrap:wrap}.pager a,.pager span,.pager-btn{min-width:32px;text-align:center;padding:6px 8px;border:1px solid #cfdbe3;border-radius:4px;background:#fff;color:#29485f;text-decoration:none}.pager a.active{background:#1e6ea5;color:#fff;border-color:#1e6ea5}.pager a.disabled{pointer-events:none;opacity:.45}.client-pager{font-size:11px;color:#667784;margin:9px 0 2px}.client-pager select{padding:5px;border:1px solid #cbd5dc;border-radius:4px}.pager-btn{cursor:pointer}.pager-btn:disabled{opacity:.4;cursor:default}.metric-info{border:0;background:transparent;color:#1e6ea5;cursor:pointer;padding:1px 3px;font-size:14px}.modal-backdrop{position:fixed;inset:0;background:rgba(15,28,38,.55);z-index:5000;display:flex;align-items:center;justify-content:center;padding:20px}.modal-backdrop[hidden]{display:none}.modal-card{width:min(680px,96vw);max-height:86vh;overflow:auto;background:#fff;border-radius:10px;padding:20px;box-shadow:0 18px 55px rgba(0,0,0,.28)}.metric-meta{padding:9px;background:#f5f8fa;border-radius:6px;color:#526574;font-size:12px}.chart-card canvas{width:100%;border:1px solid #e1e8ed;border-radius:6px;background:#fff}.sat-gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px}.sat-thumb{margin:0;border:1px solid #dfe7ed;border-radius:7px;overflow:hidden;background:#fafcfd}.sat-thumb img{display:block;width:100%;height:190px;object-fit:contain;background:#0f1820}.sat-thumb figcaption{padding:9px;font-size:12px}.help-btn{font-size:12px;margin-left:10px;vertical-align:middle}.help-text{line-height:1.55}.help-text ul{padding-left:20px}.forecast-title-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.forecast-title-row h1{margin-bottom:18px}
@media(max-width:800px){.server-table{min-width:900px}.sat-gallery{grid-template-columns:1fr}.app-footer{text-align:center}}
/* MyWeather 1.5.0 satellite film */
.sat-film-card{width:min(980px,97vw)}.sat-film-stage{background:#0d151d;border-radius:8px;overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:380px}.sat-film-stage img{max-width:100%;max-height:66vh;object-fit:contain}.sat-film-caption{width:100%;padding:8px 12px;background:rgba(0,0,0,.68);color:#fff;font-size:12px;text-align:center}.sat-film-controls{display:flex;gap:8px;align-items:center;justify-content:center;flex-wrap:wrap;margin-top:12px}.sat-film-controls select{padding:6px;border:1px solid #cbd5dc;border-radius:4px;background:#fff}

/* MyWeather 1.6.0 station map picker */
.station-picker-map{height:430px;min-height:360px;border:1px solid #cbd5dc;border-radius:7px;overflow:hidden;background:#eaf0f3}
@media(max-width:800px){.station-picker-map{height:360px}}
