:root{--ink: #0c1017;--surface: #121823;--raised: #182030;--line: #263044;--line-soft: rgba(255, 255, 255, .07);--text: #e8edf5;--muted: #8b97ab;--faint: #5d6a80;--accent: #f2b24a;--accent-ink: #1b1403;--ok: #5fd38d;--warn: #f2b24a;--crit: #ff6b6b;--water: #5bc0eb;--energy: #f2b24a;--radius: 14px;--rail-w: 20rem;--top-h: 5.4rem}html,body{height:100%}body{background:var(--ink);color:var(--text);font-family:IBM Plex Sans,system-ui,-apple-system,Segoe UI,sans-serif;font-feature-settings:"tnum"}::selection{background:#f2b24a4d}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.glass{background:var(--surface);border:1px solid var(--line);box-shadow:0 10px 30px #00000059}.glass-soft{background:var(--raised);border:1px solid var(--line-soft)}.vignette{background:radial-gradient(ellipse at center,transparent 62%,rgba(5,8,14,.5) 100%)}.gradient-text{color:var(--text)}.app-version{font-size:.6rem;font-weight:600;letter-spacing:.02em;line-height:1;padding:.15rem .35rem;border-radius:999px;color:var(--muted, #94a3b8);border:1px solid rgba(148,163,184,.28);font-variant-numeric:tabular-nums}.logo-mark{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:.6rem;color:var(--accent-ink);background:var(--accent)}.logo-mark svg{width:1.15rem;height:1.15rem}.logo-lg{width:3.4rem;height:3.4rem;border-radius:1rem;animation:float 2.4s ease-in-out infinite}.logo-lg svg{width:2rem;height:2rem}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}.conn-badge{display:inline-flex;align-items:center;gap:.4rem;padding:.28rem .7rem;border-radius:999px;font-size:.68rem;font-weight:600;letter-spacing:.03em;border:1px solid}.conn-dot{width:.45rem;height:.45rem;border-radius:999px;background:currentColor}.conn-demo{color:var(--warn);border-color:#f2b24a66;background:#f2b24a14}.conn-demo .conn-dot{animation:blink 1.6s ease-in-out infinite}.conn-live{color:var(--ok);border-color:#5fd38d66;background:#5fd38d14}@keyframes blink{0%,to{opacity:1}50%{opacity:.35}}.health-badge{display:inline-flex;align-items:center;gap:.45rem;padding:.28rem .75rem;border-radius:999px;font-size:.68rem;border:1px solid;transition:color .3s,border-color .3s,background .3s}.health-pulse{width:.5rem;height:.5rem;border-radius:999px;background:currentColor}.health-safe{color:var(--ok);border-color:#5fd38d59;background:#5fd38d12}.health-warning{color:var(--warn);border-color:#f2b24a66;background:#f2b24a14}.health-warning .health-pulse{animation:blink 1.2s infinite}.health-critical{color:var(--crit);border-color:#ff6b6b73;background:#ff6b6b1a}.health-critical .health-pulse{animation:blink .7s infinite}.rail{position:fixed;z-index:20;top:var(--top-h);bottom:.9rem;width:var(--rail-w);max-width:calc(100vw - 1.5rem);display:flex;flex-direction:column;gap:.6rem;pointer-events:none}.rail-left{left:.9rem}.rail-right{right:.9rem}.rail>.card{pointer-events:auto}.card{display:flex;flex-direction:column;min-height:0;flex:0 1 auto}.card-surface{display:flex;flex-direction:column;min-height:0;flex:1 1 auto;border-radius:var(--radius);overflow:hidden}.card.panel-collapsed{flex:0 0 auto}.panel{transition:opacity .25s ease}.panel-header{display:flex;align-items:center;justify-content:space-between;padding:.7rem .75rem .7rem 1rem;border-bottom:1px solid var(--line-soft);flex-shrink:0;cursor:pointer;-webkit-user-select:none;user-select:none}.panel-header:hover .panel-title{color:var(--text)}.panel-collapsed .panel-header{border-bottom-color:transparent}.panel-title{font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.12em;color:#b4bfd0;transition:color .2s}.panel-body{padding:.8rem 1rem 1rem;overflow-y:auto;flex:1 1 auto;min-height:0;overscroll-behavior:contain}.collapse-btn{color:var(--muted);padding:.3rem;border-radius:.5rem;flex-shrink:0;transition:color .2s,background .2s}.collapse-btn:hover{color:var(--text);background:#ffffff12}.collapse-btn svg{width:1rem;height:1rem;display:block;transition:transform .25s}.collapse-btn.chevron-up svg{transform:rotate(180deg)}.panel-collapsed .panel-body{display:none}.cam-toolbar{position:fixed;z-index:25;left:50%;bottom:.9rem;transform:translate(-50%);display:flex;align-items:center;gap:.25rem;padding:.3rem;background:var(--surface);border:1px solid var(--line);border-radius:999px;box-shadow:0 10px 30px #0006;max-width:calc(100vw - 1.5rem)}.cam-btn{display:inline-flex;align-items:center;gap:.4rem;padding:.45rem .8rem;border-radius:999px;border:0;font-size:.72rem;font-weight:600;color:#c4cede;background:transparent;cursor:pointer;transition:background .18s,color .18s;white-space:nowrap}.cam-btn svg{width:1rem;height:1rem;flex-shrink:0}.cam-btn:hover:not(:disabled){background:#ffffff14;color:var(--text)}.cam-btn:disabled{opacity:.4;cursor:not-allowed}.cam-btn.cam-icon{padding:.45rem}.cam-btn[aria-pressed=true],.cam-btn.cam-on{background:var(--accent);color:var(--accent-ink)}.cam-sep{width:1px;height:1.2rem;background:var(--line);margin:0 .15rem}.cam-hint{position:fixed;z-index:24;left:50%;bottom:4.1rem;transform:translate(-50%);font-size:.68rem;color:var(--muted);text-align:center;pointer-events:none;background:#0c1017d1;padding:.3rem .7rem;border-radius:999px;transition:opacity .6s ease;max-width:calc(100vw - 1.5rem)}.cam-hint.cam-hint-hidden{opacity:0}.panel-body::-webkit-scrollbar{width:5px}.panel-body::-webkit-scrollbar-thumb{background:#94a3b840;border-radius:4px}.panel-body::-webkit-scrollbar-track{background:transparent}.device-room-group{scroll-margin-top:.5rem}.device-room-header{width:100%;display:flex;align-items:center;justify-content:space-between;padding:.15rem .25rem .4rem;cursor:pointer}.device-room-header:hover span:first-child{color:#94a3b8}.device-room-highlight .device-room-header span:first-child{color:#f6cf8a}.device-room-highlight .device-card{border-color:#f2b24a4d}.device-card:hover{transform:translateY(-1px);box-shadow:0 8px 24px #02061766}.device-icon svg{width:1.15rem;height:1.15rem}.switch{position:relative;display:inline-block;width:2.4rem;height:1.3rem;flex-shrink:0}.switch input{opacity:0;width:0;height:0}.switch .slider-ui{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:999px;cursor:pointer;background:#64748b66;transition:all .25s;border:1px solid rgba(255,255,255,.1)}.switch .slider-ui:before{content:"";position:absolute;left:2px;top:2px;width:.95rem;height:.95rem;border-radius:999px;background:#e2e8f0;transition:transform .25s}.switch input:checked+.slider-ui{background:var(--accent)}.switch input:checked+.slider-ui:before{transform:translate(1.1rem)}.switch-sm{width:2rem;height:1.1rem}.switch-sm .slider-ui:before{width:.78rem;height:.78rem}.switch-sm input:checked+.slider-ui:before{transform:translate(.9rem)}.range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;height:4px;border-radius:4px;background:#fbbf244d;outline:none}.range-input::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:13px;height:13px;border-radius:50%;background:#fbbf24;cursor:pointer;border:2px solid #0b1120;box-shadow:0 0 8px #fbbf2499;transition:transform .15s}.range-input::-webkit-slider-thumb:hover{transform:scale(1.25)}.range-input::-moz-range-thumb{width:13px;height:13px;border-radius:50%;background:#fbbf24;cursor:pointer;border:2px solid #0b1120}.range-cool{background:#38bdf84d}.range-cool::-webkit-slider-thumb{background:#38bdf8;box-shadow:0 0 8px #38bdf899}.range-cool::-moz-range-thumb{background:#38bdf8}.color-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:2rem;height:1.4rem;border:1px solid rgba(255,255,255,.15);border-radius:.45rem;background:transparent;cursor:pointer;padding:1px}.color-input::-webkit-color-swatch-wrapper{padding:0}.color-input::-webkit-color-swatch{border:none;border-radius:.3rem}.color-input::-moz-color-swatch{border:none;border-radius:.3rem}.valve-open{background:#22c55e1f;color:#4ade80;border:1px solid rgba(34,197,94,.3)}.valve-open:hover{background:#22c55e33}.valve-closed{background:#ef44441f;color:#f87171;border:1px solid rgba(239,68,68,.3)}.meter-load{height:4px;border-radius:999px;background:#64748b40;overflow:hidden}.meter-load span{display:block;height:100%;border-radius:999px;background:#22d3ee;transition:width .4s}.meter-load .meter-load-warn{background:#f59e0b}.meter-load .meter-load-crit{background:#ef4444}.meter-badge{font-size:10px;line-height:1;padding:3px 6px;border-radius:999px;color:#cbd5e1;background:#64748b33;border:1px solid rgba(148,163,184,.25)}.meter-badge-warn{color:#fbbf24;background:#f59e0b1f;border-color:#f59e0b4d}.meter-badge-crit{color:#f87171;background:#ef44441f;border-color:#ef44444d}.dev-seg{font-size:11px;padding:6px 8px;border-radius:8px;color:#cbd5e1;white-space:nowrap;background:#64748b2e;border:1px solid rgba(148,163,184,.25);transition:all .2s}.dev-seg:hover{background:#64748b4d}.dev-seg-on{color:#4ade80;background:#22c55e1f;border-color:#22c55e59}.dev-seg-alarm{color:#f87171;background:#ef44441f;border-color:#ef444459}.dev-source{width:auto;max-width:11rem;padding:4px 8px;font-size:11px}.valve-closed:hover{background:#ef444433}.stat-label{display:inline-flex;align-items:center;gap:.35rem;font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:#64748b}.stat-value{font-size:1.05rem;font-weight:800;font-variant-numeric:tabular-nums}.spark{width:100%;height:44px;display:block;margin-top:.4rem}.emergency-btn{width:100%;display:flex;align-items:center;justify-content:center;gap:.5rem;padding:.7rem .8rem;border-radius:.8rem;font-size:.66rem;font-weight:800;letter-spacing:.06em;color:#fecaca;background:linear-gradient(135deg,#dc262647,#991b1b59);border:1px solid rgba(248,113,113,.45);box-shadow:0 0 18px #dc262640,inset 0 1px #ffffff14;transition:all .2s;cursor:pointer}.emergency-btn:hover{filter:brightness(1.2);box-shadow:0 0 26px #dc262673}.emergency-btn.btn-pressed{transform:scale(.96)}.emergency-btn.emergency-done{background:#64748b26;color:#94a3b8;border-color:#94a3b84d;box-shadow:none}.alert-item{border-radius:.75rem;padding:.55rem .7rem;border:1px solid;animation:slide-in .35s ease both;background:#ffffff0a}.alert-info{border-color:#f2b24a40}.alert-info .alert-sev{color:#f6cf8a}.alert-warning{border-color:#fbbf244d;background:#fbbf240d}.alert-warning .alert-sev{color:#fbbf24}.alert-critical{border-color:#fb718566;background:#fb718512}.alert-critical .alert-sev{color:#fb7185}.alert-sev{font-size:.58rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;padding-top:.15rem}.alert-resolved{opacity:.45}.alert-resolve{font-size:.6rem;font-weight:700;color:#f6cf8a;padding:.2rem .5rem;border-radius:.45rem;border:1px solid rgba(165,180,252,.3);transition:all .2s}.alert-resolve:hover{background:#a5b4fc1f}@keyframes slide-in{0%{opacity:0;transform:translate(14px)}to{opacity:1;transform:none}}.automation-item{transition:all .25s}.automation-item:hover{border-color:#ffffff26}.automation-off{opacity:.55}.room-label{position:absolute;top:0;left:0;display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .7rem;border-radius:999px;background:#0f172ab8;border:1px solid rgba(255,255,255,.12);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);font-size:.66rem;font-weight:700;letter-spacing:.05em;color:#e2e8f0;white-space:nowrap;transition:opacity .2s,border-color .25s,box-shadow .25s;will-change:transform}.room-label-dot{width:.4rem;height:.4rem;border-radius:999px;background:#f2b24a;transition:opacity .3s}.room-label-active{border-color:#f2b24a99;color:#fbe3b3}#toasts{z-index:90}.toast{transform:translate(120%);opacity:0;transition:transform .35s cubic-bezier(.22,1,.36,1),opacity .3s}.toast-in{transform:none;opacity:1}.toast-out{transform:translate(120%);opacity:0}.toast-icon svg{width:1.1rem;height:1.1rem}.toast-icon{flex-shrink:0;padding-top:.05rem}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:55;display:flex;align-items:center;justify-content:center;background:#02061799;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);opacity:0;pointer-events:none;transition:opacity .25s;padding:1rem}.modal-open{opacity:1;pointer-events:auto}.modal-card{transform:translateY(12px) scale(.97);transition:transform .3s cubic-bezier(.22,1,.36,1);max-height:calc(100vh - 3rem);overflow-y:auto}.modal-open .modal-card{transform:none}.form-label{display:block;font-size:.68rem;font-weight:600;color:#94a3b8;margin-bottom:.3rem}.form-input{width:100%;border-radius:.65rem;padding:.5rem .7rem;background:#ffffff0f;border:1px solid rgba(255,255,255,.12);font-size:.8rem;color:#e2e8f0;outline:none;transition:border-color .2s,box-shadow .2s}.form-input:focus{border-color:#f2b24a8c;box-shadow:0 0 0 3px #f2b24a1f}.form-input option,.form-input optgroup{background:#0f172a;color:#e2e8f0}select.form-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%2394a3b8' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .6rem center;padding-right:1.7rem}#loading{transition:opacity .5s ease}#loading.loading-done{opacity:0;pointer-events:none}#scene-container,#room-labels,.vignette,header,.rail,.cam-toolbar,.cam-hint{transition:opacity .45s ease}body:not(.authenticated) #scene-container,body:not(.authenticated) #room-labels,body:not(.authenticated) .vignette,body:not(.authenticated) header,body:not(.authenticated) .rail,body:not(.authenticated) .cam-toolbar,body:not(.authenticated) .cam-hint{opacity:0;visibility:hidden;pointer-events:none}.login-screen{position:fixed;top:0;right:0;bottom:0;left:0;z-index:58;display:flex;align-items:center;justify-content:center;padding:1rem;background:#0c1017e6;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:opacity .35s ease,visibility .35s ease}.login-screen.login-hidden{opacity:0;visibility:hidden;pointer-events:none}.login-card{animation:login-rise .5s cubic-bezier(.22,1,.36,1) both}@keyframes login-rise{0%{opacity:0;transform:translateY(16px) scale(.98)}to{opacity:1;transform:none}}.login-tabs{display:grid;grid-template-columns:1fr 1fr;gap:.25rem;padding:.25rem;border-radius:.75rem;background:#ffffff0d;border:1px solid rgba(255,255,255,.07)}.login-tab{padding:.5rem .75rem;border-radius:.55rem;font-size:.78rem;font-weight:600;color:#94a3b8;transition:all .2s;cursor:pointer}.login-tab:hover{color:#cbd5e1}.login-tab-active{color:#fff;background:#f2b24a47}.password-toggle{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);padding:.3rem;border-radius:.45rem;color:#64748b;transition:color .2s,background .2s;cursor:pointer}.password-toggle:hover{color:#e2e8f0;background:#ffffff0f}.login-error{font-size:.72rem;font-weight:600;color:#fda4af;background:#fb718514;border:1px solid rgba(251,113,133,.3);border-radius:.6rem;padding:.5rem .7rem}.login-info{font-size:.72rem;font-weight:600;color:#f6cf8a;background:#f2b24a14;border:1px solid rgba(242,178,74,.3);border-radius:.6rem;padding:.5rem .7rem}.login-view-title{font-size:.95rem;font-weight:800;color:#f1f5f9;text-align:center;margin-bottom:.3rem;letter-spacing:-.01em}.login-view-sub{font-size:.72rem;color:#94a3b8;text-align:center;line-height:1.55;margin-bottom:1rem}.login-link{font-size:.7rem;font-weight:600;color:#f6cf8a;background:none;border:none;padding:0;cursor:pointer;transition:color .2s}.login-link:hover{color:#fbe3b3;text-decoration:underline}.login-back{display:block;margin:.9rem auto 0;color:#94a3b8}.login-back:hover{color:#e2e8f0;text-decoration:none}.login-success-icon{width:3rem;height:3rem;margin:.25rem auto .9rem;border-radius:999px;display:flex;align-items:center;justify-content:center;color:#34d399;background:#34d3991f;border:1px solid rgba(52,211,153,.35);box-shadow:0 0 24px #34d3992e}.shake{animation:shake .4s ease}@keyframes shake{0%,to{transform:translate(0)}25%{transform:translate(-5px)}75%{transform:translate(5px)}}.login-spinner{width:.95rem;height:.95rem;border-radius:50%;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.user-chip{display:inline-flex;align-items:center;gap:.5rem;padding:.25rem .4rem .25rem .25rem;border-radius:999px;border:1px solid rgba(255,255,255,.1);background:#ffffff0d}.user-avatar{width:1.6rem;height:1.6rem;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;font-size:.7rem;font-weight:800;color:#0b1120;background:var(--accent);color:var(--accent-ink)}.logout-btn{display:inline-flex;align-items:center;gap:.3rem;padding:.3rem .55rem;border-radius:999px;font-size:.65rem;font-weight:700;color:#fda4af;border:1px solid rgba(251,113,133,.3);background:#fb71850f;transition:all .2s;cursor:pointer}.logout-btn:hover{background:#fb718529}.logout-btn:disabled{opacity:.5;cursor:wait}.fp-open-btn{display:inline-flex;align-items:center;gap:.35rem;padding:.34rem .75rem;border-radius:999px;font-size:.68rem;font-weight:700;letter-spacing:.03em;color:#f6cf8a;border:1px solid rgba(242,178,74,.35);background:#f2b24a14;transition:all .2s;cursor:pointer}.fp-open-btn:hover{background:#f2b24a2e;color:#fbe3b3}.fp-card{width:min(62rem,calc(100vw - 2rem));height:min(38rem,calc(100vh - 3rem));display:flex;flex-direction:column;padding:0;overflow:hidden}.modal-open .fp-card{transform:none}.fp-toolbar{display:flex;align-items:center;justify-content:space-between;gap:.8rem;padding:.85rem 1.1rem;border-bottom:1px solid rgba(255,255,255,.08);flex-wrap:wrap}.fp-actions{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.fp-btn{display:inline-flex;align-items:center;gap:.35rem;padding:.42rem .8rem;border-radius:.65rem;font-size:.72rem;font-weight:700;cursor:pointer;border:1px solid rgba(255,255,255,.12);transition:all .2s}.fp-btn:disabled{opacity:.55;cursor:wait}.fp-btn-ghost{color:#cbd5e1;background:#ffffff0d}.fp-btn-ghost:hover{background:#ffffff1a}.fp-btn-primary{color:#fff;border-color:transparent;background:linear-gradient(90deg,#6366f1,#06b6d4);box-shadow:0 6px 18px #4338ca59}.fp-btn-primary:hover{filter:brightness(1.12)}.fp-btn-danger{justify-content:center;color:#fda4af;border-color:#fb718559;background:#fb718514}.fp-btn-danger:hover{background:#fb71852e}.fp-body{display:flex;flex:1;min-height:0}.fp-canvas-wrap{position:relative;flex:1;min-width:0;background:#0a0f1e}#fp-canvas{display:block;width:100%;height:100%;touch-action:none}.fp-form{width:15rem;flex-shrink:0;display:flex;flex-direction:column;gap:.8rem;padding:1rem;border-left:1px solid rgba(255,255,255,.08);background:#ffffff05;overflow-y:auto}.fp-color-input{width:100%;height:2.2rem;padding:.15rem;border-radius:.65rem;cursor:pointer;background:#ffffff0f;border:1px solid rgba(255,255,255,.12)}.fp-canvas-wrap.room-overlap-flash #fp-canvas{animation:fp-flash .65s ease}@keyframes fp-flash{0%,to{box-shadow:inset 0 0 #ef444400}35%{box-shadow:inset 0 0 0 3px #ef4444d9,inset 0 0 42px #ef444459}}.fp-subbar{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem 1.1rem;border-bottom:1px solid rgba(255,255,255,.08);flex-wrap:wrap}.fp-tabs{display:flex;align-items:center;gap:.35rem;flex-wrap:wrap}.fp-tab{padding:.3rem .7rem;border-radius:999px;font-size:.68rem;font-weight:700;color:#94a3b8;border:1px solid rgba(255,255,255,.12);background:#ffffff0a;cursor:pointer;transition:all .2s}.fp-tab:hover{background:#ffffff1a;color:#cbd5e1}.fp-tab-active{color:#f6cf8a;border-color:#f2b24a73;background:#f2b24a1f}.fp-tab-add{color:#f6cf8a;border-style:dashed}.fp-area-status{font-size:.68rem;font-weight:600;color:#64748b;white-space:nowrap}.fp-snap-toggle{display:inline-flex;align-items:center;gap:.3rem;font-size:.68rem;font-weight:700;color:#cbd5e1;cursor:pointer;padding:.42rem .6rem;border-radius:.65rem;border:1px solid rgba(255,255,255,.12);background:#ffffff0d;-webkit-user-select:none;user-select:none}.fp-snap-toggle input{accent-color:#f2b24a;cursor:pointer}.fp-tools{display:inline-flex;align-items:center;gap:.2rem;padding:.2rem;border-radius:.75rem;border:1px solid rgba(255,255,255,.1);background:#ffffff08}.fp-tools .fp-btn{border-color:transparent;background:transparent;padding:.42rem .6rem}.fp-tools .fp-btn:hover{background:#ffffff14}.fp-tool-active{background:#f2b24a26!important;border-color:#f2b24a73!important;color:#f6cf8a!important}.fp-presets{position:absolute;top:.75rem;left:.75rem;z-index:10;width:min(24rem,calc(100% - 1.5rem));max-height:calc(100% - 1.5rem);overflow-y:auto;padding:.85rem;border-radius:.9rem;background:#0d1426eb;border:1px solid rgba(242,178,74,.25);box-shadow:0 18px 50px #020612b3;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.fp-presets-title{margin:0 0 .6rem;font-size:.66rem;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:#f6cf8a}.fp-presets-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(6.4rem,1fr));gap:.45rem}.fp-preset-btn{display:flex;flex-direction:column;align-items:center;gap:.25rem;padding:.55rem .3rem;border-radius:.7rem;border:1px solid rgba(255,255,255,.1);background:#ffffff0a;color:#cbd5e1;cursor:pointer;transition:all .15s}.fp-preset-btn:hover{background:#f2b24a24;border-color:#f2b24a66;transform:translateY(-1px)}.fp-preset-btn svg{width:1.35rem;height:1.35rem}.fp-preset-btn span{font-size:.66rem;font-weight:700;line-height:1.1;text-align:center}.fp-preset-btn small{font-size:.58rem;color:#64748b}.fp-area-line{margin:0;font-size:.72rem;color:#94a3b8}.fp-bg-panel{left:auto;right:.75rem;width:min(17rem,calc(100% - 1.5rem));display:flex;flex-direction:column;gap:.65rem}.fp-bg-panel.hidden{display:none}.fp-bg-row{display:grid;grid-template-columns:1fr auto;gap:.45rem}.fp-bg-upload{cursor:pointer;text-align:center}.floor-filter{position:fixed;top:84px;right:21.2rem;z-index:20;display:flex;align-items:center;gap:.3rem;padding:.3rem;border-radius:999px;background:#0d1426d1;border:1px solid rgba(255,255,255,.1);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:0 10px 30px #02061280}.floor-filter button{padding:.28rem .65rem;border-radius:999px;border:none;font-size:.64rem;font-weight:700;color:#94a3b8;background:transparent;cursor:pointer;transition:all .15s;white-space:nowrap}.floor-filter button:hover{color:#cbd5e1;background:#ffffff12}.floor-filter button.ff-active{color:#f6cf8a;background:#f2b24a24;box-shadow:inset 0 0 0 1px #f2b24a66}@media (max-width: 1100px){.floor-filter{right:50%;transform:translate(50%)}}@media (max-width: 700px){.fp-body{flex-direction:column}.fp-form{width:100%;border-left:none;border-top:1px solid rgba(255,255,255,.08)}.fp-canvas-wrap{min-height:16rem}}.ty-level-track{height:.55rem;border-radius:999px;overflow:hidden;background:#ffffff12;border:1px solid rgba(255,255,255,.08)}.ty-level-fill{height:100%;border-radius:999px;background:var(--water);transition:width .6s ease}.ty-leak-badge{display:inline-flex;align-items:center;gap:.35rem;padding:.35rem .8rem;border-radius:999px;font-size:.66rem;font-weight:800;letter-spacing:.05em;border:1px solid}.ty-leak-ok{color:#34d399;border-color:#34d39959;background:#34d39914}.ty-leak-alarm{color:#fecaca;border-color:#f871718c;background:#dc262629;animation:blink .9s infinite;box-shadow:0 0 14px #dc262666}.ty-raw summary{font-size:.64rem;font-weight:700;color:#64748b;cursor:pointer;text-transform:uppercase;letter-spacing:.08em;transition:color .2s;-webkit-user-select:none;user-select:none}.ty-raw summary:hover{color:#94a3b8}.ty-raw-list{margin-top:.4rem;padding:.45rem .55rem;border-radius:.55rem;background:#02061273;border:1px solid rgba(255,255,255,.06);max-height:8rem;overflow-y:auto}.ty-raw-row{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.1rem 0;font-size:.64rem}.ty-raw-code{color:#f6cf8a;font-family:ui-monospace,monospace}.ty-raw-value{color:#94a3b8;font-variant-numeric:tabular-nums}.st-row{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-top:.5rem}.st-label{font-size:10px;color:#64748b}.st-btn-group{display:flex;align-items:center;gap:.25rem}.st-mini-btn{border-radius:.5rem;border:1px solid rgba(255,255,255,.12);background:#ffffff0d;color:#cbd5e1;padding:.125rem .5rem;font-size:.75rem;line-height:1.25rem;transition:background .2s,color .2s;cursor:pointer}.st-mini-btn:hover{background:#ffffff1f;color:#e2e8f0}.st-mini-btn:disabled{opacity:.45;cursor:not-allowed}.st-mute{padding:.125rem .625rem;font-size:9px;font-weight:700;letter-spacing:.04em}.st-mute-on{background:#fbbf2429;border-color:#fbbf2473;color:#fbbf24}@media (max-width: 899px){.cam-btn span,.cam-hint{display:none}}button.from-indigo-500.to-cyan-500,a.from-indigo-500.to-cyan-500{background-image:none;background-color:var(--accent);color:var(--accent-ink);box-shadow:none;font-weight:700}button.from-indigo-500.to-cyan-500:hover{background-color:#f7c46f;filter:none}button.from-indigo-500.to-cyan-500.text-white{color:var(--accent-ink)}.dxf-drop{display:flex;flex-direction:column;align-items:center;gap:.35rem;padding:2rem 1rem;border:1.5px dashed var(--line);border-radius:var(--radius);background:var(--raised);cursor:pointer;text-align:center;transition:border-color .2s,background .2s}.dxf-drop:hover,.dxf-drop.dxf-drop-over{border-color:var(--accent);background:#f2b24a0f}.dxf-help{font-size:.72rem;line-height:1.45;color:#cbd5e1;padding:.7rem .85rem;border-radius:.7rem;background:#f2b24a14;border:1px solid rgba(242,178,74,.3)}.dxf-layers{max-height:12.5rem;overflow-y:auto;border:1px solid var(--line-soft);border-radius:.7rem;background:var(--raised)}.dxf-layer-row{display:flex;align-items:center;gap:.5rem;padding:.35rem .65rem;font-size:.72rem;cursor:pointer}.dxf-layer-row:hover{background:#ffffff0a}.dxf-layer-row input{accent-color:var(--accent)}.dxf-layer-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#e2e8f0}.dxf-layer-count{color:var(--muted);font-variant-numeric:tabular-nums}.dxf-preview{width:100%;height:auto;border:1px solid var(--line-soft);border-radius:.7rem;background:#0a0e15}.dxf-check{display:flex;align-items:center;gap:.5rem;font-size:.74rem;color:#cbd5e1;cursor:pointer}.dxf-check input{accent-color:var(--accent)}.fp-btn-primary{background:var(--accent);color:var(--accent-ink);border-color:transparent;font-weight:700}.fp-btn-primary:hover{background:#f7c46f}.fp-btn-primary:disabled{opacity:.5;cursor:not-allowed}.fp-card{width:min(74rem,calc(100vw - 1.5rem));height:min(46rem,calc(100vh - 1.5rem));background:var(--surface);border:1px solid var(--line);border-radius:var(--radius)!important}.fp-toolbar{padding:.7rem 1rem;border-bottom:1px solid var(--line);gap:1rem;flex-wrap:nowrap}.fp-title h3{margin:0;font-size:1rem;font-weight:700;color:var(--text);letter-spacing:-.01em}.fp-title p{margin:.15rem 0 0;font-size:.7rem;color:var(--muted)}.fp-actions{flex-wrap:nowrap;gap:.4rem}.fp-btn{border-radius:8px;border-color:var(--line);background:var(--raised);color:var(--text);white-space:nowrap}.fp-btn svg{width:.9rem;height:.9rem;flex:none}.fp-btn:hover{background:#20293c}.fp-btn-outline{border-color:#f2b24a8c;color:#f6cf8a;background:transparent}.fp-btn-outline:hover{background:#f2b24a1a}.fp-sep{width:1px;height:1.4rem;background:var(--line);margin:0 .2rem}.fp-subbar{padding:.45rem 1rem;border-bottom:1px solid var(--line);background:var(--ink)}.fp-view-actions{display:flex;align-items:center;gap:.35rem;flex-wrap:wrap}.fp-icon-btn{display:inline-flex;align-items:center;justify-content:center;gap:.3rem;height:1.9rem;min-width:1.9rem;padding:0 .5rem;border-radius:8px;font-size:.7rem;font-weight:600;color:var(--muted);cursor:pointer;border:1px solid var(--line);background:var(--raised)}.fp-icon-btn svg{width:.9rem;height:.9rem}.fp-icon-btn:hover:not(:disabled){color:var(--text);background:#20293c}.fp-icon-btn:disabled{opacity:.35;cursor:default}.fp-snap-toggle{height:1.9rem;padding:0 .55rem;border-radius:8px;font-weight:600;color:var(--muted);background:var(--raised);border-color:var(--line)}.fp-area-status{margin-left:.5rem;color:var(--muted)}.fp-body{background:var(--ink)}.fp-rail{flex:none;width:8.6rem;padding:.6rem;display:flex;flex-direction:column;gap:.25rem;border-right:1px solid var(--line);background:var(--surface);overflow-y:auto}.fp-tool{display:flex;align-items:center;gap:.5rem;width:100%;min-height:2.3rem;padding:0 .55rem;border-radius:8px;border:1px solid transparent;background:transparent;color:var(--muted);font-size:.78rem;font-weight:600;text-align:left;cursor:pointer}.fp-tool svg{width:1.05rem;height:1.05rem;flex:none}.fp-tool-label{flex:1;min-width:0;line-height:1.15}.fp-tool kbd{font:600 .62rem IBM Plex Mono,ui-monospace,monospace;color:var(--faint);border:1px solid var(--line);border-radius:4px;padding:.05rem .28rem}.fp-tool:hover{background:var(--raised);color:var(--text)}.fp-tool.fp-tool-active{background:#f2b24a24!important;border-color:#f2b24a8c!important;color:#f6cf8a!important}.fp-tool.fp-tool-active kbd{color:#f6cf8a;border-color:#f2b24a66}.fp-rail-gap{flex:1;min-height:.5rem}.fp-tool-add{border:1px dashed var(--line)}.fp-canvas-wrap{background:var(--ink)}@media (max-width: 899px){.fp-card{width:100vw;height:100dvh;border-radius:0!important}.fp-toolbar,.fp-actions{flex-wrap:wrap}.fp-title p{display:none}.fp-body{flex-direction:column}.fp-rail{width:auto;flex-direction:row;overflow-x:auto;border-right:none;border-bottom:1px solid var(--line)}.fp-tool{width:auto;flex:none}.fp-tool kbd,.fp-rail-gap{display:none}}.fp-btn.fp-btn-primary{background:var(--accent);color:var(--accent-ink);border-color:transparent;box-shadow:none;font-weight:700}.fp-btn.fp-btn-primary:hover{background:#f7c46f}.fp-rail{width:9.6rem}@media (max-width: 899px){.fp-toolbar{padding:.55rem .75rem}.fp-actions{gap:.3rem}.fp-actions .fp-btn{padding:.35rem .55rem;font-size:.68rem}.fp-sep{display:none}.fp-rail{width:auto}}.fp-zoom{position:absolute;right:.75rem;bottom:.75rem;z-index:6;display:inline-flex;align-items:center;gap:2px;padding:3px;background:var(--surface);border:1px solid var(--line);border-radius:10px}.fp-zoom-btn,.fp-zoom-pct,.fp-zoom-txt{height:2rem;min-width:2rem;padding:0 .5rem;border:0;border-radius:7px;background:transparent;color:var(--text);font:600 .72rem IBM Plex Sans,sans-serif;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}.fp-zoom-btn svg{width:.95rem;height:.95rem}.fp-zoom-pct{min-width:3.4rem;font-family:IBM Plex Mono,ui-monospace,monospace;color:var(--muted)}.fp-zoom-btn:hover:not(:disabled),.fp-zoom-pct:hover,.fp-zoom-txt:hover{background:var(--raised)}.fp-zoom-btn:disabled{opacity:.35;cursor:default}.fp-zoom-sep{width:1px;height:1.3rem;background:var(--line);margin:0 3px}.fp-wall-panel{position:absolute;left:.75rem;bottom:2.4rem;z-index:6;display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;padding:.45rem .7rem;background:var(--surface);border:1px solid rgba(242,178,74,.45);border-radius:10px;font-size:.72rem;color:var(--muted)}.fp-wall-panel.hidden{display:none}.fp-open-door{display:inline-flex;align-items:center;gap:.7rem;flex-wrap:wrap}.fp-open-door.hidden{display:none}.fp-wall-panel select{height:1.8rem;padding:0 .4rem;border-radius:7px;border:1px solid var(--line);background:var(--ink);color:var(--text);font:600 .75rem IBM Plex Sans,sans-serif}.fp-open-panel{border-color:#22d3ee80}.fp-open-panel strong{color:#a5f3fc}.fp-wall-panel strong{color:#f6cf8a;font-weight:700}.fp-wall-panel label{display:inline-flex;align-items:center;gap:.35rem}.fp-wall-panel input{width:4.6rem;height:1.8rem;padding:0 .4rem;border-radius:7px;border:1px solid var(--line);background:var(--ink);color:var(--text);font:600 .75rem IBM Plex Mono,ui-monospace,monospace}.fp-wall-panel input:disabled{opacity:.4}.fp-hint{position:absolute;left:.75rem;top:.6rem;z-index:5;margin:0;max-width:34rem;font-size:.66rem;line-height:1.35;color:var(--faint);pointer-events:none}@media (max-width: 899px){.fp-hint{display:none}.fp-wall-panel{bottom:3.4rem;right:.75rem}.fp-zoom{bottom:.5rem}}#editor-planta{backdrop-filter:none;-webkit-backdrop-filter:none;background:#05080ddb}.fp-card,.fp-card.glass{backdrop-filter:none;-webkit-backdrop-filter:none}.fp-canvas-wrap canvas{will-change:auto}.device-menu-btn{width:1.7rem;height:1.7rem;flex:none;border-radius:8px;border:1px solid transparent;background:transparent;color:var(--muted);font-size:1.05rem;line-height:1;cursor:pointer}.device-menu-btn:hover,.device-menu-btn[aria-expanded=true]{background:var(--raised);color:var(--text);border-color:var(--line)}.device-add-btn{height:1.7rem;padding:0 .6rem;border-radius:8px;border:1px solid var(--line);background:transparent;color:var(--muted);font-size:.72rem;font-weight:600;cursor:pointer;margin-right:.4rem}.device-add-btn:hover,.device-add-btn[aria-expanded=true]{background:var(--raised);color:var(--text)}.device-add-form{display:grid;gap:.45rem;margin:0 1rem .75rem;padding:.75rem;border:1px solid var(--line);border-radius:12px;background:var(--raised)}.device-add-form.hidden{display:none}.device-add-title{margin:0;font-size:.8rem;font-weight:700;color:var(--text)}.device-add-result{margin-top:.25rem;padding:.55rem;border-radius:9px;background:#34d3991a;border:1px solid rgba(52,211,153,.35);font-size:.7rem;color:var(--muted)}.device-add-result.hidden{display:none}.device-add-result code{flex:1;min-width:0;overflow-wrap:anywhere;font:600 .72rem IBM Plex Mono,ui-monospace,monospace;color:#a7f3d0}.fp-furn-panel{width:min(26rem,calc(100% - 1.5rem));border-color:#a78bfa59}.fp-furn-panel .fp-presets-title{color:#c4b5fd}.fp-furn-group{margin:.55rem 0 .3rem;font-size:.6rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#64748b}.fp-furn-btn.fp-furn-active{background:#a78bfa33;border-color:#a78bfa99}.fp-furn-sel{border-color:#a78bfa80}.fp-furn-sel strong{color:#c4b5fd}.fp-dev-dot{display:inline-block;width:.55rem;height:.55rem;border-radius:999px;margin-right:.35rem;vertical-align:.05rem}.fp-dev-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.35rem}.fp-dev-head .fp-presets-title{margin:0}.fp-dev-new{flex-shrink:0;font-size:.68rem;font-weight:700;padding:.35rem .65rem;border-radius:999px;border:1px solid rgba(242,178,74,.45);color:#fbe3b3;background:#f2b24a1f;white-space:nowrap}.fp-dev-new:hover{background:#f2b24a38}.fp-dev-form{display:grid;grid-template-columns:1fr 9rem;gap:.4rem;margin:.2rem 0 .5rem}.fp-dev-form .fp-dev-new-go{grid-column:1 / -1;border-radius:.6rem;padding:.45rem}.fp-dev-hint{font-size:.62rem;color:var(--muted);margin-bottom:.2rem}.fp-dev-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.4rem}.fp-dev-btn{min-width:0;display:flex;flex-direction:column;align-items:flex-start;gap:.15rem;text-align:left;padding:.5rem .6rem;border-radius:.65rem;border:1px solid var(--line);background:#ffffff08;transition:border-color .2s,background .2s}.fp-dev-btn:hover{border-color:#a78bfa80;background:#a78bfa14}.fp-dev-btn.fp-furn-active{border-color:#a78bfab3;background:#a78bfa2e}.fp-dev-name{display:flex;align-items:flex-start;gap:.35rem;min-width:0;width:100%;font-size:.72rem;font-weight:700;color:#e8edf5;line-height:1.25}.fp-dev-name>span{min-width:0;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow-wrap:anywhere}.fp-dev-name .fp-dev-dot{flex-shrink:0;margin:.25rem 0 0}.fp-dev-btn small{font-size:.6rem;color:var(--muted);padding-left:.9rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.fp-dev-vendor{font-weight:700;color:#93c5fd}#fp-dev-panel{max-height:calc(100% - 1.5rem);overflow-y:auto}.fp-dev-room{font-size:.68rem;color:var(--muted)}.room-panel{position:fixed;z-index:22;top:var(--top-h);right:.9rem;bottom:.9rem;width:var(--rail-w);max-width:calc(100vw - 1.5rem);max-height:calc(100vh - var(--top-h) - .9rem);display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--line);border-radius:1.1rem;box-shadow:0 18px 50px #00000073;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);transform:translate(16px);opacity:0;pointer-events:none;transition:opacity .3s ease,transform .35s cubic-bezier(.22,1,.36,1),bottom .3s ease}.room-panel-open{opacity:1;transform:none;pointer-events:auto}.room-panel-min{bottom:auto}.room-panel-min .rp-body,.room-panel-min .rp-foot{display:none}.rp-actions{display:flex;gap:.3rem;flex-shrink:0}#rail-right{transition:opacity .3s ease,transform .35s ease}body.room-open #rail-right{opacity:0;transform:translate(16px);pointer-events:none}body.room-open #rail-right>.card{pointer-events:none}body:not(.authenticated) .room-panel{display:none}.rp-head{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;padding:.85rem 1rem .6rem}.rp-kicker{font-size:.6rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#f2b24a}.rp-title{font-size:1.05rem;font-weight:800;color:#f1f5f9;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rp-sub{font-size:.68rem;color:var(--muted);margin-top:.15rem}.rp-close{flex-shrink:0;width:2rem;height:2rem;border-radius:999px;display:grid;place-items:center;color:#cbd5e1;border:1px solid var(--line);transition:background .2s}.rp-close:hover{background:#ffffff14}.rp-close svg{width:.95rem;height:.95rem}.rp-body{overflow-y:auto;padding:0 1rem .6rem;min-height:0}.rp-section{font-size:.6rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#94a3b8;margin:.55rem 0 .35rem}.rp-list{display:flex;flex-direction:column;gap:.3rem}.rp-empty{font-size:.72rem;color:var(--muted);padding:.35rem 0}.rp-dev,.rp-rule{display:flex;align-items:center;gap:.6rem;padding:.45rem .6rem;border-radius:.7rem;background:#ffffff0a;border:1px solid rgba(255,255,255,.06)}.rp-dev-dot{width:.45rem;height:.45rem;border-radius:999px;background:#475569;flex-shrink:0}.rp-dev-dot.rp-on{background:#f2b24a;box-shadow:0 0 8px #f2b24ab3}.rp-dev-name{flex:1;min-width:0;font-size:.78rem;font-weight:600;color:#e2e8f0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rp-dev-name small{display:block;font-size:.63rem;font-weight:500;color:var(--muted)}.rp-dev-btn{flex-shrink:0;font-size:.66rem;font-weight:700;padding:.3rem .65rem;border-radius:999px;border:1px solid rgba(242,178,74,.35);color:#f6cf8a;transition:background .2s}.rp-dev-btn:hover{background:#f2b24a1f}.rp-dev-btn-on{background:#f2b24a29}.rp-rule-text{flex:1;min-width:0;display:flex;flex-direction:column}.rp-rule-text strong{font-size:.76rem;color:#e2e8f0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rp-rule-text span{font-size:.65rem;color:var(--muted);line-height:1.35}.rp-rule-off{opacity:.55}.rp-switch{position:relative;flex-shrink:0;width:2.1rem;height:1.2rem;cursor:pointer}.rp-switch input{position:absolute;opacity:0;top:0;right:0;bottom:0;left:0;cursor:pointer}.rp-switch span{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:999px;background:#334155;transition:background .2s}.rp-switch span:after{content:"";position:absolute;top:.15rem;left:.15rem;width:.9rem;height:.9rem;border-radius:999px;background:#e2e8f0;transition:transform .2s}.rp-switch input:checked+span{background:#d9962c}.rp-switch input:checked+span:after{transform:translate(.9rem)}.rp-switch input:focus-visible+span{outline:2px solid #f2b24a;outline-offset:2px}.rp-foot{padding:.6rem 1rem .85rem;border-top:1px solid var(--line)}.rp-add{width:100%;font-size:.74rem;font-weight:700;padding:.5rem;border-radius:.7rem;background:#f2b24a24;color:#fbe3b3;border:1px solid rgba(242,178,74,.35);transition:background .2s}.rp-add:hover:not(:disabled){background:#f2b24a38}.rp-add:disabled{opacity:.45;cursor:not-allowed}.room-label-dim{opacity:.35!important}.device-tip{position:absolute;top:0;left:0;z-index:30;pointer-events:none;opacity:0;display:flex;flex-direction:column;gap:.05rem;padding:.35rem .6rem;border-radius:.6rem;background:#0c1017e6;border:1px solid var(--line);font-size:.7rem;color:#e2e8f0;white-space:nowrap;transition:opacity .15s}.device-tip span{font-size:.62rem;color:var(--muted)}.rp-dev-flash{animation:rp-flash 1.6s ease}@keyframes rp-flash{0%,60%{border-color:#f2b24ae6;background:#f2b24a29}}.scenes-grid{display:grid;grid-template-columns:1fr 1fr;gap:.45rem}.scene-tile{position:relative;display:flex;align-items:stretch;border-radius:.8rem;border:1px solid var(--line);background:var(--raised);transition:border-color .2s,background .2s}.scene-tile:hover{border-color:#f2b24a73}.scene-on{border-color:#f2b24ab3;background:#f2b24a1a}.scene-run{flex:1;min-width:0;display:flex;align-items:center;gap:.5rem;padding:.55rem .6rem;text-align:left}.scene-ico{flex-shrink:0;width:1.9rem;height:1.9rem;border-radius:.6rem;display:grid;place-items:center;background:#f2b24a24;color:#f6cf8a}.scene-on .scene-ico{background:#f2b24a;color:#1b1403}.scene-ico svg{width:1rem;height:1rem}.scene-txt{min-width:0;display:flex;flex-direction:column}.scene-txt strong{font-size:.74rem;color:#e8edf5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.scene-txt small{font-size:.6rem;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.scene-edit{position:absolute;top:.25rem;right:.25rem;width:1.4rem;height:1.4rem;border-radius:.4rem;display:grid;place-items:center;color:var(--faint);opacity:0;transition:opacity .2s,color .2s}.scene-tile:hover .scene-edit,.scene-edit:focus-visible{opacity:1}.scene-edit:hover{color:#e8edf5;background:#ffffff0f}.scene-edit svg{width:.75rem;height:.75rem}@media (hover: none){.scene-edit{opacity:.8}}.sc-icons{display:flex;gap:.35rem;flex-wrap:wrap}.sc-icon{width:2.2rem;height:2.2rem;border-radius:.6rem;display:grid;place-items:center;border:1px solid var(--line);color:#cbd5e1}.sc-icon svg{width:1.05rem;height:1.05rem}.sc-icon-on{border-color:#f2b24a;background:#f2b24a29;color:#fbe3b3}.sc-devices{display:flex;flex-direction:column;gap:.35rem;max-height:16rem;overflow-y:auto;margin-top:.3rem}.sc-dev{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.45rem .55rem;border-radius:.65rem;border:1px solid var(--line);background:#ffffff08}.sc-dev-off{opacity:.55}.sc-dev-name{display:flex;align-items:center;gap:.45rem;min-width:0;font-size:.75rem;color:#e2e8f0;cursor:pointer}.sc-dev-name span{min-width:0;display:flex;flex-direction:column}.sc-dev-name small{font-size:.6rem;color:var(--muted)}.sc-dev-ctl{display:flex;align-items:center;gap:.35rem;flex-shrink:0}.sc-mini{width:auto;padding:.3rem 1.5rem .3rem .45rem;font-size:.7rem}input.sc-mini{width:3.4rem;padding:.3rem .4rem}.sc-num{display:flex;align-items:center;gap:.2rem;font-size:.62rem;color:var(--muted)}.rp-scenes{display:flex;flex-wrap:wrap;gap:.35rem}.rp-scene{display:inline-flex;align-items:center;gap:.35rem;padding:.35rem .65rem;border-radius:999px;border:1px solid rgba(242,178,74,.35);font-size:.7rem;font-weight:700;color:#f6cf8a;transition:background .2s}.rp-scene:hover{background:#f2b24a1f}.rp-scene svg{width:.85rem;height:.85rem}.rp-scene-on{background:#f2b24a;color:#1b1403;border-color:#f2b24a}.rp-hist{display:grid;grid-template-columns:1fr 1fr;gap:.4rem}.rp-hist-row{padding:.45rem .55rem;border-radius:.7rem;background:#ffffff0a;border:1px solid rgba(255,255,255,.06);min-width:0}.rp-hist-head{display:flex;align-items:baseline;justify-content:space-between;gap:.3rem;font-size:.64rem;color:var(--muted)}.rp-hist-head strong{font-size:.78rem;color:#e8edf5;font-variant-numeric:tabular-nums;white-space:nowrap}.rp-spark{width:100%;height:2.1rem;display:block;margin:.15rem 0}.rp-hist-foot{font-size:.56rem;color:var(--faint);line-height:1.3}.fp-furn-angle{display:inline-flex;align-items:center;gap:.2rem;font-size:.7rem;color:var(--muted)}.fp-furn-angle input{width:3.6rem;padding:.25rem .4rem;border-radius:.45rem;background:#ffffff0f;border:1px solid rgba(255,255,255,.12);color:#e2e8f0;font-size:.72rem}.notify-btn{display:inline-flex;align-items:center;gap:.3rem;padding:.22rem .55rem;border-radius:999px;border:1px solid var(--line);font-size:.6rem;font-weight:700;color:var(--muted);transition:all .2s}.notify-btn svg{width:.75rem;height:.75rem}.notify-btn:hover{color:#e8edf5;border-color:#f2b24a73}.notify-on{color:#1b1403;background:#f2b24a;border-color:#f2b24a}.notify-on:hover{color:#1b1403}.fp-dev-form{display:flex;flex-direction:column;gap:.4rem;margin:.2rem 0 .6rem;padding:.6rem;border-radius:.8rem;border:1px solid rgba(242,178,74,.3);background:#f2b24a0d}.fp-dev-form .fp-furn-group{margin:.1rem 0 0}.fp-lib{display:flex;flex-direction:column;gap:.35rem;max-height:17rem;overflow-y:auto}.fp-lib-search{padding:.35rem .6rem;font-size:.72rem}.fp-lib-group>span{display:block;font-size:.58rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);margin-bottom:.2rem}.fp-lib-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.3rem}.fp-lib-btn{display:flex;align-items:center;gap:.3rem;min-width:0;text-align:left;padding:.35rem .5rem;border-radius:.55rem;border:1px solid var(--line);background:#ffffff08;font-size:.66rem;font-weight:600;color:#e2e8f0;line-height:1.2;overflow-wrap:anywhere}.fp-lib-btn .fp-dev-dot{flex-shrink:0;margin:0}.fp-lib-btn:hover{border-color:#f2b24a80}.fp-lib-on{border-color:#f2b24a;background:#f2b24a29;color:#fbe3b3}.fp-dev-mount{font-size:.64rem;color:var(--muted)}.fp-dev-mount b{color:#fbe3b3;font-weight:600}.fp-furn-size{display:inline-flex;align-items:center;gap:.25rem;flex-wrap:wrap;font-size:.7rem;color:var(--muted)}.fp-furn-size label{display:inline-flex;align-items:center;gap:.15rem}.fp-furn-size input{width:3.4rem;padding:.25rem .35rem;border-radius:.45rem;background:#ffffff0f;border:1px solid rgba(255,255,255,.12);color:#e2e8f0;font-size:.72rem;font-variant-numeric:tabular-nums}.fp-furn-size .fp-icon-btn[disabled]{opacity:.4;cursor:default}.fp-furn-unit{font-size:.62rem}.m-summary,.m-tabbar,.m-sheet-title,.m-only{display:none}body.m-ui{--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--top-h: calc(var(--safe-top) + 3.7rem);--tab-h: calc(var(--safe-bottom) + 3.6rem)}.m-ui header{padding:calc(var(--safe-top) + .45rem) .6rem 0}.m-ui header>.glass{padding:.45rem .6rem .45rem .5rem;border-radius:1rem;gap:.6rem}.m-ui header .logo-mark{width:1.85rem;height:1.85rem}.m-ui #btn-floorplan,.m-ui #btn-install,.m-ui #health-badge,.m-ui #user-chip,.m-ui #clock{display:none!important}.m-ui .conn-live{display:none}.m-ui.authenticated[data-mtab=casa] .m-summary{display:flex;gap:.4rem;position:fixed;z-index:24;left:0;right:0;top:calc(var(--top-h) + .1rem);padding:.35rem .6rem;overflow-x:auto;scrollbar-width:none;-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 1.5rem),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 1.5rem),transparent)}.m-summary::-webkit-scrollbar{display:none}.m-chip{flex-shrink:0;display:inline-flex;align-items:center;gap:.4rem;height:2.25rem;padding:0 .85rem;border-radius:999px;background:#121823eb;border:1px solid var(--line);box-shadow:0 6px 18px #00000059;font-size:.8rem;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums;white-space:nowrap;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.m-chip svg{width:1rem;height:1rem;color:var(--muted)}.m-chip .m-ico-energy{color:var(--energy)}.m-chip .m-ico-water{color:var(--water)}.m-chip:active{transform:scale(.97)}.m-chip-dot{width:.5rem;height:.5rem;border-radius:999px;background:currentColor}.m-chip-status{color:var(--ok);border-color:#5fd38d59}.m-chip-status[data-level=warning]{color:var(--warn);border-color:#f2b24a80}.m-chip-status[data-level=critical]{color:var(--crit);border-color:#ff6b6b99;background:#3c1216f0}.m-chip-status[data-level=critical] .m-chip-dot{animation:blink .7s infinite}.m-ui.authenticated .m-tabbar{display:grid;grid-template-columns:repeat(5,1fr);position:fixed;z-index:40;left:0;right:0;bottom:0;height:var(--tab-h);padding-bottom:var(--safe-bottom);background:#0e131cf5;border-top:1px solid var(--line);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.m-tab{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.2rem;color:var(--muted);font-size:.66rem;font-weight:600;letter-spacing:.01em;-webkit-tap-highlight-color:transparent}.m-tab svg{width:1.3rem;height:1.3rem;padding:.2rem .95rem;box-sizing:content-box;border-radius:999px;transition:background .2s,color .2s}.m-tab[aria-current=page]{color:#fbe3b3}.m-tab[aria-current=page] svg{background:#f2b24a2e;color:var(--accent)}.m-tab-dot{display:none;position:absolute;top:.45rem;left:calc(50% + .75rem);width:.55rem;height:.55rem;border-radius:999px;background:var(--warn);box-shadow:0 0 0 2px #0e131c}.m-tab-alert .m-tab-dot{display:block}.m-tab-crit .m-tab-dot{background:var(--crit);animation:blink .9s infinite}.m-ui .rail{display:none}.m-ui .rail.m-sheet{display:flex;flex-direction:column;gap:.7rem;top:0;bottom:var(--tab-h);left:0;right:0;width:auto;max-width:none;padding:calc(var(--top-h) + .2rem) .7rem 1.4rem;overflow-y:auto;overscroll-behavior:contain;background:var(--ink);pointer-events:auto;z-index:26}.m-ui[data-mtab=casa] .rail.m-sheet{display:none}.m-ui .m-sheet-title{display:block;flex-shrink:0;outline:none;font-size:1.65rem;font-weight:700;letter-spacing:-.01em;color:var(--text);padding:.55rem .3rem .1rem}.m-ui .m-hide{display:none!important}.m-ui .m-only{display:flex}.m-ui .m-sheet>.card{flex:none}.m-ui .m-sheet .card-surface{overflow:visible;box-shadow:none}.m-ui .m-sheet .panel-header{cursor:default;padding:.8rem .9rem .7rem 1rem}.m-ui .m-sheet .collapse-btn{display:none}.m-ui .m-sheet .panel-collapsed .panel-body,.m-ui .m-sheet .panel-body{display:block;overflow:visible;padding:.85rem .9rem 1rem}.m-ui .m-sheet .panel-collapsed .panel-header{border-bottom-color:var(--line-soft)}body.m-ui.room-open #rail-right{opacity:1;transform:none;pointer-events:auto}body.m-ui.room-open #rail-right>.card{pointer-events:auto}.m-ui #panel-devices>.card-surface,.m-ui #panel-monitor>.card-surface,.m-ui #panel-more>.card-surface{background:transparent;border:none;border-radius:0}.m-ui #panel-devices .panel-body,.m-ui #panel-monitor .panel-body,.m-ui #panel-more .panel-body{padding:.3rem 0 0}.m-ui #panel-monitor .panel-header{display:none}.m-ui #panel-devices .panel-header{border:none;padding:0;justify-content:flex-end;margin-top:-3.1rem;pointer-events:none}.m-ui #panel-devices .panel-header>div:first-child{display:none}.m-ui #panel-devices .device-add-btn{pointer-events:auto;min-height:2.3rem;padding:0 .9rem}.m-ui #device-add-form{margin:.6rem 0 0;border-radius:.9rem}.m-ui #devices-list .device-room-body{display:grid;grid-template-columns:repeat(auto-fill,minmax(17rem,1fr));gap:.55rem}.m-ui #devices-list .device-room-body>*{margin-top:0!important}.m-ui #devices-list .device-card:hover{transform:none}.m-ui .device-room-header{padding:.35rem .1rem}.m-ui .scenes-grid{grid-template-columns:repeat(auto-fill,minmax(8.5rem,1fr));gap:.5rem}.m-ui .scene-run{padding:.75rem .7rem}.m-more{display:flex;flex-direction:column;gap:.9rem}.m-account{display:flex;align-items:center;gap:.75rem}.m-account .user-avatar{width:2.6rem;height:2.6rem;font-size:1rem}.m-account-email{font-size:.95rem;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m-account-conn{font-size:.74rem;color:var(--warn);margin-top:.1rem}.m-account-conn.m-conn-live{color:var(--ok)}.m-list{display:flex;flex-direction:column;border:1px solid var(--line-soft);border-radius:.9rem;overflow:hidden}.m-row{display:flex;align-items:center;gap:.8rem;min-height:3.6rem;padding:.6rem .9rem;text-align:left;background:var(--raised)}.m-row+.m-row{border-top:1px solid var(--line-soft)}.m-row:active{background:#1d2738}.m-row svg{width:1.25rem;height:1.25rem;flex-shrink:0;color:var(--accent)}.m-row span{display:flex;flex-direction:column;min-width:0}.m-row strong{font-size:.88rem;font-weight:600;color:var(--text)}.m-row small{font-size:.7rem;color:var(--muted)}.m-row-danger svg,.m-row-danger strong{color:var(--crit)}.m-section{font-size:.66rem;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin:.2rem 0 -.5rem .2rem}.m-ui .cam-toolbar{bottom:calc(var(--tab-h) + .6rem)}.m-ui .cam-btn{min-width:2.6rem;min-height:2.6rem;justify-content:center}.m-ui:not([data-mtab=casa]) .cam-toolbar,.m-ui:not([data-mtab=casa]) #room-labels,.m-ui:not([data-mtab=casa]) .floor-filter,.m-ui:not([data-mtab=casa]) .room-panel{display:none!important}.m-ui .floor-filter{top:calc(var(--top-h) + 3rem);right:50%;transform:translate(50%)}.m-ui .room-panel{top:auto;left:.6rem;right:.6rem;bottom:calc(var(--tab-h) + .6rem);width:auto;max-width:none;max-height:52vh;border-radius:1.1rem;transform:translateY(12px)}.m-ui .room-panel-open{transform:none}.m-ui.room-open .cam-toolbar{display:none}.m-ui #toasts{left:.6rem;right:.6rem;bottom:calc(var(--tab-h) + .6rem);align-items:stretch}.m-ui #toasts .toast{max-width:none}.m-ui .modal:not(#editor-planta){align-items:flex-end;padding:0}.m-ui .modal:not(#editor-planta) .modal-card{width:100%!important;max-width:100%!important;max-height:92dvh;border-radius:1.25rem 1.25rem 0 0!important;padding-bottom:calc(1.25rem + var(--safe-bottom))!important;transform:translateY(100%);transition:transform .32s cubic-bezier(.22,1,.36,1)}.m-ui .modal-open:not(#editor-planta) .modal-card{transform:none}.m-ui .form-input{font-size:16px}.fp-light-panel .fp-lib-grid{margin-bottom:.2rem}.fp-light-sel{display:grid;gap:.4rem;padding:.55rem .6rem;margin:.2rem 0 .4rem;border:1px solid rgba(251,191,36,.35);border-radius:.7rem;background:#fbbf240f}.fp-light-title{display:flex;align-items:center;gap:.45rem;font-size:.82rem;font-weight:700;color:#f8fafc;min-width:0}.fp-light-title span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fp-light-sub{font-size:.64rem;color:var(--muted);line-height:1.35}.fp-light-letter{display:inline-grid;place-items:center;min-width:1.15rem;height:1.15rem;padding:0 .2rem;border-radius:.35rem;background:#fbbf24;color:#1c1404;font-size:.68rem;font-weight:800;flex:none}.fp-light-row{display:grid;gap:.25rem;font-size:.66rem;font-weight:600;color:var(--muted)}.fp-light-desc{font-size:.64rem;line-height:1.4;color:#cbd5e1;margin:0}.fp-light-warn{margin:0;padding:.4rem .55rem .4rem 1.3rem;border-radius:.5rem;background:#f59e0b1f;color:#fcd34d;font-size:.64rem;line-height:1.4}.fp-light-warn-dot{display:inline-grid;place-items:center;width:.85rem;height:.85rem;border-radius:50%;background:#f59e0b;color:#1c1404;font-size:.55rem;font-weight:800}.fp-light-sym{display:inline-block;min-width:1.6rem;margin-right:.15rem;padding:0 .15rem;border:1px solid #38bdf8;border-radius:.25rem;color:#7dd3fc;font-size:.58rem;font-weight:800;text-align:center;line-height:1.25}.fp-light-tip{font-size:.64rem;line-height:1.4;color:var(--muted);margin:.1rem 0}.fp-light-items{list-style:none;margin:0;padding:0;display:grid;gap:.2rem;max-height:16rem;overflow:auto}.fp-light-items li{display:flex;align-items:center;justify-content:space-between;gap:.4rem;font-size:.66rem;color:#e2e8f0;padding:.15rem .1rem .15rem .35rem;border-radius:.4rem;background:#ffffff08}.fp-light-items li span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fp-light-items .fp-icon-btn{padding:.05rem .45rem}#editor-planta{padding:0}#editor-planta .fp-card{width:100vw;height:100vh;height:100dvh;max-height:none;border:0;border-radius:0!important;padding:env(safe-area-inset-top,0px) env(safe-area-inset-right,0px) env(safe-area-inset-bottom,0px) env(safe-area-inset-left,0px)}#editor-planta:fullscreen{background:var(--surface)}#editor-planta:fullscreen .fp-card{width:100%;height:100%}#btn-fp-full[aria-pressed=true]{border-color:#f2b24a8c;color:#f6cf8a}
