:root{--bg: #f5f5f4;--card: #ffffff;--text: #1c1917;--muted: #78716c;--line: #e7e5e4;--accent: #0f766e;--accent-soft: #ccfbf1;--warn-bg: #fef3c7;--warn: #92400e;--off: #b91c1c;color-scheme:light dark}@media(prefers-color-scheme:dark){:root{--bg: #0c0a09;--card: #1c1917;--text: #f5f5f4;--muted: #a8a29e;--line: #292524;--accent: #2dd4bf;--accent-soft: #134e4a;--warn-bg: #451a03;--warn: #fcd34d;--off: #f87171}}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:16px/1.5 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-tap-highlight-color:transparent}h1{font-size:1.6rem;margin:.5rem 0 0}h2{font-size:1.05rem;margin:0}.muted{color:var(--muted)}.small{font-size:.85rem}.center{min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;padding:1rem;text-align:center}.btn{font:inherit;border:1px solid var(--line);background:var(--card);color:var(--text);border-radius:10px;padding:.55rem 1rem;cursor:pointer;text-decoration:none;display:inline-block}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;margin-top:1rem;padding:.75rem 1.5rem;font-weight:600}.btn.ghost{border:none;background:none;color:var(--muted);padding:.4rem .5rem}.btn:disabled{opacity:.5;cursor:default}.top{position:sticky;top:0;z-index:1;display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:calc(.6rem + env(safe-area-inset-top)) 1rem .6rem;background:color-mix(in srgb,var(--bg) 85%,transparent);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:.5rem;font-weight:700}.user{display:flex;align-items:center;gap:.5rem;min-width:0}.user .name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:9rem}.avatar{width:28px;height:28px;border-radius:50%;object-fit:cover}.badge{font-size:.7rem;font-weight:700;text-transform:uppercase;background:var(--accent-soft);color:var(--accent);border-radius:6px;padding:.05rem .4rem}.dot{width:8px;height:8px;border-radius:50%;background:var(--muted);flex:none}.dot.on{background:#22c55e}@media(max-width:480px){.user .name{display:none}}.content{max-width:960px;margin:0 auto;padding:1rem 1rem calc(2rem + env(safe-area-inset-bottom))}.warn{background:var(--warn-bg);color:var(--warn);padding:.6rem .8rem;border-radius:10px}.grid{display:grid;gap:1rem;grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}.card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:1rem}.card.offline{opacity:.65}.card-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.5rem}.status{font-size:.8rem;color:var(--muted)}.status.on{color:#16a34a}.status.off{color:var(--off)}.entities{list-style:none;margin:0;padding:0}.entity{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.6rem 0;border-top:1px solid var(--line);flex-wrap:wrap}.entity:first-child{border-top:none}.value{color:var(--muted);font-variant-numeric:tabular-nums}.err{width:100%;color:var(--off);font-size:.85rem}.diag{display:flex;flex-wrap:wrap;gap:.25rem 1rem;margin:.5rem 0 0;font-size:.8rem;color:var(--muted)}.model{margin:.25rem 0 0;font-size:.75rem;color:var(--muted)}.toggle{width:52px;height:32px;border-radius:16px;border:none;padding:3px;cursor:pointer;background:var(--line);transition:background .15s;flex:none}.toggle span{display:block;width:26px;height:26px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #0000004d;transition:transform .15s}.toggle.on{background:var(--accent)}.toggle.on span{transform:translate(20px)}.toggle:disabled{opacity:.5;cursor:default}.toggle:focus-visible,.btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.tabs{display:flex;gap:.25rem;max-width:960px;margin:0 auto;padding:.5rem 1rem 0}.tabs a{padding:.4rem .9rem;border-radius:999px;color:var(--muted);text-decoration:none;font-weight:600;font-size:.95rem}.tabs a.active{background:var(--accent-soft);color:var(--accent)}:root{--ok: #16a34a;--warnc: #d97706;--err: #dc2626;--unk: #78716c}@media(prefers-color-scheme:dark){:root{--ok: #4ade80;--warnc: #fbbf24;--err: #f87171;--unk: #a8a29e}}.banner{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:.25rem 1rem;padding:.8rem 1rem;border-radius:14px;margin-bottom:1rem;border:1px solid var(--line);background:var(--card);border-left:6px solid var(--unk)}.banner.lvl-ok{border-left-color:var(--ok)}.banner.lvl-warn{border-left-color:var(--warnc)}.banner.lvl-error{border-left-color:var(--err)}.tile{border-top:4px solid var(--unk)}.tile.lvl-ok{border-top-color:var(--ok)}.tile.lvl-warn{border-top-color:var(--warnc)}.tile.lvl-error{border-top-color:var(--err)}.pill{font-size:.75rem;font-weight:700;padding:.1rem .55rem;border-radius:999px;color:#fff;background:var(--unk);white-space:nowrap}.pill.lvl-ok{background:var(--ok)}.pill.lvl-warn{background:var(--warnc)}.pill.lvl-error{background:var(--err)}@media(prefers-color-scheme:dark){.pill{color:#0c0a09}}.kv{display:grid;grid-template-columns:auto 1fr;gap:.35rem 1rem;margin:0;font-size:.92rem}.kv dt{color:var(--muted)}.kv dd{margin:0;text-align:right;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.audit{margin-top:1rem}.audit h2{margin-bottom:.5rem}.audit ul{list-style:none;margin:0;padding:0;font-size:.9rem}.audit li{display:flex;flex-wrap:wrap;gap:.25rem .75rem;padding:.45rem 0;border-top:1px solid var(--line)}.audit li:first-child{border-top:none}.audit li.bad .a{color:var(--err)}.audit .t{color:var(--muted);font-variant-numeric:tabular-nums;min-width:6.5rem}.audit .a{font-weight:600}.push{margin-bottom:1rem}.push h2{margin-bottom:.25rem}.row{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}.btn.primary-sm{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}:root{--series-1: #2a78d6;--seg-off: #d6d3d1}@media(prefers-color-scheme:dark){:root{--series-1: #3987e5;--seg-off: #57534e}}.linkish{font:inherit;color:inherit;background:none;border:none;padding:0;cursor:pointer;text-align:left;text-decoration:underline dotted var(--muted);text-underline-offset:3px}.linkish.active{color:var(--accent);text-decoration-color:var(--accent)}.diag .linkish{font-size:.8rem;color:var(--muted)}.history-wrap{margin-top:.75rem;padding-top:.75rem;border-top:1px solid var(--line)}.history-head{display:flex;align-items:center;justify-content:space-between}.history-head h3{margin:0;font-size:.95rem}.ranges{display:flex;flex-wrap:wrap;gap:.35rem;margin:.5rem 0}.chip{font:inherit;font-size:.8rem;border:1px solid var(--line);background:var(--card);color:var(--muted);border-radius:999px;padding:.2rem .7rem;cursor:pointer}.chip.active{background:var(--accent-soft);color:var(--accent);border-color:transparent;font-weight:600}.chart{position:relative}.chart svg{display:block;overflow:visible;touch-action:pan-y}.chart svg:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}.chart .grid{stroke:var(--line);stroke-width:1}.chart .axis{fill:var(--muted);font-size:11px;font-variant-numeric:tabular-nums}.chart .line{fill:none;stroke:var(--series-1);stroke-width:2;stroke-linejoin:round;stroke-linecap:round}.chart .band{fill:var(--series-1);opacity:.15}.chart .dot{fill:var(--series-1);stroke:var(--card);stroke-width:2}.chart .crosshair{stroke:var(--muted);stroke-width:1}.chart .track{fill:var(--bg);stroke:var(--line);stroke-dasharray:3 3}.chart .seg.on{fill:var(--series-1)}.chart .seg.off{fill:var(--seg-off)}.chart .seg:focus{outline:none;stroke:var(--text);stroke-width:1.5}.tip{position:absolute;top:0;transform:translate(-50%);pointer-events:none;background:var(--card);border:1px solid var(--line);border-radius:8px;padding:.3rem .55rem;box-shadow:0 2px 8px #0000001f;display:flex;flex-direction:column;font-size:.78rem;color:var(--muted);white-space:nowrap;z-index:2}.tip strong{color:var(--text);font-size:.95rem;font-variant-numeric:tabular-nums}.legend{display:flex;align-items:center;gap:.35rem;margin:.25rem 0 0}.legend .key{display:inline-block;width:12px;height:10px;border-radius:2px;margin-left:.5rem}.legend .key:first-child{margin-left:0}.legend .key.on{background:var(--series-1)}.legend .key.off{background:var(--seg-off)}.legend .key.none{background:var(--bg);border:1px dashed var(--line)}.table-view{margin-top:.5rem;font-size:.85rem}.table-view summary{cursor:pointer;color:var(--muted)}.table-view table{width:100%;border-collapse:collapse;margin-top:.35rem;font-variant-numeric:tabular-nums}.table-view th,.table-view td{text-align:left;padding:.2rem .4rem;border-bottom:1px solid var(--line)}.table-view th{color:var(--muted);font-weight:600}.grid>*,.card,.chart,.history,.history-wrap{min-width:0}.chart svg{max-width:100%;height:auto}.section{margin-bottom:1.5rem}.section-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.6rem}.section-head h2{font-size:1.1rem}.scene-grid{display:grid;gap:.75rem;grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}.scene{display:flex;flex-direction:column;gap:.35rem}.auto-list{list-style:none;margin:0;padding:0;display:grid;gap:.75rem}.auto p{margin:.25rem 0}.auto.disabled{opacity:.6}.auto-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.editor h2{margin-bottom:.75rem}.editor h3{font-size:.95rem;margin:1rem 0 .4rem}.field{display:flex;flex-direction:column;gap:.25rem;font-size:.9rem;color:var(--muted)}.editor input,.editor select{font:inherit;font-size:.95rem;color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:.4rem .5rem;max-width:100%;min-width:0}.editor .num{width:4.5rem}.rows{display:flex;flex-direction:column;gap:.5rem}.edit-row{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem;padding:.5rem;border:1px solid var(--line);border-radius:10px}.edit-row select{flex:0 1 auto}.edit-row>select[aria-label="Thiết bị"]{flex:1 1 12rem}.days{display:flex;flex-wrap:wrap;gap:.25rem}.btn.add{align-self:flex-start;color:var(--accent)}.check{display:flex;align-items:center;gap:.4rem;margin:1rem 0 .5rem}.home-select{font:inherit;font-weight:700;border:none;background:transparent;color:var(--text);max-width:12rem}.home-name{font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:12rem}.onboarding{gap:.75rem}.onboarding .card{width:100%;max-width:24rem;text-align:left}.stack{display:flex;flex-direction:column;gap:.5rem}.stack input,.stack select,.row input,.row select,.member select{font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:.45rem .55rem;min-width:0}.member-list{list-style:none;margin:0;padding:0;display:grid;gap:.5rem}.member{display:flex;align-items:center;justify-content:space-between;gap:.5rem;flex-wrap:wrap;padding:.75rem 1rem}.member-who{display:flex;align-items:center;gap:.6rem}.member-who div{display:flex;flex-direction:column}.pick{border:1px solid var(--line);border-radius:10px;padding:.5rem .75rem;display:flex;flex-direction:column;gap:.25rem}.pick legend{font-size:.9rem;color:var(--muted);padding:0 .25rem}.pick .check{margin:0}.invite-out{display:flex;flex-direction:column;align-items:center;gap:.4rem;padding-top:.5rem;border-top:1px solid var(--line)}.invite-out img{background:#fff;padding:6px;border-radius:8px}.invite-code{font-size:1.3rem;letter-spacing:.12em}.btn.danger{color:var(--off)}.table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:12px;background:var(--card)}table.admin{width:100%;border-collapse:collapse;font-size:.88rem}table.admin th,table.admin td{text-align:left;padding:.45rem .6rem;border-bottom:1px solid var(--line);white-space:nowrap}table.admin th{color:var(--muted);font-weight:600}table.admin td.ok{color:var(--ok)}table.admin td.bad{color:var(--err)}table.admin tr.locked td{opacity:.55}.login-actions{display:flex;flex-direction:column;gap:.6rem;align-items:stretch;width:100%;max-width:18rem}.login-actions .btn{text-align:center}.login-actions .btn.primary{margin-top:1rem}.profile-link{display:inline-flex;align-items:center;gap:.4rem;color:inherit;text-decoration:none;border-radius:999px;padding:.15rem .4rem .15rem .15rem}.profile-link.active,.profile-link:hover{background:var(--line)}.profile-head{display:flex;align-items:center;gap:.9rem}.avatar.lg{width:56px;height:56px}.method{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}.method>div:first-child{min-width:0}.card.method{align-items:center}ul.plain{list-style:none;margin:.75rem 0 0;padding:0;display:flex;flex-direction:column;gap:.6rem;border-top:1px solid var(--line);padding-top:.6rem}.pill-ok{font-size:.8rem;color:var(--ok);white-space:nowrap}.codes{font-size:1.05rem;background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:.75rem;columns:2}code.break{word-break:break-all}.stack{margin-top:.75rem}
