@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/barlow-vietnamese-400-normal-Dpl4UHAZ.woff2)format("woff2"),url(/assets/barlow-vietnamese-400-normal-BFeobeCK.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/barlow-latin-ext-400-normal-HxX4XjxC.woff2)format("woff2"),url(/assets/barlow-latin-ext-400-normal-CvBsJvxq.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/barlow-latin-400-normal-qiz4-Cze.woff2)format("woff2"),url(/assets/barlow-latin-400-normal-fsAxiSwU.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/barlow-vietnamese-500-normal-zTViEIzf.woff2)format("woff2"),url(/assets/barlow-vietnamese-500-normal-GNfB7rCE.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/barlow-latin-ext-500-normal-DOaysfXq.woff2)format("woff2"),url(/assets/barlow-latin-ext-500-normal-CJPcKP2Q.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/barlow-latin-500-normal-BPAOfeC8.woff2)format("woff2"),url(/assets/barlow-latin-500-normal-C1h8hMer.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/barlow-vietnamese-600-normal-DcjprdFV.woff2)format("woff2"),url(/assets/barlow-vietnamese-600-normal-CA_GiK2e.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/barlow-latin-ext-600-normal-B8NK_A3D.woff2)format("woff2"),url(/assets/barlow-latin-ext-600-normal-DMVRjfRT.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/barlow-latin-600-normal-DILqtrty.woff2)format("woff2"),url(/assets/barlow-latin-600-normal-CNwfPWQD.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--scheme:light;--font:"Barlow", system-ui, -apple-system, "Segoe UI", sans-serif;--page:#eef2f5;--panel:#fff;--panel-2:#f5f7f9;--ink:#15212c;--ink-2:#475563;--muted:#6f7b87;--line:#d6dde4;--grid:#e7ecf0;--accent:#1f5fbf;--accent-ink:#fff;--accent-soft:#e3ecfa;--chart-future:#1f5fbf0d;--focus:#1f5fbf;--shadow:0 12px 32px #15212c29, 0 2px 6px #15212c14;--lv0:#c9d2da;--lv1:#b8a6db;--lv2:#f2cf1d;--lv3:#f08a1c;--lv4:#e0393a;--lv5:#9a2fae;--good:#0ca30c;--warning:#fab219;--critical:#d03b3b;--good-text:#006300;--s1:#2a78d6;--s2:#eb6834;--s3:#1baf7a;--s4:#eda100;--s5:#e87ba4;--s6:#008300;--s7:#6250d6;--s8:#e34948;--seq-0:#cde2fb;--seq-1:#9ec5f4;--seq-2:#6da7ec;--seq-3:#3987e5;--seq-4:#256abf;--seq-5:#184f95;--seq-6:#0d366b;--radius:8px;--radius-sm:6px;--row:92px;--gap:12px}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--scheme:dark;--page:#0f161d;--panel:#16202a;--panel-2:#1c2733;--ink:#e4ebf1;--ink-2:#a9b6c2;--muted:#7d8a97;--line:#283541;--grid:#22303b;--accent:#5b9cf0;--accent-ink:#0f161d;--accent-soft:#1c2f48;--chart-future:#5b9cf012;--focus:#8fbcf6;--shadow:0 12px 32px #00000080, 0 2px 6px #0000004d;--lv0:#34414d;--good-text:#0ca30c;--s1:#3987e5;--s2:#d95926;--s3:#199e70;--s4:#c98500;--s5:#d55181;--s6:#008300;--s7:#9085e9;--s8:#e66767;--seq-0:#12345f;--seq-1:#184f95;--seq-2:#256abf;--seq-3:#3987e5;--seq-4:#6da7ec;--seq-5:#9ec5f4;--seq-6:#cde2fb}}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--scheme:dark;--page:#0f161d;--panel:#16202a;--panel-2:#1c2733;--ink:#e4ebf1;--ink-2:#a9b6c2;--muted:#7d8a97;--line:#283541;--grid:#22303b;--accent:#5b9cf0;--accent-ink:#0f161d;--accent-soft:#1c2f48;--chart-future:#5b9cf012;--focus:#8fbcf6;--shadow:0 12px 32px #00000080, 0 2px 6px #0000004d;--lv0:#34414d;--good-text:#0ca30c;--s1:#3987e5;--s2:#d95926;--s3:#199e70;--s4:#c98500;--s5:#d55181;--s6:#008300;--s7:#9085e9;--s8:#e66767;--seq-0:#12345f;--seq-1:#184f95;--seq-2:#256abf;--seq-3:#3987e5;--seq-4:#6da7ec;--seq-5:#9ec5f4;--seq-6:#cde2fb}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--page);color:var(--ink);font:400 15px/1.45 var(--font);font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;margin:0}h1,h2,h3,h4{margin:0;font-weight:600;line-height:1.2}a{color:var(--accent)}p{margin:0}button,input,select,textarea{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;overflow:hidden;position:absolute!important}.muted{color:var(--muted)}.skip-link{z-index:50;background:var(--panel);border-radius:var(--radius-sm);padding:8px 12px;position:absolute;top:-40px;left:12px}.skip-link:focus{top:12px}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}.button{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);min-height:34px;color:var(--ink);white-space:nowrap;cursor:pointer;align-items:center;gap:6px;padding:6px 12px;font-weight:500;text-decoration:none;display:inline-flex}.button:hover{border-color:var(--muted)}.button.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.button.primary:hover{filter:brightness(1.08)}.button.danger{color:var(--critical)}.button:disabled{opacity:.55;cursor:default}.button.is-zoomed{border-color:var(--accent);background:var(--accent-soft)}.icon-button{border-radius:var(--radius-sm);width:30px;height:30px;color:var(--ink-2);cursor:pointer;background:0 0;border:0;place-items:center;padding:0;font-size:18px;line-height:1;display:inline-grid}.icon-button:hover{background:var(--panel-2);color:var(--ink)}.icon-button.danger:hover{color:var(--critical)}.icon-button:disabled{opacity:.35;cursor:default}input[type=text],input[type=search],input[type=number],input[type=datetime-local],select,textarea{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);width:100%;min-height:34px;padding:6px 10px}textarea{resize:vertical}.field{flex-direction:column;gap:4px;min-width:0;display:flex}.field>span:first-child{color:var(--ink-2);font-size:13px;font-weight:500}.field.inline{flex-direction:row;align-items:center;gap:8px}.field.inline>span:first-child{white-space:nowrap}.field.inline select,.field.inline input{width:auto}.field.grow{flex:1}.field.grow input{width:100%}.field-heading{color:var(--ink-2);margin:14px 0 8px;font-size:14px}.fieldset{border:1px solid var(--line);border-radius:var(--radius-sm);flex-direction:column;gap:8px;margin:0;padding:10px 12px 12px;display:flex}.fieldset>legend{color:var(--ink-2);padding:0 4px;font-size:13px;font-weight:500}.check{cursor:pointer;align-items:center;gap:8px;display:flex}.check input{width:16px;height:16px;accent-color:var(--accent)}.hint{color:var(--ink-2);font-size:13px}.row{flex-wrap:wrap;gap:8px;display:flex}.badge{border:1px solid var(--line);color:var(--ink-2);white-space:nowrap;border-radius:999px;align-items:center;padding:1px 8px;font-size:12px;font-weight:500;display:inline-flex}.badge.is-syncing{border-color:var(--accent);color:var(--accent)}.chips{flex-wrap:wrap;gap:6px;margin:0 0 8px;padding:0;list-style:none;display:flex}.chip{background:var(--accent-soft);border-radius:999px;align-items:center;gap:2px;padding:2px 4px 2px 10px;font-size:13px;font-weight:500;display:inline-flex}.chip button{cursor:pointer;background:0 0;border:0;border-radius:50%;width:22px;height:22px}.chip button:hover{background:var(--panel)}.toggle-chip{cursor:pointer;margin:0 6px 6px 0;display:inline-flex}.toggle-chip input{opacity:0;position:absolute}.toggle-chip span{border:1px solid var(--line);border-radius:999px;padding:4px 10px;font-size:13px}.toggle-chip input:checked+span{border-color:var(--accent);background:var(--accent-soft);color:var(--ink);font-weight:500}.toggle-chip input:focus-visible+span{outline:2px solid var(--focus);outline-offset:2px}.status-badge{background:var(--panel-2);white-space:nowrap;border-radius:999px;align-items:center;gap:5px;padding:1px 8px 1px 6px;font-size:12px;font-weight:600;display:inline-flex}.status-icon{background:var(--muted);width:10px;height:10px}.status-badge.is-ok .status-icon{background:var(--good);border-radius:50%}.status-badge.is-warn .status-icon{background:var(--warning);clip-path:polygon(50% 0,100% 100%,0 100%)}.status-badge.is-alert .status-icon{background:var(--critical);transform:rotate(45deg)scale(.85)}.status-badge.is-none .status-icon{border:1.5px solid var(--muted);background:0 0;border-radius:50%}.shell{grid-template-columns:196px minmax(0,1fr);min-height:100vh;display:grid}.shell.is-bare{grid-template-columns:minmax(0,1fr)}.nav{border-right:1px solid var(--line);background:var(--panel);flex-direction:column;gap:18px;height:100vh;padding:16px 10px;display:flex;position:sticky;top:0}.nav ul{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.nav-brand{color:var(--ink);letter-spacing:.01em;align-items:center;gap:8px;padding:4px 8px;font-size:18px;font-weight:600;text-decoration:none;display:flex}.logo path{fill:none;stroke:var(--accent);stroke-width:2.4px}.logo path+path{stroke:var(--ink)}.logo circle{fill:var(--lv2)}.nav-link{border-radius:var(--radius-sm);color:var(--ink-2);align-items:center;gap:10px;padding:8px 10px;font-weight:500;text-decoration:none;display:flex}.nav-link svg path{fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round}.nav-link:hover{background:var(--panel-2);color:var(--ink)}.nav-link[aria-current=page]{background:var(--accent-soft);color:var(--ink)}.nav-link[aria-current=page] svg path{stroke:var(--accent)}.main{min-width:0;padding:18px 22px 40px}.offline{border-radius:var(--radius-sm);background:var(--accent-soft);margin-bottom:12px;padding:8px 12px;font-size:14px}.toast{z-index:100;border-radius:var(--radius-sm);background:var(--ink);max-width:min(92vw,520px);color:var(--page);box-shadow:var(--shadow);padding:10px 16px;position:fixed;bottom:24px;left:50%;transform:translate(-50%)}.toast.is-error{background:var(--critical);color:#fff}@media (width<=900px){.shell{grid-template-columns:minmax(0,1fr)}.nav{z-index:40;height:auto;padding:4px 6px calc(4px + env(safe-area-inset-bottom));border-right:0;border-top:1px solid var(--line);flex-direction:row;position:fixed;inset:auto 0 0}.nav-brand{display:none}.nav ul{flex-direction:row;flex:1;justify-content:space-around}.nav-link{flex-direction:column;gap:2px;padding:6px 8px;font-size:11px}.main{padding:14px 16px calc(84px + env(safe-area-inset-bottom))}.shell.is-bare .main{padding-bottom:16px}}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:18px;display:flex}.page-head h1{font-size:26px}.page-actions{flex-wrap:wrap;gap:8px;display:flex}.page-message{text-align:center;place-items:center;gap:16px;padding:80px 16px;display:grid}.section{margin-top:32px}.section>h2{margin-bottom:12px;font-size:18px}.callout{border:1px dashed var(--line);border-radius:var(--radius);background:var(--panel);flex-direction:column;align-items:flex-start;gap:12px;margin:12px 0;padding:18px 20px;display:flex}.callout.intro h2{font-size:22px}.callout.intro p{max-width:62ch;color:var(--ink-2)}.dash-list{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);flex-direction:column;margin:0;padding:0;list-style:none;display:flex;overflow:hidden}.dash-list li+li{border-top:1px solid var(--line)}.dash-row{color:var(--ink);grid-template-columns:minmax(0,1fr) auto;gap:2px 16px;padding:12px 16px;text-decoration:none;display:grid}.dash-row:hover{background:var(--panel-2)}.dash-row-title{font-size:16px;font-weight:600}.dash-row-meta{color:var(--ink-2);grid-column:1;font-size:13px}.dash-row-side{grid-area:1/2/span 2;align-items:center;gap:10px;font-size:13px;display:flex}.template-grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px;margin:0;padding:0;list-style:none;display:grid}.template{border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:var(--radius-sm);background:var(--panel);text-align:left;cursor:pointer;flex-direction:column;gap:4px;width:100%;height:100%;padding:14px 16px;display:flex}.template:hover{border-color:var(--muted);border-left-color:var(--accent)}.template-title{font-weight:600}.template-desc{color:var(--ink-2);font-size:13px}.install{color:var(--ink-2);flex-wrap:wrap;align-items:center;gap:12px;display:flex}.dash-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 16px;margin-bottom:10px;display:flex}.dash-title{align-items:center;gap:10px;min-width:0;display:flex}.dash-title h1{text-overflow:ellipsis;white-space:nowrap;font-size:24px;overflow:hidden}.title-input{min-width:min(420px,70vw);font-weight:600;font-size:20px!important}.dash-controls{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.dash-desc{max-width:80ch;color:var(--ink-2);margin:-4px 0 10px}.dash-foot{color:var(--muted);margin-top:20px;font-size:12px}.var-picker,.time-picker,.menu-wrap{position:relative}.var-button{gap:0;padding:0;overflow:hidden}.var-name{background:var(--panel-2);border-right:1px solid var(--line);color:var(--ink-2);align-self:stretch;place-items:center;padding:0 8px;font-size:13px;display:grid}.var-value{text-overflow:ellipsis;max-width:220px;padding:6px 10px;overflow:hidden}.var-button.is-empty .var-value{color:var(--accent)}.popover{z-index:30;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);min-width:220px;box-shadow:var(--shadow);padding:10px;position:absolute;top:calc(100% + 6px);right:0}.var-popover{width:min(380px,90vw);left:0;right:auto}.var-popover>.button{margin-top:8px}.menu{margin:0;padding:4px;list-style:none}.menu-item{border-radius:var(--radius-sm);text-align:left;cursor:pointer;background:0 0;border:0;width:100%;padding:7px 10px;display:block}.menu-item:hover{background:var(--panel-2)}.menu-item.is-selected{font-weight:600}.menu-item.is-selected:before{content:"✓ ";color:var(--accent)}.menu-item.danger{color:var(--critical)}.time-popover{grid-template-columns:repeat(3,minmax(130px,1fr));gap:6px 12px;width:min(560px,92vw);display:grid}.time-group h4,.time-custom h4{color:var(--muted);margin:4px 10px;font-size:12px;font-weight:500}.time-group ul{margin:0;padding:0;list-style:none}.time-custom{border-top:1px solid var(--line);flex-wrap:wrap;grid-column:1/-1;align-items:flex-end;gap:8px;padding-top:10px;display:flex}.time-custom h4{flex-basis:100%}.time-custom label{color:var(--ink-2);flex-direction:column;gap:2px;font-size:13px;display:flex}.ribbon{color:var(--ink-2);flex-direction:column;gap:5px;margin:0 0 14px;font-size:13px;text-decoration:none;display:flex}.ribbon.is-loading{height:26px}.ribbon-bar{border-radius:3px;gap:2px;height:6px;display:flex;overflow:hidden}.ribbon-seg{min-width:6px}.ribbon-text{flex-wrap:wrap;align-items:center;gap:2px 14px;display:flex}.ribbon:hover .ribbon-text{color:var(--ink)}.ribbon-count{white-space:nowrap;align-items:center;gap:5px;display:inline-flex}.ribbon-dot{border-radius:2px;width:9px;height:9px}.ribbon-time{color:var(--muted);margin-left:auto}.lv-0{--lv:var(--lv0)}.lv-1{--lv:var(--lv1)}.lv-2{--lv:var(--lv2)}.lv-3{--lv:var(--lv3)}.lv-4{--lv:var(--lv4)}.lv-5{--lv:var(--lv5)}.ribbon-seg,.ribbon-dot{background:var(--lv)}.grid{grid-template-columns:repeat(var(--cols), minmax(0, 1fr));grid-auto-rows:var(--row);gap:var(--gap);grid-auto-flow:dense;display:grid}.cell{grid-column:span var(--w);grid-row:span var(--h);min-width:0;min-height:0;position:relative}.grid.is-editing .panel{border-style:dashed}.cell.is-dragging{opacity:.4}.cell.is-over .panel{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.cell.is-resizing .panel{border-color:var(--accent)}.cell-tools{align-items:center;gap:0;margin-left:auto;display:inline-flex}.cell-grip{cursor:grab}.cell-size{color:var(--muted);margin:0 4px;font-size:12px}.cell-resize{background:var(--panel-2);width:22px;height:22px;color:var(--ink-2);cursor:nwse-resize;touch-action:none;border:0;border-radius:4px;padding:0;position:absolute;bottom:2px;right:2px}.panel{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);flex-direction:column;height:100%;min-height:0;display:flex;overflow:hidden}.panel-head{align-items:center;gap:6px;min-height:36px;padding:4px 6px 0 12px;display:flex}.panel-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:14px;font-weight:600;overflow:hidden}.panel-actions{display:inline-flex}.panel-expand{opacity:0}.panel:hover .panel-expand,.panel-expand:focus-visible{opacity:1}.panel-body{flex-direction:column;flex:1;min-height:0;padding:2px 12px 10px;display:flex;overflow:auto}.edit-bar{z-index:20;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);box-shadow:var(--shadow);flex-wrap:wrap;align-items:center;gap:10px 16px;margin-top:14px;padding:10px 12px;display:flex;position:sticky;bottom:12px}@media (width<=900px){.edit-bar{bottom:calc(76px + env(safe-area-inset-bottom))}}.gallery{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px;margin:0;padding:0;list-style:none;display:grid}.gallery-item{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);text-align:left;cursor:pointer;flex-direction:column;gap:2px;width:100%;height:100%;padding:12px 14px;display:flex}.gallery-item:hover{border-color:var(--accent)}.gallery-name{font-weight:600}.gallery-desc{color:var(--ink-2);font-size:13px}.expanded-widget{flex-direction:column;height:min(70vh,640px);display:flex}.dashboard.is-tv{--row:calc((100vh - 120px) / 8)}.dashboard.is-tv .dash-head h1{font-size:22px}.dialog{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);width:min(560px,100vw - 32px);max-height:calc(100vh - 48px);color:var(--ink);box-shadow:var(--shadow);padding:0}.dialog-wide{width:min(1080px,100vw - 32px)}.dialog::backdrop{background:#0a101673}.dialog[open]{flex-direction:column;display:flex}.dialog-head{justify-content:space-between;align-items:center;gap:12px;padding:12px 12px 8px 18px;display:flex}.dialog-head h2{font-size:18px}.dialog-body{flex:1;min-height:0;padding:4px 18px 18px;overflow:auto}.dialog-body>p+*{margin-top:12px}.dialog-foot{border-top:1px solid var(--line);justify-content:flex-end;gap:8px;padding:12px 18px;display:flex}.editor{grid-template-columns:minmax(300px,420px) minmax(0,1fr);gap:18px;display:grid}.editor-form{flex-direction:column;gap:12px;display:flex}.editor-preview{height:calc(var(--h) * var(--row) + (var(--h) - 1) * var(--gap));min-height:200px;max-height:70vh;position:sticky;top:0}@media (width<=860px){.editor{grid-template-columns:minmax(0,1fr)}.editor-preview{order:-1;height:260px;position:static}}.query-row{border-bottom:1px solid var(--grid);grid-template-columns:repeat(auto-fit,minmax(140px,1fr)) auto;align-items:end;gap:8px;padding-bottom:8px;display:grid}.query-remove{align-self:end;margin-bottom:2px}.query-picker{border-radius:var(--radius-sm);background:var(--panel-2);flex-direction:column;grid-column:1/-1;gap:8px;padding:10px;display:flex}.threshold-row{grid-template-columns:90px minmax(70px,1fr) 110px auto;gap:6px;display:grid}.size-fields{flex-direction:row}.station-search{gap:6px;display:flex}.station-options{flex-direction:column;max-height:260px;margin:8px 0 0;padding:0;list-style:none;display:flex;overflow:auto}.station-option{border-radius:var(--radius-sm);text-align:left;cursor:pointer;background:0 0;border:0;flex-direction:column;width:100%;padding:6px 10px;display:flex}.station-option:hover{background:var(--panel-2)}.station-option.is-selected{background:var(--accent-soft)}.station-option-name{font-weight:500}.station-option-meta{color:var(--muted);font-size:12px}.picker-heading{color:var(--muted);margin:12px 10px 0;font-size:12px;font-weight:500}.share-intro{color:var(--ink-2);flex-direction:column;align-items:flex-start;gap:14px;display:flex}.share-links{flex-direction:column;gap:14px;display:flex}.copy-row{gap:6px;display:flex}.copy-row input{font-size:13px}.danger-zone{border-top:1px solid var(--line);padding-top:10px}.danger-zone summary{color:var(--critical);cursor:pointer}.danger-zone p{color:var(--ink-2);margin:8px 0;font-size:14px}.widget-empty{color:var(--muted);text-align:center;flex:1;place-items:center;gap:6px;padding:12px;font-size:14px;display:grid}.widget-error{color:var(--critical)}.widget-chart{flex-direction:column;flex:1;min-height:0;display:flex}.chart{flex-direction:column;flex:1;min-height:80px;display:flex;position:relative}.chart-compact{min-height:24px}.chart-plot{flex:1;min-height:0;overflow:hidden}.chart .uplot{font-family:var(--font)}.chart .u-select{background:var(--accent-soft);opacity:.6}.chart .u-cursor-x,.chart .u-cursor-y{border-color:var(--muted)!important}.chart-tip{z-index:5;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);min-width:160px;max-width:280px;box-shadow:var(--shadow);pointer-events:none;padding:8px 10px;font-size:12px;position:absolute}.chart-tip-time{color:var(--ink-2);margin-bottom:4px;font-weight:500}.chart-tip-row{grid-template-columns:10px minmax(0,1fr) auto;align-items:center;gap:6px;display:grid}.chart-tip-swatch{border-radius:2px;width:10px;height:3px}.chart-tip-label{text-overflow:ellipsis;white-space:nowrap;color:var(--ink-2);overflow:hidden}.chart-tip-value{font-weight:600}.chart-tip-event{border-left:3px solid var(--lv);color:var(--ink-2);margin-top:4px;padding-left:8px}.legend{flex-wrap:wrap;gap:2px 14px;margin:4px 0 0;padding:0;font-size:12px;list-style:none;display:flex}.legend li{align-items:center;gap:6px;min-width:0;display:inline-flex}.legend-swatch{vertical-align:middle;border-radius:2px;width:12px;height:3px;display:inline-block}.legend-label{color:var(--ink-2)}.legend-value{font-weight:600}.value-widget{flex-direction:column;flex:1;min-height:0;display:flex}.value-main{align-items:baseline;gap:4px;display:flex}.value-number{letter-spacing:-.01em;font-size:clamp(30px,4.2vw,46px);font-weight:500;line-height:1.05}.value-unit{color:var(--ink-2);font-size:18px}.value-widget.is-alert .value-number{color:var(--critical)}.value-widget.is-warn .value-number{color:var(--ink);-webkit-text-decoration:underline 3px var(--warning);text-decoration:underline 3px var(--warning);text-underline-offset:6px}.value-meta{color:var(--ink-2);flex-wrap:wrap;align-items:center;gap:4px 8px;margin-top:4px;font-size:13px;display:flex}.value-spark{flex:1;min-height:24px;margin-top:6px;display:flex}.rain-widget{flex-direction:column;flex:1;gap:4px;min-height:0;display:flex}.rain-headline{font-size:clamp(22px,2.6vw,32px);font-weight:600;line-height:1.15}.rain-widget.is-wet .rain-headline{color:var(--seq-5)}.rain-detail{max-width:64ch;color:var(--ink-2)}.rain-chart{flex-direction:column;flex:1;min-height:70px;margin-top:6px;display:flex}.rain-bars{border-bottom:1px solid var(--line);flex:1;grid-template-columns:repeat(24,minmax(0,1fr));align-items:end;gap:2px;margin:0;padding:0;list-style:none;display:grid}.rain-bar{height:100%;position:relative}.rain-bar>span:not(.sr-only){border-radius:3px 3px 0 0;position:absolute;inset:auto 0 0}.rain-high{background:var(--seq-1);opacity:.55}.rain-expected{background:var(--seq-3)}.rain-bar.c2 .rain-expected{background:var(--seq-4)}.rain-bar.c3 .rain-expected{background:var(--seq-5)}.rain-bar.c4 .rain-expected{background:var(--seq-6)}.rain-bar:first-child:after{content:"";border-left:1px solid var(--ink-2);position:absolute;inset:0 auto 0 -1px}.rain-legend{color:var(--muted);align-items:center;gap:6px;margin-top:2px;font-size:11px;display:flex}.rain-key{border-radius:2px;width:10px;height:10px;display:inline-block}.rain-key-expected{background:var(--seq-3)}.rain-key-high{background:var(--seq-1);opacity:.55;margin-left:8px}.rain-axis{height:16px;color:var(--muted);font-size:11px;position:relative}.rain-axis span{white-space:nowrap;position:absolute;top:2px;transform:translate(-50%)}.rain-axis span:first-child{transform:none}.rain-axis span:last-child{transform:translate(-100%)}.rain-meta{color:var(--muted);flex-wrap:wrap;align-items:center;gap:4px 14px;font-size:12px;display:flex}.rain-meta .link-button{color:var(--accent);font-size:12px}.rain-source{color:var(--muted);font-size:12px}.create-position{flex-direction:column;align-items:flex-start;gap:8px;margin:12px 0;display:flex}.forecast-widget,.sun-widget{flex-direction:column;gap:6px;min-height:0;display:flex}.tabs{gap:4px;display:flex;overflow-x:auto}.tab{border:1px solid var(--line);white-space:nowrap;cursor:pointer;background:0 0;border-radius:999px;padding:3px 10px;font-size:13px}.tab.is-active{border-color:var(--accent);background:var(--accent-soft);font-weight:500}.table-scroll{overflow-x:auto}.forecast-table,.data-table{border-collapse:collapse;width:100%;font-size:14px}.forecast-table th,.forecast-table td,.data-table th,.data-table td{border-bottom:1px solid var(--grid);text-align:left;white-space:nowrap;padding:5px 6px}.forecast-table thead th,.data-table thead th{color:var(--muted);font-size:12px;font-weight:500}.forecast-table tbody th{font-weight:500}.fc-icon{width:34px}.fc-temp,.fc-num{text-align:right!important}.fc-min{color:var(--ink-2)}.fc-max{font-weight:600}.fc-range{width:30%;min-width:80px}.fc-track{background:var(--grid);border-radius:3px;height:6px;display:block;position:relative}.fc-bar{background:linear-gradient(90deg, var(--seq-3), var(--s2));border-radius:3px;position:absolute;top:0;bottom:0}.fc-dir{color:var(--muted);font-size:12px}.wi{display:block;overflow:visible}.wi *{fill:none;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.wi-sun circle{fill:#f2c94c;stroke:#e0a800}.wi-sun line{stroke:#e0a800}.wi-moon{fill:#c9d3dd;stroke:#8a98a6}.wi-cloud{fill:var(--panel);stroke:var(--ink-2)}.wi-cloud-dark{fill:var(--panel-2)}.wi-cloud-back{fill:var(--grid);stroke:var(--muted)}.wi-fog path{stroke:var(--ink-2)}.wi-drop{stroke:var(--s1)}.wi-flake{fill:var(--ink-2);stroke:none}.wi-hail{fill:var(--seq-1);stroke:var(--s1);stroke-width:1px}.wi-bolt{stroke:#e0a800;stroke-width:1.8px}.wi-ice,.wi-wind{stroke:var(--ink-2)}.warn-list{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.warn-item{border:1px solid var(--line);border-left:5px solid var(--lv);border-radius:var(--radius-sm);background:var(--panel)}.warn-head{text-align:left;cursor:pointer;background:0 0;border:0;flex-direction:column;align-items:flex-start;gap:2px;width:100%;padding:7px 10px;display:flex}.warn-level{color:var(--ink-2);white-space:nowrap;align-items:center;gap:5px;font-size:12px;font-weight:600;display:inline-flex}.warn-chip{background:var(--lv);border-radius:2px;width:9px;height:9px}.warn-title{font-weight:600}.warn-when{color:var(--ink-2);font-size:13px}.warn-body{flex-direction:column;gap:8px;max-width:80ch;padding:0 10px 10px;font-size:14px;display:flex}.warn-instruction{white-space:pre-line;color:var(--ink-2)}.warn-source{color:var(--muted);font-size:12px}.prose{max-width:72ch;font-size:14px}.prose>*+*{margin-top:8px}.prose h3,.prose h4,.prose h5{margin-top:12px;font-size:15px}.prose ul{margin:4px 0;padding-left:20px}.prose code{background:var(--panel-2);border-radius:4px;padding:0 4px}.prose-dwd b,.prose-dwd strong{font-weight:600}.sun-arc{width:100%;max-height:120px}.sun-arc-path{fill:none;stroke:var(--line);stroke-width:1.5px;stroke-dasharray:3 4}.sun-arc-horizon{stroke:var(--muted);stroke-width:1px}.sun-arc-sun{fill:#f2c94c;stroke:#e0a800;stroke-width:1.5px}.sun-facts{grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:6px 12px;margin:0;display:grid}.sun-facts dt{color:var(--muted);font-size:12px}.sun-facts dd{margin:0;font-weight:600}.sun-moon{align-items:center;gap:6px;display:inline-flex}.moon-week{color:var(--muted);justify-content:space-between;gap:4px;margin:4px 0 0;padding:0;font-size:12px;list-style:none;display:flex}.moon-week li{flex-direction:column;align-items:center;gap:2px;display:flex}.moon-dark{fill:var(--grid);stroke:var(--muted);stroke-width:.8px}.moon-lit{fill:#e8dfb6}.heatmap-widget{flex-direction:column;flex:1;gap:6px;min-height:0;display:flex}.heatmap{flex-direction:column;flex:1;gap:1px;min-height:0;display:flex}.heatmap-row{grid-template-columns:22px repeat(var(--days), minmax(0, 1fr));flex:1;gap:1px;min-height:3px;display:grid}.heatmap-hour,.heatmap-day{color:var(--muted);white-space:nowrap;font-size:10px;line-height:1}.heatmap-days{flex:0 0 14px}.heatmap-cell{background:var(--step);border-radius:1px}.heatmap-cell.is-empty{background:0 0}.heatmap-scale{color:var(--ink-2);align-items:center;gap:8px;font-size:12px;display:flex}.heatmap-ramp{background:linear-gradient(90deg, var(--seq-0), var(--seq-2), var(--seq-4), var(--seq-6));border-radius:3px;flex:1;max-width:200px;height:6px}.toplist,.crowd-bars{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.toplist li,.crowd-bars li{grid-template-columns:minmax(80px,34%) minmax(0,1fr) auto;align-items:center;gap:8px;font-size:14px;display:grid}.toplist-label,.crowd-cat{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.toplist-bar,.crowd-bar{height:10px}.toplist-bar span,.crowd-bar span{border-radius:0 4px 4px 0;min-width:2px;height:100%;display:block}.crowd-bar span{background:var(--s1)}.toplist-value,.crowd-n{text-align:right;font-weight:600}.crowd-widget{flex-direction:column;gap:10px;display:flex}.crowd-summary{color:var(--ink-2);font-size:13px}.crowd-list{flex-direction:column;margin:0;padding:0;font-size:13px;list-style:none;display:flex}.crowd-list li{border-left:3px solid var(--seq-1);border-bottom:1px solid var(--grid);flex-wrap:wrap;justify-content:space-between;gap:0 8px;padding:4px 0 4px 8px;display:flex}.crowd-list li.sev-1{border-left-color:var(--seq-3)}.crowd-list li.sev-2{border-left-color:var(--seq-4)}.crowd-list li.sev-3{border-left-color:var(--seq-6)}.crowd-kind{font-weight:500}.crowd-place{color:var(--muted)}.monitor-mini{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.monitor-mini li{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:0 8px;display:grid}.monitor-mini-name{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.monitor-mini-meta{color:var(--muted);grid-column:2;font-size:12px}.widget-map{flex:1;min-height:0;margin:0 -12px -10px;display:flex}.map-view{flex:1;min-height:160px}.map-view .maplibregl-popup-content{background:var(--panel);color:var(--ink);font:13px/1.4 var(--font);border-radius:var(--radius-sm)}.map-view .maplibregl-popup-tip{border-top-color:var(--panel)!important;border-bottom-color:var(--panel)!important}.explore-layout{grid-template-columns:minmax(260px,320px) minmax(0,1fr);align-items:start;gap:18px;display:grid}.explore-side{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);padding:4px 14px 14px;position:sticky;top:12px}.metric-group{border:0;margin:0 0 6px;padding:0}.metric-group legend{color:var(--muted);margin-bottom:6px;font-size:12px}.explore-main{flex-direction:column;gap:12px;min-width:0;display:flex}.explore-chart{height:300px}.data-table{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius)}.data-table td{text-align:right}.explore-add{flex-wrap:wrap;align-items:center;gap:8px;display:flex}@media (width<=900px){.explore-layout{grid-template-columns:minmax(0,1fr)}.explore-side{position:static}}.events-top{grid-template-columns:minmax(280px,1fr) minmax(0,2fr);gap:12px;margin-bottom:14px;display:grid}.events-top .panel{height:480px}.situation{gap:10px}.situation-total{color:var(--ink-2)}.situation-number{color:var(--ink);font-size:34px;font-weight:500;line-height:1}.situation-levels{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.situation-levels li{grid-template-columns:10px minmax(110px,auto) minmax(0,1fr) 3ch;align-items:center;gap:8px;font-size:14px;display:grid}.situation-levels li.is-zero{color:var(--muted)}.situation-bar{height:8px}.situation-bar span{background:var(--lv);border-radius:0 4px 4px 0;min-width:0;height:100%;display:block}.situation-n{text-align:right;font-weight:600}.situation-events{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.situation-events li{grid-template-columns:10px minmax(0,1fr) 3ch;align-items:center;gap:8px;font-size:14px;display:grid}.link-button{color:var(--ink);text-align:left;cursor:pointer;background:0 0;border:0;padding:0}.link-button:hover{color:var(--accent);text-decoration:underline}.situation-heading{color:var(--ink-2);margin-top:6px;font-size:13px;font-weight:500}.situation-chart{flex:1;min-height:120px;display:flex}.situation-chart>p{font-size:13px}.events-map{padding:0}.events-map .map-view{height:100%}.filters{flex-wrap:wrap;align-items:center;gap:10px 16px;margin-bottom:12px;display:flex}.event-log{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.event-log li{flex-wrap:wrap;align-items:center;gap:4px 10px;display:flex}@media (width<=900px){.events-top{grid-template-columns:minmax(0,1fr)}.events-top .panel{height:auto}.events-map{height:380px}}.push-card{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);color:var(--ink-2);flex-direction:column;align-items:flex-start;gap:10px;margin-bottom:16px;padding:14px 16px;display:flex}.push-card p{max-width:70ch}.push-card strong{color:var(--ink)}.monitor-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.monitor{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;padding:12px 14px;display:flex}.monitor.is-alert{border-left:4px solid var(--critical)}.monitor.is-warn{border-left:4px solid var(--warning)}.monitor-main{align-items:flex-start;gap:12px;display:flex}.monitor-name{font-size:16px}.monitor-rule-text{color:var(--ink-2);font-size:14px}.monitor-main .muted{font-size:13px}.monitor-actions{flex-wrap:wrap;gap:6px;display:flex}.monitor-form{flex-direction:column;gap:12px;display:flex}.monitor-rule{grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;display:grid}.monitor-preview{border-radius:var(--radius-sm);background:var(--panel-2);flex-wrap:wrap;align-items:center;gap:8px;padding:10px 12px;display:flex}.settings-grid{grid-template-columns:repeat(auto-fill,minmax(220px,280px));gap:14px;margin-top:0;display:grid}.about p{max-width:70ch}.about ul{padding-left:20px}@media (width<=640px){:root{--row:84px}.dash-title h1{font-size:20px}.dash-controls{width:100%}.var-picker{flex:1}.var-button{width:100%}.time-popover{inset:auto 8px calc(80px + env(safe-area-inset-bottom)) 8px;grid-template-columns:minmax(0,1fr) minmax(0,1fr);width:auto;max-height:70vh;position:fixed;overflow:auto}.var-popover{inset:auto 8px calc(80px + env(safe-area-inset-bottom)) 8px;width:auto;max-height:70vh;position:fixed;overflow:auto}.cell{grid-column:span 1}.panel-expand{opacity:1}}.uplot,.uplot *,.uplot :before,.uplot :after{box-sizing:border-box}.uplot{width:min-content;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}.u-title{text-align:center;font-size:18px;font-weight:700}.u-wrap{-webkit-user-select:none;user-select:none;position:relative}.u-over,.u-under{position:absolute}.u-under{overflow:hidden}.uplot canvas{width:100%;height:100%;display:block;position:relative}.u-axis{position:absolute}.u-legend{text-align:center;margin:auto;font-size:14px}.u-inline{display:block}.u-inline *{display:inline-block}.u-inline tr{margin-right:16px}.u-legend th{font-weight:600}.u-legend th>*{vertical-align:middle;display:inline-block}.u-legend .u-marker{width:1em;height:1em;margin-right:4px;background-clip:padding-box!important}.u-inline.u-live th:after{content:":";vertical-align:middle}.u-inline:not(.u-live) .u-value{display:none}.u-series>*{padding:4px}.u-series th{cursor:pointer}.u-legend .u-off>*{opacity:.3}.u-select{pointer-events:none;background:#00000012;position:absolute}.u-cursor-x,.u-cursor-y{pointer-events:none;will-change:transform;position:absolute;top:0;left:0}.u-hz .u-cursor-x,.u-vt .u-cursor-y{border-right:1px dashed #607d8b;height:100%}.u-hz .u-cursor-y,.u-vt .u-cursor-x{border-bottom:1px dashed #607d8b;width:100%}.u-cursor-pt{pointer-events:none;will-change:transform;border:0 solid;border-radius:50%;position:absolute;top:0;left:0;background-clip:padding-box!important}.u-axis.u-off,.u-select.u-off,.u-cursor-x.u-off,.u-cursor-y.u-off,.u-cursor-pt.u-off{display:none}
