.app{position:relative;min-height:100dvh;max-width:480px;margin:0 auto;padding:1rem 1rem calc(1.5rem + var(--safe-bottom));overflow-x:hidden}.bg-glow{pointer-events:none;position:fixed;top:0;right:0;bottom:0;left:0;background:radial-gradient(ellipse 90% 55% at 50% -8%,rgba(31,168,154,.18),transparent 58%),radial-gradient(ellipse 55% 40% at 100% 20%,rgba(120,180,210,.16),transparent 55%),linear-gradient(180deg,#e8f1f4,#f4f8fa 55%,#eef5f7);z-index:-1}.header{display:flex;justify-content:space-between;gap:1rem;align-items:flex-start;margin-bottom:1.25rem}.eyebrow{margin:0 0 .2rem;color:var(--cyan);font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;font-weight:600}.header h1{margin:0;font-size:1.45rem;letter-spacing:-.03em;font-weight:700}.subtitle{margin:.25rem 0 0;color:var(--muted);font-size:.82rem}.main-nav{display:flex;gap:.35rem;margin-top:.65rem}.main-nav button{border:1px solid var(--panel-border);background:#ffffff8c;color:var(--muted);border-radius:999px;padding:.35rem .75rem;font-size:.78rem;font-weight:600}.main-nav button.active{background:var(--cyan-dim);border-color:#1fa89a73;color:#147a70}.range-row{display:grid;grid-template-columns:repeat(4,1fr);gap:.4rem;margin:.75rem 0}.range-row button{border:1px solid var(--panel-border);background:#ffffffa6;color:var(--text);border-radius:10px;padding:.55rem .25rem;font-size:.78rem;font-weight:600}.range-row button.active{background:var(--cyan-dim);border-color:#1fa89a73;color:#147a70}.custom-range{display:grid;gap:.55rem;margin-bottom:.75rem}.history-axis{display:flex;justify-content:space-between;color:var(--muted);font-size:.68rem;font-family:var(--mono);margin-top:.25rem}.history-svg{height:170px}.illu-card{padding:.55rem;overflow:hidden}.illu-card .login-illu{margin:0;border-radius:10px}.conn{display:flex;gap:.55rem;align-items:center;padding:.55rem .7rem;border-radius:12px;background:var(--panel);border:1px solid var(--panel-border);min-width:7.5rem;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.conn strong{display:block;font-size:.82rem}.conn small{display:block;color:var(--muted);font-size:.68rem;font-family:var(--mono)}.conn .dot,.pill .dot,.status-line .dot,.event .dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex-shrink:0}.conn.ok .dot,.pill.ok .dot,.status-line.on .dot,.event.ok .dot{background:var(--green)}.conn.bad .dot,.event.warn .dot,.pill.warn .dot{background:var(--warn)}.stack{display:flex;flex-direction:column;gap:.9rem}.card{background:var(--panel);border:1px solid var(--panel-border);border-radius:var(--radius);padding:1rem;box-shadow:var(--shadow);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.card-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem}.card-head h2{margin:0;font-size:.78rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-weight:600}.pill{display:inline-flex;align-items:center;gap:.4rem;font-size:.72rem;color:var(--muted)}.gauge{position:relative;margin:0 auto;width:min(100%,280px)}.gauge-svg{width:100%;display:block}.gauge-track{stroke:#1a2b331a}.gauge-arc{stroke:var(--cyan);transition:stroke-dasharray .55s ease}.gauge-arc.alarm{stroke:var(--warn)}.gauge-needle{stroke:var(--text);stroke-width:2.5;stroke-linecap:round;transition:transform .55s ease;transform-origin:100px 95px}.gauge-hub{fill:var(--text)}.gauge-value{position:absolute;left:50%;top:52%;transform:translate(-50%,-50%);text-align:center;pointer-events:none;line-height:1}.gauge-value strong{font-family:var(--mono);font-size:2.4rem;font-weight:600;letter-spacing:-.03em}.gauge-value span{color:var(--cyan);font-size:1rem;margin-left:.15rem;vertical-align:super}.gauge-label{margin:.15rem 0 0;text-align:center;color:var(--muted);font-size:.78rem}.stat-row{display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem;margin-top:.75rem}.stat-row>div{background:#ffffff8c;border:1px solid var(--line);border-radius:10px;padding:.55rem .4rem;text-align:center}.stat-row span{display:block;color:var(--muted);font-size:.68rem;margin-bottom:.2rem}.stat-row strong{font-family:var(--mono);font-size:.95rem;font-weight:500}.setpoint-hint{margin:.7rem 0 0;text-align:center;color:var(--muted);font-size:.78rem}.temp-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.55rem}.temp-grid-5{grid-template-columns:repeat(3,1fr)}.temp-grid-1{grid-template-columns:1fr;max-width:200px}.cellar-switch{display:grid;grid-template-columns:1fr 1fr;gap:.45rem;padding:.3rem;border-radius:14px;background:#ffffff73;border:1px solid var(--panel-border)}.cellar-switch button{border:none;background:transparent;color:var(--muted);border-radius:10px;padding:.7rem .5rem;font-weight:600;font-size:.88rem;transition:background .15s ease,color .15s ease}.cellar-switch button.active{background:#fff;color:var(--text);box-shadow:var(--shadow)}.hint.tight{margin:0 0 .75rem;line-height:1.4}.manual-timer{margin:0 0 .75rem;padding:.55rem .7rem;border-radius:10px;background:#c47a1a1a;border:1px solid rgba(196,122,26,.25);color:var(--warn);font-size:.8rem;line-height:1.35}.manual-actions{margin-bottom:.5rem;grid-template-columns:1fr}.fan-grid{display:grid;gap:.5rem}.fan-grid.pairs{grid-template-columns:1fr 1fr}.fan-grid.intakes{grid-template-columns:repeat(3,1fr)}.fan-toggle{display:flex;flex-direction:column;align-items:flex-start;gap:.15rem;text-align:left;border:1px solid var(--panel-border);background:#ffffffa6;color:var(--text);border-radius:12px;padding:.65rem .7rem;transition:background .15s ease,border-color .15s ease;position:relative}.fan-toggle .mini-fan{position:absolute;top:.55rem;right:.55rem;width:22px;height:22px;display:grid;place-items:center}.mini-fan-blade{width:18px;height:18px;border-radius:50%;border:2px solid rgba(31,168,154,.28);background:conic-gradient(from 0deg,transparent 0 40deg,var(--cyan) 40deg 70deg,transparent 70deg 180deg,var(--cyan) 180deg 210deg,transparent 210deg 360deg)}.mini-fan.spin .mini-fan-blade{animation:spin .9s linear infinite}.equip-fan-hint{margin:0;font-size:.7rem}.fan-toggle.on{background:var(--cyan-dim);border-color:#1fa89a73}.fan-toggle-label{font-size:.68rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}.fan-toggle strong{font-size:.95rem}.fan-toggle small{color:var(--muted);font-size:.68rem}.mini-temp{background:var(--panel);border:1px solid var(--panel-border);border-radius:12px;padding:.7rem .5rem;text-align:center;box-shadow:var(--shadow);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.mini-temp>span{display:block;color:var(--muted);font-size:.68rem;letter-spacing:.06em;text-transform:uppercase}.mini-temp strong{display:block;font-family:var(--mono);font-size:1.25rem;margin:.25rem 0;font-weight:600;color:var(--cyan)}.mini-temp small{font-size:.75rem;color:var(--muted)}.mini-temp em{display:block;font-style:normal;color:var(--muted);font-size:.65rem}.mode-row,.btn-row{display:grid;grid-template-columns:1fr 1fr;gap:.5rem}.mode-row button,.btn-row button,.setpoint-controls button,.icon-btn{border:1px solid var(--panel-border);background:#ffffffa6;color:var(--text);border-radius:10px;padding:.7rem .5rem;transition:background .15s ease,border-color .15s ease,transform .12s ease}.mode-row button.active,.btn-row button.primary:not(:disabled){background:var(--cyan-dim);border-color:#1fa89a73;color:#147a70;font-weight:600}.btn-row button.primary:not(:disabled):active,.mode-row button:active,.setpoint-controls button:active{transform:translateY(1px)}.icon-btn{width:38px;height:38px;padding:0;display:grid;place-items:center;color:var(--muted)}.icon-btn.locked{color:var(--warn);border-color:#c47a1a59;background:#c47a1a14}.setpoint-row{display:flex;justify-content:space-between;align-items:center;margin:.85rem 0 1rem;gap:.75rem}.setpoint-row label{color:var(--muted);font-size:.85rem}.setpoint-controls{display:flex;align-items:center;gap:.45rem}.setpoint-controls strong{font-family:var(--mono);min-width:4.5rem;text-align:center}.setpoint-controls button{width:40px;height:40px;padding:0;font-size:1.2rem}.equip-grid{display:grid;grid-template-columns:1fr 1fr;gap:.75rem;margin:.85rem 0 .5rem}.equip{display:flex;flex-direction:column;gap:.55rem}.equip-visual{height:88px;border-radius:12px;background:#e8f1f4d9;border:1px solid var(--line);position:relative;overflow:hidden}.hatch-visual .hatch-door{position:absolute;left:18%;right:18%;bottom:18%;height:55%;background:linear-gradient(180deg,#c5d5dc,#9eb4be);border:1px solid rgba(26,43,51,.12);border-radius:4px 4px 2px 2px;transform-origin:top center;transform:rotateX(calc(var(--hatch-pct, 0) * -.7deg));transition:transform .5s ease,background .45s ease}.hatch-visual[data-open=true] .hatch-door{background:linear-gradient(180deg,#7ecfc4,#4aa89c)}.fan-visual{display:grid;place-items:center}.fan-blade{width:46px;height:46px;border-radius:50%;border:3px solid rgba(31,168,154,.28);background:conic-gradient(from 0deg,transparent 0 40deg,var(--cyan) 40deg 70deg,transparent 70deg 180deg,var(--cyan) 180deg 210deg,transparent 210deg 360deg);position:relative}.fan-blade:after{content:"";position:absolute;top:35%;right:35%;bottom:35%;left:35%;border-radius:50%;background:var(--bg-2);border:2px solid rgba(26,43,51,.12)}.fan-visual.spin .fan-blade{animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@keyframes fade-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.status-line{display:flex;align-items:center;gap:.4rem;font-size:.78rem;color:var(--muted)}.status-line.on{color:var(--green)}.status-line .dot{background:#9aafb8}.hint{margin:.85rem 0 0;color:var(--muted);font-size:.78rem}.trend-svg{width:100%;height:130px;display:block}.trend-line{stroke:var(--cyan);stroke-width:2;stroke-linejoin:round;stroke-linecap:round}.trend-target{stroke:var(--warn);stroke-width:1.5;stroke-dasharray:5 4;opacity:.9}.trend-target-label{fill:var(--warn);font-size:9px;font-family:var(--mono)}.trend-grid{stroke:#1a2b3314;stroke-width:1}.trend-axis-label{fill:var(--muted);font-size:9px;font-family:var(--mono)}.target-row{display:flex;justify-content:space-between;align-items:center;gap:.75rem;margin-bottom:.65rem}.target-row>span{color:var(--muted);font-size:.85rem}.event-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.55rem;max-height:220px;overflow:auto}.event{display:grid;grid-template-columns:10px 4.6rem 1fr;gap:.55rem;align-items:start;font-size:.8rem}.event time{font-family:var(--mono);color:var(--muted);font-size:.72rem}.event .dot{margin-top:.35rem;background:#5b8fad}.event.info .dot{background:#5b8fad}.event.cmd .dot{background:var(--cyan)}.footer{margin-top:1.25rem;text-align:center;color:var(--muted);font-size:.72rem;line-height:1.4}.header-aside{display:flex;flex-direction:column;align-items:flex-end;gap:.45rem}.session-bar{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.35rem .55rem;max-width:14rem}.session-user{font-family:var(--mono);font-size:.72rem;color:var(--cyan)}.text-btn{border:none;background:transparent;color:var(--muted);padding:.15rem 0;font-size:.72rem;text-decoration:underline;text-underline-offset:2px}.text-btn:hover{color:var(--text)}.text-btn.danger{color:var(--bad)}.login-app{display:grid;place-items:center;min-height:100dvh;padding:1.5rem 1rem calc(1.5rem + var(--safe-bottom))}.boot-msg{color:var(--muted);font-size:.9rem;animation:fade-up .45s ease both}.login-card{width:min(100%,380px);animation:fade-up .5s ease both;padding:1.5rem 1.25rem 1.35rem}.login-illu{display:block;width:100%;height:auto;margin:0 0 1rem;border-radius:12px;overflow:hidden}.illu-fan-spin{transform-box:fill-box;transform-origin:center;animation:spin 2.2s linear infinite}.login-card .eyebrow{margin-bottom:.45rem}.login-card h1{margin:0;font-size:2.15rem;letter-spacing:-.04em;font-weight:700;line-height:1.1}.login-card .subtitle{margin-top:.45rem;font-size:.95rem;max-width:18rem}.login-form,.user-form{display:flex;flex-direction:column;gap:.75rem;margin-top:1.25rem}.primary-btn{border:1px solid rgba(31,168,154,.4);background:var(--cyan);color:#fff;border-radius:10px;padding:.8rem .9rem;font-weight:600;transition:background .15s ease,border-color .15s ease,transform .12s ease}.primary-btn:hover:not(:disabled){background:#18988b}.primary-btn:active:not(:disabled){transform:translateY(1px)}.primary-btn.compact{padding:.55rem .75rem;width:auto;white-space:nowrap}.form-error{margin:0;color:var(--bad);font-size:.82rem}.form-ok{margin:.65rem 0 0;color:var(--green);font-size:.82rem}.form-section-title{margin:1rem 0 .55rem;color:var(--muted);font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;font-weight:600}.user-mgmt .form-section-title:first-of-type{margin-top:0}.user-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.55rem}.user-row{padding:.7rem .75rem;border-radius:12px;background:#ffffff8c;border:1px solid var(--line);display:flex;flex-direction:column;gap:.45rem}.user-meta{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem}.user-meta strong{font-size:.9rem}.role-pill{font-size:.65rem;letter-spacing:.06em;text-transform:uppercase;padding:.15rem .4rem;border-radius:6px;border:1px solid var(--line);color:var(--muted)}.role-pill.admin{color:#147a70;border-color:#1fa89a59;background:var(--cyan-dim)}.you-tag{font-size:.65rem;color:var(--muted)}.user-actions{display:flex;flex-wrap:wrap;gap:.65rem}.password-edit{display:flex;gap:.45rem;align-items:center}.password-edit input{flex:1}@media(min-width:720px){.app{max-width:720px;padding-top:1.5rem}.stack{display:grid;grid-template-columns:1.1fr .9fr;gap:.9rem}.temp-grid,.cellar-switch,.user-mgmt,.footer{grid-column:1 / -1}}:root{color-scheme:light;--bg: #e8f1f4;--bg-2: #f4f8fa;--panel: rgba(255, 255, 255, .72);--panel-border: rgba(26, 43, 51, .1);--text: #1a2b33;--muted: #5a6f7a;--cyan: #1fa89a;--cyan-dim: rgba(31, 168, 154, .14);--green: #2f9e6b;--warn: #c47a1a;--bad: #c23b4a;--line: rgba(26, 43, 51, .08);--shadow: 0 8px 28px rgba(26, 43, 51, .06);--font: "Outfit", "Segoe UI", sans-serif;--mono: "IBM Plex Mono", ui-monospace, monospace;--radius: 16px;--safe-bottom: env(safe-area-inset-bottom, 0px)}*{box-sizing:border-box}html,body,#root{margin:0;min-height:100%}body{font-family:var(--font);background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}button{font:inherit;cursor:pointer}button:disabled{opacity:.4;cursor:not-allowed}input,select{font:inherit;color:var(--text);background:#ffffffe6;border:1px solid var(--panel-border);border-radius:10px;padding:.65rem .75rem;width:100%}input:focus,select:focus{outline:2px solid rgba(31,168,154,.35);outline-offset:1px;border-color:#1fa89a8c}label{display:flex;flex-direction:column;gap:.35rem}label>span{color:var(--muted);font-size:.78rem;letter-spacing:.04em}
