.graphic-open,.graphic-viewer button{border:1px solid var(--line-strong,#52647c);background:var(--surface-2,#162238);min-height:44px;color:var(--ink,#eef5ff);font:700 12px/1.2 var(--sans,system-ui);cursor:pointer;border-radius:8px;padding:8px 12px}.graphic-open:focus-visible,.graphic-viewer :focus-visible{outline:3px solid var(--teal,#42cdd0);outline-offset:2px}.graphic-actions{justify-content:flex-end;padding:0 10px 6px;display:flex}.graphic-viewer{box-sizing:border-box;border:1px solid var(--line-strong,#52647c);background:var(--surface,#0e1a2c);width:calc(100vw - 24px);max-width:1500px;height:calc(100dvh - 24px);max-height:none;color:var(--ink,#eef5ff);font:14px/1.4 var(--sans,system-ui);border-radius:12px;padding:12px;overflow:hidden}.graphic-viewer[open]{flex-direction:column;gap:8px;display:flex}.graphic-viewer::backdrop{background:#000b}.graphic-tools{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;display:flex}.graphic-tools strong{font-size:15px}.graphic-zoom{flex-wrap:wrap;justify-content:center;align-items:center;gap:6px;display:flex}.graphic-zoom output{text-align:center;font-variant-numeric:tabular-nums;min-width:44px}.graphic-viewer button{min-width:44px}.graphic-viewer button:disabled{opacity:.4;cursor:default}.graphic-help{color:var(--muted,#a3b6ce);margin:0;font-size:12px}.graphic-status{color:var(--red,#fb5b67);margin:0;font-size:13px;font-weight:700}.graphic-status[data-state=warn]{color:var(--amber,#ffb14f)}.graphic-status[data-state=good]{color:var(--teal,#42d3d0)}.graphic-scroll{overscroll-behavior:contain;border:1px solid var(--line,#33465e);border-radius:8px;flex:1;min-height:0;overflow:auto}.graphic-stage{flex:none;position:relative}.graphic-stage>canvas,.graphic-stage>svg{width:100%;height:100%;display:block}@media (max-width:540px){.graphic-viewer{width:100vw;max-width:none;height:100dvh;padding:max(8px, env(safe-area-inset-top)) 8px max(8px, env(safe-area-inset-bottom));border-radius:0;margin:0}.graphic-tools{justify-content:center}.graphic-tools strong{text-align:center;width:100%}}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;font-synthesis:none;text-rendering:optimizelegibility;--bg:#08111f;--panel:#101d2fe0;--panel-strong:#111f32;--panel-soft:#15263db3;--border:#94a3b829;--border-strong:#94a3b847;--text:#edf4ff;--muted:#91a3bb;--subtle:#667991;--blue:#3b8fff;--blue-soft:#3b8fff26;--red:#fb5b67;--red-soft:#fb5b6724;--cyan:#42d3d0;--green:#38d488;--green-soft:#38d48821;--amber:#ffb14f;--amber-soft:#ffb14f24;--shadow:0 18px 54px #00000047;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}html{background:var(--bg);min-width:320px}body{min-width:320px;min-height:100vh;color:var(--text);background:radial-gradient(circle at 8% 10%, #1a69c626, transparent 28%), radial-gradient(circle at 94% 92%, #b533571f, transparent 30%), var(--bg);margin:0}button,input{font:inherit}button,a,input[type=range]{-webkit-tap-highlight-color:transparent}button:focus-visible,a:focus-visible,input:focus-visible,summary:focus-visible{outline-offset:2px;outline:3px solid #5aa5ff94}button:disabled,input:disabled{cursor:not-allowed;opacity:.5}a{color:#77b6ff}.app-shell{z-index:0;width:min(1920px,100%);min-height:100vh;padding:10px clamp(10px, 1.5vw, 22px) max(12px, env(safe-area-inset-bottom));margin:0 auto;position:relative;overflow:clip}.ambient{z-index:-1;filter:blur(120px);pointer-events:none;border-radius:50%;width:36vw;height:36vw;position:fixed}.ambient--one{background:#1671da21;top:-18vw;left:-15vw}.ambient--two{background:#e134571a;bottom:-18vw;right:-16vw}.app-header{z-index:40;border:1px solid var(--border);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);background:#08111fe0;border-radius:18px;justify-content:space-between;align-items:center;min-height:68px;padding:9px 13px;display:flex;position:sticky;top:0;box-shadow:0 12px 36px #0003}.brand,.brand__mark,.header-tools,.header-actions,.session-clock,.connection-bar,.connection-bar__status,.connection-bar__actions,.button,.status-pill,.message-banner,.alarm-banner,.panel-heading,.panel-heading--controls,.mode-switch,.heater-card__heading,.heater-card__heading>div,.physical-inline,.section-label,.range-with-value,.setpoint-card__heading,.suggestion,.modal__title,.modal__footer,.button-row,.safety-note,.stat-card,.app-footer,.app-footer>div{align-items:center;display:flex}.brand{gap:12px;min-width:250px}.brand__mark{color:#fff;background:linear-gradient(145deg,#348fff,#1660c7);border-radius:13px;flex:0 0 44px;justify-content:center;width:44px;height:44px;box-shadow:0 10px 30px #2074e552}.brand__mark img{border-radius:inherit;object-fit:cover;width:100%;height:100%}.brand h1{letter-spacing:-.04em;margin:0;font-size:clamp(1.25rem,2vw,1.55rem)}.brand h1 span{color:#70b8ff}.brand p,.session-clock span,.connection-bar__status span,.chart-heading span,.source-row>div>span,.stat-card span,.stat-card small,.app-footer p{color:var(--muted)}.brand p{margin:3px 0 0;font-size:.76rem}.header-tools{justify-content:flex-end;gap:12px;min-width:0}.time-window,.mode-switch{border:1px solid var(--border);background:#ffffff09;border-radius:12px;grid-auto-columns:1fr;grid-auto-flow:column;padding:4px;display:grid}.time-window button,.mode-switch button{min-height:44px;color:var(--muted);cursor:pointer;white-space:nowrap;background:0 0;border:0;border-radius:8px;padding:0 12px;transition:all .16s}.time-window button{font-size:.72rem;font-weight:700}.time-window button:hover,.mode-switch button:hover{color:var(--text);background:#ffffff0d}.time-window button.is-active,.mode-switch button.is-active{color:#fff;background:#2378e7;box-shadow:0 5px 16px #2378e740}.speed-control{border:1px solid var(--border);min-height:52px;color:var(--muted);white-space:nowrap;background:#ffffff09;border-radius:12px;grid-template-columns:auto minmax(62px,92px) 26px;align-items:center;gap:7px;padding:4px 8px;font-size:.66rem;font-weight:700;display:grid}.speed-control input{width:100%}.speed-control output{color:#dbeaff;font-variant-numeric:tabular-nums;text-align:right;font-size:.76rem}.speed-control.is-locked{border-color:#38d48833}.header-actions{gap:6px}.icon-button{border:1px solid var(--border);width:44px;min-width:44px;height:44px;color:var(--text);cursor:pointer;background:#ffffff09;border-radius:11px;place-items:center;padding:0;transition:all .16s;display:inline-grid}a.icon-button{text-decoration:none}.icon-button:hover:not(:disabled){border-color:var(--border-strong);background:#ffffff14;transform:translateY(-1px)}.icon-button svg{width:17px;height:17px}.session-clock{border-left:1px solid var(--border);gap:9px;min-width:96px;padding-left:12px}.session-clock>svg{width:17px;color:var(--muted)}.session-clock div{display:grid}.session-clock span{text-transform:uppercase;letter-spacing:.08em;font-size:.65rem;font-weight:700}.session-clock strong{font-variant-numeric:tabular-nums;font-size:1.08rem}.connection-bar{z-index:35;border:1px solid var(--border);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);background:#0c1828e6;border-radius:15px;justify-content:space-between;gap:16px;margin:7px 0;padding:7px 10px 7px 13px;position:sticky;top:78px;box-shadow:0 10px 30px #00000026}.connection-bar--connected{background:#0b2727e6;border-color:#38d48840}.connection-bar--error{border-color:#fb5b6747}.connection-bar__status{gap:10px;min-width:0}.connection-indicator{background:#61748b;border-radius:50%;flex:0 0 9px;width:9px;height:9px;box-shadow:0 0 0 5px #61748b1a}.connection-bar--connected .connection-indicator{background:var(--green);box-shadow:0 0 0 5px #38d4881c,0 0 18px #38d48859}.connection-bar--connecting .connection-indicator{background:var(--amber);animation:1.2s infinite pulse}.connection-bar--error .connection-indicator{background:var(--red)}.connection-bar__status>div{min-width:0;display:grid}.connection-bar__status strong{font-size:.86rem}.connection-bar__status span{text-overflow:ellipsis;white-space:nowrap;margin-top:2px;font-size:.73rem;overflow:hidden}.connection-bar__actions,.button-row{flex-wrap:wrap;justify-content:flex-end;gap:8px}.button{color:#fff;cursor:pointer;white-space:nowrap;border:1px solid #0000;border-radius:10px;justify-content:center;gap:7px;min-height:44px;padding:0 14px;font-size:.78rem;font-weight:750;transition:all .16s}.button:hover:not(:disabled){filter:brightness(1.08);transform:translateY(-1px)}.button svg{width:16px;height:16px}.button--primary{background:#2378e7;box-shadow:0 8px 22px #2378e733}.button--success{background:#168856;box-shadow:0 8px 22px #16885633}.button--warning{color:#17100a;background:var(--amber)}.button--danger{color:#ffb5bd;background:#7e202f57;border-color:#fb5b6773}.button--ghost{border-color:var(--border);color:#c4d0df;background:#ffffff09}.button--light{color:#62121c;background:#fff0f1}.spinner{border:2px solid #fff3;border-top-color:#fff;border-radius:50%;width:15px;height:15px;animation:.8s linear infinite spin}.alarm-banner,.message-banner{border-radius:14px;gap:12px;margin:10px 0;padding:12px 14px}.alarm-banner{color:#fff6f7;background:linear-gradient(100deg,#801b2bf0,#541622eb);border:1px solid #fb5b677a;align-items:flex-start;box-shadow:0 12px 34px #4b0e194d}.alarm-banner__icon{background:#ffffff1a;border-radius:10px;flex:0 0 36px;place-items:center;width:36px;height:36px;display:grid}.alarm-banner__icon svg{width:20px}.alarm-banner>div{flex:1}.alarm-banner strong{font-size:.92rem}.alarm-banner p{color:#ffd1d6;margin:3px 0 0;font-size:.78rem;line-height:1.45}.message-banner{color:#bedaff;background:#194b8238;border:1px solid #3b8fff38;min-height:46px;font-size:.78rem}.message-banner>svg{flex:0 0 18px;width:18px}.message-banner>span,.message-banner>div{flex:1}.message-banner>div{display:grid}.message-banner--error{color:#ffc4ca;background:#7e202f38;border-color:#fb5b6747}.connection-help{gap:3px}.connection-help p{color:#f5c5ca;margin:2px 0 0;line-height:1.4}.connection-help code{color:#fff1f3}.connection-help a{color:#fff;text-underline-offset:2px;font-weight:750}.connection-help a:hover,.connection-help a:focus-visible{color:#ffdbe0}.message-banner .icon-button{border:0;width:32px;min-width:32px;height:32px}.dashboard-grid{grid-template-columns:minmax(360px,.9fr) minmax(560px,1.35fr);align-items:start;gap:10px;display:grid}.dashboard-left,.dashboard-right{gap:10px;min-width:0;display:grid}.panel{border:1px solid var(--border);background:var(--panel);box-shadow:var(--shadow);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);border-radius:15px}.panel-heading{justify-content:space-between;gap:16px;padding:12px 14px 6px}.panel-heading h2,.chart-heading h2,.modal__title h2{letter-spacing:-.02em;margin:2px 0 0;font-size:1rem}.eyebrow{color:#6f85a2;letter-spacing:.105em;text-transform:uppercase;margin:0;font-size:.64rem;font-weight:800}.status-pill{color:#72e7ae;background:var(--green-soft);border:1px solid #38d48833;border-radius:999px;gap:6px;min-height:30px;padding:0 10px;font-size:.7rem;font-weight:750}.status-pill svg{width:14px}.device-card{flex-direction:column;display:flex}.device-photo-wrap{aspect-ratio:1.85;background:radial-gradient(circle,#2766aa26,#0000 55%),#0a1625;border:1px solid #94a3b821;border-radius:15px;width:min(440px,100% - 20px);margin:4px auto 8px;position:relative;overflow:hidden}.device-photo{z-index:1;object-fit:contain;filter:drop-shadow(0 22px 30px #0000006b);width:94%;height:96%;position:absolute;inset:2% 3%}.heat-glow{z-index:2;aspect-ratio:1;filter:blur(12px);mix-blend-mode:screen;pointer-events:none;background:radial-gradient(circle,#ff4d28bf,#ff7b3133 42%,#0000 72%);border-radius:50%;width:18%;transition:opacity .3s;position:absolute;top:20%}.heat-glow--one{left:30%}.heat-glow--two{left:51%}.photo-reading{z-index:3;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);pointer-events:none;background:#050d17bd;border:1px solid #ffffff29;border-radius:9px;min-width:66px;padding:6px 8px;display:grid;position:absolute;top:4%;box-shadow:0 9px 28px #00000042}.photo-reading--one{left:23%}.photo-reading--two{left:59%}.photo-reading span{color:var(--muted);letter-spacing:.08em;font-size:.55rem;font-weight:800}.photo-reading strong{font-variant-numeric:tabular-nums;font-size:.9rem}.device-sources{gap:6px;padding:0 10px 10px;display:grid}.source-row{border:1px solid var(--border);background:#ffffff06;border-radius:12px;grid-template-columns:34px minmax(100px,1fr) auto;align-items:center;gap:10px;min-height:50px;padding:6px 9px;display:grid}.source-row--physical{background:#38d4880e;border-color:#38d48833}.source-icon{color:#81baff;background:var(--blue-soft);border-radius:10px;place-items:center;width:34px;height:34px;display:grid}.source-row--physical .source-icon{color:#66dea1;background:var(--green-soft)}.source-icon svg{width:17px}.source-row>div:nth-child(2){display:grid}.source-row>div>strong{font-size:.78rem}.source-row>div>span{margin-top:2px;font-size:.67rem}.source-row dl{gap:16px;margin:0;display:flex}.source-row dl div{text-align:right;display:grid}.source-row dt{color:var(--subtle);font-size:.58rem;font-weight:800}.source-row dd{font-variant-numeric:tabular-nums;margin:2px 0 0;font-size:.82rem;font-weight:750}.control-panel{padding-bottom:10px}.panel-heading--controls{align-items:flex-end;padding-bottom:8px}.mode-switch button{min-width:86px;font-size:.72rem;font-weight:750}.mode-switch button.is-active:last-child{background:#168856;box-shadow:0 5px 16px #1688563b}.suggestion{color:#b9d5f8;background:#2969b01a;border:1px solid #3b8fff29;border-radius:11px;align-items:flex-start;gap:9px;margin:0 10px 8px;padding:7px 9px}.suggestion svg{flex:0 0 16px;width:16px;margin-top:1px}.suggestion p{margin:0;font-size:.7rem;line-height:1.45}.heater-grid,.setpoint-grid,.gain-grid,.stat-grid{display:grid}.heater-grid,.setpoint-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:0 10px}.heater-card,.setpoint-card{border:1px solid var(--border);background:#ffffff06;border-radius:13px;min-width:0;padding:10px}.setpoint-card{padding:8px}.heater-card--blue,.setpoint-card--blue{border-top-color:#4f9cff7a}.heater-card__heading{border-bottom:1px solid var(--border);justify-content:space-between;gap:8px;padding-bottom:10px}.heater-card__heading>div{color:#ff818a;gap:6px}.heater-card--blue .heater-card__heading>div{color:#70b0ff}.heater-card__heading svg{width:17px}.heater-card__heading strong{font-size:.8rem}.heater-card__heading>span{font-variant-numeric:tabular-nums;font-size:.95rem;font-weight:800}.heater-card__heading small{color:var(--subtle);font-size:.54rem}.physical-inline{color:#76dba8;background:#38d48812;border-radius:8px;gap:5px;min-height:30px;margin-top:8px;padding:0 8px;font-size:.64rem}.physical-inline svg{width:13px}.power-field{gap:8px;margin-top:12px;display:grid}.section-label{color:#aebbd0;justify-content:space-between;gap:6px;font-size:.68rem;font-weight:700}.range-with-value{gap:9px}input[type=range]{width:100%;min-width:0;min-height:44px;accent-color:var(--blue);cursor:pointer}.heater-card--red input[type=range]{accent-color:var(--red)}.number-with-unit{border:1px solid var(--border);background:#0209116b;border-radius:9px;grid-template-columns:minmax(48px,1fr) auto;align-items:center;min-width:82px;height:46px;padding-right:9px;display:grid}.number-with-unit input{width:100%;min-width:0;height:100%;color:var(--text);font-variant-numeric:tabular-nums;background:0 0;border:0;outline:0;padding:0 4px 0 9px}.number-with-unit small{color:var(--muted);font-size:.63rem}.power-meter{background:#ffffff0f;border-radius:999px;height:5px;margin-top:10px;overflow:hidden}.power-meter span{border-radius:inherit;background:linear-gradient(90deg, #842d39, var(--red));height:100%;transition:width .18s;display:block}.heater-card--blue .power-meter span{background:linear-gradient(90deg, #1f4f89, var(--blue))}.pid-controls{gap:8px;display:grid}.setpoint-card__heading{color:#ff838c;justify-content:space-between;gap:7px;margin-bottom:6px}.setpoint-card--blue .setpoint-card__heading{color:#74b4ff}.setpoint-card__heading svg{width:17px}.setpoint-card__heading strong{margin-right:auto;font-size:.8rem}.setpoint-card__heading>span{color:var(--subtle);font-size:.6rem;font-weight:800}.setpoint-card>label{color:var(--muted);justify-content:space-between;align-items:center;gap:10px;font-size:.68rem;display:flex}.number-with-unit--large{min-width:105px}.loop-readings{grid-template-columns:repeat(2,1fr);gap:7px;margin-top:5px;display:grid}.loop-readings>div{background:#ffffff09;border-radius:9px;padding:4px 6px;display:grid}.loop-readings span,.loop-readings small{color:var(--subtle);font-size:.58rem}.loop-readings strong{margin:2px 0;font-size:.78rem}.pid-gains{background:#38d4880a;border:1px solid #38d48829;border-radius:12px;margin:0 10px;padding:6px 9px}.gain-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:3px}.gain-field{gap:6px;display:grid}.gain-field>span{color:var(--muted);align-items:center;gap:5px;font-size:.64rem;font-weight:750;display:flex}.gain-field>input{border:1px solid var(--border);width:100%;min-width:0;height:44px;color:var(--text);background:#0209116b;border-radius:9px;outline:0;padding:0 10px}.gain-field>input:focus{border-color:#3b8fff94}.pid-type-panel{background:#2969b00e;border:1px solid #3b8fff2b;border-radius:12px;gap:4px;margin:0 10px;padding:6px 9px;display:grid}.pid-type-panel .section-label strong{color:#8fc2ff;font-size:.68rem}.pid-type-switch{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;display:grid}.pid-type-switch button{border:1px solid var(--border);min-height:44px;color:var(--muted);cursor:pointer;background:#02091159;border-radius:8px;padding:0 6px;font-size:.62rem;font-weight:750}.pid-type-switch button.is-active{color:#d8f8e8;background:#1688566b;border-color:#38d48866}.pid-type-meta{align-items:center;gap:8px;display:flex}.pid-reference-link{color:#bcd9ff;text-underline-offset:2px;padding:4px 0;font-size:.64rem}.pid-reference-link:hover,.pid-reference-link:focus-visible{color:#fff}.help-tip{z-index:10;display:inline-flex;position:relative}.help-tip[open]{z-index:25}.help-tip summary{color:#0000;cursor:help;background:0 0;border:0;place-items:center;width:44px;height:44px;margin:-5px;font-size:0;font-weight:900;list-style:none;display:grid;position:relative}.help-tip summary:after{border:1px solid var(--border-strong);color:#91a8c4;content:"?";background:#ffffff0a;border-radius:50%;place-items:center;width:22px;height:22px;font-size:.67rem;display:grid}.help-tip summary::-webkit-details-marker{display:none}.help-tip__content{z-index:200;border:1px solid var(--border-strong);color:#d7e1ee;overscroll-behavior:contain;background:#132239;border-radius:10px;width:min(270px,100vw - 20px);max-height:calc(100vh - 20px);padding:10px 11px;font-size:.7rem;font-weight:500;line-height:1.45;position:fixed;top:0;left:0;overflow-y:auto;box-shadow:0 15px 36px #0000006b}.charts-region{gap:10px;min-width:0;display:grid}.chart-loading{min-height:clamp(440px,60vh,620px);color:var(--muted);justify-content:center;align-items:center;gap:10px;font-size:.78rem;display:flex}.chart-block{min-width:0}.chart-heading{justify-content:space-between;align-items:flex-end;gap:12px;padding:0 4px 10px;display:flex}.chart-heading span{font-size:.66rem}.simulation-plot-toggle{color:#b8c8dc;cursor:pointer;align-items:center;gap:7px;min-height:32px;font-size:.68rem;font-weight:700;display:flex}.simulation-plot-toggle input{width:17px;height:17px;accent-color:var(--blue)}.device-plots{gap:10px;min-height:0;display:grid}.device-plot{grid-template-rows:auto minmax(0,1fr);min-width:0;height:clamp(440px,60vh,620px);min-height:0;display:grid;overflow:hidden}.device-plot__heading{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:8px;min-height:30px;padding:4px 8px;display:flex}.device-plot__heading>strong{white-space:nowrap;font-size:.72rem}.plot-legend{color:#aebdd0;justify-content:flex-end;align-items:center;gap:8px;font-size:.58rem;display:flex}.plot-legend span{white-space:nowrap;align-items:center;gap:4px;display:inline-flex}.legend-line{background:currentColor;width:13px;height:2px}.legend-line--t1{color:#fb5b5b}.legend-line--t2{color:#4f9cff}.legend-line--setpoint{color:#fda4af;background:repeating-linear-gradient(90deg,currentColor 0 3px,#0000 3px 6px)}.device-subplots{grid-template-rows:minmax(0,2fr) minmax(0,1fr);min-height:0;transition:grid-template-rows .14s;display:grid}.device-subplots[data-focus=top]{grid-template-rows:minmax(0,1fr) minmax(0,78px)}.device-subplots[data-focus=bottom]{grid-template-rows:minmax(0,78px) minmax(0,1fr)}.subplot{cursor:zoom-in;min-width:0;min-height:0;position:relative}.subplot[data-focused=true]{cursor:zoom-out}.subplot:focus-visible{outline:2px solid var(--accent,#4f9cff);outline-offset:-2px}.subplot__expand{z-index:2;color:#7f91a9;opacity:0;pointer-events:none;font-size:.6rem;line-height:1;transition:opacity .12s;position:absolute;bottom:2px;left:8px}@media (hover:hover){.subplot:hover .subplot__expand{opacity:.9}}.subplot:focus-visible .subplot__expand{opacity:.9}.subplot--temperature{border-bottom:1px solid var(--border)}.subplot__label{z-index:2;color:#889ab1;pointer-events:none;font-size:.55rem;font-weight:750;position:absolute;top:3px;right:12px}.stat-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.stat-card{border:1px solid var(--border);background:var(--panel-soft);border-radius:14px;align-items:flex-start;gap:10px;min-height:76px;padding:10px;box-shadow:0 13px 34px #0000002e}.stat-card--green{background:#184c3f59;border-color:#38d4883d}.stat-card__icon{color:#73b6ff;background:var(--blue-soft);border-radius:9px;flex:0 0 30px;place-items:center;width:30px;height:30px;display:grid}.stat-card--green .stat-card__icon{color:#69dfa4;background:var(--green-soft)}.stat-card__icon svg{width:16px}.stat-card>div{min-width:0;display:grid}.stat-card span{letter-spacing:.08em;text-transform:uppercase;font-size:.59rem;font-weight:800}.stat-card strong{text-overflow:ellipsis;white-space:nowrap;margin:4px 0;font-size:.84rem;overflow:hidden}.stat-card small{text-overflow:ellipsis;white-space:nowrap;font-size:.59rem;overflow:hidden}.app-footer{justify-content:space-between;gap:16px;min-height:38px;margin-top:4px;padding:0 4px;font-size:.7rem}.app-footer p{margin:0}.app-footer>div{gap:16px}.app-footer a{text-decoration:none}.app-footer a:hover{text-decoration:underline}.modal-backdrop{z-index:100;-webkit-backdrop-filter:blur(9px);backdrop-filter:blur(9px);background:#02070ebd;place-items:center;padding:18px;display:grid;position:fixed;inset:0}.modal{border:1px solid var(--border-strong);background:#101e30;border-radius:18px;width:min(680px,100%);max-height:min(860px,100vh - 36px);overflow:hidden;box-shadow:0 30px 90px #00000080}.modal--compact{width:min(560px,100%)}.modal__header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:12px;min-height:76px;padding:13px 16px;display:flex}.modal__title{gap:11px}.modal__icon{color:#80bbff;background:var(--blue-soft);border-radius:11px;place-items:center;width:40px;height:40px;display:grid}.modal__icon--green{color:#70e0a8;background:var(--green-soft)}.modal__icon svg{width:19px}.modal__body{max-height:calc(100vh - 210px);padding:16px;overflow-y:auto}.modal__footer{border-top:1px solid var(--border);background:#ffffff05;justify-content:space-between;gap:12px;min-height:70px;padding:12px 16px}.modal__footer--end{justify-content:flex-end}.settings-list{gap:8px;display:grid}.settings-section-label{color:#7eaee8;letter-spacing:.08em;text-transform:uppercase;margin:8px 2px 0;font-size:.68rem;font-weight:800}.settings-lock-note{color:#ffc4ca;margin:-2px 4px 2px;font-size:.7rem}.setting-field{border:1px solid var(--border);background:#ffffff05;border-radius:11px;grid-template-columns:minmax(160px,.75fr) minmax(260px,1.25fr);align-items:center;gap:16px;min-height:68px;padding:10px 11px;display:grid}.setting-field__label{color:#c8d3e1;justify-content:space-between;align-items:center;gap:8px;font-size:.73rem;font-weight:700;display:flex}.setting-field__control{grid-template-columns:minmax(100px,1fr) 112px;align-items:center;gap:11px;display:grid}.safety-note{color:#c7edda;background:#38d4880f;border:1px solid #38d48830;border-radius:11px;align-items:flex-start;gap:10px;padding:11px}.safety-note svg{color:#63dca0;flex:0 0 19px;width:19px}.safety-note p{margin:0;font-size:.72rem;line-height:1.5}.arm-summary{border:1px solid var(--border);border-radius:11px;gap:0;margin:14px 0 0;display:grid;overflow:hidden}.arm-summary div{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:16px;min-height:45px;padding:8px 11px;display:flex}.arm-summary div:last-child{border-bottom:0}.arm-summary dt{color:var(--muted);font-size:.7rem}.arm-summary dd{text-align:right;margin:0;font-size:.72rem;font-weight:750}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.45;transform:scale(.82)}}@media (min-width:1261px){.dashboard-grid{grid-template-columns:minmax(420px,.82fr) minmax(620px,1.35fr)}.dashboard-left{grid-column:1;grid-template-columns:1fr;align-items:start}.device-card,.control-panel{height:auto}.device-photo-wrap{aspect-ratio:1.85;flex:none;min-height:0;max-height:none}.dashboard-right{grid-column:2}}@media (max-width:1260px){.dashboard-grid{grid-template-columns:minmax(340px,.86fr) minmax(520px,1.14fr)}.header-tools{gap:8px}.speed-control{grid-template-columns:auto minmax(54px,1fr) 26px}.time-window button{padding:0 9px}.stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:1040px){.app-header{align-items:flex-start;gap:12px;position:relative}.header-tools{flex-wrap:wrap}.time-window{order:3;width:100%}.connection-bar{top:10px}.dashboard-grid{grid-template-columns:1fr}.dashboard-left{grid-template-columns:minmax(340px,.9fr) minmax(420px,1.1fr);align-items:stretch}.device-card,.control-panel{height:100%}}@media (max-width:820px){.app-shell{padding:8px 8px max(12px, env(safe-area-inset-bottom))}.app-header{border-radius:15px;flex-direction:column;padding:11px;position:static}.connection-bar{position:static}.brand{width:100%}.header-tools{flex-wrap:wrap;justify-content:flex-start;gap:8px;width:100%}.time-window{flex:100%;min-width:0}.speed-control{flex:160px;min-width:0}.time-window button{min-width:0;padding:0 6px}.session-clock{margin-left:auto}.connection-bar{flex-direction:column;align-items:stretch;gap:10px;padding:11px}.connection-bar__actions{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.connection-bar__actions .button--danger:last-child:nth-child(odd){grid-column:1/-1}.dashboard-left{grid-template-columns:1fr}.device-card,.control-panel{height:auto}.alarm-banner{grid-template-columns:36px 1fr;display:grid}.alarm-banner .button{grid-column:1/-1;width:100%}.device-plot{height:420px}.modal-backdrop{align-items:end;padding:0}.modal{width:100%;max-height:calc(100vh - max(8px, env(safe-area-inset-top)));border-radius:18px 18px 0 0}.modal__footer{padding-bottom:max(12px, env(safe-area-inset-bottom))}.setting-field{grid-template-columns:1fr;gap:9px}}@media (max-width:560px){.brand__mark{flex-basis:40px;width:40px;height:40px}.brand p{display:none}.header-tools{flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:8px;display:flex}.header-actions{display:contents}.session-clock{border-left:0;order:1;gap:6px;min-width:0;margin-left:auto;padding-left:0}.session-clock span{display:none}.session-clock strong{font-size:.95rem}.icon-button--logo{order:1}.speed-control{flex:100%;order:2;grid-template-columns:auto minmax(0,1fr) 30px;min-width:0;min-height:46px}.time-window{flex:100%;order:3;min-width:0}.panel-heading{padding:14px 13px 7px}.panel-heading--controls{flex-direction:column;align-items:stretch}.mode-switch{width:100%}.device-photo-wrap{width:calc(100% - 20px);margin:7px 10px 10px}.photo-reading{min-width:56px;padding:5px 6px}.photo-reading strong{font-size:.76rem}.device-sources{padding:0 10px 10px}.source-row{grid-template-columns:32px 1fr}.source-row dl{border-top:1px solid var(--border);grid-column:1/-1;justify-content:flex-end;padding-top:7px}.heater-grid,.setpoint-grid{grid-template-columns:1fr;padding:0 10px}.pid-gains{margin:0 10px}.gain-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.gain-field>input{padding:0 7px}.chart-heading{flex-direction:column;align-items:flex-start;gap:4px}.device-plot{height:390px}.device-plot__heading{flex-direction:column;align-items:flex-start;gap:3px}.plot-legend{justify-content:flex-start;width:100%}.stat-grid{grid-template-columns:1fr 1fr;gap:8px}.stat-card{min-height:100px;padding:11px}.stat-card__icon{display:none}.app-footer{flex-direction:column;align-items:flex-start;padding:10px 4px}.modal__footer{flex-direction:column;align-items:stretch}.modal__footer .button-row,.modal__footer .button{width:100%}.setting-field__control{grid-template-columns:minmax(100px,1fr) 98px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.status-pill--alarm{color:#ff97a0;background:var(--red-soft);border-color:#fb5b674d;animation:1.2s infinite pulse}.sim-visual{background:radial-gradient(circle at 50% 42%,#2766aa29,#0000 58%),#0a1625;border:1px solid #94a3b821;border-radius:15px;width:min(480px,100% - 20px);margin:4px auto 8px;position:relative;overflow:hidden}.sim-visual svg{width:100%;height:auto;display:block}.sim-wall{stroke:url(#sim-wall);stroke-width:6px;stroke-linejoin:round;stroke-linecap:round}.sim-pipe{fill:#33465f;stroke:#c4d6ec73;stroke-width:1.2px}.sim-liquid{transition:y 90ms linear,height 90ms linear}.sim-wave{fill:none;stroke:#d6f0ff8c;stroke-width:2px;animation:2.6s ease-in-out infinite sim-wave-bob}@keyframes sim-wave-bob{0%,to{transform:translateY(0)}50%{transform:translateY(1.6px)}}.sim-stream{fill:#7dc8ffbf;animation:2.4s ease-in-out infinite sim-stream-shimmer}.sim-stream--out{fill:#7dc8ffad}@keyframes sim-stream-shimmer{0%,to{opacity:.85}50%{opacity:.6}}.sim-spill path{fill:none;stroke:#7dc8ffa6;stroke-width:4px;stroke-linecap:round;animation:1.6s ease-in-out infinite sim-stream-shimmer}.sim-tick line{stroke:#94a3b880;stroke-width:1.4px}.sim-tick text,.sim-axis-label{fill:#91a3bb;font-variant-numeric:tabular-nums;font-size:10px}.sim-axis-label{letter-spacing:.1em;text-transform:uppercase;font-size:9px;font-weight:700}.sim-setpoint line{stroke:#fda4af;stroke-width:1.6px;stroke-dasharray:3 6}.sim-setpoint text{fill:#fda4af;font-size:10.5px;font-weight:700}.sim-readout{fill:#eef6ff;font-variant-numeric:tabular-nums;paint-order:stroke;stroke:#06101e8c;stroke-width:3.5px;font-size:17px;font-weight:800}.sim-valve-label{fill:#aebbd0;letter-spacing:.04em;font-size:9.5px;font-weight:700}.sim-readings .source-row{grid-template-columns:minmax(100px,1fr) auto}.sim-readings .source-row>div:first-child{display:grid}.source-row--outlet{background:#ffb14f0d;border-color:#ffb14f38}.controls-body{gap:9px;padding:0 10px;display:grid}.controls-tuning{gap:8px;min-width:0;display:grid}.controls-primary,.controls-secondary{min-width:0}.heater-card--amber{border-top-color:#ffb14f80}.heater-card--amber .power-meter span,.power-meter--amber span{background:linear-gradient(90deg, #8a5a1d, var(--amber))}.legend-line--level,.legend-line--inlet{color:#4f9cff}.legend-line--outlet{color:#ffb14f}.results-button svg{width:15px}@media (max-width:560px){.results-button{flex:1}}@media (min-width:1261px){html,body{height:100%;overflow:hidden}.app-shell{flex-direction:column;gap:7px;height:100vh;min-height:0;padding:8px clamp(10px,1.3vw,18px) 6px;display:flex;overflow:hidden}.app-header{flex:none;min-height:60px;padding:7px 12px}.message-banner{flex:none;margin:0}.dashboard-grid{flex:auto;align-items:stretch;gap:9px;min-height:0}.dashboard-left{grid-template-rows:minmax(150px,1fr) auto;min-height:0}.dashboard-right{grid-template-rows:minmax(0,1fr) auto;min-height:0}.app-footer{flex:none;min-height:0;padding:2px 6px;font-size:.68rem}.charts-region{grid-template-rows:auto minmax(0,1fr);min-height:0}.chart-heading{padding:0 4px 5px}.device-plots,.device-plot{height:100%;min-height:0}.stat-grid{gap:8px}.stat-card{min-height:60px;padding:8px 9px}.device-card{height:100%;min-height:0;overflow:hidden}.device-card .panel-heading{flex:none;padding:8px 12px 2px}.sim-visual{aspect-ratio:460/336;flex:0 auto;width:calc(100% - 18px);max-width:620px;max-height:100%;margin:auto}.sim-visual svg{width:100%;height:100%}.sim-readings{flex:none;grid-template-columns:repeat(2,minmax(0,1fr));padding:0 9px 8px}.sim-readings .source-row{min-height:44px;padding:5px 8px}.control-panel{height:auto;min-height:0;padding-bottom:8px;overflow-y:auto}.panel-heading--controls{padding:8px 12px 4px}.suggestion{min-height:0;margin:4px 10px 2px;padding:6px 9px;font-size:.66rem}.suggestion p{font-size:.68rem;line-height:1.35}.heater-card,.setpoint-card{padding:8px 9px}.heater-card__heading{padding-bottom:6px}.power-field{gap:5px;margin-top:7px}.power-meter{margin-top:6px}.controls-body{grid-template-columns:repeat(2,minmax(0,1fr));align-content:start;gap:8px}.controls-primary{grid-area:1/1}.controls-secondary{grid-area:1/2}.controls-tuning{grid-area:2/1/auto/-1;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.pid-gains,.pid-type-panel{padding:7px 9px}.gain-grid{gap:8px}input[type=range]{min-height:34px}.number-with-unit{min-width:74px;height:38px}.pid-type-switch button,.mode-switch button,.time-window button{min-height:38px}.icon-button{width:38px;min-width:38px;height:38px}.button{min-height:38px}}@media (min-width:1261px) and (max-height:830px){.sim-readings{display:none}}@media (min-width:1261px) and (max-height:700px){.suggestion{display:none}}.gain-grid--four .gain-field input{width:100%;min-width:0}.heater-card--green,.setpoint-card--green{border-top-color:#38d48880}.heater-card--cyan,.setpoint-card--cyan{border-top-color:#42d3d080}.heater-card--violet,.setpoint-card--violet{border-top-color:#a78bfa80}.heater-card--amber,.setpoint-card--amber{border-top-color:#ffb14f80}.heater-card--red,.setpoint-card--red{border-top-color:#fb5b6780}.heater-card--green .heater-card__heading>div{color:#6ee7a8}.heater-card--cyan .heater-card__heading>div{color:#6fe3e0}.heater-card--violet .heater-card__heading>div{color:#c4b5fd}.heater-card--amber .heater-card__heading>div{color:#ffc477}.heater-card--green input[type=range]{accent-color:var(--green)}.heater-card--cyan input[type=range]{accent-color:var(--cyan)}.heater-card--violet input[type=range]{accent-color:#a78bfa}.heater-card--amber input[type=range]{accent-color:var(--amber)}.heater-card--blue input[type=range]{accent-color:var(--blue)}.power-meter--green span{background:linear-gradient(90deg, #12613c, var(--green))}.power-meter--cyan span{background:linear-gradient(90deg, #12595a, var(--cyan))}.power-meter--violet span{background:linear-gradient(90deg,#4c3d8a,#a78bfa)}.power-meter--amber span{background:linear-gradient(90deg, #8a5a1d, var(--amber))}.power-meter--blue span{background:linear-gradient(90deg, #1a4c8a, var(--blue))}.power-meter--red span{background:linear-gradient(90deg, #8a2731, var(--red))}.power-meter--signed{position:relative}.power-meter--signed:before{top:0;bottom:0;left:var(--zero,50%);background:var(--border-strong);content:"";width:1px;position:absolute}.power-meter--signed span{margin-left:var(--origin,0%)}.legend-line--blue{color:#4f9cff}.legend-line--amber{color:#ffb14f}.legend-line--green{color:#38d488}.legend-line--red{color:#fb5b67}.legend-line--cyan{color:#42d3d0}.legend-line--violet{color:#a78bfa}.legend-line--slate{color:#94a3b8}.legend-line--pink{color:#fda4af}.legend-line--dashed{background:repeating-linear-gradient(90deg,currentColor 0 3px,#0000 3px 6px)}.controls-disturbance{min-width:0}.disturbance-panel{background:#ffb14f0b;border:1px solid #ffb14f33;border-radius:12px;gap:8px;padding:9px 10px 10px;display:grid}.disturbance-panel>.section-label{color:#ffc477}.disturbance-grid{gap:9px;display:grid}.disturbance-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.disturbance-field{gap:4px;min-width:0;display:grid}.disturbance-field>.section-label{font-size:.66rem}.disturbance-field__value{font-variant-numeric:tabular-nums;font-weight:750}.tips-list{gap:8px;display:grid}.tip-item{border:1px solid var(--border);background:var(--panel-soft);border-radius:12px}.tip-item[open]{border-color:var(--border-strong)}.tip-item>summary{color:var(--text);cursor:pointer;justify-content:space-between;align-items:center;gap:10px;padding:11px 12px;font-size:.82rem;font-weight:700;list-style:none;display:flex}.tip-item>summary::-webkit-details-marker{display:none}.tip-item>summary:after{color:var(--muted);content:"+";font-size:.9rem}.tip-item[open]>summary:after{content:"−"}.tip-item__body{color:var(--muted);gap:8px;padding:0 12px 12px;font-size:.78rem;line-height:1.5;display:grid}.tip-item__body p{margin:0}.tip-item__body code{background:#94a3b824;border-radius:5px;padding:1px 4px;font-size:.74rem}.tip-item__body .tip-equation{border:1px solid var(--border);color:var(--text);white-space:pre;background:#08111f99;border-radius:9px;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem;overflow-x:auto}.tip-item__links{flex-wrap:wrap;gap:10px;font-size:.74rem;font-weight:650;display:flex}.modal--wide{width:min(760px,100%)}.gain-grid--three{grid-template-columns:repeat(3,minmax(58px,1fr))}.gain-grid--four{grid-template-columns:repeat(2,minmax(64px,1fr))}.gain-grid--four .gain-field input,.gain-grid--three .gain-field input{width:100%;min-width:0}.structure-switch{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;display:grid}.structure-switch button{border:1px solid var(--border);min-height:36px;color:var(--muted);font:inherit;cursor:pointer;background:0 0;border-radius:9px;padding:0 9px;font-size:.7rem;font-weight:700}.structure-switch button.is-active{background:var(--blue-soft);color:#cfe3ff;border-color:#3b8fff73}.structure-switch button:disabled{opacity:.5;cursor:not-allowed}.sim-vessel{fill:#111f32d9;stroke:#c4d6ec66;stroke-width:2px}.sim-label{fill:#aebbd0;letter-spacing:.04em;font-size:9.5px;font-weight:700}.sim-value{fill:#eef6ff;font-variant-numeric:tabular-nums;font-size:12px;font-weight:800}.sim-arrow{stroke-linecap:round;fill:none}.sim-flow-dash{stroke-linecap:round;fill:none;stroke-dasharray:6 9;animation:.9s linear infinite sim-flow}@keyframes sim-flow{to{stroke-dashoffset:-15px}}.sim-spin{transform-box:fill-box;transform-origin:50%;animation:4s linear infinite spin}.sim-band{fill:#38d4881a;stroke:#38d48859;stroke-width:1px;stroke-dasharray:3 5}@media (min-width:1261px){.disturbance-panel{padding:7px 9px 8px}.controls-disturbance{grid-column:1/-1}}@media (max-width:560px){.disturbance-grid--two,.structure-switch{grid-template-columns:1fr}.header-actions{grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}.results-button{flex:initial;grid-column:1/-1}}.reactor-jacket{stroke-width:1.6px}.reactor-vessel{fill:#0c1a2c;stroke:#cee0f680;stroke-width:2px}.reactor-liquid{transition:fill .2s linear}.reactor-speck circle{fill:#d8f4ffd9;animation:1.4s linear infinite sim-stream-shimmer}.reactor-swirl{stroke:#fff4e266;stroke-width:2px;stroke-dasharray:5 11}.reactor-shaft{fill:#7d8ea6;stroke:#101c2e99;stroke-width:1px}.reactor-motor{fill:#4a5b73;stroke:#d6e6f873;stroke-width:1.2px}.reactor-blade{fill:#b6c6dc;stroke:#101c2e80;stroke-width:1px}.reactor-hub{fill:#7d8ea6;stroke:#101c2e99;stroke-width:1px}.reactor-impeller{transform-box:fill-box;transform-origin:50%;animation:4s linear infinite spin}.reactor-scale-track{fill:#94a3b824;stroke:#94a3b842;stroke-width:1px}.reactor-scale-fill{transition:y 90ms linear,height 90ms linear}.reactor-danger{stroke:#ff5f6b;stroke-width:1.8px;stroke-dasharray:4 3}.reactor-danger-label{fill:#ff97a0;font-variant-numeric:tabular-nums;font-size:9.5px;font-weight:800}.setpoint-hint{color:var(--muted);border-top:1px solid #94a3b829;margin:7px 0 0;padding-top:7px;font-size:.62rem;line-height:1.4}.setpoint-hint strong{color:#cfe3ff}.reactor-term{font-size:11px}.reactor-term--hot{fill:#ffb583}.reactor-term--cold{fill:#8ec5ff}.reactor-rule{stroke:#94a3b859;stroke-width:1px}.reactor-balance-title{fill:#8fa2ba;font-size:10px}.sim-visual{width:min(520px,100% - 18px)}@media (min-width:1261px){.dashboard-left{grid-template-rows:minmax(200px,1fr) minmax(0,auto)}.control-panel{min-height:0}.sim-visual{flex:auto;width:auto;max-width:calc(100% - 18px)}.controls-body{gap:7px}.setpoint-card{padding:7px 9px}.disturbance-grid{gap:5px}.disturbance-panel input[type=range]{min-height:28px}.controls-tuning{grid-template-columns:3fr 2fr}.gain-grid--four{grid-template-columns:repeat(4,minmax(0,1fr))}.gain-grid{gap:6px}.gain-field{gap:4px}.gain-field>input{height:38px}.pid-type-switch button{min-height:38px}.pid-gains,.pid-type-panel{padding:6px 8px}}.subplot__timelabel{z-index:2;color:#7f91a9;font-variant-numeric:tabular-nums;pointer-events:none;font-size:.55rem;font-weight:700;position:absolute;bottom:1px;right:12px}.icon-button--logo{padding:4px}.icon-button--logo img{object-fit:contain;width:100%;height:100%;display:block}@media (pointer:coarse){.app-footer>div{flex-wrap:wrap;gap:4px 16px}.app-footer a,.reference-link,.pid-reference-link{align-items:center;min-height:40px;display:inline-flex}input[type=range]{height:44px}input[type=number],input[type=text],select,.number-with-unit{min-height:44px}input[type=checkbox],input[type=radio]{width:22px;height:22px}.icon-button{width:44px;min-width:44px;height:44px}.button,.pid-type-switch button,.mode-switch button,.time-window button{min-height:44px}.message-banner .icon-button{width:40px;min-width:40px;height:40px}}
