/* NodeLens workspace. Loads after the map's app.css: same tokens (brand.css and tokens.css, dark and light), same type scale
   (11 / 12.5 / 14 / 18 / 28, serif for warm moments, mono only for numbers and paths) and the same parts (.btn, .st,
   .rail, .ri, .pop, .kick, .serif, .num, .url). This file adds the workspace's own layout. */
:root{--good-fill:var(--success);--ok-fill:var(--text-4);--low-fill:var(--warning);--bad:var(--danger);--wsmax:1320px}
html,body.ws{height:auto;min-height:100%}
.ws [hidden]{display:none!important}
body.ws{overflow:auto;overflow-x:hidden;background:var(--surface-app);font-size:var(--f12)}
body.ws a{color:inherit}
.small{font-size:var(--f11)}

/* ---------------------------------------------------------------- shell */
.wsapp{display:grid;grid-template-columns:56px minmax(0,1fr);min-height:100vh}
.wsapp.bare{grid-template-columns:minmax(0,1fr)}
.wsrail{grid-row:auto;grid-column:auto;position:sticky;top:0;height:100vh;z-index:20}
.wsrail a.ri,.wsrail a.logo{text-decoration:none}
.wsrail .ri .av{margin:0}
.wsrail a.ri:has(.av){padding:6px 0}
.wsmain{min-width:0;display:flex;flex-direction:column}
.wstop{height:52px;flex:none;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:12px;padding:0 24px;background:color-mix(in srgb,var(--surface-app) 92%,transparent);backdrop-filter:blur(8px);position:sticky;top:0;z-index:15}
.crumbs{display:flex;align-items:center;min-width:0;white-space:nowrap;font-size:var(--f14)}
.crumbs a{color:var(--text-3);text-decoration:none;border-radius:5px}
.crumbs a:hover{color:var(--text-1)}
.crumbs b{font-weight:600;overflow:hidden;text-overflow:ellipsis}
.crumbs .crx{color:var(--text-3)}
.crumbs .sep{color:var(--text-4);margin:0 9px}
.tacts{margin-left:auto;display:flex;gap:8px}
.mlogo{display:none;width:28px;height:28px;border-radius:8px;place-items:center;background:var(--surface-sunken);border:1px solid var(--border-strong);flex:none}
.wsbody{padding:30px 32px 56px;max-width:var(--wsmax);width:100%;margin:0 auto}

/* ---------------------------------------------------------------- page head */
.phead{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;margin-bottom:24px}
.phead h1{font-size:var(--f28);font-weight:600;letter-spacing:-.012em;line-height:1.12;margin-top:6px}
.sumline{font-size:19px;line-height:1.35;color:var(--text-2);margin-top:8px;max-width:720px}
.pacts{display:flex;gap:8px;flex-wrap:wrap}
.flash{display:flex;gap:9px;align-items:center;padding:10px 14px;border-radius:10px;margin-bottom:18px;font-size:var(--f12);background:color-mix(in srgb,var(--success) 13%,var(--surface-panel));color:var(--text-1);border:1px solid color-mix(in srgb,var(--success) 30%,var(--border))}
.flash svg{color:var(--success);flex:none}
.flash.info{background:color-mix(in srgb,var(--primary-fg) 8%,var(--surface-panel));border-color:color-mix(in srgb,var(--primary-fg) 26%,var(--border))}
.flash.info svg{color:var(--primary-fg)}
.flash.err{background:color-mix(in srgb,var(--danger) 10%,var(--surface-panel));border-color:color-mix(in srgb,var(--danger) 35%,var(--border))}
.flash.err svg{color:var(--danger)}
.st.run{color:var(--primary-fg);background:color-mix(in srgb,var(--primary-fg) 12%,var(--surface-panel))}
.st.bad{color:var(--danger);background:color-mix(in srgb,var(--danger) 12%,var(--surface-panel))}
.st{display:inline-flex;align-items:center;gap:6px;font-weight:500}
.st .pulse{width:7px;height:7px;border-radius:50%;background:currentColor;flex:none;animation:nlpulse 1.6s ease-in-out infinite}
@keyframes nlpulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.75)}}
.pbar{display:block;height:5px;border-radius:3px;background:var(--border);overflow:hidden}
.pbar i{display:block;height:100%;width:0;background:var(--success);border-radius:3px;transition:width .5s ease}
.btn{text-decoration:none}
.btn.danger{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 40%,var(--border-strong))}
.btn.danger:hover{background:color-mix(in srgb,var(--danger) 9%,var(--surface-panel))}
.btn.wide{width:100%;height:42px;font-size:var(--f14)}
.btn[aria-disabled=true]{cursor:not-allowed;background:var(--surface-chip);border:1px dashed var(--border-strong);color:var(--text-3)}
.btn svg{flex:none}

/* ---------------------------------------------------------------- sites list */
.slist{--cols:172px minmax(170px,1.1fr) minmax(190px,1.5fr) 128px 156px 264px;display:flex;flex-direction:column;gap:10px}
.shead{display:grid;grid-template-columns:var(--cols);gap:18px;padding:0 18px 0 13px;font-size:var(--f11);font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--text-3)}
.srow{display:grid;grid-template-columns:var(--cols);gap:18px;align-items:center;padding:12px 18px 12px 12px;background:var(--surface-panel);border:1px solid var(--border);border-radius:14px;transition:border-color .15s,box-shadow .15s;position:relative}
.srow:hover{border-color:var(--border-strong);box-shadow:0 1px 0 var(--border)}
.thumb{display:block;width:172px;height:124px;border-radius:10px;background:var(--surface-canvas);border:1px solid var(--border);overflow:hidden;position:relative}
a.thumb:hover{border-color:var(--border-strong)}
.thumb img{position:absolute;inset:0;width:100%;height:100%;display:block;object-fit:contain}
.thumb.empty{display:grid;place-items:center;color:var(--text-3);font-size:var(--f11);background-image:radial-gradient(var(--border-strong) 1px,transparent 1.2px);background-size:12px 12px}
.thumb.empty span{background:var(--surface-canvas);padding:2px 8px;border-radius:5px}
.scell{min-width:0}
.who h2{font-size:15px;font-weight:600;line-height:1.25;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.who h2 a{text-decoration:none}
.who h2 a:hover{text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--border-strong)}
.who .alias{font-size:var(--f12);color:var(--text-2);margin-top:1px}
.who .meta{font-size:var(--f11);color:var(--text-3);margin-top:4px;line-height:1.45}
.plan b{font-weight:600;font-size:var(--f12);color:var(--text-1)}
.plan b .num{font-family:Outfit,system-ui,sans-serif;font-feature-settings:"tnum" 1}
.topp{display:flex;gap:8px;align-items:flex-start;margin-top:6px;font-size:var(--f12);color:var(--text-2);line-height:1.35}
.topp>span:last-child{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.topp .pn{flex:none;margin-top:0}
.hs{display:flex;gap:4px;align-items:flex-end;height:26px}
.hc{display:block;width:15px;height:26px;border-radius:4px;background:linear-gradient(to top,var(--hcol) var(--v),var(--border) var(--v));}
.hc.good{--hcol:var(--good-fill)}.hc.ok{--hcol:var(--ok-fill)}.hc.low{--hcol:var(--low-fill)}
.hc.nm{background:none;border:1px dashed var(--border-strong);--v:0%}
.checks small{display:block;font-size:var(--f11);color:var(--text-3);margin-top:6px}
.status{display:flex;flex-direction:column;align-items:flex-start;gap:7px}
.status .pbar{width:150px}
.stlink{font-size:var(--f11);color:var(--text-3);text-decoration:none}
.stlink:hover{color:var(--text-1);text-decoration:underline;text-underline-offset:2px}
.acts{display:flex;gap:6px;justify-content:flex-end;align-items:center;position:relative}
.menu{position:absolute;right:0;top:calc(100% + 6px);z-index:40;background:var(--surface-raised);border:1px solid var(--border-strong);border-radius:11px;box-shadow:var(--shadow);padding:6px;min-width:260px;display:flex;flex-direction:column}
.menu[hidden]{display:none}
.menu .it{all:unset;box-sizing:border-box;display:flex;flex-direction:column;gap:1px;padding:8px 10px;border-radius:7px;font-size:var(--f12);color:var(--text-1);cursor:pointer;text-decoration:none}
.menu .it small{color:var(--text-3);font-size:var(--f11);line-height:1.3}
.menu .it:hover,.menu .it:focus-visible{background:var(--surface-sunken)}
.menu a.it+a.it,.menu button.it+a.it{border-top:0}
.menu button.it+a.it{margin-top:4px;position:relative}
.menu button.it+a.it:before{content:"";position:absolute;left:8px;right:8px;top:-3px;height:1px;background:var(--border)}
.ronote{display:flex;gap:7px;align-items:center;margin-top:16px;font-size:var(--f12);color:var(--text-3)}
.empty-hero{max-width:560px;margin:7vh auto 0;text-align:center;display:flex;flex-direction:column;align-items:center;gap:14px}
.eh-art{width:100%;max-width:520px;height:230px;border-radius:16px;background:var(--surface-canvas);border:1px solid var(--border);overflow:hidden;position:relative;margin-bottom:10px}
.eh-art svg{position:absolute;inset:0;width:100%;height:100%}
.empty-hero h1{font-size:var(--f28);font-weight:600}
.empty-hero .serif{font-size:19px;color:var(--text-2);line-height:1.4}

/* ---------------------------------------------------------------- cards and forms */
.card{background:var(--surface-panel);border:1px solid var(--border);border-radius:14px;padding:22px 24px}
.card.quiet{background:transparent}
.card h3{font-size:var(--f14);font-weight:600;margin-bottom:12px}
.twocol{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:18px;align-items:start}
.stack{display:flex;flex-direction:column;gap:18px;min-width:0}
.wsform{display:flex;flex-direction:column;gap:16px}
.wsform .fsec,.wsform details.adv{margin-top:0}
.narrowcard{max-width:560px}
.fsec{display:flex;flex-direction:column;gap:18px;padding-bottom:22px;margin-bottom:6px;border-bottom:1px solid var(--border)}
.fsec h3{margin-bottom:0}
.fld{display:flex;flex-direction:column;gap:6px;min-width:0}
.fld>span{font-size:var(--f12);font-weight:600;color:var(--text-1)}
.fld small,.fld .hint{font-size:var(--f11);color:var(--text-3);line-height:1.45}
.fld.narrow{max-width:280px}
.ws input:not([type=checkbox]):not([type=radio]):not([type=file]),.ws textarea,.ws select{font:inherit;font-size:var(--f14);color:var(--text-1);background:var(--surface-app);border:1px solid var(--border-field);border-radius:9px;padding:9px 12px;min-height:40px;width:100%;box-sizing:border-box;outline:none;transition:border-color .12s,box-shadow .12s}
.ws textarea{resize:vertical;min-height:62px;line-height:1.4}
.ws select{appearance:none;-webkit-appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--text-3) 50%),linear-gradient(135deg,var(--text-3) 50%,transparent 50%);background-position:calc(100% - 17px) 50%,calc(100% - 12px) 50%;background-size:5px 5px;background-repeat:no-repeat;padding-right:34px}
.ws input::placeholder,.ws textarea::placeholder{color:var(--text-4)}
.ws input:focus-visible,.ws textarea:focus-visible,.ws select:focus-visible{border-color:var(--focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--focus) 22%,transparent);outline:none!important}
.ws input[readonly]{color:var(--text-2);background:var(--surface-sunken)}
.fld.bad input,.fld.bad textarea,.fld.bad select{border-color:var(--danger)}
.ferr{display:flex;gap:7px;align-items:flex-start;color:var(--danger);font-size:var(--f12);margin:4px 0 8px;line-height:1.4}
.ferr[hidden]{display:none}
.factions{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap;align-items:center}
.factions .btn{height:38px;padding:0 16px}
.cbx{display:flex;gap:11px;align-items:flex-start;cursor:pointer;padding:2px 0}
.cbx input{position:absolute;opacity:0;width:1px;height:1px}
.cbx .box{width:18px;height:18px;border-radius:5px;border:1.5px solid var(--border-strong);display:grid;place-items:center;flex:none;margin-top:1px;color:transparent;background:var(--surface-app);transition:background .12s,border-color .12s}
.cbx input:checked+.box{background:var(--primary);border-color:var(--primary);color:var(--on-primary)}
.cbx input:focus-visible+.box{outline:2px solid var(--focus);outline-offset:2px}
.cbx input:disabled+.box{opacity:.5}
.cbx b{display:block;font-size:var(--f12);font-weight:600}
.cbx small{display:block;font-size:var(--f11);color:var(--text-3);margin-top:1px;line-height:1.4}
.segs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.own-on .segs{grid-template-columns:repeat(4,minmax(0,1fr))}
.segopt{position:relative;cursor:pointer}
.segopt input{position:absolute;opacity:0;width:1px;height:1px}
.segopt>span{display:flex;flex-direction:column;gap:1px;border:1px solid var(--border-strong);border-radius:9px;padding:9px 11px;transition:border-color .12s,background .12s}
.segopt b{font-size:var(--f12);font-weight:600}
.segopt small{font-size:var(--f11);color:var(--text-3)}
.segopt:hover>span{background:var(--surface-sunken)}
.segopt input:checked+span{border-color:var(--primary);background:color-mix(in srgb,var(--primary) 10%,transparent);box-shadow:inset 0 0 0 1px var(--primary)}
.segopt input:focus-visible+span{outline:2px solid var(--focus);outline-offset:2px}
.segopt.ownonly{display:none}
.own-on .segopt.ownonly{display:block}
details.adv{gap:16px}
details.adv summary{list-style:none;cursor:pointer;display:flex;gap:8px;align-items:center;font-size:var(--f14);font-weight:600;border-radius:6px;width:max-content}
details.adv summary::-webkit-details-marker{display:none}
details.adv summary svg{transition:transform .15s;color:var(--text-3)}
details.adv[open] summary svg{transform:rotate(90deg)}
details.adv[open]{border-bottom:1px solid var(--border)}
details.adv>*:not(summary){margin-top:16px}
.wsform>details.adv{border-bottom:1px solid var(--border)}
.frow{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap}
.frow .fld{flex:1 1 180px}
.frow .fld.narrow{flex:0 0 150px}
.btnfld{flex:0 0 auto!important}
.btnfld .btn{height:40px}
.aside .kick{margin-bottom:4px}
.aside p{font-size:var(--f12);color:var(--text-2);line-height:1.5;margin-top:10px}
.flow{list-style:none;display:flex;flex-direction:column;margin-top:16px}
.flow li{display:grid;grid-template-columns:16px minmax(0,1fr);gap:14px;padding-bottom:20px;position:relative}
.flow li:not(:last-child):before{content:"";position:absolute;left:7px;top:18px;bottom:2px;width:1.5px;background:var(--border-strong)}
.flow .dot{width:14px;height:14px;border-radius:50%;margin-top:2px;box-sizing:border-box}
.flow .dot.c{border:2.5px solid var(--good-fill)}
.flow .dot.a{border:2.5px solid var(--info)}
.flow .dot.m{background:var(--primary-fg)}
.flow b{display:block;font-size:var(--f14);font-weight:600;margin-bottom:2px}
.flow span{display:block;font-size:var(--f12);color:var(--text-2);line-height:1.45}
.flow .est{color:var(--text-3);font-size:var(--f11);margin-top:5px}
.flow .est:empty{display:none}

/* upload */
.drop{position:relative;display:block;border:1.5px dashed var(--border-strong);border-radius:12px;background:var(--surface-app);cursor:pointer;transition:border-color .12s,background .12s}
.drop input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}
.drop:hover,.drop.over{border-color:var(--focus);background:color-mix(in srgb,var(--focus) 5%,var(--surface-app))}
.drop:focus-within{outline:2px solid var(--focus);outline-offset:2px}
.dropin{display:flex;flex-direction:column;align-items:center;gap:6px;padding:34px 20px;text-align:center;pointer-events:none}
.dropin svg{width:22px;height:22px;color:var(--primary-fg)}
.dropin b{font-size:var(--f14);font-weight:600}
.dropin span{font-size:var(--f12);color:var(--text-3)}
.dropin .fname{font-family:'JetBrains Mono',monospace;font-size:var(--f12);color:var(--text-1);margin-top:4px}
.hint{font-size:var(--f12);color:var(--text-2);margin:14px 0 16px;line-height:1.45}
.upbar{display:flex;flex-direction:column;gap:6px;margin:14px 0 4px}
.upbar[hidden]{display:none}
.upbar small{font-size:var(--f11);color:var(--text-3)}

/* downloads */
.dlg{margin-bottom:16px;padding:18px 20px 8px}
.dlg ul{list-style:none}
.dl{display:grid;grid-template-columns:30px minmax(0,1fr) 190px 70px auto;gap:14px;align-items:center;padding:11px 0;border-top:1px solid var(--border)}
.dl:first-child{border-top:none}
.dli{width:30px;height:30px;border-radius:8px;background:var(--surface-sunken);border:1px solid var(--border);display:grid;place-items:center;color:var(--text-2)}
.dl b{display:block;font-size:var(--f12);font-weight:600}
.dl small{display:block;font-size:var(--f11);color:var(--text-3);margin-top:1px}
.dlf{font-size:var(--f11);color:var(--text-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dls{font-size:var(--f11);color:var(--text-2);text-align:right}

/* ---------------------------------------------------------------- update view */
.stepper{display:flex;list-style:none;margin:-6px 0 18px;flex-wrap:wrap;gap:6px 0}
.stepper li{display:flex;align-items:center;gap:8px;font-size:var(--f12);color:var(--text-3);font-weight:500}
.stepper li:not(:last-child):after{content:"";width:44px;height:1.5px;background:var(--border-strong);margin:0 12px;border-radius:1px}
.stepper li.done:not(:last-child):after{background:var(--primary)}
.stepper i{width:22px;height:22px;border-radius:50%;border:1.5px solid var(--border-strong);display:grid;place-items:center;color:transparent;box-sizing:border-box}
.stepper li.on{color:var(--text-1)}
.stepper li.on i{border:2px solid var(--primary-fg);box-shadow:0 0 0 4px color-mix(in srgb,var(--primary-fg) 18%,transparent)}
.stepper li.done{color:var(--text-1)}
.stepper li.done i{background:var(--primary);border-color:var(--primary);color:var(--on-primary)}
.stepper li.bad i{border-color:var(--danger);color:var(--danger)}
.ucard{padding:24px 26px}
.uhead{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:28px;align-items:end}
.big{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin-top:6px}
.big .num{font-size:46px;font-weight:500;letter-spacing:-.03em;line-height:1}
.big span{font-size:var(--f18);color:var(--text-2)}
.big .word{font-size:30px;font-weight:600;color:var(--text-1);letter-spacing:-.01em}
.uhead p{margin-top:8px;font-size:var(--f12)}
.waffle{display:grid;grid-template-columns:repeat(var(--wc,40),7px);gap:3px;align-content:end}
.waffle i{width:7px;height:7px;border-radius:2px;background:var(--border);transition:background .35s}
.waffle i.f{background:var(--good-fill)}
.waffle i.n{background:var(--primary-fg);animation:nlpulse 1.2s ease-in-out infinite}
.waffle i.t{background:var(--low-fill)}
.pbar.lg{height:8px;margin:22px 0 18px;border-radius:4px}
.pbar.lg i{border-radius:4px}
.pbar.lg.ind i{width:30%!important;animation:nlslide 1.6s ease-in-out infinite}
@keyframes nlslide{0%{transform:translateX(-100%)}100%{transform:translateX(340%)}}
.tiles{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px}
.tile{background:var(--surface-sunken);border:1px solid var(--border);border-radius:10px;padding:10px 12px;min-width:0}
.tile span{display:block;font-size:var(--f11);color:var(--text-3)}
.tile b{display:block;font-size:20px;font-weight:500;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tile b.warnv{color:var(--warning-fg)}
.umsg{display:flex;gap:12px;align-items:flex-start;margin-top:18px;padding:14px 16px;border-radius:12px;font-size:var(--f14);line-height:1.45}
.umsg svg{flex:none;margin-top:3px;width:16px;height:16px}
.umsg.ok{background:color-mix(in srgb,var(--success) 12%,var(--surface-panel));border:1px solid color-mix(in srgb,var(--success) 30%,var(--border))}
.umsg.ok svg{color:var(--success)}
.umsg.warn{background:color-mix(in srgb,var(--warning) 10%,var(--surface-panel));border:1px solid color-mix(in srgb,var(--warning) 35%,var(--border))}
.umsg.warn svg{color:var(--warning-fg)}
.umsg.bad{background:color-mix(in srgb,var(--danger) 9%,var(--surface-panel));border:1px solid color-mix(in srgb,var(--danger) 35%,var(--border))}
.umsg.bad svg{color:var(--danger)}
.umsg b{display:block;font-weight:600}
.umsg ul{margin:6px 0 0 18px;font-size:var(--f12);color:var(--text-2)}
.logc{margin-top:18px;padding:18px 20px 20px}
.logh{display:flex;align-items:center;gap:12px;margin-bottom:12px}
.logh h3{margin:0}
.logh .btn{margin-left:auto}
.log{background:var(--surface-canvas);border:1px solid var(--border);border-radius:10px;padding:12px 14px;height:340px;overflow:auto;font-family:'JetBrains Mono',ui-monospace,monospace;font-size:11.5px;line-height:1.6;color:var(--text-2);white-space:pre-wrap;word-break:break-word;margin:0}
.log .h{color:var(--primary-fg);font-weight:500}
.log .w{color:var(--warning-fg)}
.log .e{color:var(--danger)}

/* ---------------------------------------------------------------- users, account, settings */
.adduser{margin-bottom:18px}
.adduser>small{display:block;margin-top:2px}
.tablecard{padding:0;overflow:hidden}
.utab{table-layout:auto}
.utab th{background:var(--surface-panel);padding:11px 14px}
.utab td{padding:11px 14px;vertical-align:middle}
.utab td b{font-weight:600}
.utab td small{display:block;font-size:var(--f11);color:var(--text-3)}
.utab tr.off td{opacity:.6}
.utab select{min-height:32px!important;padding:5px 30px 5px 10px!important;font-size:var(--f12)!important;width:auto!important}
.utab .ra{text-align:right;white-space:nowrap}
.utab .tagb{margin-left:4px;vertical-align:1px}
form.inl{display:inline-flex;gap:6px}
.pwbox{margin-bottom:18px;border-color:color-mix(in srgb,var(--primary-fg) 40%,var(--border));background:color-mix(in srgb,var(--primary-fg) 5%,var(--surface-panel))}
.pwbox p{font-size:var(--f12);color:var(--text-2);margin-top:6px}
.pwline{display:flex;gap:10px;align-items:center;margin:14px 0 10px;flex-wrap:wrap}
.pwline code{font-size:22px;letter-spacing:.04em;padding:9px 14px;background:var(--surface-app);border-radius:9px;border:1px dashed var(--border-strong);color:var(--text-1)}
.pwwarn{display:flex;gap:7px;align-items:center;color:var(--warning-fg)!important;font-weight:500}
.facts{display:flex;flex-direction:column}
.fact{display:grid;grid-template-columns:120px minmax(0,1fr);gap:12px;padding:9px 0;border-top:1px solid var(--border);font-size:var(--f12)}
.fact:first-child{border-top:none}
.fact span{color:var(--text-3)}
.fact b{font-weight:500;overflow-wrap:anywhere}
.fact b.url{font-size:var(--f11)}
.warnline{display:flex;gap:8px;align-items:flex-start;color:var(--warning-fg);font-size:var(--f12);margin:12px 0 4px}
.msgp{max-width:560px;margin:10vh auto 0;display:flex;flex-direction:column;gap:10px;align-items:flex-start}
.msgp h1{font-size:var(--f28);font-weight:600}
.msgp .serif{font-size:19px;color:var(--text-2);line-height:1.4;margin-bottom:10px}

/* ---------------------------------------------------------------- sign in */
body.login .wsbody{padding:0;max-width:none}
.lgwrap{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(400px,1fr);min-height:100vh}
.lgart{position:relative;background:var(--surface-canvas);border-right:1px solid var(--border);overflow:hidden;min-height:240px}
.lgnet{position:absolute;inset:0}
.lgnet svg{position:absolute;inset:0;width:100%;height:100%}
.lgcap{position:absolute;left:48px;right:48px;bottom:44px;pointer-events:none}
.lgcap .serif{font-size:32px;line-height:1.18;color:var(--text-1);max-width:440px;margin-top:10px}
.lgform{display:grid;place-items:center;padding:48px 28px;background:var(--surface-app)}
.lgbox{width:100%;max-width:360px;display:flex;flex-direction:column;gap:18px}
.brandrow{display:flex;gap:9px;align-items:center;font-size:15px}
.brandrow b{font-weight:600}
.lgbox h1{font-size:var(--f28);font-weight:600;margin-top:18px}
.lgtag{display:none;font-size:18px;color:var(--text-2);margin-top:-8px;line-height:1.3}
.lgbox .wsform{gap:16px}
.lgbox .ferr{margin:0}
.lgfoot{font-size:var(--f12);color:var(--text-3);border-top:1px solid var(--border);padding-top:16px}
.lgcredit{display:flex;align-items:center;gap:6px;font-size:var(--f11);color:var(--text-3);margin-top:-4px}
.lgcredit svg{height:12px;width:auto;display:block}

/* ---------------------------------------------------------------- narrower */
@media (max-width:1180px){
  .slist{--cols:136px minmax(150px,1.1fr) minmax(160px,1.3fr) 112px 150px 172px}
  .thumb{width:136px;height:110px}
  .hide-sm{display:none}
  .tiles{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (max-width:1000px){
  .slist{--cols:140px minmax(0,1fr) minmax(0,1fr) auto}
  .shead{display:none}
  .srow{grid-template-columns:140px minmax(0,1fr) minmax(0,1fr) auto;grid-template-areas:"art who plan acts" "art checks status acts"}
  .srow>.thumb{grid-area:art;width:140px;height:96px}
  .who{grid-area:who}.plan{grid-area:plan}.checks{grid-area:checks}.status{grid-area:status}.acts{grid-area:acts}
  .twocol{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:760px){
  .wsapp{grid-template-columns:minmax(0,1fr)}
  .wsrail{position:fixed;top:auto;bottom:0;left:0;right:0;height:60px;width:100%;flex-direction:row;justify-content:space-around;align-items:center;padding:0 6px env(safe-area-inset-bottom);border-right:0;border-top:1px solid var(--border);background:color-mix(in srgb,var(--surface-app) 94%,transparent);backdrop-filter:blur(10px);z-index:30}
  .wsrail .logo,.wsrail .sp{display:none}
  .wsrail .ri{width:auto;min-width:56px}
  .wstop{padding:0 16px}
  .mlogo{display:grid}
  .wsbody{padding:20px 16px 96px}
  .phead{flex-direction:column;align-items:stretch;gap:14px;margin-bottom:18px}
  .phead h1{font-size:24px}
  .sumline{font-size:17px}
  .pacts .btn{flex:1}
  .srow{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"art art" "who status" "plan plan" "checks checks" "acts acts";gap:12px;padding:12px}
  .srow>.thumb{width:100%;height:150px}
  .status{align-items:flex-end;text-align:right}
  .status .pbar{width:110px}
  .acts{justify-content:flex-start}
  .acts .btn.primary{flex:1}
  .menu{left:auto;right:0;top:auto;bottom:calc(100% + 6px);min-width:240px}
  .card{padding:18px 16px}
  .segs,.own-on .segs{grid-template-columns:repeat(2,minmax(0,1fr))}
  .fld.narrow{max-width:none}
  .dl{grid-template-columns:30px minmax(0,1fr) auto;grid-template-areas:"i t b" "i f b"}
  .dl .dli{grid-area:i}.dl>div{grid-area:t}.dl .dlf{grid-area:f}.dl .dls{display:none}.dl .btn{grid-area:b}
  .uhead{grid-template-columns:minmax(0,1fr)}
  .waffle{--wc:30!important}
  .big .num{font-size:38px}
  .tiles{grid-template-columns:repeat(2,minmax(0,1fr))}
  .stepper li:not(:last-child):after{width:18px;margin:0 8px}
  .log{height:300px;font-size:11px}
  .tablecard{overflow-x:auto}
  .utab{min-width:640px}
  .lgwrap{grid-template-columns:minmax(0,1fr);grid-template-rows:230px auto}
  .lgart{border-right:0;border-bottom:1px solid var(--border);min-height:0;height:230px}
  .lgcap{display:none}
  .lgform{padding:28px 16px 40px;place-items:start center}
  .lgbox h1{margin-top:4px}
  .lgtag{display:block}
  .frow .fld,.frow .fld.narrow{flex:1 1 100%}
  .fact{grid-template-columns:100px minmax(0,1fr)}
}
@media (prefers-reduced-motion:reduce){.st .pulse,.waffle i.n,.pbar.lg.ind i{animation:none}}

/* ---- Workspace 1.1 (moves and removals, compare, self-test, Re-audit all). Tokens only, so the theme layer
   recolours it; kept in one block at the end so style branches merge cleanly. */
.flash.fresh{flex-wrap:wrap}.flash.fresh>span{flex:1 1 260px}.flash.fresh form.inl{margin-left:auto}
.mvplan{display:flex;flex-direction:column;gap:14px}
.mvwhat{font-size:var(--f18);color:var(--text-1);line-height:1.35}
.mvtiles{grid-template-columns:repeat(4,minmax(0,1fr))}
.mvplan>.factions{margin-top:0}
.mvlist{list-style:none;margin-top:6px}
.mvtools{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;padding-top:14px;border-top:1px solid var(--border)}
.mvtool{display:flex;flex-direction:column;gap:12px;background:var(--surface-sunken);border:1px solid var(--border);border-radius:12px;padding:16px;min-width:0}
.mvtool h4{font-size:var(--f12);font-weight:600;color:var(--text-1)}
.mvtool .factions{margin-top:auto}
.mvtool input[type=file]{font-size:var(--f12);color:var(--text-2);max-width:100%}
.segs.two{grid-template-columns:repeat(2,minmax(0,1fr))}
.mvh{font-size:var(--f18);font-weight:600;margin:28px 0 12px}
.mvstart{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;align-items:start}
.mvcoming{margin:8px 0 0 18px;font-size:var(--f12);color:var(--text-2);line-height:1.5}
.mvcoming li+li{margin-top:4px}
.dl.now b{color:var(--text-1)}
.dl.on{background:color-mix(in srgb,var(--primary) 7%,transparent);border-radius:8px}
.selftest{margin-top:18px}
.stline{display:flex;gap:8px;align-items:center;font-size:var(--f12);color:var(--success);margin:4px 0 10px}
.stline.warn{color:var(--warning-fg)}.stline span{color:var(--text-1)}
.sth{margin-top:16px}
.log.short{height:auto;max-height:260px;white-space:pre-wrap}
.selftest .fact{grid-template-columns:150px minmax(0,1fr)}.selftest .fact .st{margin-right:6px}
details.cmd{margin-top:12px}details.cmd .log{height:auto;max-height:180px;white-space:pre-wrap;margin-top:8px}
@media (max-width:760px){
  .mvtiles{grid-template-columns:repeat(2,minmax(0,1fr))}
  .mvtools,.mvstart{grid-template-columns:minmax(0,1fr)}
  .selftest .fact{grid-template-columns:110px minmax(0,1fr)}
  .flash.fresh form.inl{margin-left:0}
}
.mvtool .segopt>span{min-width:0}.mvtool .segopt small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mvtool input[type=file]::file-selector-button{font:inherit;font-weight:500;color:var(--text-1);background:var(--surface-panel);border:1px solid var(--border-strong);border-radius:8px;padding:6px 12px;margin-right:10px;cursor:pointer}
.mvtool input[type=file]::file-selector-button:hover{background:var(--surface-raised)}

/* ---- Batch 3 (compare with an earlier check, list mode, staging access). Tokens only; one block at the end. */
.cmhead{display:flex;flex-direction:column;gap:12px;margin-bottom:18px}
.cmline{font-size:var(--f18);color:var(--text-1);line-height:1.35}
.cmtiles{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px}
.cmtile{background:var(--surface-panel);border:1px solid var(--border);border-radius:12px;padding:14px 16px;min-width:0;display:flex;flex-direction:column;gap:4px}
.cmtile span{font-size:var(--f11);color:var(--text-3);font-weight:500}
.cmtile b{font-size:30px;font-weight:500;letter-spacing:-.02em;line-height:1.05;color:var(--text-1)}
.cmtile small{font-size:var(--f11);color:var(--text-3);line-height:1.4}
.cmtile.good b{color:var(--success)}
.cmtile.bad b{color:var(--danger)}
.cmtile.warn b{color:var(--warning-fg)}
.cmgrid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:18px;align-items:start;margin-bottom:18px}
.cmh{font-size:var(--f11);font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);margin:14px 0 2px}
.cmh:first-of-type{margin-top:0}
.cmlist{list-style:none}
.cmrow,.cmsec{display:grid;grid-template-columns:62px minmax(0,1fr) 150px;gap:12px;align-items:start;padding:10px 0;border-top:1px solid var(--border)}
.cmlist>li:first-child{border-top:none}
.cmrow .st{justify-content:center;font-size:var(--f11);padding:2px 0;border-radius:6px}
.cmt{min-width:0}
.cmt b{display:block;font-size:var(--f12);font-weight:600;color:var(--text-1);line-height:1.35}
.cmt b a{text-decoration:none}.cmt b a:hover{text-decoration:underline;text-underline-offset:2px}
.cmt small{display:block;font-size:var(--f11);color:var(--text-3);margin-top:2px;line-height:1.4}
.cmt small:empty{display:none}
.cmn{display:flex;flex-direction:column;align-items:flex-end;gap:3px;min-width:0}
.cmn .num{font-size:var(--f12);color:var(--text-1);white-space:nowrap}
.cmn .num i,.cmsec .num i{color:var(--text-4);font-style:normal}
.cmn small{font-size:var(--f11);color:var(--text-3)}
.cmba{display:flex;flex-direction:column;gap:2px;width:100%;max-width:150px}
.cmba i{display:block;height:4px;border-radius:2px}
.cmba .was,.cmkey .was{background:var(--border-strong)}
.cmba .now,.cmkey .now{background:var(--primary-ui)}
.cmmore{margin-top:6px}
.cmmore summary{list-style:none;cursor:pointer;display:inline-flex;gap:5px;align-items:center;font-size:var(--f11);color:var(--text-2);border-radius:5px}
.cmmore summary::-webkit-details-marker{display:none}
.cmmore summary svg{transition:transform .15s;color:var(--text-3)}
.cmmore[open] summary svg{transform:rotate(90deg)}
.cmmore ul{list-style:none;margin:6px 0 6px}
.cmmore li{display:flex;gap:8px;align-items:baseline;font-size:var(--f11);padding:2px 0;min-width:0}
.cmmore li .url{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-1);min-width:0}
.cmmore li small{color:var(--text-3);flex:none}
.cmsec{grid-template-columns:minmax(0,1fr) 84px 150px 96px}
.cmsp,.cmsl{display:flex;flex-direction:column;align-items:flex-end;gap:2px}
.cmsi{display:flex;flex-direction:column;gap:3px}
.cmsec small{font-size:var(--f11);color:var(--text-3)}
.cmsec .num{font-size:var(--f12);color:var(--text-1);white-space:nowrap}
.cmsl.up .num{color:var(--success)}.cmsl.down .num{color:var(--danger)}
.cmkey{display:flex;align-items:center;gap:6px;margin:-4px 0 8px}
.cmkey i{display:inline-block;width:16px;height:4px;border-radius:2px}
.cmkey i+i,.cmkey i:not(:first-child){margin-left:8px}
.cmtable{margin-bottom:18px}
.cmth{display:flex;align-items:center;gap:12px;padding:16px 18px 10px;flex-wrap:wrap}
.cmth h3{margin:0}
.cmq{display:flex;gap:6px;margin-left:auto}
.cmq input{min-height:32px!important;padding:5px 10px!important;font-size:var(--f12)!important;width:200px!important}
.cmchips{display:flex;flex-wrap:wrap;gap:6px;padding:0 18px 12px}
.cmchips .chip{text-decoration:none;height:28px}
.cmtw{overflow-x:auto;border-top:1px solid var(--border)}
.cmtab{table-layout:auto;min-width:720px}
.cmtab th{padding:9px 14px}
.cmtab td{padding:9px 14px}
.cmtab td.one{max-width:340px}
.cmtab td.one b.url{font-size:var(--f11);font-weight:500;color:var(--text-1)}
.cmtab td.cmd{font-size:var(--f11);color:var(--text-2);line-height:1.5}
.cmtab td.cmd .cml{color:var(--text-3);font-weight:600}
.cmtab td.cmd .cml.bad{color:var(--danger)}.cmtab td.cmd .cml.ok{color:var(--success)}
.cmtab td.cmd .was{color:var(--text-3);text-decoration:line-through;text-decoration-color:var(--border-strong)}
.cmtab td.cmd .now{color:var(--text-1)}
.cmtab td.cmd i{color:var(--text-4);font-style:normal}
.cmtab td.cmile{white-space:nowrap;text-align:right}
.cmtab td.cmile small.down{color:var(--danger)}.cmtab td.cmile small.up{color:var(--success)}
.cmtab .st{font-size:var(--f11);white-space:nowrap}
.cmpager{display:flex;gap:10px;align-items:center;justify-content:flex-end;padding:12px 18px}
.cmpick .cmother{margin-top:14px;padding-top:14px;border-top:1px solid var(--border);gap:10px}
.cmpick .cmother select{max-width:420px}
.cmnote{margin:8px 0 6px}
.cmfiles{margin:0 0 8px}
.cmfiles>ul{margin-top:8px}
.nmode{display:grid;grid-template-columns:repeat(2,minmax(0,320px));gap:10px;margin:-8px 0 18px}
.nmo{display:flex;flex-direction:column;gap:2px;padding:11px 14px;border:1px solid var(--border-strong);border-radius:11px;background:var(--surface-panel);text-decoration:none;cursor:pointer}
.nmo b{font-size:var(--f12);font-weight:600;color:var(--text-1)}
.nmo small{font-size:var(--f11);color:var(--text-3)}
.nmo:hover{background:var(--surface-sunken)}
.nmo.on{border-color:var(--primary);background:color-mix(in srgb,var(--primary) 10%,var(--surface-panel));box-shadow:inset 0 0 0 1px var(--primary)}
.acsaved{display:flex;gap:8px;align-items:flex-start;font-size:var(--f12);color:var(--text-1);background:var(--surface-sunken);border:1px solid var(--border);border-radius:10px;padding:10px 12px;line-height:1.45}
.acsaved svg{flex:none;margin-top:3px;color:var(--primary-fg)}
@media (max-width:1180px){.cmtiles{grid-template-columns:repeat(3,minmax(0,1fr))}.cmgrid{grid-template-columns:minmax(0,1fr)}}
@media (max-width:760px){
  .cmtiles{grid-template-columns:repeat(2,minmax(0,1fr))}
  .cmtile b{font-size:24px}
  .cmrow{grid-template-columns:54px minmax(0,1fr);grid-template-areas:"c t" "c n"}
  .cmrow>.st{grid-area:c}.cmrow>.cmt{grid-area:t}.cmrow>.cmn{grid-area:n;align-items:flex-start}
  .cmsec{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"t p" "i l"}
  .cmsec>.cmt{grid-area:t}.cmsec>.cmsp{grid-area:p}.cmsec>.cmsi{grid-area:i}.cmsec>.cmsl{grid-area:l}
  .cmq{margin-left:0;width:100%}.cmq input{width:100%!important}
  .nmode{grid-template-columns:minmax(0,1fr)}
}
.umsg .btn svg{color:currentColor;margin-top:0;width:14px;height:14px}
/* Custom fields in site settings: a name and a selector per row */
.exhead,.exrow{display:grid;grid-template-columns:minmax(0,160px) minmax(0,1fr);gap:8px}
.exhead span{font-size:var(--f11);font-weight:600;color:var(--text-3)}
.exrow[hidden]{display:none}
.exrow input.mono{font-family:'JetBrains Mono',ui-monospace,monospace!important;font-size:var(--f12)}
.fld>.btn.sm{align-self:flex-start}
.fld small code,.fsec code{font-family:'JetBrains Mono',ui-monospace,monospace;font-size:var(--f11);background:var(--surface-chip);color:var(--text-1);border-radius:4px;padding:0 4px}
@media (max-width:520px){.exhead,.exrow{grid-template-columns:minmax(0,110px) minmax(0,1fr)}}
