:root{--bg-0: #0f1216;--bg-1: #151a20;--panel: #171c23;--panel-2: #1c222b;--border: #252c36;--border-strong: #33404f;--text: #e8ecf1;--muted: #8a94a3;--muted-2: #5f6976;--red: #d21f2f;--red-bright: #ff4d5a;--red-deep: #8a0f1a;--blue: #6f8fbf;--blue-bright: #9fc3e6;--blue-deep: #3d5f8a;--amber: #f5b301;--amber-bright: #ffd23f;--green: #2dd4a0;--green-bright: #6ff0c2;--powmr: #ff6800;--powmr-bright: #ff8a33;--powmr-deep: #c24f00;--solar: var(--amber);--home: var(--red-bright);--grid: var(--blue-bright);--batt: var(--green);--radius: 18px;--radius-sm: 12px;--shadow: 0 10px 30px rgba(0, 0, 0, .35);color-scheme:dark}*{box-sizing:border-box}html,body,#root{margin:0;min-height:100%}body{background:radial-gradient(900px 500px at 10% -10%,rgba(210,31,47,.18) 0%,transparent 60%),radial-gradient(800px 500px at 100% 0%,rgba(111,143,191,.16) 0%,transparent 55%),linear-gradient(180deg,var(--bg-1) 0%,var(--bg-0) 100%);background-attachment:fixed;color:var(--text);font:15px/1.45 Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-font-smoothing:antialiased}a{color:var(--blue-bright)}.muted{color:var(--muted)}.center{display:grid;place-items:center;min-height:60vh}.num{font-variant-numeric:tabular-nums}button{font:inherit}.logo{display:inline-flex;align-items:baseline;gap:2px;text-decoration:none;letter-spacing:-.02em;line-height:1}.logo .digi{font-weight:800;font-size:22px;color:var(--red);background:linear-gradient(180deg,#ff5a66,#d21f2f 55%,#9c1420);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 10px rgba(210,31,47,.35))}.logo .vision{font-weight:500;font-size:22px;letter-spacing:.04em;background:linear-gradient(180deg,#e9f3ff,#9fc3e6 45%,#5f7ea8 70%,#b8d4ee);-webkit-background-clip:text;background-clip:text;color:transparent}.logo .sub{font-size:12px;color:var(--muted);margin-left:10px;font-weight:500;letter-spacing:.08em;text-transform:uppercase}.login{min-height:100vh;display:grid;place-items:center;padding:16px}.login-card{width:min(420px,100%);background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:28px 28px 22px;box-shadow:var(--shadow)}.login-logo{text-align:center;margin-bottom:6px}.login h1{margin:6px 0 12px;text-align:center;font-size:22px;font-weight:700}.login form{display:grid;grid-template-columns:minmax(0,1fr);gap:14px}.login label{display:grid;gap:6px;font-size:13px;color:var(--muted);min-width:0}.login input{font:inherit;padding:12px 14px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:#0f141a;color:var(--text);outline:none;width:100%;min-width:0}.login input:focus{border-color:var(--blue);box-shadow:0 0 0 3px #6f8fbf40}.login input.code{font-size:28px;letter-spacing:10px;text-align:center;font-variant-numeric:tabular-nums}.login button{font-weight:600;padding:12px;border-radius:var(--radius-sm);border:0;cursor:pointer;background:linear-gradient(180deg,#ff4d5a,#d21f2f);color:#fff;box-shadow:0 6px 18px #d21f2f59}.login button:disabled{opacity:.5;cursor:default;box-shadow:none}.login button.link,.link{background:none;border:0;padding:4px;cursor:pointer;color:var(--blue-bright);box-shadow:none;font-weight:500}.error{background:#3b1220;border:1px solid #7f1d1d;color:#fecaca;padding:10px 12px;border-radius:var(--radius-sm);font-size:14px}.page{max-width:1280px;margin:0 auto;padding:0 16px;padding-block:0 40px;overflow-x:clip}.topbar{position:sticky;top:0;z-index:20;margin:0 -16px 14px;padding:10px 16px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 16px;background:#0f1216bf;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid var(--border)}.topbar .right{display:flex;align-items:center;gap:10px 14px;flex-wrap:wrap;font-size:13px;color:var(--muted)}.pill{display:inline-flex;align-items:center;gap:7px;padding:5px 10px;border-radius:999px;background:var(--panel-2);border:1px solid var(--border);font-size:12px;color:var(--muted);white-space:nowrap}.pill .age{display:inline-block;min-width:7.5ch;font-variant-numeric:tabular-nums}.dot{width:8px;height:8px;border-radius:50%;background:#64748b;flex:none}.dot.ok{background:var(--green);box-shadow:0 0 8px #2dd4a0b3}.dot.bad{background:var(--red-bright);box-shadow:0 0 8px #ff4d5a99}.iconbtn{display:inline-flex;align-items:center;gap:6px;background:var(--panel-2);border:1px solid var(--border);color:var(--text);padding:6px 10px;border-radius:999px;cursor:pointer;font-size:12px}.iconbtn:hover{border-color:var(--border-strong)}.iconbtn svg{width:15px;height:15px}.iconbtn.icon-only{width:34px;height:34px;padding:0;justify-content:center}.iconbtn.icon-only svg{width:17px;height:17px}.iconbtn.active,.iconbtn:active{background:var(--panel);border-color:var(--border-strong);color:#fff}.iconbtn:disabled{opacity:.45;cursor:default}.topbar a.logo{color:inherit}.menu{position:fixed;min-width:260px;z-index:30;background:var(--panel);border:1px solid var(--border-strong);border-radius:var(--radius-sm);box-shadow:var(--shadow);padding:6px;animation:menu-in .14s ease-out}@keyframes menu-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}.menu-head{display:none;align-items:center;justify-content:space-between;font-weight:600;font-size:15px;color:var(--text);padding:6px 8px 10px}.menu-item{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:10px;text-decoration:none;color:var(--text);font-size:14px;line-height:1.25}.menu-item:hover,.menu-item:focus-visible{background:var(--panel-2);outline:none}.menu-item.current{background:#d21f2f24}.menu-item svg{width:20px;height:20px;color:var(--blue-bright);flex:none}.menu-item span{display:grid;gap:2px}.menu-item b{font-weight:600}.menu-item small{color:var(--muted);font-size:12px}.admin .toolbar h2{display:inline-flex;align-items:center;gap:8px;color:var(--text);font-size:18px}.admin .toolbar h2 svg{width:20px;height:20px;color:var(--blue-bright)}.admin .toolbar .count{font-size:12px;font-weight:600;color:var(--muted);background:var(--panel-2);border:1px solid var(--border);border-radius:999px;padding:2px 9px}.toolbar-actions{display:flex;gap:8px;flex-wrap:wrap}.admin .toolbar-actions.sticky{position:sticky;top:calc(var(--topbar-h, 56px) + 10px);z-index:15;height:0;overflow:visible;justify-content:flex-end;margin:0}.admin .toolbar-actions.sticky .btn.ghost{background:var(--panel);box-shadow:var(--shadow)}.admin .toolbar-actions.sticky+.toolbar{padding-right:var(--actions-w, 150px)}.admin.users{--actions-w: 300px}.admin .intro{margin:0 0 16px;font-size:13.5px;max-width:760px}.btn{display:inline-flex;align-items:center;gap:7px;font:inherit;font-size:14px;font-weight:600;padding:9px 14px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:var(--panel-2);color:var(--text);cursor:pointer;text-decoration:none;white-space:nowrap;transition:border-color .15s,background .15s}.btn svg{width:16px;height:16px}.btn:hover{border-color:var(--muted-2)}.btn:disabled{opacity:.45;cursor:default}.btn.primary{background:linear-gradient(180deg,#ff4d5a,#d21f2f);border-color:transparent;color:#fff;box-shadow:0 6px 18px #d21f2f59}.btn.primary:hover{filter:brightness(1.08)}.btn.ghost{background:transparent}.btn.small{padding:6px 10px;font-size:13px;font-weight:500}.btn.danger{background:#3b1220;border-color:#7f1d1d;color:#fecaca}.btn.ghost.danger{background:transparent;border-color:var(--border-strong);color:var(--muted)}.btn.ghost.danger:hover:not(:disabled){border-color:#7f1d1d;color:#fecaca}.userlist{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(360px,100%),1fr));gap:14px}.card.user{--accent: var(--blue);display:grid;gap:10px}.card.user.admin{--accent: var(--red)}.user-main{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.user-id{min-width:0}.user-email{font-weight:600;font-size:15px;overflow-wrap:anywhere;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.user-name{font-size:13px;margin-top:2px}.tag{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:999px;border:1px solid var(--border);background:var(--panel-2);color:var(--muted);white-space:nowrap;flex:none}.tag svg{width:13px;height:13px}.tag.role.admin{color:#ffb3b9;border-color:#d21f2f80;background:#d21f2f24}.tag.you{color:var(--green);border-color:#2dd4a066;background:#2dd4a01a;font-weight:700;text-transform:uppercase;font-size:10px;letter-spacing:.06em}.user-meta{display:flex;gap:6px 16px;flex-wrap:wrap;font-size:12px}.user-actions{display:flex;gap:8px;flex-wrap:wrap;border-top:1px solid var(--border);padding-top:10px}.modal-back{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;background:#080a0db3;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);display:grid;place-items:center;padding:16px}.modal{width:min(460px,100%);background:var(--panel);border:1px solid var(--border-strong);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px 22px;animation:menu-in .16s ease-out}.modal-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}.modal h3{margin:0;font-size:17px;font-weight:700}.modal p{margin:0 0 16px;color:var(--muted);font-size:14px}.modal p b{color:var(--text)}.userform{display:grid;gap:14px}.userform label{display:grid;gap:6px;font-size:13px;color:var(--muted);min-width:0}.userform input,.userform select{font:inherit;font-size:15px;padding:11px 13px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:#0f141a;color:var(--text);outline:none;width:100%;min-width:0}.userform select{-moz-appearance:none;appearance:none;-webkit-appearance:none;padding-right:40px;background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);background-position:calc(100% - 18px) 50%,calc(100% - 13px) 50%;background-size:5px 5px,5px 5px;background-repeat:no-repeat}.userform input:focus,.userform select:focus{border-color:var(--blue);box-shadow:0 0 0 3px #6f8fbf40}.actions{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap;margin-top:4px}.toasts{position:fixed;left:50%;bottom:24px;transform:translate(-50%);z-index:60;display:flex;flex-direction:column;align-items:center;gap:8px;pointer-events:none;max-width:calc(100vw - 32px)}.toast{background:var(--panel);border:1px solid var(--border-strong);color:var(--text);font-size:14px;font-weight:500;padding:10px 16px;border-radius:999px;box-shadow:var(--shadow);white-space:nowrap;max-width:calc(100vw - 32px);overflow:hidden;text-overflow:ellipsis;animation:menu-in .16s ease-out}.update-banner{position:fixed;left:50%;top:14px;transform:translate(-50%);z-index:50;background:linear-gradient(180deg,#ff4d5a,#d21f2f);color:#fff;font-weight:600;font-size:13px;padding:10px 16px;border-radius:999px;box-shadow:0 10px 30px #d21f2f73;white-space:nowrap;max-width:calc(100vw - 32px)}.toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin:4px 0 12px}.toolbar h2{margin:0;font-size:15px;font-weight:600;color:var(--muted);letter-spacing:.02em}.chips{display:flex;gap:4px;padding:4px;background:var(--panel);border:1px solid var(--border);border-radius:999px;overflow-x:auto;max-width:100%;scrollbar-width:none}.chips::-webkit-scrollbar{display:none}.chip{border:0;background:transparent;color:var(--muted);padding:6px 12px;border-radius:999px;cursor:pointer;white-space:nowrap;font-size:13px;font-weight:500;transition:background .15s,color .15s}.chip:hover{color:var(--text)}.chip.active{background:linear-gradient(180deg,#ff4d5a,#d21f2f);color:#fff;box-shadow:0 4px 14px #d21f2f59}.rangeselect{display:none;font:inherit;font-size:14px;font-weight:500;color:var(--text);background:var(--panel);border:1px solid var(--border-strong);border-radius:var(--radius-sm);padding:10px 40px 10px 12px;-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);background-position:calc(100% - 18px) 50%,calc(100% - 13px) 50%;background-size:5px 5px,5px 5px;background-repeat:no-repeat}.hero{display:grid;grid-template-columns:minmax(300px,460px) minmax(0,1fr);gap:14px;align-items:stretch;margin-bottom:14px}.kpis{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;align-content:start}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(330px,100%),1fr));gap:14px}.lower{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.lower .span3{grid-column:1 / -1}.lower .span2{grid-column:span 2}.lower .toolbar{grid-column:1 / -1;margin:4px 0 0}.card{--accent: var(--blue);position:relative;background:linear-gradient(180deg,rgba(255,255,255,.025),transparent 40%),var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:16px 18px;min-width:0;box-shadow:var(--shadow)}.card:before{content:"";position:absolute;inset:0 auto auto 18px;width:44px;height:3px;border-radius:0 0 3px 3px;background:var(--accent);opacity:.9}.card-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px;flex-wrap:wrap}.card-title{font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:600;display:flex;align-items:center;gap:8px}.card-title svg{width:16px;height:16px;color:var(--accent)}.card-value{font-size:30px;font-weight:700;margin:4px 0 0;font-variant-numeric:tabular-nums;letter-spacing:-.02em;line-height:1.15}.card-value small{font-size:15px;font-weight:600;color:var(--muted);margin-left:4px}.card-sub{font-size:12.5px;color:var(--muted);margin-top:4px}.card-sub b{color:var(--text);font-weight:600}.bar{height:8px;background:#0f141a;border-radius:6px;margin-top:12px;overflow:hidden;border:1px solid var(--border)}.bar-fill{height:100%;transition:width .6s;border-radius:6px}.flow-card{padding:12px;display:grid;place-items:center}.flow{width:100%;max-width:470px;height:auto;display:block;aspect-ratio:440 / 466}.flow text{font-family:inherit}.flow .cap{font-size:12px;fill:var(--muted);font-weight:600;letter-spacing:.06em;text-transform:uppercase}.flow .val{font-size:15px;font-weight:700;fill:var(--text)}.flow .val.small{font-size:11px;font-weight:600;fill:var(--muted)}.flow .link{stroke:var(--border-strong);stroke-width:3;fill:none;stroke-linecap:round}.flow .link.on{stroke-width:3;opacity:.9}.flow .node{fill:var(--panel-2);stroke-width:2}.flow .center{fill:url(#gInv)}@keyframes pulse{0%,to{opacity:.55}50%{opacity:1}}.flow .halo{animation:pulse 2.6s ease-in-out infinite}.chart-wrap{position:relative;width:100%;min-width:0}.chart-wrap svg{display:block;width:100%;max-width:100%;height:auto}.chart-wrap .tip{position:absolute;pointer-events:none;background:#0f1216f0;border:1px solid var(--border-strong);border-radius:10px;padding:8px 10px;font-size:12px;box-shadow:var(--shadow);z-index:5;white-space:nowrap}.tip .t{color:var(--muted);margin-bottom:4px;font-weight:500}.tip .row{display:flex;justify-content:space-between;gap:18px;font-variant-numeric:tabular-nums}.tip .row i{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:6px}.legend{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:12px;color:var(--muted)}.legend button{background:none;border:0;color:inherit;padding:2px 0;cursor:pointer;display:inline-flex;align-items:center;gap:6px}.legend button.off{opacity:.4;text-decoration:line-through}.legend i{width:10px;height:3px;border-radius:2px;display:inline-block}.chart-empty{display:grid;place-items:center;height:180px;color:var(--muted);font-size:13px}.axis{font-size:11px;fill:var(--muted-2)}.gridline{stroke:var(--border);stroke-width:1}.wx-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 20px;margin:4px 0 10px}.wx-now{display:flex;align-items:center;gap:12px}.wx-temp{font-size:28px;font-weight:700;line-height:1.1;letter-spacing:-.02em;font-variant-numeric:tabular-nums}.wx-stats{display:flex;flex-wrap:wrap;gap:6px 18px;font-size:13px}.wx-stats div{display:flex;flex-direction:column}.wx-stats b{font-variant-numeric:tabular-nums}.wx-days{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;margin-top:12px}.wx-day{background:var(--panel-2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px 6px;text-align:center;display:grid;justify-items:center;gap:4px;min-width:0}.wx-day-name{font-size:12px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}.wx-day-temp{font-size:15px;font-variant-numeric:tabular-nums}.wx-day-kwh{font-size:13px;color:var(--solar)}.small{font-size:11.5px}@media(max-width:720px){.wx-days{grid-template-columns:repeat(4,minmax(0,1fr))}.wx-day:nth-child(n+5){display:none}}.table table{width:100%;border-collapse:collapse;margin-top:8px;font-variant-numeric:tabular-nums;font-size:14px}.table th,.table td{text-align:right;padding:7px 8px;border-bottom:1px solid var(--border);white-space:nowrap}.table th:first-child,.table td:first-child{text-align:left;color:var(--muted)}.table th{font-weight:500;color:var(--muted);font-size:12px}.table tr:last-child td{border-bottom:0}.table .scroll{overflow-x:auto}.table.wrap td,.table.wrap th{white-space:normal}footer{margin-top:26px;font-size:12px;text-align:center;color:var(--muted-2)}@media(max-width:980px){.hero{grid-template-columns:minmax(0,1fr)}.kpis{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.lower{grid-template-columns:repeat(2,minmax(0,1fr))}.lower .span2{grid-column:1 / -1}}@media(max-width:720px){.chips{display:none}.rangeselect{display:block;width:100%}.toolbar{flex-direction:column;align-items:stretch}}@media(max-width:560px){.page{padding-inline:12px}.topbar{margin-inline:-12px;padding-inline:12px}.card{padding:14px 15px}.card-value{font-size:26px}.kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.grid{gap:10px}.lower{grid-template-columns:minmax(0,1fr);gap:10px}.logo .sub{display:none}.hide-sm{display:none!important}.menu{top:0;right:0;bottom:0;left:0;border-radius:0;border:0;padding:12px;min-width:0;display:flex;flex-direction:column;gap:2px;padding-top:max(12px,env(safe-area-inset-top));animation:none}.menu-head{display:flex}.menu-item{padding:14px;font-size:16px}.menu-item svg{width:24px;height:24px}.admin .toolbar{flex-direction:row;align-items:center}.toolbar-actions{width:100%}.toolbar-actions .btn{flex:1;justify-content:center}.admin .toolbar-actions.sticky{position:static;height:auto;width:100%;margin:0 0 10px}.admin .toolbar-actions.sticky+.toolbar{padding-right:0}.modal{padding:18px 16px}.actions .btn{flex:1;justify-content:center}}@media(prefers-reduced-motion:reduce){.flow .halo{animation:none}}.devices .section-title{display:flex;align-items:center;gap:8px;margin:22px 0 10px;font-size:15px;color:var(--muted);font-weight:600}.devices .section-title svg{width:18px;height:18px;color:var(--amber)}.devices .card{margin-bottom:14px}.devices .table th.left,.devices .table td.left{text-align:left}.devices .small{font-size:12px}.devices .mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px}.devices .devname{display:inline-flex;align-items:center;gap:6px;color:var(--text)}.devices .iconbtn.tiny{width:24px;height:24px;opacity:.55}.devices .iconbtn.tiny svg{width:13px;height:13px}.devices tr:hover .iconbtn.tiny,.devices .iconbtn.tiny:focus-visible{opacity:1}.devices .renameform{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap}.devices .renameform input{background:var(--panel-2);border:1px solid var(--border);color:var(--text);padding:5px 8px;border-radius:var(--radius-sm);font:inherit;font-size:13px;min-width:180px}.devices .renameform input:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px #6f8fbf40}.devices .renameform .error{padding:4px 8px}.devices .table.wrap td,.devices .table.wrap th{white-space:nowrap}.devices .table.wrap td.left{white-space:normal;min-width:200px;line-height:1.5}.devices .table.wrap td:first-child{min-width:180px}.devices td.left .ok{color:var(--green)}.devices td.left .warn{color:var(--amber)}.devices td.left .alarm{color:var(--red-bright);font-weight:700}.devices tr.clickable{cursor:pointer}.devices tr.clickable:hover td{background:#ffffff08}body:has(.modal-back){overflow:hidden}.modal-back{overscroll-behavior:contain}.devpage .toolbar h2 .devname{display:inline-flex;align-items:center;gap:6px}.devpage .toolbar h2 .renameform{display:inline-flex;align-items:center;gap:6px;font-size:14px;font-weight:400}.devpage .toolbar h2 .renameform input{background:var(--panel-2);border:1px solid var(--border);color:var(--text);padding:5px 8px;border-radius:var(--radius-sm);font:inherit;font-size:14px;min-width:220px}.devpage .toolbar h2 .renameform input:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px #6f8fbf40}.devpage .iconbtn.tiny{width:26px;height:26px;opacity:.6}.devpage .iconbtn.tiny svg{width:14px;height:14px}.devpage .iconbtn.tiny:hover,.devpage .iconbtn.tiny:focus-visible{opacity:1}.devpage .card{margin-bottom:14px}.devpage .toolbar{margin-bottom:22px}.devpage .card-title .dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:8px;background:var(--muted);vertical-align:middle}.devpage .card-title .dot.on{background:var(--green);box-shadow:0 0 6px #2dd4a0b3}.devpage .card-title .dot.off{background:#7f1d1d}.devpage .kv{display:grid;grid-template-columns:max-content 1fr;gap:6px 16px;font-size:13.5px;align-items:baseline;margin-top:8px}.devpage .kv span{color:var(--muted)}.devpage .kv b{font-weight:500;overflow-wrap:anywhere}.devpage .kv .copy,.devpage .raw .copy{cursor:copy}.devpage .kv .copy:hover,.devpage .raw td.copy:hover,.devpage .raw pre.copy:hover{background:#ffffff0a}.devpage .raw{border:1px solid var(--border);border-radius:var(--radius-sm);overflow-x:auto;margin-top:8px}.devpage .raw table{margin-top:0}.devpage .raw th:first-child,.devpage .raw td:first-child{text-align:left}.devpage .raw td.val{text-align:right;color:var(--text);font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;letter-spacing:.01em;white-space:normal;word-break:break-all}.devpage .raw td:last-child{width:1%}.devpage .raw td.muted{white-space:nowrap}.devpage .raw.log th:first-child,.devpage .raw.log td:first-child,.devpage .raw.log th:nth-child(2),.devpage .raw.log td:nth-child(2){width:1%;white-space:nowrap}.devpage .raw.log th:last-child,.devpage .raw.log td:last-child{width:auto}.devpage .raw pre{margin:0;padding:12px;font-size:12px;line-height:1.5;white-space:pre-wrap;word-break:break-word}.devpage p.small{margin:10px 0 0}.devpage .mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.devpage .small{font-size:12px}.devices .dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;background:var(--muted);vertical-align:middle}.devices .dot.on{background:var(--green);box-shadow:0 0 6px #2dd4a0b3}.devices .dot.off{background:#7f1d1d}.tag.state.ok{color:var(--green);border-color:#2dd4a066;background:#2dd4a01a}.tag.state.warn{color:var(--amber);border-color:#f5b30173;background:#f5b3011f}.tag.state.bad{color:#ffb3b9;border-color:#d21f2f80;background:#d21f2f24}.tuya .kv{display:grid;grid-template-columns:max-content 1fr;gap:6px 16px;font-size:13.5px;margin:10px 0 14px}.tuya .kv span{color:var(--muted)}.tuya .kv b{font-weight:600}.tuya .qrbox{display:flex;gap:18px;align-items:center;flex-wrap:wrap;margin:12px 0 16px;padding:14px;border:1px dashed var(--border-strong);border-radius:var(--radius-sm);background:var(--panel-2);font-size:14px}.tuya .qrbox img{width:220px;height:220px;max-width:100%;border-radius:8px;background:#fff;padding:8px;image-rendering:pixelated}.tuya .qrbox>div{flex:1 1 240px;line-height:1.5}.tuya .loginrow{display:grid;gap:10px;margin-top:8px}.tuya .loginrow label{display:grid;gap:6px;font-size:13px;color:var(--muted);max-width:420px}.tuya .loginrow input{font:inherit;padding:9px 12px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:var(--panel-2);color:var(--text)}.tuya .loginrow input:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px #6f8fbf40}.tuya .loginrow .actions{display:flex;gap:8px;flex-wrap:wrap}.tuya .table{margin-top:14px}.iconbtn.bell{position:relative}.iconbtn.bell .badge{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:var(--red-bright);color:#fff;font-size:11px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;box-shadow:0 0 0 2px var(--bg-0)}.iconbtn.bell.has-unread svg{color:var(--amber)}.menu.notifymenu{min-width:340px;max-width:min(420px,calc(100vw - 24px))}.notifymenu .feed{max-height:min(50vh,420px);overflow-y:auto;overscroll-behavior:contain;margin-bottom:4px;border-bottom:1px solid var(--border);padding-bottom:4px}.notifymenu .feed .empty{padding:14px 10px}.feed-item{display:flex;align-items:flex-start;gap:10px;padding:8px 10px;border-radius:var(--radius-sm);color:var(--text);text-decoration:none}.feed-item:hover,.feed-item:focus-visible{background:var(--panel-2);outline:none}.feed-item span:last-child{display:grid;gap:2px;min-width:0}.feed-item b{font-weight:600;font-size:13.5px;overflow-wrap:anywhere}.feed-item small{color:var(--muted);font-size:12px}.sev{display:inline-block;width:9px;height:9px;border-radius:50%;margin-top:5px;flex:none;background:var(--muted)}.sev.info{background:var(--blue-bright, #9fc3e6)}.sev.warn{background:var(--amber)}.sev.critical{background:var(--red-bright);box-shadow:0 0 8px #ff4d5a99}.switch{display:inline-flex;align-items:center;cursor:pointer;flex:none}.switch input{position:absolute;opacity:0;width:0;height:0}.switch .track{width:42px;height:24px;border-radius:999px;background:var(--panel-2);border:1px solid var(--border-strong);position:relative;transition:background .15s,border-color .15s}.switch .knob{position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:var(--muted);transition:transform .15s,background .15s}.switch input:checked+.track{background:#2dd4a040;border-color:var(--green)}.switch input:checked+.track .knob{transform:translate(18px);background:var(--green)}.switch input:focus-visible+.track{box-shadow:0 0 0 3px #6f8fbf59}.switch.disabled{opacity:.4;cursor:default}.notify .card{margin-bottom:14px}.notify .card.off .kinds,.notify .card.master.off .row{opacity:.55}.notify .row{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-top:8px;font-size:13.5px}.notify .row .warn{color:var(--amber)}.notify .kinds{list-style:none;margin:6px 0 0;padding:0;display:grid;gap:2px}.notify .kinds li{display:flex;align-items:center;gap:10px;padding:8px 0;border-top:1px solid var(--border);font-size:14px}.notify .kinds li:first-child{border-top:0}.notify .kinds .label{flex:1}.notify .kinds .sev{margin-top:0}.notify table.thresholds td.right,.notify table.thresholds th{text-align:right}.notify table.thresholds input[type=number]{width:84px;background:var(--panel-2);border:1px solid var(--border);color:var(--text);padding:4px 6px;border-radius:var(--radius-sm);font:inherit;font-size:13px;text-align:right}.notify tr.muted td{color:var(--muted)}.notify .addrow{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:12px}.notify .addrow select,.notify .addrow input{background:var(--panel-2);border:1px solid var(--border);color:var(--text);padding:7px 9px;border-radius:var(--radius-sm);font:inherit;font-size:13.5px;min-width:120px}.notify .addrow input{width:120px}.notify .addrow select:disabled,.notify .addrow input:disabled{opacity:.5}.notify .btn.small{padding:7px 12px;font-size:13px}@media(max-width:560px){.menu.notifymenu{min-width:0;max-width:none}.notifymenu .feed{max-height:none;flex:1}}.tuya .account{border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 14px;margin:12px 0;background:#ffffff04}.tuya .account .card-head{margin-bottom:2px}.tuya .account .acct-title{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;font-weight:600}.tuya .account .acct-title .code{font-family:JetBrains Mono,ui-monospace,monospace;font-size:12.5px;color:var(--muted);font-weight:500}.tuya .account .kv{margin:8px 0 10px}.tuya .account .actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}.tuya .confirmbox{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:8px;padding:10px 12px;border:1px solid #7f1d1d;border-radius:var(--radius-sm);background:#3b1220;color:#fecaca;font-size:13.5px}.tuya .addrow{margin-top:14px;padding-top:12px;border-top:1px dashed var(--border-strong)}.tuya .addrow .fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,320px));gap:10px}.tuya .hint{font-size:13px;color:var(--muted);line-height:1.5;margin:6px 0 0}.devpage .raw.esplog th:nth-child(3),.devpage .raw.esplog td:nth-child(3){width:1%;white-space:nowrap}.devpage .raw.esplog td.lvl{font-family:JetBrains Mono,ui-monospace,monospace;font-size:12px;text-transform:uppercase;color:var(--muted)}.devpage .raw.esplog tr.lvl-warn td.lvl{color:var(--amber)}.devpage .raw.esplog tr.lvl-error td.lvl{color:var(--red);font-weight:600}.devpage .raw.esplog td.val{overflow-wrap:anywhere}
