/*! Icons: Lucide (ISC/MIT), see /static/licenses.txt */
:root{color-scheme:light;--bg:#fff;--side:#fff;--card:#fafafa;--card2:#f5f5f5;--text:#1a1a1a;--muted:#6e6e6e;--faint:#6e6e6e;--border:#d4d4d4;--border-strong:#909090;--ok:#3d9a57;--ok-bg:rgba(61,154,87,.12);--ok-text:#256b39;--bad:#d1383d;--bad-bg:rgba(209,56,61,.1);--bad-text:#a82a2f;--warn:#d68c27;--warn-bg:rgba(214,140,39,.14);--warn-text:#8a5508;--gray-bg:rgba(0,0,0,.06);--gray-text:#5c5c5c;--accent:#3b7dd8;--accent-solid:#2968c3;--accent-bg:rgba(59,125,216,.1);--accent-text:#2459a6;--info:#318795;--info-bg:rgba(49,135,149,.12);--info-text:#1f6470;--on-accent:#fff;--radius:4px;--shadow:none}
html[data-theme=dark]{color-scheme:dark;--bg:#0a0a0a;--side:#0a0a0a;--card:#141414;--card2:#1e1e1e;--text:#eee;--muted:#808080;--faint:#808080;--border:#3c3c3c;--border-strong:#646464;--ok:#7fd88f;--ok-bg:rgba(127,216,143,.12);--ok-text:#7fd88f;--bad:#e06c75;--bad-bg:rgba(224,108,117,.14);--bad-text:#e06c75;--warn:#f5a742;--warn-bg:rgba(245,167,66,.13);--warn-text:#f5a742;--gray-bg:rgba(255,255,255,.07);--gray-text:#b5b5b5;--accent:#fab283;--accent-solid:#fab283;--accent-bg:rgba(250,178,131,.12);--accent-text:#fab283;--info:#56b6c2;--info-bg:rgba(86,182,194,.13);--info-text:#56b6c2;--on-accent:#0a0a0a;--radius:4px;--shadow:none}
@media(prefers-color-scheme:dark){html:not([data-theme=light]){color-scheme:dark;--bg:#0a0a0a;--side:#0a0a0a;--card:#141414;--card2:#1e1e1e;--text:#eee;--muted:#808080;--faint:#808080;--border:#3c3c3c;--border-strong:#646464;--ok:#7fd88f;--ok-bg:rgba(127,216,143,.12);--ok-text:#7fd88f;--bad:#e06c75;--bad-bg:rgba(224,108,117,.14);--bad-text:#e06c75;--warn:#f5a742;--warn-bg:rgba(245,167,66,.13);--warn-text:#f5a742;--gray-bg:rgba(255,255,255,.07);--gray-text:#b5b5b5;--accent:#fab283;--accent-solid:#fab283;--accent-bg:rgba(250,178,131,.12);--accent-text:#fab283;--info:#56b6c2;--info-bg:rgba(86,182,194,.13);--info-text:#56b6c2;--on-accent:#0a0a0a;--radius:4px;--shadow:none}}
*{box-sizing:border-box}html{font-size:14px}
body{margin:0;background:var(--bg);color:var(--text);font-family:"JetBrains Mono","IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;line-height:1.5;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}a:hover{text-decoration:underline}
h1,h2,h3{font-weight:600;margin:0}h1{font-size:18px}h2{font-size:14px}h3{font-size:13px}
.sr{position:absolute;left:-9999px}
/* shell */
.shell{display:flex;min-height:100vh}
.side{width:220px;flex:none;background:var(--side);border-right:1px solid var(--border);padding:18px 12px;display:flex;flex-direction:column;gap:2px;position:sticky;top:0;height:100vh}
.side .brand{display:flex;align-items:center;gap:9px;font-weight:600;font-size:14px;padding:4px 10px 18px}
.side .brand .dot{width:10px;height:10px;border-radius:50%;background:var(--ok);box-shadow:none}
.side .brand .dot.bad{background:var(--bad);box-shadow:none}
.side a.nav{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:0;border-left:2px solid transparent;color:var(--muted);font-size:13px}
.side a.nav:hover{background:var(--card2);text-decoration:none;color:var(--text)}.side a.nav.active{background:var(--card2);color:var(--text);font-weight:600;border-left-color:var(--accent)}

.side .count{margin-left:auto;font-size:11px;line-height:1.4;padding:0 6px;border-radius:3px;background:transparent;border:1px solid currentColor;color:var(--bad-text);font-weight:600}.side .count.maint{color:var(--info-text)}
.side .foot{margin-top:auto;display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--muted);padding-top:12px;border-top:1px solid var(--border)}
.side .foot button,.side .foot .btn{width:100%;justify-content:flex-start}
.side .foot>a{padding:2px 12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.side .foot button{padding-left:11px;gap:10px}.side .foot button .ic{width:16px;height:16px;stroke-width:1.5}
.main{flex:1;min-width:0;padding:22px 28px 60px;max-width:1240px}
.topbar{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:18px;flex-wrap:wrap}
.topbar .sub{font-size:12px;color:var(--faint);margin-top:2px;display:flex;gap:6px;align-items:center}
.live{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--ok)}
.live.off{background:var(--faint)}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.35}}
@media(prefers-reduced-motion:no-preference){.live.beat{animation:pulse 1.6s ease-in-out 3}.live.off{animation:none}}
/* cards & tiles */
.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:16px 18px}
.card.block{margin-bottom:14px}.card .head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;margin-bottom:16px}
.tile{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:10px 14px}
.tile .l{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}.tile .v{font-size:19px;font-weight:600;margin-top:2px}
.tile .v.ok{color:var(--ok-text)}.tile .v.bad{color:var(--bad-text)}.tile .v.warn{color:var(--warn-text)}
.banner{padding:10px 14px;border-radius:var(--radius);border-left:2px solid currentColor;display:flex;justify-content:space-between;align-items:center;margin-bottom:14px;gap:12px;flex-wrap:wrap;font-size:13px}
.banner.ok{background:var(--ok-bg);color:var(--ok-text)}.banner.bad{background:var(--bad-bg);color:var(--bad-text)}.banner.warn{background:var(--warn-bg);color:var(--warn-text)}.banner.maint{background:var(--info-bg);color:var(--info-text)}.banner .ic{margin-right:6px}.banner a{text-decoration:underline}
/* status bits */
.sdot{width:9px;height:9px;border-radius:50%;flex:none;background:var(--faint);display:inline-block}
.sdot.up{background:var(--ok)}.sdot.down{background:var(--bad)}.sdot.paused{background:var(--warn)}.sdot.maint{background:var(--info)}
.badge .ic{width:12px;height:12px;margin-right:3px;vertical-align:-2px}
.badge{font-size:11px;padding:1px 7px;border-radius:3px;white-space:nowrap;background:var(--gray-bg);color:var(--gray-text);font-weight:600}
.badge.up{background:var(--ok-bg);color:var(--ok-text)}.badge.down{background:var(--bad-bg);color:var(--bad-text)}.badge.paused{background:var(--warn-bg);color:var(--warn-text)}.badge.accent{background:var(--accent-bg);color:var(--accent-text)}.badge.maint{background:var(--info-bg);color:var(--info-text)}
.hb{display:flex;gap:2px;height:22px;align-items:flex-end}.hb i{flex:1;border-radius:1px;background:var(--ok);min-width:2px}
.hb i.bad{background:var(--bad);height:100%!important}.hb i.none{background:var(--border);height:30%!important}
.days,.hours{display:flex;gap:2px;height:26px}.days i,.hours i{flex:1;border-radius:2px;background:var(--ok);min-width:1px}.days i.none,.hours i.none{background:var(--border)}.days i.part,.hours i.part{background:var(--warn)}.days i.bad,.hours i.bad{background:var(--bad)}
.spark svg{display:block}
/* tables */
table{width:100%;border-collapse:collapse;font-size:12px}th{text-align:left;font-weight:600;color:var(--muted);padding:6px 8px 6px 0;border-bottom:1px solid var(--border);font-size:11px;text-transform:uppercase;letter-spacing:.06em}td{padding:8px 8px 8px 0;border-bottom:1px solid var(--border);vertical-align:baseline}tr:last-child td{border-bottom:0}
tr:hover td,tr:focus-within td{background:var(--card2)}
td.btns{display:table-cell;text-align:right;white-space:nowrap}td.btns form{display:inline-block}
.ok-text{color:var(--ok-text)}.bad-text{color:var(--bad-text)}.muted{color:var(--muted)}.faint{color:var(--faint)}.small{font-size:12px}.mono{font-family:inherit;font-size:12px}
/* data tables */
.dt{margin-bottom:14px}.dt:not(.dt-js){overflow-x:auto}.card>h2+.dt{margin-top:10px}.card>.dt:last-child{margin-bottom:0}
.dt-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:8px}
.dt-grow{flex:1}
.dt-bar .search{flex:1 1 220px;width:auto;max-width:300px}
.dt-q{min-height:32px}
.dt-pills{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.dt-pill{font-size:12px;padding:2px 10px;min-height:28px;border-radius:var(--radius);color:var(--muted);gap:5px}
.dt-pill .dt-n{font-size:11px;color:var(--faint)}
.dt-pill[aria-pressed=true]{background:var(--accent-bg);border-color:var(--accent);color:var(--accent-text)}
.dt-pill[aria-pressed=true] .dt-n{color:inherit}
.dt-pills .dd{width:auto}
.dt-pills .dd-btn,.dt-size .dd-btn{padding:3px 10px;min-height:28px;font-size:12px;border-radius:var(--radius)}
.dt-view{font-size:12px;color:var(--muted);gap:4px;padding-right:6px}.dt-view:not(:disabled):hover,.dt-pill:not(:disabled):hover{color:var(--text)}.dt-view .ic{width:14px;height:14px}.dt-view .chev{margin-left:-1px}.dt-view[aria-expanded=true] .chev{transform:rotate(180deg)}
.dt-sum{margin:0 0 8px;font-size:12px;color:var(--muted);display:flex;flex-wrap:wrap;gap:6px;align-items:center}.dt-sum[hidden]{display:none}
.dt-link{border:0;background:none;padding:0;min-height:0;color:var(--accent-text);text-decoration:underline;font-size:12px}.dt-link:not(:disabled):hover{background:none;color:var(--text)}.dt-link[hidden]{display:none}
.dt-wrap{position:relative;overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--card)}
.dt-wrap.dt-page{overflow:clip}
.dt-wrap:focus-visible{outline:1px solid var(--accent);outline-offset:2px}
.dt table{border-collapse:separate;border-spacing:0;width:100%;font-size:12px}
.dt th{position:sticky;top:0;z-index:2;background:var(--card2);color:var(--gray-text);padding:0 12px;height:34px;white-space:nowrap;border-bottom:1px solid var(--border)}
.dt td{padding:9px 12px;border-bottom:1px solid var(--border);vertical-align:middle}
.dt tbody tr:last-child td{border-bottom:0}
.dt tbody tr:hover>td,.dt tbody tr:focus-within>td{background:var(--card2)}
.dt tbody tr:hover :is(.muted,.faint,.sub:not(.err)),.dt tbody tr:focus-within :is(.muted,.faint,.sub:not(.err)),.dt tbody tr[aria-selected=true] :is(.muted,.faint,.sub:not(.err)){color:var(--gray-text)}
.dt .badge.down{background:linear-gradient(var(--bad-bg),var(--bad-bg)),var(--card)}
.dt td .faint.small{white-space:nowrap}
.dt tr[hidden]{display:none}
.dt.dt-compact td{padding-top:4px;padding-bottom:4px}
.dt th:first-child,.dt td:first-child{position:sticky;left:0;z-index:1;background:var(--card)}
.dt th:first-child{z-index:3;background:var(--card2)}
.dt .dt-pin-end{position:sticky;right:0;z-index:1;background:var(--card);text-align:right;white-space:nowrap}
.dt th.dt-pin-end{z-index:3;background:var(--card2)}
.dt td.dt-num,.dt th.dt-num{text-align:right;font-variant-numeric:tabular-nums}
.dt td.dt-num{white-space:nowrap}
.dt th.dt-num .dt-sort{flex-direction:row-reverse}
.dt td.btns,.dt td.acts{display:table-cell;white-space:nowrap}
.dt td.btns form,.dt td.acts form{display:inline-block;vertical-align:middle}
.dt td.btns>*+*,.dt td.acts>*+*{margin-left:4px}
.dt .dt-clip{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dt td .nm{font-weight:600}.dt td .sub{display:block;font-size:12px;color:var(--faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:360px}.dt td .sub.err{color:var(--bad-text)}
.dt td.spark svg{display:block}
.dt .dt-off{display:none}
.dt-sort{display:inline-flex;align-items:center;gap:4px;border:0;background:none;padding:0;min-height:0;height:100%;font:inherit;font-weight:600;color:inherit;text-transform:inherit;letter-spacing:inherit;border-radius:0}
.dt-sort:not(:disabled):hover{background:none;color:var(--text)}
.dt-sort:focus-visible{outline-offset:4px}
.ic.dt-arrow{width:14px;height:14px;opacity:0}
.dt-sort:hover .dt-arrow,.dt-sort:focus-visible .dt-arrow{opacity:.5}.dt-sort.on .dt-arrow{opacity:1}.dt-sort.on{color:var(--text)}
@media(hover:none){.ic.dt-arrow{opacity:.5}.dt-sort.on .dt-arrow{opacity:1}}
.dt-empty td{padding:28px 12px;text-align:center;color:var(--muted)}.dt-empty:hover>td{background:var(--card)!important}
.dt .dt-empty td:first-child{position:static}
.dt-foot{display:flex;flex-wrap:wrap;align-items:center;gap:8px 20px;margin-top:10px;font-size:12px;color:var(--muted)}.dt-foot[hidden]{display:none}
.dt-count{margin:0 auto 0 0}.dt-count b{font-weight:600;color:var(--text);white-space:nowrap}
.dt-size{display:inline-flex;align-items:center;gap:8px;white-space:nowrap}.dt-size .dd{width:auto}
.dt-pages{display:flex;align-items:center;gap:4px}.dt-plist{display:contents}
.dt-pg{min-width:28px;height:28px;min-height:0;padding:0 6px;border-radius:var(--radius);border-color:transparent;background:none;font-size:12px;font-variant-numeric:tabular-nums}
.dt-pg[aria-current=page]{background:var(--accent-solid);color:var(--on-accent);border-color:var(--accent-solid)}
.dt-pg[aria-current=page]:hover{background:var(--accent-solid)}
.dt-step{border-color:var(--border)}.dt-step[aria-disabled=true]{opacity:.5;cursor:not-allowed}
.dt-chev{width:14px;height:14px}.dt-chev.prev{transform:rotate(180deg)}
.dt-gap{min-width:24px;text-align:center;color:var(--faint)}
@media(max-width:639px){.dt-rows{display:none}}
@media(max-width:639px){.dt .hb-sm{display:none}}
@media(max-width:767px){.dt .hb-md{display:none}}
/* above 900px the sidebar takes 220px and the main padding 56px, so the content is about 276px narrower than the viewport */
@media(min-width:901px) and (max-width:1043px){.dt .hb-md{display:none}}
@media(max-width:1299px){.dt .hb-lg{display:none}}
@media(max-width:1555px){.dt .hb-xl{display:none}}
.dd-menu.pm{min-width:170px}
.pm-item{justify-content:flex-start;border:0;background:none;width:100%;gap:8px;padding:6px 8px;min-height:0;font-size:13px;border-radius:3px;font-weight:400}
.pm-item .ic{width:14px;height:14px;color:var(--accent);visibility:hidden}.pm-item[aria-checked=true] .ic{visibility:visible}
.pm-item:not(:disabled):hover,.pm-item:focus{background:var(--card2);outline:none}
.pm-head{padding:6px 8px 2px;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.pm-sep{height:1px;background:var(--border);margin:4px 0}
/* data tables: selection, keyboard, resize, edge, cards */
.dt-box{position:relative;min-width:0}
.dt th.dt-tick,.dt td.dt-tick{width:44px;min-width:44px;max-width:44px;padding:0 0 0 14px}
.dt th.dt-tick input,.dt td.dt-tick input{vertical-align:middle}
:where(.dt[data-select] th:nth-child(2),.dt[data-select] td:nth-child(2)){position:sticky;left:44px;z-index:1;background:var(--card)}
.dt[data-select] th:nth-child(2){z-index:3;background:var(--card2)}
:where(.dt[data-select] td:nth-child(2)){box-shadow:1px 0 0 var(--border)}
.dt tbody tr[aria-selected=true]>td,.dt tbody tr[aria-selected=true]:hover>td,.dt tbody tr[aria-selected=true]:focus-within>td{background:linear-gradient(var(--accent-bg),var(--accent-bg)),var(--card)}
.dt tbody tr.dt-click{cursor:pointer}
.dt-wrap:focus .is-focus>td{box-shadow:inset 0 1px 0 var(--accent),inset 0 -1px 0 var(--accent)}
.dt-wrap:focus .is-focus>td:first-child{box-shadow:inset 1px 1px 0 var(--accent),inset 0 -1px 0 var(--accent)}
.dt-wrap:focus .is-focus>td:last-child{box-shadow:inset -1px 1px 0 var(--accent),inset 0 -1px 0 var(--accent)}
.dt-th{display:flex;align-items:center;gap:4px;min-width:0;height:100%}
.dt th.dt-num .dt-th{flex-direction:row-reverse}
.dt-hm{display:inline-grid;place-items:center;width:22px;height:22px;min-height:0;padding:0;margin-left:auto;border:0;border-radius:var(--radius);background:none;color:inherit;opacity:0;flex:none}
.dt th.dt-num .dt-hm{margin-left:0;margin-right:auto}
.dt thead tr:hover .dt-hm,.dt thead tr:focus-within .dt-hm,.dt-hm[aria-expanded=true]{opacity:1}
@media(hover:none){.dt-hm{opacity:.5}}
.dt-hm:not(:disabled):hover{background:var(--gray-bg)}
.dt-grip{position:absolute;top:0;right:0;z-index:1;width:10px;height:100%;cursor:col-resize;touch-action:none}
.dt-grip::after{content:"";position:absolute;top:30%;bottom:30%;right:0;width:1px;background:var(--border-strong)}
.dt-grip:hover::after,.dt-grip:focus-visible::after,.dt-grip.on::after{top:0;bottom:0;width:2px;background:var(--accent)}
.dt-grip:focus-visible{outline:none;box-shadow:inset 0 0 0 1px var(--accent)}
.dt table.dt-fixed th,.dt table.dt-fixed td{overflow:hidden;text-overflow:ellipsis}
.dt table.dt-fixed td{white-space:nowrap}
.dt table.dt-fixed td.dt-pin-end,.dt table.dt-fixed td.btns,.dt table.dt-fixed td.acts,.dt table.dt-fixed .dt-tick{overflow:visible;text-overflow:clip}
.dt-edge{position:absolute;z-index:4;inset:1px 1px 1px auto;width:40px;border-radius:0 var(--radius) var(--radius) 0;background:linear-gradient(to left,var(--gray-bg),transparent);pointer-events:none;display:none}
.dt-box[data-edge] .dt-edge{display:block;right:calc(var(--pin-w,0px) + 1px)}
.dt-edge-more{position:absolute;top:8px;right:8px;min-height:0;padding:1px 6px 1px 8px;gap:2px;font-size:11px;font-weight:600;border-radius:var(--radius);background:var(--card);pointer-events:auto;box-shadow:none}
.dt-box[data-edge] .dt-pin-end{box-shadow:-1px 0 0 var(--border),-12px 0 12px -10px rgba(0,0,0,.35)}
.dt-bulk{position:fixed;left:0;right:0;bottom:20px;z-index:55;display:flex;flex-wrap:wrap;align-items:center;gap:4px;width:max-content;max-width:calc(100% - 2rem);margin-inline:auto;padding:5px 5px 5px 14px;border-radius:var(--radius);background:var(--card2);color:var(--text);border:1px solid var(--border-strong);font-size:13px}
.dt-bulk b{font-weight:600}.dt-bulk span{margin-right:8px}
.dt-bulk button{min-height:30px;border-radius:var(--radius);border-color:transparent;background:none;font-weight:600}
.dt-bulk button:not(:disabled):hover{background:var(--gray-bg)}
@media(max-width:639px){
  .dt.dt-js[data-cards] .dt-wrap{border:0;background:none;overflow:visible}
  .dt.dt-js[data-cards] table,.dt.dt-js[data-cards] tbody{display:block;width:auto!important;min-width:0!important}
  .dt.dt-js[data-cards] thead{display:none}
  .dt.dt-js[data-cards] tbody tr{display:grid;grid-template-columns:minmax(0,1fr);gap:4px;align-items:start;padding:12px;margin-bottom:8px;border:1px solid var(--border);border-radius:var(--radius);background:var(--card);position:relative}
  .dt.dt-js[data-cards] tbody tr[hidden]{display:none}
  .dt.dt-js[data-cards] tbody tr>td{display:none;padding:0;border:0;background:none!important;position:static!important;box-shadow:none!important;text-align:left;max-width:none;min-width:0;width:auto}
  .dt.dt-js[data-cards] tbody tr[aria-selected=true]{background:var(--accent-bg)}
  .dt.dt-js[data-cards] td.dt-cp{display:block;grid-column:1;font-weight:600;overflow-wrap:anywhere}
  .dt.dt-js[data-cards] td.dt-cs{display:block;grid-column:1;position:relative!important;padding-left:84px;min-height:18px;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .dt.dt-js[data-cards] td.dt-cs::before{content:attr(data-label);position:absolute;left:0;top:0;width:76px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted)}
  .dt.dt-js[data-cards] td.dt-ca{display:flex;flex-wrap:wrap;align-items:center;gap:6px;grid-column:1;margin-top:4px;white-space:normal}
  .dt.dt-js[data-cards] .dt-empty{display:block;border:0;padding:0;background:none}
  .dt.dt-js[data-cards] .dt-empty td{display:block;padding:24px 0}
  .dt.dt-js[data-cards] .dt-tick{display:none!important}
  .dt.dt-js[data-cards] .dt-off{display:none!important}
  .dt.dt-js[data-cards] .dt-edge{display:none!important}
  .dt.dt-js[data-cards] td.dt-ca form{display:inline-flex;margin:0}
  .dt.dt-js[data-cards] td.dt-ca>*+*{margin-left:0}
}
/* forms & buttons */
form{margin:0}.frow{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end}
.panel .frow{align-items:flex-start}
label{display:block;font-size:12px;color:var(--muted);margin-bottom:4px}
input,select,textarea{font:inherit;font-size:13px;padding:7px 10px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--card);color:var(--text);min-width:0;width:100%}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
input[type=checkbox],input[type=radio]{-webkit-appearance:none;appearance:none;width:16px;height:16px;flex:none;margin:0;padding:0;border:1px solid var(--muted);border-radius:3px;background:var(--card);display:inline-grid;place-content:center;vertical-align:-3px;cursor:pointer}
input[type=radio]{border-radius:50%}
input[type=checkbox]::after{content:"";width:10px;height:10px;background:var(--on-accent);transform:scale(0);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E") center/contain no-repeat}
input[type=radio]::after{content:"";width:6px;height:6px;border-radius:50%;background:var(--on-accent);transform:scale(0)}
input[type=checkbox]:checked,input[type=radio]:checked{background:var(--accent-solid);border-color:var(--accent-solid)}
input[type=checkbox]:checked::after,input[type=radio]:checked::after{transform:scale(1)}
input[type=checkbox]:focus-visible,input[type=radio]:focus-visible{outline:1px solid var(--accent);outline-offset:2px;box-shadow:none}
input[type=checkbox]:disabled,input[type=radio]:disabled{opacity:.5;cursor:not-allowed}
input[readonly]{background:var(--card)}
input[type=date],input[type=datetime-local],input[type=time]{min-height:34px}
input[type=date]::-webkit-calendar-picker-indicator,input[type=datetime-local]::-webkit-calendar-picker-indicator,input[type=time]::-webkit-calendar-picker-indicator{opacity:.7;cursor:pointer}
input[type=date]::-webkit-calendar-picker-indicator:hover,input[type=datetime-local]::-webkit-calendar-picker-indicator:hover,input[type=time]::-webkit-calendar-picker-indicator:hover{opacity:1}
.field{display:flex;flex-direction:column;flex:1 1 140px}.field.wide{flex:3 1 240px}.field.auto{flex:0 0 auto}
input:placeholder-shown{text-overflow:ellipsis}::placeholder{color:var(--muted);opacity:1}
:not(.frow)>.field+.field{margin-top:12px}
.help{font-size:12px;color:var(--faint);margin-top:4px}
button,.btn{font:inherit;font-size:13px;padding:6px 12px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--card);color:var(--text);cursor:pointer;display:inline-flex;align-items:center;gap:6px;line-height:1.3;white-space:nowrap;min-height:32px;justify-content:center}
button:not(:disabled):hover,.btn:hover{background:var(--gray-bg);text-decoration:none}
button.primary,.btn.primary{background:var(--accent-solid);color:var(--on-accent);border-color:var(--accent-solid);font-weight:600}button.primary:not(:disabled):hover,.btn.primary:hover{opacity:.9;background:var(--accent-solid)}
button.danger,.btn.danger{color:var(--bad-text);border-color:var(--bad)}button.sm,.btn.sm{font-size:12px;padding:4px 9px;min-height:26px}button.ghost{border-color:transparent;background:transparent}button.ghost:not(:disabled):hover{background:var(--gray-bg)}
button.sm .ic,.btn.sm .ic{width:14px;height:14px}.btn .ic{vertical-align:middle}
.btns{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.btns form{display:inline}.btns>a:not(.btn){font-size:13px;color:var(--muted)}
button:focus-visible,.btn:focus-visible,a:focus-visible,summary:focus-visible{outline:1px solid var(--accent);outline-offset:2px}
button:disabled{opacity:.5;cursor:not-allowed}
button[aria-busy=true]{pointer-events:none}
button[aria-busy=true]::before{content:"";width:12px;height:12px;flex:none;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin .7s linear infinite}
button[aria-busy=true]:has(.ic.spin)::before{content:none}button[aria-busy=true]:has(.ic.spin){opacity:.7}
@keyframes spin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){button[aria-busy=true]::before{animation:none}}
.ic{width:16px;height:16px;flex:none;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;vertical-align:-3px}
.ic.lg{width:20px;height:20px}.ic.solid{fill:currentColor}
button.sm .ic,.btn.sm .ic,.dt-view .ic,.dd-btn .ic,.dd-opt .ic,.pm-item .ic,.field-msg .ic,.toast-x .ic,details.adv summary .ic,.dt-chev,.dt-arrow,.dt-hm .ic{stroke-width:1.75}
.badge .ic{stroke-width:2}.ic.flip{transform:rotate(180deg)}
.ic-swap{display:inline-grid;flex:none}.ic-swap>.ic{grid-area:1/1}
/* icon motion: transform and opacity on the outer svg only; every rule below needs no-preference */
@media(prefers-reduced-motion:no-preference){
  a,button,.btn{transition:color .12s ease,background-color .12s ease,border-color .12s ease}
  button:active .ic,.btn:active .ic{scale:.92;transition:scale .1s ease}
  button[aria-busy=true] .ic.spin{animation:spin .9s linear .3s infinite backwards;transform-origin:center}
  html.paused .ic.spin,html.paused .live,html.paused button[aria-busy=true]::before{animation-play-state:paused}
  .ic.fade{animation:ic-fade .15s ease}
  .ic-swap .swap-out{animation:ic-fade .15s ease reverse forwards}.ic-swap .swap-in{animation:ic-fade .15s ease}
  .ic-swap.rot .swap-out{animation:ic-out .1s ease-in forwards}.ic-swap.rot .swap-in{animation:ic-in .1s ease-out .1s backwards}
}
@keyframes ic-fade{from{opacity:0}}
@keyframes ic-out{to{opacity:0;transform:rotate(90deg)}}
@keyframes ic-in{from{opacity:0;transform:rotate(-90deg)}}
.sprite{position:absolute;width:0;height:0;overflow:hidden}
.copyrow{display:flex;gap:8px;align-items:stretch}.copyrow input{flex:1}
.seg{display:inline-flex;border:1px solid var(--border-strong);border-radius:var(--radius);overflow:hidden}.seg a{padding:4px 10px;font-size:12px;color:var(--muted)}.seg a.active{background:var(--accent-bg);color:var(--accent-text)}.seg a:hover{text-decoration:none;color:var(--text);background:var(--card2)}.seg a.active:hover{color:var(--accent-text)}.seg a:focus-visible,.tabs a:focus-visible{outline-offset:-2px}
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--border);margin-bottom:16px}.tabs a{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;font-size:13px;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px}.tabs a.active{color:var(--accent-text);border-color:var(--accent)}.tabs a:hover{text-decoration:none;color:var(--text)}
.search{position:relative;flex:0 1 260px;width:260px}.search input{padding-left:30px}.search .ic{position:absolute;left:9px;top:9px;color:var(--faint);pointer-events:none}
kbd{font:inherit;font-size:11px;line-height:1.4;display:inline-block;padding:0 5px;border:1px solid var(--border-strong);border-bottom-width:2px;border-radius:3px;color:var(--muted);background:var(--card)}
.section{margin:22px 0 10px;display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.chart svg{width:100%;height:auto;display:block}
.chart svg text{fill:var(--muted);font-family:inherit}
.c-axis{fill:var(--muted)}.c-grid{stroke:var(--border)}.c-line{stroke:var(--accent)}.c-dot{fill:var(--accent)}.c-down{stroke:var(--bad)}.c-shade{fill:var(--bad)}
.scroll{overflow-x:auto}.scroll>table{min-width:640px}
.empty{font-size:13px;padding:40px 24px;text-align:center;color:var(--muted);border:1px dashed var(--border);border-radius:var(--radius);display:flex;flex-direction:column;align-items:center;gap:4px}
.empty .ic{margin-bottom:4px}.empty strong{color:var(--text);font-weight:600}.empty p{margin:0}
.flash{padding:10px 14px;border-radius:var(--radius);margin-bottom:14px;font-size:13px;background:var(--accent-bg);color:var(--accent-text)}
.alert{--a:var(--info);--a-bg:var(--info-bg);--a-text:var(--info-text);display:flex;gap:10px;align-items:flex-start;padding:10px 14px;margin-bottom:14px;font-size:13px;line-height:1.5;border:1px solid var(--border);border-left:2px solid var(--a);border-radius:var(--radius);background:linear-gradient(var(--a-bg),var(--a-bg)),var(--card);color:var(--a-text)}
.alert.error{--a:var(--bad);--a-bg:var(--bad-bg);--a-text:var(--bad-text)}.alert.ok{--a:var(--ok);--a-bg:var(--ok-bg);--a-text:var(--ok-text)}.alert.warn{--a:var(--warn);--a-bg:var(--warn-bg);--a-text:var(--warn-text)}
.alert .ic{margin-top:2px}.alert>div{min-width:0;overflow-wrap:anywhere}.alert strong{display:block}
.alert[hidden]{display:none}
footer{margin-top:40px;font-size:12px;color:var(--faint)}
/* maintenance */
.maint-grid{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:18px;align-items:start}
.maint-card.active{border-color:var(--info);background:var(--info-bg)}
@media(max-width:900px){.maint-grid{grid-template-columns:1fr}}
/* first run guide */
.guide{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-top:14px}
.step{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:16px 18px;display:flex;flex-direction:column;gap:8px}
.step .n{width:24px;height:24px;border-radius:4px;background:var(--gray-bg);color:var(--gray-text);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600}
.step.done .n{background:var(--ok-bg);color:var(--ok-text)}.step p{margin:0;font-size:13px;color:var(--muted);flex:1}
/* inline validation */
input[aria-invalid=true],select[aria-invalid=true],textarea[aria-invalid=true]{border-color:var(--bad)}
input[aria-invalid=true]:focus,select[aria-invalid=true]:focus,textarea[aria-invalid=true]:focus{border-color:var(--bad);box-shadow:0 0 0 1px var(--bad)}
.field-msg{display:flex;gap:5px;align-items:flex-start;margin:4px 0 0;font-size:12px;line-height:1.4;color:var(--bad-text)}
.field-msg .ic{width:14px;height:14px;margin-top:1px}
/* toasts */
.toasts{position:fixed;right:18px;bottom:18px;z-index:60;width:min(380px,calc(100vw - 36px));display:flex;flex-direction:column;gap:8px}
.toasts-live{display:flex;flex-direction:column;gap:8px}.toasts-live:empty{display:none}
.toast{position:relative;overflow:hidden;background:var(--card);color:var(--text);border:1px solid var(--border);border-left:2px solid var(--accent);padding:10px 12px;border-radius:var(--radius);font-size:13px;line-height:1.4;display:flex;gap:10px;align-items:flex-start;animation:toast-in .16s ease-out}
.toast>.ic{margin-top:1px;color:var(--accent-text);animation:toast-ic .16s ease-out}
.toast.ok{border-left-color:var(--ok)}.toast.ok>.ic{color:var(--ok-text)}
.toast.error{border-left-color:var(--bad)}.toast.error>.ic{color:var(--bad-text)}
.toast.info{border-left-color:var(--info)}.toast.info>.ic{color:var(--info-text)}
.toast.warn{border-left-color:var(--warn)}.toast.warn>.ic{color:var(--warn-text)}
.toast-msg{flex:1;min-width:0;overflow-wrap:anywhere}
.toast .toast-x{background:transparent;border:0;color:var(--muted);padding:2px;min-height:0;margin:-1px -4px 0 0;border-radius:var(--radius);flex:none}
.toast .toast-x:hover{color:var(--text)}.toast .toast-x .ic{width:14px;height:14px}
.toast-bar{position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--accent);opacity:.6;transform-origin:left;animation:toast-bar 5s linear forwards}
.toast.ok .toast-bar{background:var(--ok)}.toast.info .toast-bar{background:var(--info)}.toast.warn .toast-bar{background:var(--warn)}
.toast:hover .toast-bar,.toast:focus-within .toast-bar{animation-play-state:paused}
.toast.leaving{animation:toast-out .12s ease-in forwards}
.toast.pulse{animation:toast-pulse .3s ease-out}
@keyframes toast-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes toast-out{to{opacity:0}}
@keyframes toast-ic{from{opacity:0}}
@keyframes toast-pulse{50%{transform:translateY(-3px)}}
@keyframes toast-bar{from{transform:scaleX(1)}to{transform:scaleX(0)}}
@media(prefers-reduced-motion:reduce){.toast,.toast.leaving,.toast.pulse,.toast>.ic{animation:none}.toast-bar{opacity:0}}
/* slide-over */
.scrim{position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:40;opacity:0;pointer-events:none;transition:opacity .18s}
.panel{position:fixed;top:0;right:0;bottom:0;width:min(440px,100vw);background:var(--card);border-left:1px solid var(--border);z-index:50;padding:22px 24px;overflow:auto;transform:translateX(100%);transition:transform .2s ease-out;box-shadow:none}
body.panel-open .scrim{opacity:1;pointer-events:auto}body.panel-open .panel{transform:none;visibility:visible;transition:transform .2s ease-out}
.panel{visibility:hidden;transition:transform .2s ease-out,visibility 0s linear .2s}.panel:focus{outline:none}
@media(prefers-reduced-motion:reduce){.scrim,.panel,body.panel-open .panel{transition:none}}
.panel .head{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}
.panel .field{margin-bottom:12px}
[data-test-result]{margin:4px 0 12px}
details.adv summary{cursor:pointer;color:var(--accent-text);font-size:12px;margin-bottom:10px;list-style:none;display:flex;align-items:center;gap:4px;width:max-content;border-radius:var(--radius)}details.adv summary::-webkit-details-marker{display:none}details.adv summary:hover{color:var(--text)}details.adv summary .ic{width:14px;height:14px}details.adv[open] summary .ic{transform:rotate(180deg)}
@media(prefers-reduced-motion:no-preference){details.adv summary .ic,.dd-btn .ic,.dt-view .chev{transition:transform .2s cubic-bezier(.22,1,.36,1)}}
dialog{border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--card);color:var(--text);padding:0;width:min(400px,calc(100vw - 32px));box-shadow:var(--shadow)}dialog::backdrop{background:rgba(0,0,0,.35)}
dialog form{padding:20px 22px}
dialog p{margin:0 0 16px;font-size:14px;color:var(--muted)}
.dlg-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}.dlg-head .ic{width:20px;height:20px;color:var(--info-text)}.dlg-head.danger .ic{color:var(--bad-text)}.dlg-head h2{font-size:15px}
dialog .btns{justify-content:flex-end}
dialog[open]{animation:dlg-in .14s ease-out}dialog[open]::backdrop{animation:dlg-fade .14s ease-out}
@keyframes dlg-in{from{opacity:0;transform:scale(.98)}to{opacity:1;transform:none}}
@keyframes dlg-fade{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:reduce){dialog[open],dialog[open]::backdrop{animation:none}}
/* dropdown */
.dd{position:relative;width:100%;min-width:0}.dd.auto{width:auto}
.dd-native{position:absolute!important;left:0;bottom:0;width:1px!important;height:1px!important;padding:0!important;border:0!important;margin:0;opacity:0;pointer-events:none}
.dd-btn{width:100%;justify-content:space-between;gap:8px;text-align:left;font-weight:400;line-height:1.5;padding:7px 10px;min-height:0;background:var(--card)}
.dd-btn:not(:disabled):hover{background:var(--card)}
.dd-btn:focus-visible,.dd.open .dd-btn{outline:none;border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
.dd-btn:disabled{background:var(--card2)}
.dd-val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}
.dd-btn .ic{width:14px;height:14px;color:var(--muted)}.dd.open .dd-btn .ic{transform:rotate(180deg)}
.dd:has(.dd-native[aria-invalid=true]) .dd-btn{border-color:var(--bad)}
.dd-menu{position:fixed;z-index:70;display:flex;flex-direction:column;width:max-content;max-width:calc(100vw - 16px);background:var(--card);border:1px solid var(--border-strong);border-radius:var(--radius);padding:4px;animation:dd-in .1s ease-out}
.dd-filter{margin-bottom:4px;padding:5px 8px;font-size:12px}
.dd-list{position:relative;list-style:none;margin:0;padding:0;overflow:auto;flex:1;min-height:0}
.dd-opt{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:3px;font-size:13px;cursor:pointer;white-space:nowrap}
.dd-opt .ic{width:14px;height:14px;color:var(--accent);visibility:hidden}.dd-opt[aria-selected=true] .ic{visibility:visible}
.dd-opt.hl{background:var(--card2)}.dd-opt[aria-disabled=true]{color:var(--muted);cursor:not-allowed}
.dd-none{padding:6px 8px;font-size:12px;color:var(--muted)}.dd-none[hidden],.dd-opt[hidden]{display:none}
@keyframes dd-in{from{opacity:0;transform:translateY(-2px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.dd-menu{animation:none}}
.login{max-width:360px;margin:80px auto}.login .card{padding:26px}
.status-head{text-align:center;margin:10px 0 24px}.status-head h1{font-size:22px}.status-head p{color:var(--muted);margin:6px 0 0}
.status-wrap{max-width:860px;margin:0 auto;padding:30px 20px 60px}
.group-title{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin:20px 0 8px}
@media(max-width:900px){.shell{flex-direction:column}.side{width:auto;height:auto;position:static;flex-direction:row;align-items:center;gap:4px;padding:10px 12px;overflow-x:auto;border-right:0;border-bottom:1px solid var(--border)}.side .brand{padding:0 8px 0 0}.side a.nav span.t{position:absolute;left:-9999px}.side .foot{margin:0 0 0 auto;border:0;padding:0;flex-direction:row}.side .foot button,.side .foot .btn{width:auto}.main{padding:16px 14px 60px}}
.dt td.btns>a.btn,.dt td.acts>a.btn{vertical-align:middle}
@media(max-width:480px){.dt-view .ic:not(.chev){display:none}}
.dt td.acts button.sm{padding-left:6px;padding-right:6px}
.oauth{display:grid;gap:8px}.oauth .btn{width:100%}.or{display:flex;align-items:center;gap:10px;margin:14px 0;color:var(--muted);font-size:12px}.or::before,.or::after{content:"";flex:1;border-top:1px solid var(--border)}
