@import"https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700&display=swap";:root{--bg: #eef1f5;--bg-elev: #f8fafc;--card: #ffffff;--text: #0f172a;--text-soft: #475569;--text-muted: #64748b;--line: #e2e8f0;--line-strong: #cbd5e1;--accent: #0ea5e9;--accent-soft: #e0f2fe;--accent-dark: #0284c7;--ok: #059669;--ok-bg: #ecfdf5;--ok-dark: #047857;--err: #dc2626;--err-bg: #fef2f2;--err-dark: #b91c1c;--warn: #d97706;--warn-bg: #fffbeb;--on: #059669;--off: #475569;--radius: 18px;--radius-sm: 12px;--font: "DM Sans", system-ui, -apple-system, sans-serif;--shadow: 0 1px 3px rgba(15, 23, 42, .06);--shadow-md: 0 8px 24px rgba(15, 23, 42, .08);--shadow-lg: 0 20px 50px rgba(15, 23, 42, .12);--transition-fast: .15s ease;--transition-base: .25s ease;--transition-slow: .4s ease}*{box-sizing:border-box}body{margin:0;font-family:var(--font);background:var(--bg);color:var(--text);line-height:1.45;-webkit-font-smoothing:antialiased}.hmi-subid{color:var(--text-muted);font-size:.85em}.hmi-modal-lead{margin:0 1.75rem .5rem;font-size:.9rem;color:var(--text-soft);line-height:1.4}.hmi-modal-lead code{background:var(--bg-elev);padding:.1em .4em;border-radius:4px;font-size:.9em}.hmi-dev-shell{padding:.75rem 1.25rem 0;max-width:720px;margin:0 auto}.hmi-back-to-hmi{display:inline-flex;align-items:center;padding:.5rem .9rem;font-size:.9rem;font-weight:500;color:var(--text-soft);background:var(--card);border:1px solid var(--line);border-radius:999px;cursor:pointer;font-family:inherit;box-shadow:var(--shadow);transition:background var(--transition-fast),border-color var(--transition-fast),transform var(--transition-fast)}.hmi-back-to-hmi:hover{background:var(--bg-elev);border-color:var(--line-strong);transform:translateY(-1px)}.hmi-root{min-height:100dvh;background:var(--bg);padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom)}.hmi-shell{max-width:680px;margin:0 auto;padding:1rem 1rem 2.5rem}@media(min-width:768px){.hmi-shell{max-width:760px;padding:1.5rem 1.5rem 3rem}}.hmi-bar{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;background:var(--card);padding:1rem 1rem 1rem 1.1rem;border-radius:var(--radius);margin-bottom:.9rem;box-shadow:var(--shadow-md);border:1px solid var(--line);animation:slideDown .4s ease-out}.hmi-bar-new{align-items:center;padding:.85rem 1rem}.hmi-bar-brand{display:flex;align-items:center;gap:.85rem;min-width:0}.hmi-bar-logo{width:40px;height:40px;flex-shrink:0;color:var(--accent)}.hmi-bar-logo svg{width:100%;height:100%}.hmi-title{font-size:1.2rem;font-weight:700;letter-spacing:-.02em;color:var(--text);margin:0;line-height:1.25}.hmi-subtitle{font-size:.86rem;color:var(--text-soft);margin-top:.2rem;line-height:1.3;font-weight:500}.hmi-subtitle.muted{color:var(--text-muted)}.hmi-bar-actions{display:flex;flex-shrink:0;align-items:center;gap:.4rem}.hmi-icon-btn,.hmi-gear{width:44px;height:44px;padding:0;border:1px solid var(--line);background:var(--bg-elev);border-radius:12px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--text-soft);font-family:inherit;transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast),transform var(--transition-fast);box-shadow:var(--shadow)}.hmi-icon{font-size:1.2rem;line-height:1;display:block}.hmi-icon-svg{display:block;flex-shrink:0;opacity:.92}.hmi-icon-btn:hover{background:var(--card);border-color:var(--line-strong);color:var(--text);transform:translateY(-2px)}.hmi-icon-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.hmi-icon-btn:active:not(:disabled){background:#eef0f4;transform:translateY(0)}.hmi-icon-btn-accent{background:var(--accent-soft);border-color:#bae6fd;color:var(--accent-dark)}.hmi-icon-btn-accent:hover{background:#bae6fd;border-color:#7dd3fc;color:#0369a1}.hmi-pull-hint{text-align:center;font-size:.8rem;color:var(--text-muted);line-height:1.2;overflow:hidden;transition:height .2s ease}.hmi-zone-snap{display:flex;gap:.5rem;overflow-x:auto;padding:.2rem 0 1rem;-webkit-overflow-scrolling:touch;scrollbar-width:thin;animation:slideUp .4s ease-out}.hmi-zone-pill{flex-shrink:0;min-width:0;max-width:200px;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:.6rem .85rem;cursor:pointer;text-align:left;font-family:inherit;box-shadow:var(--shadow);transition:border-color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast),background var(--transition-fast)}.hmi-zone-pill:hover{border-color:var(--accent);box-shadow:0 4px 12px #0ea5e91a;transform:translateY(-1px)}.hmi-zone-pill.active{border-color:var(--accent);background:linear-gradient(145deg,#f0f9ff,#e0f2fe);box-shadow:0 0 0 1px var(--accent),0 4px 12px #0ea5e91f}.hmi-zone-pill-name{display:block;font-weight:600;font-size:.82rem;color:var(--text);line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hmi-zone-pill-id{display:block;font-size:.68rem;color:var(--text-muted);font-variant-numeric:tabular-nums;margin-top:.2rem}.hmi-card{background:var(--card);border-radius:var(--radius);padding:1.25rem 1.1rem 1.35rem;box-shadow:var(--shadow-md);border:1px solid var(--line);position:relative;animation:slideUp .45s ease-out}.connection-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem;background:var(--card);border-radius:var(--radius);padding:.85rem 1rem;margin-bottom:.85rem;box-shadow:var(--shadow-md);border:1px solid var(--line);animation:slideUp .45s ease-out .05s both}.connection-bar-main{display:flex;flex-wrap:wrap;gap:1rem 1.5rem;align-items:center}.connection-bar-group{display:flex;flex-direction:column;gap:.15rem}.connection-bar-label{font-size:.65rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted)}.connection-bar-value{font-size:.92rem;font-weight:700;color:var(--text);line-height:1.2}.connection-bar-range{font-size:.78rem;color:var(--text-muted);font-weight:500;margin-left:.25rem}.connection-bar-hint{font-size:.7rem;color:var(--text-muted);font-weight:500}.connection-ok{color:var(--ok-dark)}.connection-stub{color:var(--accent-dark)}.connection-lost{color:var(--err-dark)}.mode-pill{display:inline-flex;align-items:center;padding:.25rem .55rem;border-radius:999px;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;background:var(--bg-elev);border:1px solid var(--line);color:var(--text-soft)}.mode-pill-auto{background:var(--ok-bg);border-color:#a7f3d0;color:var(--ok-dark)}.mode-pill-manual{background:#eff6ff;border-color:#bfdbfe;color:var(--accent-dark)}.mode-pill-maintenance{background:var(--warn-bg);border-color:#fde68a;color:#92400e}.mode-pill-scheduled{background:#f3e8ff;border-color:#e9d5ff;color:#7e22ce}.live-indicator{display:flex;align-items:center;gap:.45rem;font-size:.78rem;font-weight:600;color:var(--text-soft);padding:.35rem .55rem;background:var(--bg-elev);border-radius:999px;border:1px solid var(--line)}.live-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.live-dot-pulse{background:var(--ok);box-shadow:0 0 #05966966;animation:pulse 2s infinite}.live-dot-stale{background:var(--warn)}@keyframes pulse{0%{box-shadow:0 0 #05966966}70%{box-shadow:0 0 0 6px #05966900}to{box-shadow:0 0 #05966900}}.readout-grid{display:grid;grid-template-columns:1fr;gap:.75rem;margin-bottom:.85rem;animation:slideUp .45s ease-out .1s both}@media(min-width:480px){.readout-grid{grid-template-columns:1fr 1fr}}.readout-card{background:var(--card);border-radius:var(--radius);padding:1rem 1.05rem .85rem;box-shadow:var(--shadow-md);border:1px solid var(--line);display:flex;flex-direction:column;gap:.6rem;transition:transform var(--transition-fast),box-shadow var(--transition-fast);overflow:hidden;position:relative}.readout-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg)}.readout-card:before{content:"";position:absolute;top:0;left:0;right:0;height:3px}.readout-card-rh:before{background:linear-gradient(90deg,#3b82f6,#0ea5e9)}.readout-card-temp:before{background:linear-gradient(90deg,#10b981,#059669)}.readout-card-head{display:flex;align-items:center;gap:.5rem}.readout-card-icon{font-size:1.1rem;line-height:1}.readout-card-label{font-size:.72rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted)}.readout-card-body{display:flex;align-items:baseline;justify-content:space-between;gap:.5rem}.readout-card-value{font-size:clamp(1.8rem,6vw,2.6rem);font-weight:700;letter-spacing:-.03em;color:var(--text);line-height:1;font-variant-numeric:tabular-nums}.readout-card-unit{font-size:1rem;font-weight:600;color:var(--text-muted);margin-left:.15rem}.readout-trend{font-size:.78rem;font-weight:600;padding:.2rem .45rem;border-radius:999px;white-space:nowrap}.readout-trend.up{background:#fee2e2;color:#b91c1c}.readout-trend.down{background:var(--ok-bg);color:var(--ok-dark)}.readout-trend.flat{background:var(--bg-elev);color:var(--text-muted)}.sparkline{width:100%;height:44px;display:block}.sparkline-empty{width:100%;background:var(--bg-elev);border-radius:8px}.sparkline-animated polyline{stroke-dasharray:300;stroke-dashoffset:300;animation:drawLine .8s ease-out forwards}@keyframes drawLine{to{stroke-dashoffset:0}}.hmi-telemetry-hint{font-size:.75rem;line-height:1.4;color:var(--text-muted);margin:-.2rem 0 .85rem;padding:.5rem .6rem;background:var(--bg-elev);border-radius:8px;border:1px solid var(--line);animation:slideUp .45s ease-out .15s both}.hmi-telemetry-hint .hmi-code{font-size:.7rem;background:var(--card);padding:.1em .35em;border-radius:4px;border:1px solid var(--line);color:var(--text-soft)}.plc-status-card{animation:slideUp .45s ease-out .15s both;padding:0;overflow:hidden}.plc-status-section{padding:1.1rem 1rem 1.2rem}.plc-status-has-error{background:linear-gradient(180deg,#fff,#fff5f5)}.plc-status-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;margin-bottom:.85rem;padding:0 .1rem}.plc-status-title{font-size:1rem;font-weight:700;color:var(--text);margin:0 0 .2rem}.plc-status-sub{margin:0;font-size:.78rem;color:var(--text-muted);font-weight:500}.plc-status-summary{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:.25rem .55rem;border-radius:999px}.plc-status-summary.good{background:var(--ok-bg);color:var(--ok-dark);border:1px solid #a7f3d0}.plc-status-summary.bad{background:var(--err-bg);color:var(--err-dark);border:1px solid #fecaca}.plc-status-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:.55rem}.plc-status-cell{display:flex;align-items:center;gap:.5rem;padding:.55rem .65rem;background:var(--bg-elev);border-radius:10px;border:1px solid var(--line);font-size:.8rem;color:var(--text-soft);font-weight:500;transition:background var(--transition-fast),border-color var(--transition-fast),transform var(--transition-fast)}.plc-status-cell:hover{transform:translateY(-1px);border-color:var(--line-strong)}.plc-status-cell-on{background:var(--err-bg);border-color:#fecaca;color:var(--err-dark);animation:errorPulse 2s infinite}@keyframes errorPulse{0%,to{box-shadow:0 0 #dc262626}50%{box-shadow:0 0 0 4px #dc262600}}.plc-status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;transition:background var(--transition-fast),box-shadow var(--transition-fast)}.plc-status-dot-off{background:var(--ok);box-shadow:0 0 0 1px #0596694d}.plc-status-dot-on{background:var(--err);box-shadow:0 0 0 1px #dc262640}.unit-control-card{animation:slideUp .45s ease-out .2s both;display:flex;flex-direction:column;gap:1rem}.unit-control{display:flex;flex-direction:column;gap:.85rem}.unit-state-badge{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem .85rem;border-radius:999px;font-size:.85rem;font-weight:700;width:fit-content;border:1px solid transparent;transition:background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast)}.unit-state-badge.on{background:var(--ok-bg);color:var(--ok-dark);border-color:#a7f3d0}.unit-state-badge.off{background:#f1f5f9;color:var(--text-soft);border-color:var(--line)}.unit-state-badge.unknown{background:var(--warn-bg);color:#92400e;border-color:#fde68a}.unit-state-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.unit-state-badge.on .unit-state-dot{background:var(--ok);animation:pulse 2s infinite}.unit-state-badge.off .unit-state-dot{background:var(--text-muted)}.unit-state-badge.unknown .unit-state-dot{background:var(--warn)}.unit-actions{display:grid;grid-template-columns:1fr 1fr;gap:.75rem}.unit-btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;padding:.95rem .75rem;border-radius:14px;font-size:1rem;font-weight:700;font-family:inherit;cursor:pointer;border:1px solid transparent;transition:transform var(--transition-fast),box-shadow var(--transition-fast),filter var(--transition-fast),background var(--transition-fast),color var(--transition-fast);min-height:52px}.unit-btn:hover:not(:disabled){transform:translateY(-2px);filter:brightness(1.03)}.unit-btn:active:not(:disabled){transform:translateY(0) scale(.98)}.unit-btn:disabled{opacity:.5;cursor:not-allowed}.unit-btn-icon{font-size:1rem;line-height:1}.unit-btn-start{background:#f1f5f9;color:var(--text-soft);border-color:var(--line-strong)}.unit-btn-start.active{background:linear-gradient(135deg,#10b981 0%,var(--ok-dark) 100%);color:#fff;border-color:var(--ok-dark);box-shadow:0 6px 18px #05966940}.unit-btn-stop{background:#f1f5f9;color:var(--text-soft);border-color:var(--line-strong)}.unit-btn-stop.active{background:linear-gradient(135deg,#ef4444 0%,var(--err-dark) 100%);color:#fff;border-color:var(--err-dark);box-shadow:0 6px 18px #dc262640}.unit-btn-reset{background:linear-gradient(135deg,#f59e0b,#d97706);color:#fff;border-color:#d97706;box-shadow:0 4px 14px #d9770633;width:100%}.unit-meta{font-size:.78rem;color:var(--text-muted);font-weight:500;padding-top:.5rem;border-top:1px solid var(--line)}.journal-card{animation:slideUp .45s ease-out .25s both;padding:0;overflow:hidden}.journal-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;padding:1.1rem 1rem .85rem;border-bottom:1px solid var(--line);background:linear-gradient(180deg,#fafafa,#fff)}.journal-title{font-size:1rem;font-weight:700;color:var(--text);margin:0 0 .2rem}.journal-sub{margin:0;font-size:.78rem;color:var(--text-muted);font-weight:500;line-height:1.3}.journal-count{font-size:.75rem;font-weight:700;color:var(--text-muted);background:var(--bg-elev);padding:.2rem .55rem;border-radius:999px;border:1px solid var(--line)}.journal-empty{padding:1.25rem 1rem;margin:0;font-size:.85rem;color:var(--text-muted);text-align:center}.journal-list{margin:0;padding:0;list-style:none;max-height:320px;overflow-y:auto}.journal-row{display:grid;grid-template-columns:auto auto 1fr;gap:.6rem;align-items:center;padding:.65rem 1rem;border-bottom:1px solid var(--line);font-size:.85rem;transition:background var(--transition-fast);animation:slideIn .3s ease-out}.journal-row:hover{background:var(--bg-elev)}.journal-row:last-child{border-bottom:none}.journal-time{font-size:.72rem;color:var(--text-muted);font-variant-numeric:tabular-nums;white-space:nowrap}.journal-badge{font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:.2rem .45rem;border-radius:6px;white-space:nowrap}.journal-badge[data-kind=on],.journal-badge.on{background:var(--ok-bg);color:var(--ok-dark);border:1px solid #a7f3d0}.journal-badge[data-kind=off],.journal-badge.off{background:#f1f5f9;color:var(--text-soft);border:1px solid var(--line)}.journal-badge[data-kind=op],.journal-badge.op{background:var(--accent-soft);color:var(--accent-dark);border:1px solid #bae6fd}.journal-badge[data-kind=auto],.journal-badge.auto{background:#f3e8ff;color:#7e22ce;border:1px solid #e9d5ff}.journal-badge[data-kind=act],.journal-badge.act{background:var(--err-bg);color:var(--err-dark);border:1px solid #fecaca}.journal-badge[data-kind=clr],.journal-badge.clr{background:var(--ok-bg);color:var(--ok-dark);border:1px solid #a7f3d0}.journal-badge[data-kind=reset],.journal-badge.reset{background:var(--warn-bg);color:#92400e;border:1px solid #fde68a}.journal-text{color:var(--text);word-break:break-word;font-weight:500}.hmi-banner{margin-top:.85rem;padding:.7rem .85rem;border-radius:10px;font-size:.86rem;line-height:1.4;display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;border:1px solid transparent;animation:slideUp .3s ease-out}.hmi-banner-error{background:var(--err-bg);color:#991b1b;border-color:#fecaca}.hmi-banner-info{background:#eff6ff;color:#1e40af;border-color:#bfdbfe}.hmi-banner-warn{background:var(--warn-bg);color:#92400e;border-color:#fde68a;margin-top:.75rem}.hmi-banner button{margin-left:auto;padding:.35rem .8rem;background:#fff;border:1px solid var(--line);border-radius:8px;font-size:.8rem;font-weight:600;font-family:inherit;cursor:pointer;color:var(--text);transition:background var(--transition-fast),transform var(--transition-fast)}.hmi-banner button:hover{background:var(--bg-elev);transform:translateY(-1px)}.hmi-toast{position:fixed;bottom:max(1rem,env(safe-area-inset-bottom));left:50%;transform:translate(-50%) translateY(0);background:var(--text);color:#fff;padding:.7rem 1.2rem;border-radius:12px;font-size:.88rem;font-weight:500;z-index:100;box-shadow:var(--shadow-lg);max-width:min(92vw,420px);text-align:center;animation:toastSlide .3s ease-out}@keyframes toastSlide{0%{opacity:0;transform:translate(-50%) translateY(20px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.hmi-modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a73;display:flex;align-items:center;justify-content:center;z-index:200;padding:1rem;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);animation:fadeIn .2s ease-out}.hmi-modal{background:var(--card);border-radius:var(--radius);width:100%;max-width:440px;max-height:90vh;overflow-y:auto;box-shadow:var(--shadow-lg);border:1px solid var(--line);animation:modalScale .25s ease-out}.hmi-modal-wide{max-width:560px}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes modalScale{0%{opacity:0;transform:scale(.96) translateY(8px)}to{opacity:1;transform:scale(1) translateY(0)}}.hmi-modal h2{margin:0;padding:1.1rem 1.25rem .3rem;font-size:1.1rem;font-weight:700;letter-spacing:-.01em}.hmi-field{padding:0 1.25rem .8rem}.hmi-field label{display:block;font-size:.78rem;font-weight:600;color:var(--text-muted);margin-bottom:.35rem;text-transform:uppercase;letter-spacing:.04em}.hmi-field input,.hmi-field select{width:100%;padding:.7rem .85rem;border:1.5px solid var(--line);border-radius:var(--radius-sm);font-size:1rem;font-family:inherit;background:var(--bg-elev);color:var(--text);transition:border-color var(--transition-fast),box-shadow var(--transition-fast),background var(--transition-fast)}.hmi-field input:focus,.hmi-field select:focus{outline:none;border-color:var(--accent);background:var(--card);box-shadow:0 0 0 3px var(--accent-soft)}.hmi-field-row{display:grid;grid-template-columns:1fr 1fr;gap:.75rem}.hmi-modal-actions{display:flex;justify-content:flex-end;gap:.5rem;padding:.6rem 1.25rem 1.1rem}.hmi-modal-actions.spread{justify-content:space-between}.hmi-modal-actions button{padding:.55rem 1rem;border:1px solid var(--line);border-radius:10px;background:var(--bg-elev);color:var(--text-soft);font-family:inherit;font-weight:600;font-size:.88rem;cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast),transform var(--transition-fast)}.hmi-modal-actions button:hover{background:var(--card);border-color:var(--line-strong);color:var(--text);transform:translateY(-1px)}.hmi-modal-actions button.primary{background:var(--accent);border-color:var(--accent);color:#fff}.hmi-modal-actions button.primary:hover{background:var(--accent-dark);border-color:var(--accent-dark)}.hmi-modal-actions button.danger{background:var(--err-bg);border-color:#fecaca;color:var(--err-dark)}.hmi-modal-actions button.danger:hover{background:#fecaca;border-color:#fca5a5}.hmi-mgr-list{padding:0 1.25rem;display:flex;flex-direction:column;gap:.5rem;max-height:50vh;overflow-y:auto}.hmi-mgr-row{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.75rem;background:var(--bg-elev);border-radius:12px;border:1px solid var(--line);transition:transform var(--transition-fast),box-shadow var(--transition-fast)}.hmi-mgr-row:hover{transform:translateY(-1px);box-shadow:var(--shadow-md)}.hmi-mgr-name{font-weight:600;font-size:.92rem;color:var(--text)}.hmi-mgr-meta{font-size:.75rem;color:var(--text-muted);margin-top:.15rem}.hmi-mgr-actions{display:flex;gap:.4rem;flex-shrink:0}.hmi-mgr-actions button{padding:.35rem .7rem;font-size:.78rem;border-radius:8px;border:1px solid var(--line);background:var(--card);color:var(--text-soft);font-family:inherit;font-weight:600;cursor:pointer;transition:all var(--transition-fast)}.hmi-mgr-actions button:hover{background:var(--bg-elev);border-color:var(--line-strong)}.hmi-mgr-actions button.danger:hover{background:var(--err-bg);border-color:#fecaca;color:var(--err-dark)}.hmi-mgr-add{margin:1rem 1.25rem 0;width:calc(100% - 2.5rem)}@keyframes slideUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown{0%{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:translateY(0)}}@keyframes slideIn{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}.dash-root{background:linear-gradient(180deg,var(--bg) 0%,#f8fafc 100%);min-height:100dvh}.hmi-dash-shell{max-width:1100px}.dash-bar{flex-direction:column;align-items:flex-start;gap:.75rem;animation:slideDown .4s ease-out}.dash-bar-content{display:flex;flex-direction:column;gap:.6rem;width:100%}@media(min-width:520px){.dash-bar-content{flex-direction:row-reverse;align-items:center;justify-content:space-between}}.dash-filters-card{animation:slideUp .45s ease-out .05s both}.dash-filters{display:grid;grid-template-columns:1fr;gap:.75rem;margin-bottom:.85rem}@media(min-width:640px){.dash-filters{grid-template-columns:1.2fr 1fr 1fr}}.dash-field{padding:0}.dash-field select,.dash-field input{width:100%}.dash-periods{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;padding-top:.5rem;border-top:1px solid var(--line)}.dash-period-btn{padding:.55rem .95rem;border-radius:999px;border:1px solid var(--line);background:var(--bg-elev);color:var(--text-soft);font-family:inherit;font-size:.85rem;font-weight:600;cursor:pointer;transition:all var(--transition-fast)}.dash-period-btn:hover{background:var(--card);border-color:var(--accent);color:var(--accent-dark);transform:translateY(-1px)}.dash-period-btn-primary{background:var(--accent);border-color:var(--accent);color:#fff;margin-left:auto}.dash-period-btn-primary:hover{background:var(--accent-dark);border-color:var(--accent-dark);color:#fff}.dash-period-btn-primary:disabled{opacity:.6;cursor:not-allowed;transform:none}.dash-hint{margin:.75rem 0 0;font-size:.8rem;color:var(--text-muted);line-height:1.4}.dash-charts-grid{display:grid;grid-template-columns:1fr;gap:1rem}@media(min-width:900px){.dash-charts-grid{grid-template-columns:1fr 1fr}}.dash-chart-card{animation:slideUp .5s ease-out both;padding:1.1rem 1rem 1rem;display:flex;flex-direction:column;gap:1rem}.dash-chart-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}.dash-chart-title-group{display:flex;align-items:center;gap:.75rem}.dash-chart-icon{width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:1.25rem;flex-shrink:0}.dash-chart-title{margin:0 0 .1rem;font-size:1.1rem;font-weight:700;color:var(--text)}.dash-chart-sub{margin:0;font-size:.75rem;color:var(--text-muted);font-weight:500}.dash-chart-current{display:flex;align-items:baseline;gap:.2rem;flex-shrink:0}.dash-current-value{font-size:1.8rem;font-weight:700;letter-spacing:-.03em;line-height:1}.dash-current-unit{font-size:.95rem;font-weight:600;color:var(--text-muted)}.dash-stats-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:.5rem}@media(min-width:520px){.dash-stats-grid{grid-template-columns:repeat(4,1fr)}}.dash-stat{background:var(--bg-elev);border-radius:12px;padding:.65rem .75rem;border:1px solid var(--line);display:flex;flex-direction:column;gap:.15rem;transition:transform var(--transition-fast),box-shadow var(--transition-fast)}.dash-stat:hover{transform:translateY(-1px);box-shadow:var(--shadow)}.dash-stat-label{font-size:.65rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted)}.dash-stat-value{font-size:.95rem;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}.dash-chart-wrap{width:100%;min-height:320px;background:var(--bg-elev);border-radius:var(--radius-sm);border:1px solid var(--line);padding:.5rem;overflow:hidden}.dash-chart-meta{font-size:.72rem;color:var(--text-muted);text-align:center;margin-top:.5rem;font-weight:500}.dash-chart-wrap .recharts-legend-item{font-size:.82rem!important;font-weight:600!important;color:var(--text-soft)!important}.dash-chart-wrap .recharts-brush{border-radius:4px}.dash-chart-wrap .recharts-brush .recharts-brush-traveller rect{rx:3;ry:3;fill:var(--accent);stroke:var(--accent-dark);stroke-width:1}.dash-chart-wrap .recharts-brush .recharts-brush-slide{fill:#0ea5e914;stroke:#0ea5e933;stroke-width:1}.dash-chart-wrap .recharts-brush text{font-size:10px;fill:var(--text-muted);font-weight:500}.dash-tooltip{background:#fffffffa;border:1px solid var(--line);border-radius:12px;padding:.65rem .85rem;box-shadow:var(--shadow-lg);font-size:.85rem;min-width:160px}.dash-tooltip-time{font-weight:600;margin-bottom:.4rem;color:var(--text);font-size:.78rem;border-bottom:1px solid var(--line);padding-bottom:.3rem}.dash-tooltip-row{display:flex;justify-content:space-between;align-items:center;gap:1rem;margin-top:.25rem}.dash-tooltip-name{font-weight:600}.dash-tooltip-value{color:var(--text);font-weight:700}.dash-empty-chart{min-height:220px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;color:var(--text-muted);text-align:center;padding:1.5rem;background:var(--bg-elev);border-radius:var(--radius-sm);border:1px dashed var(--line-strong)}.dash-empty-icon{font-size:2rem;opacity:.6}.dash-empty-chart p{margin:0;font-weight:600;color:var(--text-soft)}.dash-empty-chart span{font-size:.8rem;max-width:32ch}@media(max-width:520px){.journal-row{grid-template-columns:1fr;gap:.2rem}.journal-badge{justify-self:start}.connection-bar-main{gap:.75rem 1rem}.dash-current-value{font-size:1.5rem}}.dev-root{background:linear-gradient(180deg,var(--bg) 0%,#f8fafc 100%);min-height:100dvh}.dev-shell{max-width:1100px}.dev-header{animation:slideDown .4s ease-out}.dev-stats-card{animation:slideUp .45s ease-out .05s both;padding:1rem}.dev-stats-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:.75rem}@media(min-width:640px){.dev-stats-grid{grid-template-columns:repeat(4,1fr)}}.dev-stat-card{display:flex;align-items:center;gap:.75rem;padding:.85rem 1rem;border-radius:14px;border:1px solid var(--line);background:var(--bg-elev);transition:transform var(--transition-fast),box-shadow var(--transition-fast)}.dev-stat-card:hover{transform:translateY(-2px);box-shadow:var(--shadow)}.dev-stat-icon{font-size:1.5rem}.dev-stat-body{display:flex;flex-direction:column;gap:.1rem}.dev-stat-value{font-size:1.5rem;font-weight:700;color:var(--text);line-height:1;font-variant-numeric:tabular-nums}.dev-stat-label{font-size:.75rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.03em}.dev-stat-card.dev-tone-danger .dev-stat-value{color:#dc2626}.dev-stat-card.dev-tone-warning .dev-stat-value{color:#d97706}.dev-stat-card.dev-tone-info .dev-stat-value{color:#2563eb}.dev-stat-card.dev-tone-success .dev-stat-value{color:#059669}.dev-section{animation:slideUp .5s ease-out both;padding:1.1rem 1rem 1rem}.dev-section-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-bottom:.85rem}.dev-h2{margin:0;font-size:1.1rem;font-weight:700;color:var(--text)}.dev-section-badge{padding:.25rem .75rem;border-radius:999px;background:var(--bg-elev);border:1px solid var(--line);font-size:.8rem;font-weight:700;color:var(--text-soft);min-width:2rem;text-align:center}.dev-zones-grid{display:grid;grid-template-columns:1fr;gap:1rem}.dev-zone-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:1rem;box-shadow:var(--shadow-sm);transition:transform var(--transition-fast),box-shadow var(--transition-fast);animation:slideUp .4s ease-out both}.dev-zone-card:hover{transform:translateY(-2px);box-shadow:var(--shadow)}.dev-zone-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:.75rem;margin-bottom:.85rem;padding-bottom:.85rem;border-bottom:1px solid var(--line)}.dev-zone-name{margin:0 0 .15rem;font-size:1.1rem;font-weight:700;color:var(--text)}.dev-zone-meta{margin:0;font-size:.78rem;color:var(--text-muted)}.dev-unit-pill{display:inline-flex;align-items:center;gap:.4rem;padding:.45rem .8rem;border-radius:999px;font-size:.8rem;font-weight:700;border:1px solid transparent}.dev-unit-pill.dev-unit-on{background:#d1fae5;color:#047857;border-color:#a7f3d0}.dev-unit-pill.dev-unit-off{background:#f1f5f9;color:#64748b;border-color:#e2e8f0}.dev-unit-dot{width:8px;height:8px;border-radius:50%;background:currentColor;box-shadow:0 0 8px currentColor}.dev-zone-info{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem}.dev-info-row{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem 1rem}.dev-info-label{font-size:.75rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.03em;min-width:110px}.dev-info-value{font-size:.9rem;font-weight:600;color:var(--text)}.dev-info-muted{font-weight:500;color:var(--text-muted)}.dev-mode-badge{display:inline-flex;align-items:center;gap:.35rem;padding:.35rem .75rem;border-radius:999px;font-size:.8rem;font-weight:700;border:1px solid currentColor}.dev-mode-dot{width:7px;height:7px;border-radius:50%}.dev-zone-controls{display:flex;flex-direction:column;gap:.85rem}.dev-control-label{font-size:.7rem;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.dev-setpoint-group,.dev-mode-group,.dev-action-group{display:flex;flex-direction:column;gap:.4rem}.dev-setpoint-btns{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap}.dev-setpoint-value{min-width:52px;text-align:center;font-size:1.1rem;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}.dev-mode-segment{display:flex;flex-wrap:wrap;gap:.4rem}.dev-mode-btn{padding:.55rem .85rem;border-radius:10px;border:1px solid var(--line);background:var(--bg-elev);color:var(--text-soft);font-family:inherit;font-size:.82rem;font-weight:600;cursor:pointer;transition:all var(--transition-fast);display:inline-flex;align-items:center;gap:.3rem}.dev-mode-btn:hover:not(.active){background:var(--card);border-color:var(--accent);color:var(--accent-dark);transform:translateY(-1px)}.dev-mode-btn.active{box-shadow:var(--shadow-sm)}.dev-action-btns{display:flex;flex-wrap:wrap;gap:.5rem}.dev-btn{padding:.55rem 1rem;border-radius:10px;border:1px solid transparent;font-family:inherit;font-size:.85rem;font-weight:600;cursor:pointer;transition:all var(--transition-fast);display:inline-flex;align-items:center;gap:.35rem}.dev-btn:hover{transform:translateY(-1px);box-shadow:var(--shadow-sm)}.dev-btn-step{background:var(--bg-elev);color:var(--text-soft);border:1px solid var(--line);min-width:48px;justify-content:center}.dev-btn-step:hover{background:var(--card);border-color:var(--accent);color:var(--accent-dark)}.dev-btn-start{background:#059669;color:#fff}.dev-btn-start:hover{background:#047857}.dev-btn-stop{background:#dc2626;color:#fff}.dev-btn-stop:hover{background:#b91c1c}.dev-btn-reset{background:#f59e0b;color:#fff}.dev-btn-reset:hover{background:#d97706}.dev-table-wrap{overflow-x:auto;border-radius:var(--radius-sm);border:1px solid var(--line);background:var(--bg-elev)}.dev-table{width:100%;border-collapse:collapse;font-size:.85rem}.dev-table th,.dev-table td{padding:.7rem .85rem;text-align:left;border-bottom:1px solid var(--line)}.dev-table th{background:var(--bg-elev);color:var(--text-muted);font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.03em;position:sticky;top:0;z-index:1}.dev-table-row{animation:slideUp .35s ease-out both}.dev-table-row:hover{background:#0ea5e90a}.dev-table-row:last-child td{border-bottom:none}.dev-td-time{white-space:nowrap;color:var(--text-muted);font-variant-numeric:tabular-nums;font-size:.78rem}.dev-td-zone{font-weight:600;color:var(--text-soft)}.dev-td-payload{color:var(--text);font-size:.8rem;word-break:break-word;max-width:420px}.dev-event-badge{display:inline-flex;align-items:center;padding:.35rem .7rem;border-radius:999px;font-size:.75rem;font-weight:700;border:1px solid transparent;white-space:nowrap}.dev-event-badge.dev-tone-neutral{background:#f1f5f9;color:#475569;border-color:#e2e8f0}.dev-event-badge.dev-tone-success{background:#d1fae5;color:#047857;border-color:#a7f3d0}.dev-event-badge.dev-tone-danger{background:#fee2e2;color:#991b1b;border-color:#fecaca}.dev-event-badge.dev-tone-warning{background:#fef3c7;color:#92400e;border-color:#fde68a}.dev-event-badge.dev-tone-info{background:#dbeafe;color:#1e40af;border-color:#bfdbfe}.dev-event-badge.dev-tone-accent{background:#ede9fe;color:#5b21b6;border-color:#ddd6fe}.dev-empty{min-height:160px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;color:var(--text-muted);text-align:center;padding:1.5rem;background:var(--bg-elev);border-radius:var(--radius-sm);border:1px dashed var(--line-strong)}.dev-empty-icon{font-size:2rem;opacity:.6}.dev-empty p{margin:0;font-weight:600;color:var(--text-soft)}@media(max-width:640px){.dev-table th,.dev-table td{padding:.6rem .65rem}.dev-td-payload{max-width:200px}.dev-mode-btn{padding:.5rem .65rem;font-size:.78rem}}.climate-login-page{--climate-sky: #e0f2fe;--climate-deep: #0c4a6e;--climate-water: #0ea5e9;--climate-foam: #f0f9ff;--climate-text: #0f172a;--climate-soft: #475569;--climate-muted: #64748b;--climate-card: rgba(255, 255, 255, .92);--climate-border: rgba(186, 230, 253, .7);--climate-ok: #059669;--climate-err: #b91c1c;--climate-shadow: 0 20px 60px -10px rgba(14, 74, 110, .18), 0 0 0 1px rgba(186, 230, 253, .5);--climate-glow: 0 0 40px rgba(14, 165, 233, .15);min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:1.25rem;position:relative;overflow:hidden;background:linear-gradient(160deg,var(--climate-sky) 0%,#f8fafc 60%,#ecfdf5 100%);font-family:var(--font);color:var(--climate-text)}.climate-login-surface{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:radial-gradient(ellipse 70% 50% at 15% 10%,rgba(56,189,248,.16),transparent 55%),radial-gradient(ellipse 60% 40% at 90% 85%,rgba(5,150,105,.1),transparent 50%),radial-gradient(ellipse 50% 30% at 50% 0%,rgba(14,165,233,.08),transparent 50%)}.climate-login-wave{position:absolute;left:0;right:0;bottom:0;height:28vh;min-height:180px;pointer-events:none;z-index:0}.climate-login-grid{position:relative;z-index:1;display:grid;grid-template-columns:1fr;gap:1.5rem;width:100%;max-width:980px;align-items:center;animation:climate-in .6s ease-out}@keyframes climate-in{0%{opacity:0;transform:translateY(24px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}@media(min-width:900px){.climate-login-grid{grid-template-columns:1.15fr 1fr;gap:2.5rem}}.climate-login-glass{position:relative;border-radius:24px;background:var(--climate-card);box-shadow:var(--climate-shadow),var(--climate-glow);border:1px solid var(--climate-border);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);overflow:hidden}.climate-login-glass-accent{position:absolute;top:0;left:0;right:0;height:4px;background:linear-gradient(90deg,#0ea5e9,#38bdf8 40%,#34d399)}.climate-login-glass-inner{padding:1.75rem 1.5rem 2rem;display:flex;flex-direction:column;gap:1.25rem}.climate-login-glass-brand{display:flex;align-items:center;gap:.9rem}.climate-login-logo{width:58px;height:58px;flex-shrink:0;filter:drop-shadow(0 4px 14px rgba(14,165,233,.35))}@media(min-width:900px){.climate-login-logo{width:72px;height:72px}}.climate-login-glass-overline{margin:0 0 .15rem;font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--climate-water)}.climate-login-glass-title{margin:0;font-size:clamp(1.4rem,3.5vw,1.85rem);font-weight:700;letter-spacing:-.02em;color:var(--climate-deep);line-height:1.15}.climate-login-glass-text{margin:0;font-size:.92rem;line-height:1.55;color:var(--climate-soft);max-width:44ch}.climate-tiles{display:grid;grid-template-columns:repeat(2,1fr);gap:.75rem}.climate-tile{display:flex;align-items:center;gap:.7rem;padding:.85rem .75rem;border-radius:16px;background:linear-gradient(145deg,#f8fafc,#f0f9ff);border:1px solid rgba(186,230,253,.8);box-shadow:0 2px 8px #0e4a6e0a;transition:transform .15s ease,box-shadow .15s ease}.climate-tile:hover{transform:translateY(-2px);box-shadow:0 6px 16px #0e4a6e14}.climate-tile-icon{font-size:1.25rem;line-height:1}.climate-tile-meta{display:flex;flex-direction:column;gap:.1rem}.climate-tile-label{font-size:.65rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--climate-muted)}.climate-tile-value{font-size:1.05rem;font-weight:700;color:var(--climate-deep);letter-spacing:-.02em}.climate-login-card-wrap{display:flex;justify-content:center}.climate-login-card{width:100%;max-width:420px;border-radius:24px;background:var(--climate-card);box-shadow:var(--climate-shadow);border:1px solid var(--climate-border);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);overflow:hidden}.climate-login-card-accent-line{height:4px;background:linear-gradient(90deg,#34d399,#0ea5e9 60%,#0ea5e9)}.climate-login-card-body{padding:1.65rem 1.5rem 1.5rem}.climate-login-card-header{margin-bottom:1.4rem}.climate-login-card-title{margin:0 0 .25rem;font-size:1.35rem;font-weight:700;letter-spacing:-.02em;color:var(--climate-deep)}.climate-login-card-sub{margin:0;font-size:.85rem;color:var(--climate-muted)}.climate-login-form{display:flex;flex-direction:column;gap:1rem}.climate-login-field{display:flex;flex-direction:column;gap:.4rem}.climate-login-label{font-size:.78rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--climate-soft)}.climate-login-input-shell{position:relative;display:flex;align-items:center}.climate-login-field-icon{position:absolute;left:.95rem;width:20px;height:20px;color:var(--climate-water);pointer-events:none;transition:color .2s ease}.climate-login-input-shell input{width:100%;padding:.85rem 2.8rem .85rem 2.75rem;border:1.5px solid var(--climate-border);border-radius:14px;font-size:1rem;font-family:inherit;background:#ffffffbf;color:var(--climate-text);transition:border-color .2s ease,box-shadow .2s ease,background .2s ease}.climate-login-input-shell input:focus{outline:none;border-color:var(--climate-water);background:#fff;box-shadow:0 0 0 4px #0ea5e91f}.climate-login-input-shell input:focus+.climate-login-field-icon,.climate-login-input-shell:focus-within .climate-login-field-icon{color:var(--climate-deep)}.climate-login-input-shell input::placeholder{color:#94a3b8}.climate-login-eye{position:absolute;right:.6rem;width:36px;height:36px;display:flex;align-items:center;justify-content:center;border:none;background:transparent;color:var(--climate-muted);cursor:pointer;border-radius:10px;transition:color .15s ease,background .15s ease}.climate-login-eye:hover{color:var(--climate-water);background:#0ea5e914}.climate-login-eye-icon{width:20px;height:20px}.climate-login-error{display:flex;align-items:center;gap:.5rem;padding:.75rem 1rem;border-radius:12px;background:#fef2f2;border:1px solid #fecaca;color:var(--climate-err);font-size:.85rem;font-weight:500}.climate-login-error-icon{font-size:1.1rem;flex-shrink:0}.climate-login-submit{width:100%;padding:.95rem 1.25rem;border:none;border-radius:14px;font-size:1rem;font-weight:700;font-family:inherit;color:#fff;cursor:pointer;background:linear-gradient(135deg,#0ea5e9,#0284c7);box-shadow:0 6px 18px #0284c74d,inset 0 1px #fff3;transition:transform .15s ease,box-shadow .15s ease,filter .15s ease;display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:52px}.climate-login-submit:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 10px 24px #0284c761,inset 0 1px #fff3;filter:brightness(1.03)}.climate-login-submit:active:not(:disabled){transform:translateY(0)}.climate-login-submit:disabled{opacity:.65;cursor:not-allowed}.climate-login-spinner{width:18px;height:18px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;animation:spin .75s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.climate-login-card-footer{margin-top:1.25rem;padding-top:1rem;border-top:1px solid var(--climate-border);text-align:center;font-size:.72rem;font-weight:600;color:var(--climate-muted);letter-spacing:.02em}.climate-login-svg{display:block}@media(max-width:899px){.climate-login-page{padding:2rem 1rem 1rem;align-items:flex-start}.climate-login-glass-inner{padding:1.35rem 1.25rem 1.5rem;gap:1rem}.climate-login-glass-text{display:none}.climate-tiles{grid-template-columns:repeat(4,1fr)}.climate-tile{flex-direction:column;text-align:center;padding:.6rem .4rem}.climate-tile-label,.climate-tile-value{font-size:.62rem}.climate-login-card-body{padding:1.35rem 1.25rem 1.25rem}.climate-login-wave{height:22vh}}@media(max-width:520px){.climate-tiles{grid-template-columns:repeat(2,1fr)}}@media(prefers-reduced-motion:reduce){.climate-login-grid,.climate-login-tile{animation:none;transition:none}.climate-login-submit:hover:not(:disabled){transform:none}}@media print{.hmi-bar-actions,.hmi-toast,.hmi-modal-backdrop,.hmi-pull-hint{display:none}}
