:root { --navy:#102a43; --blue:#176b87; --teal:#0b7a75; --paper:#fff; --bg:#edf3f5; --line:#d5e0e5; --ink:#18313d; --muted:#647985; }
*{box-sizing:border-box} html,body{margin:0;min-height:100%;background:linear-gradient(135deg,#edf3f5 0%,#f8fafb 48%,#e8f1f2 100%);color:var(--ink);font-family:Inter,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif}
button,input,a{font:inherit}.shell{width:min(1600px,calc(100vw - 32px));margin:16px auto 26px}.hero{display:flex;justify-content:space-between;align-items:flex-end;padding:18px 22px;background:linear-gradient(115deg,#102a43,#176b87);color:#fff;border-radius:16px;box-shadow:0 16px 40px rgba(16,42,67,.18)}
.brand-lockup{display:flex;align-items:center;gap:17px}.brand-logo{width:76px;height:76px;flex:0 0 auto;filter:drop-shadow(0 8px 16px rgba(0,0,0,.18))}.eyebrow{margin:0 0 6px;font-size:11px;letter-spacing:.22em;color:#9dd8e0;font-weight:700}.hero h1{margin:0;font-size:clamp(24px,3vw,38px);letter-spacing:.02em}.subtitle{margin:7px 0 0;color:#d5edf1;font-size:13px}
.hero-action{align-self:center;white-space:nowrap;color:#fff;text-decoration:none;border:1px solid rgba(255,255,255,.42);background:rgba(255,255,255,.1);border-radius:10px;padding:10px 14px;font-weight:700}.hero-action:hover{background:rgba(255,255,255,.18)}
.control-panel,.chart-card{margin-top:12px;background:rgba(255,255,255,.96);border:1px solid var(--line);border-radius:14px;box-shadow:0 10px 30px rgba(31,61,76,.08)}.control-panel{padding:12px 16px}.control-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px 18px}.control-row+.control-row{border-top:1px solid #e8eef1;margin-top:10px;padding-top:10px}.field-group{display:flex;align-items:center;gap:8px}.label{font-size:12px;font-weight:700;color:var(--muted);letter-spacing:.04em;white-space:nowrap}.segmented{display:flex;padding:3px;background:#eaf0f2;border-radius:8px}.segmented button{border:0;background:transparent;padding:6px 11px;border-radius:6px;color:#4b626e;cursor:pointer}.segmented button[aria-pressed="true"]{background:#fff;color:var(--teal);font-weight:700;box-shadow:0 2px 8px rgba(28,66,78,.14)}
.range-row label{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:6px}.range-row input{width:92px;padding:7px 8px;border:1px solid #cbd9df;border-radius:7px;color:var(--ink);background:#fbfdfe}.action{border:1px solid #bfd0d7;background:#fff;color:#34505d;padding:7px 12px;border-radius:7px;cursor:pointer}.action.primary{background:var(--teal);border-color:var(--teal);color:#fff}.error{font-size:12px;color:#b42318}.chip{--chip:#667085;display:flex;align-items:center;gap:7px;border-left:4px solid var(--chip);padding:5px 10px 5px 8px;border-radius:6px;background:#f6f8f9;font-size:13px;cursor:pointer}.chip input{accent-color:var(--chip)}.chip.total{--chip:#17212b}.chip.rayleigh{--chip:#00897b}.chip.o3{--chip:#7e57c2}.chip.o2{--chip:#2979ff}.chip.h2o{--chip:#d67c00}.chip.co2{--chip:#d84343}
.sensor-row select{min-width:210px;padding:7px 30px 7px 10px;border:1px solid #cbd9df;border-radius:7px;background:#fbfdfe;color:var(--ink)}.sensor-row #bandSelect{min-width:140px}.sensor-load-status{display:inline-flex;align-items:center;gap:7px;min-height:30px;padding:5px 10px;border-radius:999px;background:#eaf7f5;color:#08756f;font-size:12px;font-weight:700}.sensor-load-status[hidden]{display:none}.sensor-load-status.loading::before{content:"";width:12px;height:12px;border:2px solid rgba(11,122,117,.22);border-top-color:var(--teal);border-radius:50%;animation:sensor-spin .75s linear infinite}.sensor-load-status.error{background:#fff0ee;color:#b42318}@keyframes sensor-spin{to{transform:rotate(360deg)}}.source-note{font-size:11px;color:var(--muted)}
  .chart-card{overflow:hidden}.chart-head{display:flex;justify-content:space-between;align-items:center;padding:12px 18px 0}.chart-head strong{font-size:16px}.chart-head span{margin-left:10px;color:var(--muted);font-size:12px}.chart-head p{margin:0;color:var(--muted);font-size:12px}.chart-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px}.dpi-control{display:flex;align-items:center;gap:6px;color:var(--muted);font-size:12px;font-weight:600}.dpi-control input{width:72px;height:34px;padding:0 9px;border:1px solid #cbdbe1;border-radius:8px;background:#f9fcfd;color:var(--ink);font:inherit;outline:none}.dpi-control input:focus{border-color:var(--teal);box-shadow:0 0 0 3px rgba(11,122,117,.12)}.export-button{height:36px;white-space:nowrap}.chart{position:relative;height:clamp(570px,72vh,900px);width:100%}.panel-hover-layer{position:absolute;inset:0;pointer-events:none;z-index:20}.panel-hover-readout{position:absolute;display:none;min-width:142px;padding:6px 9px;background:rgba(255,255,255,.94);border:1px solid #d6e0e4;border-left:3px solid var(--series-color);border-radius:6px;box-shadow:0 3px 12px rgba(31,61,76,.14);color:var(--ink);font-size:11px;line-height:1.45;white-space:nowrap}.panel-hover-readout strong{font-weight:700;color:var(--series-color)}.status{height:500px;display:grid;place-items:center;color:var(--muted)}.status[hidden]{display:none}footer{text-align:center;color:#69808b;font-size:11px;padding:14px}
.reference-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px}.mini-card{background:rgba(255,255,255,.96);border:1px solid var(--line);border-radius:14px;box-shadow:0 10px 30px rgba(31,61,76,.07);overflow:hidden}.mini-head{display:flex;justify-content:space-between;align-items:center;padding:13px 17px 2px;color:var(--muted);font-size:11px}.mini-head strong{display:block;color:var(--ink);font-size:15px}.mini-head div span{display:block;margin-top:2px}.reference-select-label{display:flex;align-items:center;gap:7px;margin-top:5px}.reference-select-label select{padding:5px 26px 5px 8px;border:1px solid #cbd9df;border-radius:7px;background:#fbfdfe;color:var(--ink)}.mini-chart{height:360px;width:100%}
.mini-controls{display:flex;align-items:center;gap:8px;padding:5px 17px 0;color:var(--muted);font-size:11px}.segmented.compact{padding:2px}.segmented.compact button{padding:4px 8px;font-size:11px}
.mini-range{display:flex;flex-wrap:wrap;align-items:center;gap:6px 9px;padding:7px 17px 0}.mini-range label{display:flex;align-items:center;gap:4px;color:var(--muted);font-size:11px}.mini-range input{width:72px;padding:5px 6px;border:1px solid #cbd9df;border-radius:6px;background:#fbfdfe;color:var(--ink)}.mini-range .action{padding:5px 9px;font-size:11px}.mini-range .error{width:100%}
@media(max-width:900px){.reference-grid{grid-template-columns:1fr}}@media(max-width:800px){.shell{width:calc(100vw - 14px);margin:7px auto}.hero{align-items:flex-start;gap:16px;flex-wrap:wrap}.brand-lockup{gap:12px}.brand-logo{width:58px;height:58px}.hero-action{margin-left:70px}.subtitle{max-width:75vw}.primary-controls .field-group{width:calc(50% - 10px);justify-content:space-between}.range-row{gap:8px}.chart-head{align-items:flex-start}.chart-actions{flex-wrap:wrap;gap:7px}.chart-head p{display:none}.chart{height:650px}.sensor-row select{min-width:0;max-width:45vw}}
