/* ============================================================
   Concourse — admin console.

   Design language: a data-dense operations console. Same warm-paper
   palette and themeable teal accent as the public viewer, so the
   product reads as one system, but laid out for work rather than
   for browsing: a standing navigation rail, numbers before prose,
   and tables that stay legible at a glance.

   Structure of this file:
     1. tokens (light + dark)      5. data display: stats, tables, lists
     2. app shell: rail, topbar    6. forms, buttons, pills
     3. page furniture             7. overlays: toast, modal, login
     4. cards + sections           8. layout editor
   ============================================================ */
*,*::before,*::after{box-sizing:border-box}
[hidden]{display:none!important} /* display:flex on .nav/.userchip must not defeat the hidden attribute */

/* ---------- 1. tokens ---------- */
:root{
  --ink:#201c19; --ink-2:#2a2521;
  --paper:#f6f3ed; --panel:#ffffff; --panel-2:#faf8f3; --panel-3:#f2eee6;
  --line:#e6ded1; --line-2:#d5cabb;
  --text:#221f1a; --muted:#8b8275; --muted-2:#6b6252;
  --accent:#0d6e6b; --accent-2:#0f807c; --accent-soft:#e2efee;
  --mat:#ece5da; --mat-line:#ded4c6;
  --good:#3f9142; --good-soft:#e5f3e6;
  --warn:#b26a00; --warn-soft:#fdf1dd;
  --bad:#c0392b;  --bad-soft:#fbeae7;
  --info:#2f4bd0; --info-soft:#e7edfb;
  --shadow-sm:0 1px 2px rgba(40,30,20,.05),0 1px 3px rgba(40,30,20,.04);
  --shadow-md:0 2px 6px rgba(40,30,20,.07),0 10px 24px rgba(40,30,20,.07);
  --shadow-lg:0 12px 40px rgba(40,30,20,.20);
  /* Accent readable as TEXT on the page background. The white-label accent is injected as an
     inline style on <html>, which outranks any stylesheet rule, so dark mode cannot simply
     redefine --accent — it derives a lighter text tint from whatever accent is set. */
  --accent-text:var(--accent);
  --rail:248px; --rail-min:60px; --topbar-h:56px; --row-h:38px;
  --r-sm:8px; --r-md:11px; --r-lg:16px;
  --font:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --mono:ui-monospace,"SF Mono","Cascadia Code","Roboto Mono",Menlo,Consolas,monospace;
  color-scheme:light;
}
/* Dark theme mirrors the public viewer's palette so the two surfaces are recognisably one product. */
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --ink:#100e0c; --ink-2:#191511;
    --paper:#14110d; --panel:#1e1a15; --panel-2:#191510; --panel-3:#231e17;
    --line:#332b21; --line-2:#453a2c;
    --text:#efe7d9; --muted:#8f8574; --muted-2:#b0a693;
    --accent-soft:color-mix(in srgb,var(--accent) 26%,#14110d);
    --accent-text:color-mix(in srgb,var(--accent) 62%,#fff);
    --mat:#0e0c09; --mat-line:#2a2318;
    --good:#63bb66; --good-soft:#16301a;
    --warn:#d69224; --warn-soft:#332512;
    --bad:#e07b6e;  --bad-soft:#3a1c17;
    --info:#8aa2f0; --info-soft:#1b2340;
    --shadow-sm:0 1px 2px rgba(0,0,0,.4);
    --shadow-md:0 2px 8px rgba(0,0,0,.45),0 12px 28px rgba(0,0,0,.35);
    --shadow-lg:0 16px 48px rgba(0,0,0,.6);
    color-scheme:dark;
  }
}
:root[data-theme="dark"]{
  --ink:#100e0c; --ink-2:#191511;
  --paper:#14110d; --panel:#1e1a15; --panel-2:#191510; --panel-3:#231e17;
  --line:#332b21; --line-2:#453a2c;
  --text:#efe7d9; --muted:#8f8574; --muted-2:#b0a693;
  --accent-soft:color-mix(in srgb,var(--accent) 26%,#14110d);
  --accent-text:color-mix(in srgb,var(--accent) 62%,#fff);
  --mat:#0e0c09; --mat-line:#2a2318;
  --good:#63bb66; --good-soft:#16301a;
  --warn:#d69224; --warn-soft:#332512;
  --bad:#e07b6e;  --bad-soft:#3a1c17;
  --info:#8aa2f0; --info-soft:#1b2340;
  --shadow-sm:0 1px 2px rgba(0,0,0,.4);
  --shadow-md:0 2px 8px rgba(0,0,0,.45),0 12px 28px rgba(0,0,0,.35);
  --shadow-lg:0 16px 48px rgba(0,0,0,.6);
  color-scheme:dark;
}

html,body{margin:0;height:100%}
body{font-family:var(--font);color:var(--text);background:var(--paper);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
button,input,select,textarea{font-family:inherit}
a{color:var(--accent-text)}
::selection{background:color-mix(in srgb,var(--accent) 24%,transparent)}
:focus-visible{outline:2px solid var(--accent-text);outline-offset:2px;border-radius:4px}

/* ---------- 2. app shell ---------- */
.app{display:grid;grid-template-columns:var(--rail) minmax(0,1fr);height:100vh;height:100dvh}

.sidebar{
  display:flex;flex-direction:column;min-height:0;position:relative;
  background:linear-gradient(180deg,var(--ink-2),var(--ink));color:#e9e2d6;
  border-right:1px solid rgba(0,0,0,.5);z-index:50;
}
/* The collapse handle sits on the rail's own edge rather than in the topbar: it belongs to the
   thing it moves, and the topbar is already carrying breadcrumbs and page actions. */
.rail-toggle{
  position:absolute;top:22px;right:-11px;width:22px;height:22px;z-index:2;
  display:grid;place-items:center;border-radius:50%;cursor:pointer;
  background:var(--ink-2);border:1px solid rgba(255,255,255,.16);color:#b6ad9d;
  opacity:0;transition:opacity .15s,color .15s,background .15s;
}
.sidebar:hover .rail-toggle,.rail-toggle:focus-visible{opacity:1}
.rail-toggle:hover{background:var(--accent);color:#fff;border-color:var(--accent)}
.rail-toggle svg{width:13px;height:13px;transition:transform .2s}

/* Collapsed: an icon rail. Labels, group headings, the contextual show list and the wordmark all
   go; the icons and the theme/user controls stay, so nothing becomes unreachable.
   Desktop only — below 900px the rail is already a drawer you open deliberately, and collapsing
   that to icons would be a second gesture for no gain. */
@media(min-width:901px){
  .app.rail-collapsed{grid-template-columns:var(--rail-min) minmax(0,1fr)}
  .app.rail-collapsed .rail-toggle{opacity:1}
  .app.rail-collapsed .rail-toggle svg{transform:rotate(180deg)}
  .app.rail-collapsed .sidebar .brand{padding:16px 0 14px;justify-content:center}
  .app.rail-collapsed .sidebar .brand .wm,
  .app.rail-collapsed .nav a span,
  .app.rail-collapsed .nav-group,
  .app.rail-collapsed .ctx,
  .app.rail-collapsed .theme-btn span,
  .app.rail-collapsed .userchip .uwho{display:none}
  .app.rail-collapsed .nav{padding:12px 8px;align-items:center}
  .app.rail-collapsed .nav a{justify-content:center;padding:10px;width:40px}
  .app.rail-collapsed .side-foot{align-items:center;padding:10px 8px}
  .app.rail-collapsed .theme-btn{justify-content:center;padding:9px;width:40px}
  .app.rail-collapsed .userchip{flex-direction:column;gap:7px}
}

/* Signed out: there is nowhere to navigate to, so the rail is not there at all. A dark bar of
   dead links beside a login form is chrome pretending to be an app. */
.app.signed-out{grid-template-columns:minmax(0,1fr)}
.app.signed-out .sidebar,.app.signed-out .topbar{display:none}
.sidebar .brand{display:flex;align-items:center;gap:11px;text-decoration:none;color:inherit;padding:16px 16px 14px;border-bottom:1px solid rgba(255,255,255,.07)}
.sidebar .brand .glyph{width:34px;height:34px;flex:0 0 auto;border-radius:9px;background:linear-gradient(145deg,var(--accent-2),var(--accent));display:grid;place-items:center;box-shadow:inset 0 1px 0 rgba(255,255,255,.25)}
.sidebar .brand .glyph svg{width:20px;height:20px}
.sidebar .brand .wm{display:flex;flex-direction:column;line-height:1.1;min-width:0}
.sidebar .brand .wm b{font-size:15px;font-weight:700;letter-spacing:.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sidebar .brand .wm span{font-size:9.5px;letter-spacing:.22em;text-transform:uppercase;color:#9c9382}

.nav{display:flex;flex-direction:column;gap:2px;padding:12px 10px;overflow-y:auto;flex:1;min-height:0}
.nav-group{font-size:9.5px;letter-spacing:.18em;text-transform:uppercase;color:#7e7565;font-weight:800;padding:12px 8px 5px}
.nav-group:first-child{padding-top:2px}
.nav a{
  display:flex;align-items:center;gap:10px;color:#cdc5b7;text-decoration:none;font-size:13.5px;font-weight:600;
  padding:9px 10px;border-radius:var(--r-sm);transition:background .15s,color .15s;position:relative;
}
.nav a svg{width:17px;height:17px;flex:0 0 auto;opacity:.85}
.nav a:hover{background:rgba(255,255,255,.06);color:#fff}
.nav a.on{background:color-mix(in srgb,var(--accent) 82%,#000);color:#fff}
.nav a.on svg{opacity:1}
/* Contextual links for the show currently open — the deep navigation the console was missing. */
.ctx{margin-top:6px;padding-top:8px;border-top:1px solid rgba(255,255,255,.07)}
.ctx .ctx-title{font-size:12px;font-weight:700;color:#e9e2d6;padding:6px 10px 2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ctx a{font-size:12.5px;font-weight:600;color:#b6ad9d;padding:7px 10px 7px 12px}
.ctx a .dotk{width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.5;flex:0 0 auto}
.ctx a.on{background:rgba(255,255,255,.07);color:#fff}
.ctx a.on .dotk{background:var(--accent-2);opacity:1}

.side-foot{border-top:1px solid rgba(255,255,255,.07);padding:10px;display:flex;flex-direction:column;gap:8px}
.theme-btn{
  display:flex;align-items:center;gap:9px;width:100%;padding:8px 10px;border-radius:var(--r-sm);
  background:transparent;border:1px solid rgba(255,255,255,.1);color:#b6ad9d;font-size:12.5px;font-weight:600;cursor:pointer;
  transition:background .15s,color .15s;
}
.theme-btn:hover{background:rgba(255,255,255,.06);color:#fff}
.theme-btn svg{width:15px;height:15px;flex:0 0 auto}
.userchip{display:flex;align-items:center;gap:9px;font-size:12.5px;color:#cdc5b7;padding:2px}
.userchip .avatar{width:28px;height:28px;flex:0 0 auto;border-radius:50%;background:linear-gradient(145deg,var(--accent-2),var(--accent));color:#fff;display:grid;place-items:center;font-size:11.5px;font-weight:700}
.userchip .uwho{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.userchip button{display:grid;place-items:center;width:30px;height:30px;flex:0 0 auto;background:transparent;border:1px solid rgba(255,255,255,.1);color:#b6ad9d;border-radius:var(--r-sm);cursor:pointer;transition:background .15s,color .15s}
.userchip button svg{width:15px;height:15px}
.userchip button:hover{background:rgba(255,255,255,.08);color:#fff}

.workspace{display:flex;flex-direction:column;min-width:0;min-height:0}
.topbar{
  display:flex;align-items:center;gap:10px;height:var(--topbar-h);flex:0 0 auto;padding:0 22px;
  background:color-mix(in srgb,var(--panel) 88%,transparent);backdrop-filter:blur(8px);
  border-bottom:1px solid var(--line);z-index:30;
}
.crumbs{display:flex;align-items:center;gap:7px;font-size:13px;color:var(--muted);min-width:0}
.crumbs a{color:var(--muted-2);text-decoration:none;font-weight:600;white-space:nowrap}
.crumbs a:hover{color:var(--accent-text)}
.crumbs b{color:var(--text);font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.crumbs .sep{color:var(--line-2)}
.top-actions{display:flex;align-items:center;gap:8px}
.spacer{flex:1}
.icon-btn{display:grid;place-items:center;width:34px;height:34px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--panel);color:var(--muted-2);cursor:pointer;transition:background .15s,color .15s,border-color .15s}
.icon-btn svg{width:17px;height:17px}
.icon-btn:hover{background:var(--panel-2);color:var(--text);border-color:var(--line-2)}
.menu-btn{display:none}
.side-scrim{position:fixed;inset:0;background:rgba(15,10,5,.5);z-index:45}

#main{flex:1;min-height:0;overflow-y:auto;scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){#main{scroll-behavior:auto}}

/* ---------- 3. page furniture ---------- */
.page{max-width:1360px;margin:0 auto;padding:22px 22px 72px;animation:page-in .22s ease both}
@keyframes page-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
.page-head{display:flex;align-items:flex-end;gap:16px;margin:0 0 20px;flex-wrap:wrap}
.page-head h1{margin:0;font-size:25px;font-weight:800;letter-spacing:-.02em;line-height:1.15}
.page-head .kicker{display:flex;align-items:center;gap:8px;font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--accent-text);font-weight:800;margin-bottom:6px}
.page-head .sub{color:var(--muted-2);font-size:13px;padding-bottom:3px;max-width:56ch;line-height:1.5}
.page-head .actions{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap}
.crumb{font-size:12.5px;color:var(--muted);margin-bottom:6px}
.crumb a{color:var(--accent-text);text-decoration:none;font-weight:600}
.crumb a:hover{text-decoration:underline}
.crumb-sep{color:var(--line-2);margin:0 2px}
.loading{padding:70px;text-align:center;color:var(--muted);animation:loading-pulse 1.2s ease-in-out infinite}
@keyframes loading-pulse{0%,100%{opacity:.45}50%{opacity:1}}
.empty{padding:34px 20px;text-align:center;color:var(--muted);font-size:13px;line-height:1.65;background:var(--panel-2);border:1px dashed var(--line-2);border-radius:var(--r-md)}

/* ---------- 4. cards + sections ---------- */
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);padding:18px 20px;margin-bottom:16px;box-shadow:var(--shadow-sm)}
.card h3{margin:0 0 4px;font-size:14.5px;font-weight:750;letter-spacing:-.005em;display:flex;align-items:center;gap:9px}
.card h3 .ic{display:grid;place-items:center;width:26px;height:26px;flex:0 0 auto;border-radius:8px;background:var(--accent-soft);color:var(--accent-text)}
.card h3 .ic svg{width:15px;height:15px}
.card .hint{margin:0 0 14px;font-size:12.5px;color:var(--muted-2);line-height:1.55;max-width:78ch}
.card .hint:last-child{margin-bottom:0}
.cards-2{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
@media(max-width:1000px){.cards-2{grid-template-columns:1fr}}

/* A titled section of the show workspace. The id is the scroll anchor the rail links to. */
.section{scroll-margin-top:14px}
.section-head{display:flex;align-items:center;gap:10px;margin:26px 2px 10px}
.section-head h2{margin:0;font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted-2);font-weight:800}
.section-head .rule{flex:1;height:1px;background:var(--line)}
.section-head .actions{display:flex;gap:8px}
/* A live count belongs beside the heading, not inside it — it changes, the heading does not. */
.section-head .count{
  font-family:var(--mono);font-size:11px;color:var(--muted);font-weight:600;
  background:var(--panel-2);border:1px solid var(--line);border-radius:20px;padding:1px 9px;white-space:nowrap;
}
.section-head .count:empty{display:none}
/* Explanations are one click away rather than a paragraph the operator reads past every day. */

/* ---------- 5. data display ---------- */
/* KPI tiles: the numbers a show manager wants before anything else. */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(158px,1fr));gap:12px;margin-bottom:4px}
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-md);padding:13px 15px;box-shadow:var(--shadow-sm);position:relative;overflow:hidden}
.kpi .l{font-size:10px;letter-spacing:.13em;text-transform:uppercase;color:var(--muted);font-weight:800}
.kpi .n{font-family:var(--mono);font-size:26px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.15;margin-top:6px;letter-spacing:-.02em}
.kpi .d{font-size:11.5px;color:var(--muted-2);margin-top:3px}
.kpi .kpi-go{display:inline-block;margin-top:8px;font-size:11.5px;font-weight:700;text-decoration:none}
.kpi .bar{height:4px;border-radius:3px;background:var(--panel-3);margin-top:9px;overflow:hidden}
.kpi .bar i{display:block;height:100%;border-radius:3px;background:linear-gradient(90deg,var(--accent),var(--accent-2))}
.kpi[data-kf]{cursor:pointer;transition:border-color .12s,box-shadow .12s}
.kpi[data-kf]:hover{border-color:var(--ink)}
.kpi[data-kf].on{border-color:var(--ink);box-shadow:0 0 0 2px var(--ink)}
.kpi.good .n{color:var(--good)} .kpi.warn .n{color:var(--warn)} .kpi.accent .n{color:var(--accent-text)}

.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(112px,1fr));gap:10px;margin:6px 0 4px}
.stat{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--r-md);padding:12px;text-align:center}
.stat .n{font-family:var(--mono);font-size:21px;font-weight:700;font-variant-numeric:tabular-nums}
.stat .l{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-top:3px}

/* event cards */
.ev-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px}
.ev-card{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);padding:18px;cursor:pointer;
  display:flex;flex-direction:column;gap:7px;position:relative;overflow:hidden;box-shadow:var(--shadow-sm);
  transition:box-shadow .18s,transform .18s,border-color .18s;
}
.ev-card::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--accent),var(--accent-2) 55%,transparent)}
.ev-card:hover{box-shadow:var(--shadow-md);border-color:color-mix(in srgb,var(--accent) 35%,var(--line-2));transform:translateY(-2px)}
.ev-card:focus-visible{transform:translateY(-2px)}
.ev-card .toprow{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.ev-card .nm{font-size:16.5px;font-weight:750;letter-spacing:-.01em}
.ev-card .vn{font-size:12px;color:var(--muted-2);display:flex;align-items:flex-start;gap:6px;line-height:1.45}
.ev-card .vn svg{width:13px;height:13px;flex:0 0 auto;color:var(--accent-text);margin-top:2px}
/* One line, always. Four items wrapped onto a second row and pushed the card taller than its
   neighbours, which is what made the grid look broken. The two counts are fixed, the two buttons
   shrink, and the link label truncates before anything is allowed to wrap. */
.ev-card .meta{display:flex;gap:8px;margin-top:auto;padding-top:12px;flex-wrap:nowrap;min-width:0}
.ev-card .mtile{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--r-sm);padding:5px 9px;font-size:11px;color:var(--muted);white-space:nowrap;flex:0 0 auto}
.ev-card .mtile.act{background:none;border:0;padding:0;min-width:0;flex:0 1 auto;overflow:hidden}
.ev-card .mtile.act .btn{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}
.ev-card .mtile b{font-family:var(--mono);color:var(--text);font-size:12.5px;font-variant-numeric:tabular-nums}
.ev-card.new{border-style:dashed;border-color:var(--line-2);align-items:center;justify-content:center;gap:9px;color:var(--accent-text);font-weight:650;min-height:150px;background:var(--panel-2);box-shadow:none}
.ev-card.new::before{display:none}
.ev-card.new svg{width:22px;height:22px}
.ev-card.new:hover{background:var(--accent-soft);border-color:var(--accent);transform:none}

/* Plans: one card per hall, so publish/booking state reads without decoding a row of pills. */
/* auto-fit, not auto-fill: a hall on its own should use the row, not sit in a 360px column with
   two empty tracks beside it. */
.plan-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:12px}
.plan-card{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--r-md);padding:14px 15px;display:flex;flex-direction:column;gap:10px;transition:border-color .15s,box-shadow .15s}
.plan-card:hover{border-color:var(--line-2);box-shadow:var(--shadow-sm)}
.plan-card .ptop{display:flex;align-items:flex-start;gap:10px}
.plan-card .nm{font-weight:700;font-size:14.5px;line-height:1.25}
.plan-card .mut{font-size:11.5px;color:var(--muted);font-family:var(--mono);word-break:break-all}
.plan-card .pills{display:flex;gap:5px;flex-wrap:wrap}
.plan-card .pacts{display:flex;gap:6px;flex-wrap:wrap;margin-top:auto;padding-top:4px}
.plan-row{display:flex;align-items:center;gap:12px;padding:11px 8px;border-bottom:1px solid var(--line)}
.plan-row:last-child{border-bottom:0}
.plan-row .grow{flex:1;min-width:0}

/* bookings */
.bk-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.bk-tools .search{position:relative;flex:1;min-width:180px;max-width:320px}
.bk-tools .search input{height:34px;padding-left:32px;font-size:13px}
.bk-tools .search svg{position:absolute;left:10px;top:9px;width:15px;height:15px;color:var(--muted);pointer-events:none}
.bk-group{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted-2);font-weight:800;margin:12px 2px 4px}
.bk-toggle{display:flex;align-items:center;gap:7px;width:100%;background:transparent;border:0;cursor:pointer;padding:9px 2px 6px;font:inherit;font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted-2);font-weight:800;border-top:1px solid var(--line);margin-top:8px}
.bk-toggle:first-child{border-top:0;margin-top:0}
.bk-toggle:hover{color:var(--text)}
.bk-toggle .chev{width:14px;height:14px;transition:transform .15s}
.bk-toggle .chev.open{transform:rotate(180deg)}
.bk-grpcount{font-family:var(--mono);background:var(--panel-2);border:1px solid var(--line);border-radius:20px;padding:1px 8px;letter-spacing:0;font-size:11px;color:var(--muted-2)}
.bk-confirmed[hidden]{display:none}
.bk-row{
  display:flex;align-items:center;gap:12px;padding:9px 11px;border:1px solid var(--line);border-radius:var(--r-md);
  margin-bottom:6px;background:var(--panel);transition:border-color .13s,box-shadow .13s,background .13s;
}
.bk-row:hover{border-color:var(--line-2);box-shadow:var(--shadow-sm)}
.bk-row.pending{border-left:3px solid var(--warn);background:color-mix(in srgb,var(--warn) 5%,var(--panel))}
/* A booking that arrived on the live feed while the operator was looking at the list. The flash
   fades on its own — it marks what is new without leaving a permanent second state to decode. */
.bk-row.fresh{animation:bk-fresh 2.4s ease both}
@keyframes bk-fresh{
  0%{background:var(--accent-soft);border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
  70%{background:var(--accent-soft);border-color:var(--accent);box-shadow:0 0 0 3px transparent}
  100%{background:var(--panel);border-color:var(--line);box-shadow:none}
}
.bk-row.denied{opacity:.72}
.bk-row .bk-booth{flex:0 0 auto;min-width:46px;height:var(--row-h);display:grid;place-items:center;font-family:var(--mono);font-weight:700;font-size:14px;background:var(--panel-2);border:1px solid var(--line);border-radius:var(--r-sm);font-variant-numeric:tabular-nums}
.bk-row .nm{font-weight:650;font-size:13.5px;display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.bk-row .mut{font-size:11.5px;color:var(--muted);margin-top:2px}
.bk-row .grow{flex:1;min-width:0}
.bk-row .money{font-family:var(--mono);font-variant-numeric:tabular-nums;font-weight:700;font-size:13.5px;white-space:nowrap}
/* The row IS the way into the drawer, so it has to look like it can be pressed. */
.bk-row[role=button]{cursor:pointer}
.bk-row[role=button]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.bk-row.pending .bk-state{color:var(--warn);font-weight:650}
.bk-row.denied .bk-state{color:var(--bad)}

/* Application pool (ADR-024). One card per APPLICATION — the thing the exhibitor actually
   submitted. Booths are chips inside it, so a two-booth ask reads as one deal with one price
   instead of two unrelated rows. Cards are numbered by arrival order and that number is
   explicitly not a rank. */
.ap-card{
  border:1px solid var(--line);border-radius:var(--r-md);background:var(--panel);
  padding:12px 14px;margin-bottom:10px;display:grid;gap:10px;
}
.ap-card:hover{border-color:var(--line-2);box-shadow:var(--shadow-sm)}
.ap-card.contested{border-left:3px solid var(--warn)}
.ap-top{display:flex;align-items:flex-start;gap:11px}
.ap-top .grow{flex:1;min-width:0}
.ap-top .nm{font-weight:650;font-size:14px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.ap-top .mut{font-size:11.5px;color:var(--muted);margin-top:3px}
.ap-money{text-align:right;white-space:nowrap;line-height:1.25}
.ap-money b{display:block;font-family:var(--mono);font-variant-numeric:tabular-nums;font-weight:700;font-size:15px}
.ap-money span{font-size:11px;color:var(--muted)}
.ap-ord{
  flex:0 0 auto;width:24px;height:24px;display:grid;place-items:center;border-radius:50%;
  background:var(--panel-3);color:var(--muted-2);font-family:var(--mono);font-size:11.5px;font-weight:700;
}
/* The whole ask, as booth chips. A chip with rivals is the only "contested" signal there is, and
   clicking it filters the queue to that booth so two applicants can be read side by side. */
.ap-chips{display:flex;flex-wrap:wrap;gap:6px}
.ap-chip{
  display:inline-flex;align-items:center;gap:6px;font:inherit;cursor:pointer;
  background:var(--panel-2);border:1px solid var(--line);border-radius:var(--r-sm);
  padding:5px 9px;font-size:12px;color:var(--text);
}
.ap-chip b{font-family:var(--mono);font-weight:700;font-size:12.5px}
.ap-chip span{color:var(--muted)}
.ap-chip:hover{border-color:var(--accent);background:var(--accent-soft)}
.ap-chip.hot{border-color:color-mix(in srgb,var(--warn) 55%,var(--line))}
.ap-chip .hotn{
  font-family:var(--mono);font-weight:700;font-size:11px;color:#fff;background:var(--warn);
  border-radius:20px;padding:0 6px;line-height:16px;
}
.ap-filter{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:12.5px;color:var(--muted-2);
  background:var(--panel-2);border:1px solid var(--line);border-radius:var(--r-sm);padding:7px 10px;margin-bottom:10px;
}
.ap-acts{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.ap-note{font-size:12px;color:var(--muted-2);font-style:italic;line-height:1.45;max-width:70ch}
/* Said out loud rather than shown as a shorter list of booths than the exhibitor actually asked for. */
.ap-warn{
  font-size:12.5px;line-height:1.45;color:var(--text);max-width:80ch;
  background:color-mix(in srgb,var(--warn) 12%,transparent);
  border:1px solid color-mix(in srgb,var(--warn) 45%,var(--line));
  border-radius:var(--r-sm);padding:8px 10px;
}
.ap-pick{display:grid;gap:6px;margin-top:8px}
/* These are choices, not field captions — the global uppercase label style does not apply. */
.ap-pick label{
  display:flex;align-items:center;gap:9px;padding:8px 10px;margin:0;
  border:1px solid var(--line);border-radius:var(--r-sm);cursor:pointer;
  font-size:13px;text-transform:none;letter-spacing:0;font-weight:500;color:var(--text);
}
.ap-pick label:hover{background:var(--panel-2)}
.ap-pick input{width:auto;margin:0}
.ap-pick b{font-family:var(--mono)}

/* tables */
.table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--r-md);background:var(--panel)}
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{text-align:left;padding:9px 12px;border-bottom:1px solid var(--line);white-space:nowrap}
th{font-size:10px;letter-spacing:.11em;text-transform:uppercase;color:var(--muted);font-weight:800;background:var(--panel-2);position:sticky;top:0;z-index:1}
td{font-variant-numeric:tabular-nums}
tbody tr:last-child td{border-bottom:0}
tbody tr:hover td{background:var(--panel-2)}
.rephead{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}
.rephead b{font-size:13px}
.rephead .btn{margin-left:auto}
.rephead .btn+.btn,.rephead a+.btn{margin-left:0}
code{background:var(--panel-2);border:1px solid var(--line);padding:1px 7px;border-radius:6px;font-family:var(--mono);font-size:.85em}

/* setup steps */
.steps{display:flex;gap:8px;flex-wrap:wrap;margin:2px 0 6px}
.step{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--muted-2);background:var(--panel-2);border:1px solid var(--line);border-radius:20px;padding:5px 12px 5px 7px}
.step .n{width:18px;height:18px;border-radius:50%;background:var(--line);color:var(--muted-2);display:grid;place-items:center;font-size:10.5px;font-weight:700}
.step.done{color:var(--good);border-color:color-mix(in srgb,var(--good) 35%,transparent)}
.step.done .n{background:var(--good);color:#fff}

/* ---------- 6. forms, buttons, pills ---------- */
label{display:block;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted-2);font-weight:700;margin:10px 0 5px}
input,select,textarea{
  width:100%;padding:9px 11px;border:1px solid var(--line-2);border-radius:var(--r-sm);font-size:13.5px;
  background:var(--panel);color:var(--text);outline:none;transition:border-color .15s,box-shadow .15s;
}
input::placeholder,textarea::placeholder{color:color-mix(in srgb,var(--muted) 85%,transparent)}
input:focus,select:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
input[type=color]{padding:3px;height:40px}
input[type=checkbox]{width:auto}
.frow{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}
.frow-tight{display:flex;gap:8px;align-items:flex-end;flex-wrap:wrap}
.frow-tight>div{flex:1;min-width:110px}
.check{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text);margin-top:10px}
.check input{width:16px;height:16px;accent-color:var(--accent)}

.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:7px;height:36px;padding:0 15px;border-radius:var(--r-sm);
  border:1px solid var(--accent);background:var(--accent);color:#fff;font-size:13px;font-weight:650;cursor:pointer;
  text-decoration:none;white-space:nowrap;transition:background .15s,border-color .15s,box-shadow .15s,transform .08s,opacity .15s;
  box-shadow:0 1px 2px color-mix(in srgb,var(--accent) 30%,transparent);
}
.btn svg{width:15px;height:15px;flex:0 0 auto}
.btn:hover{background:var(--accent-2);border-color:var(--accent-2);box-shadow:0 2px 8px color-mix(in srgb,var(--accent) 38%,transparent)}
.btn:active{transform:translateY(1px);box-shadow:none}
.btn.ghost{background:transparent;color:var(--accent-text);box-shadow:none}
.btn.ghost:hover{background:var(--accent-soft);border-color:var(--accent)}
.btn.quiet{background:var(--panel);border-color:var(--line-2);color:var(--muted-2);box-shadow:none}
.btn.quiet:hover{background:var(--panel-2);color:var(--text);border-color:var(--line-2)}
.btn.danger{background:transparent;border-color:color-mix(in srgb,var(--bad) 55%,transparent);color:var(--bad);box-shadow:none}
.btn.danger:hover{background:var(--bad-soft);border-color:var(--bad)}
.btn.sm{height:30px;padding:0 11px;font-size:12px}
.btn.sm svg{width:13px;height:13px}
.btn:disabled{opacity:.45;cursor:default;pointer-events:none}

.pill{display:inline-flex;align-items:center;gap:5px;padding:2.5px 9px;border-radius:20px;font-size:10px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;border:1px solid transparent}
.pill.pub{background:var(--good-soft);color:var(--good);border-color:color-mix(in srgb,var(--good) 25%,transparent)}
.pill.draft{background:var(--panel-3);color:var(--muted-2);border-color:var(--line)}
.pill.sell{background:var(--warn-soft);color:var(--warn);border-color:color-mix(in srgb,var(--warn) 25%,transparent)}
.pill.info{background:var(--info-soft);color:var(--info);border-color:color-mix(in srgb,var(--info) 25%,transparent)}
.pill.bad{background:var(--bad-soft);color:var(--bad);border-color:color-mix(in srgb,var(--bad) 28%,transparent)}
.pill .dot{width:5px;height:5px;border-radius:50%;background:currentColor}
.chip{flex:0 0 auto;font-family:var(--mono);font-size:10.5px;font-weight:700;letter-spacing:.02em;padding:3px 9px;border-radius:20px;white-space:nowrap}
.chip.out{background:var(--warn-soft);color:var(--warn)}
.chip.live{background:var(--good-soft);color:var(--good)}
.chip.past{background:var(--panel-3);color:var(--muted-2)}
.chip.tba{background:transparent;color:var(--muted);border:1px dashed var(--line-2)}
.page-head .kicker .chip{font-size:10px;padding:2px 8px;letter-spacing:.02em}

/* ---------- 7. overlays ---------- */
.toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);background:var(--ink);color:#f4efe7;padding:11px 18px;border-radius:var(--r-md);z-index:100;font-size:13px;box-shadow:var(--shadow-lg)}
.scrim{position:fixed;inset:0;z-index:64;background:rgba(15,10,5,.52);backdrop-filter:blur(2px)}
.modal{position:fixed;z-index:66;top:50%;left:50%;transform:translate(-50%,-50%);width:min(480px,92vw);max-height:86vh;overflow-y:auto;background:var(--panel);border:1px solid var(--line-2);border-radius:var(--r-lg);box-shadow:var(--shadow-lg)}
.modal .mhead{padding:17px 20px 13px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:10px}
.modal .mhead h2{margin:0;font-size:16px;font-weight:750;flex:1}
.modal .mhead .x{width:28px;height:28px;border:0;border-radius:var(--r-sm);background:transparent;color:var(--muted);cursor:pointer;font-size:18px}
.modal .mhead .x:hover{background:var(--panel-3);color:var(--text)}
.modal .mbody{padding:14px 20px 20px;font-size:13px}
.modal .mfoot{display:flex;gap:8px;justify-content:flex-end;padding:0 20px 18px}
.modal.wide{width:min(900px,94vw)}
#lc_diff tr[data-changed] td{color:var(--text);font-weight:700}

.login-wrap{display:grid;place-items:center;min-height:calc(100vh - var(--topbar-h));background-image:radial-gradient(circle at 1px 1px,var(--mat-line) 1px,transparent 0);background-size:26px 26px}
.login{width:min(390px,92vw);background:var(--panel);border:1px solid var(--line);border-radius:20px;padding:32px 30px;box-shadow:var(--shadow-md);animation:page-in .3s ease both}
.login .lglyph{width:46px;height:46px;border-radius:13px;background:linear-gradient(145deg,var(--accent-2),var(--accent));display:grid;place-items:center;box-shadow:0 4px 14px color-mix(in srgb,var(--accent) 35%,transparent);margin-bottom:14px}
.login .lglyph svg{width:27px;height:27px}
.login h1{margin:0 0 2px;font-size:21px;font-weight:800;letter-spacing:-.015em}
.login .sub{color:var(--muted-2);font-size:12.5px;margin-bottom:12px}
.login .btn{width:100%;margin-top:16px;height:40px}
.login .note{margin-top:14px;font-size:11px;color:var(--muted);line-height:1.5;text-align:center}

/* ---------- responsive ---------- */
@media(max-width:1180px){:root{--rail:220px}}
@media(max-width:900px){
  .app,.app.rail-collapsed{grid-template-columns:1fr}
  .sidebar{position:fixed;top:0;bottom:0;left:0;width:264px;max-width:86vw;transform:translateX(-100%);transition:transform .22s ease}
  .app.nav-open .sidebar{transform:none;box-shadow:var(--shadow-lg)}
  .rail-toggle{display:none}
  .menu-btn{display:grid}
  .page{padding:18px 14px 64px}
  .page-head h1{font-size:22px}
  .cards-2{grid-template-columns:1fr}
  .bk-row{flex-wrap:wrap}
  .bk-row .grow{flex:1 1 140px}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* ============================================================
   8. LAYOUT EDITOR
   ============================================================ */
.ed{display:flex;flex-direction:column;height:100%;min-height:0}
.ed-bar{display:flex;align-items:center;gap:10px;background:var(--panel);border-bottom:1px solid var(--line);padding:8px 14px;flex-wrap:wrap;z-index:30}
.ed-bar .ttl{display:flex;flex-direction:column;line-height:1.15;margin-right:6px}
.ed-bar .ttl b{font-size:14.5px}
.ed-bar .ttl span{font-size:11px;color:var(--muted)}
.ed-bar .sep{width:1px;height:26px;background:var(--line);margin:0 2px}
.ed-stage{display:grid;grid-template-columns:264px 1fr;flex:1;min-height:0;position:relative}
@media(max-width:900px){.ed-stage{grid-template-columns:200px 1fr}}

.ed-rail{background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;min-height:0}
.ed-tools{display:grid;grid-template-columns:repeat(3,1fr);gap:5px;padding:10px}
.tool{display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px 2px;border:1px solid var(--line);border-radius:9px;background:var(--panel-2);color:var(--muted-2);font-size:9.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;cursor:pointer;transition:all .13s}
.tool svg{width:17px;height:17px}
.tool:hover{color:var(--text);border-color:var(--line-2)}
.tool.on{background:var(--accent);border-color:var(--accent);color:#fff}
.ed-railsearch{padding:0 10px 8px;position:relative}
.ed-railsearch input{height:34px;font-size:12.5px;background:var(--panel-2)}
.ed-list{flex:1;overflow-y:auto;min-height:0;padding:2px 0 6px}
.ed-row{display:grid;grid-template-columns:46px 1fr auto;align-items:center;gap:6px;padding:6px 12px 6px 10px;cursor:pointer;border-left:3px solid transparent;font-size:12.5px}
.ed-row .num{font-family:var(--mono);font-weight:600;color:var(--muted-2);font-size:11.5px}
.ed-row .who{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ed-row .dotst{width:10px;height:10px;border-radius:3px;border:1px solid rgba(0,0,0,.2)}
.ed-row:hover{background:var(--accent-soft)}
.ed-row.sel{background:var(--accent-soft);border-left-color:var(--accent);font-weight:650}
.ed-legend{border-top:1px solid var(--line);background:var(--panel-2);padding:9px 13px 11px}
.ed-legend h4{margin:0 0 6px;font-size:9.5px;letter-spacing:.22em;text-transform:uppercase;color:var(--muted-2)}
.ed-legend .item{display:flex;align-items:center;gap:8px;font-size:11.5px;padding:2px 0}
.ed-legend .sw{width:20px;height:13px;border-radius:3px;border:1px solid rgba(0,0,0,.22)}
.ed-legend .k{margin-left:auto;font-family:var(--mono);font-size:10.5px;color:var(--muted)}

/* The cursor is the promise the canvas makes about the next drag (ADR-0041 companion note).
   Default is the lasso cursor, because dragging empty space selects; the grab hand appears ONLY
   while space is held, when a drag really will move the paper. The old default — an open hand over
   a canvas that could not be picked up — is what made the editor feel like it was fighting back. */
.ed-wrap{position:relative;overflow:hidden;background:var(--mat);background-image:radial-gradient(circle at 1px 1px,var(--mat-line) 1px,transparent 0);background-size:26px 26px;cursor:default;touch-action:none}
.ed-wrap.pan-ready{cursor:grab}
.ed-wrap.grabbing{cursor:grabbing}
.ed-wrap.mode-draw{cursor:crosshair}

/* The lasso, and the drag-to-size rectangle: one element, two looks. Drawn in wrapper coordinates
   (outside the zoom transform) so its border stays 1px at every zoom level. */
.ed-marquee{position:absolute;z-index:15;pointer-events:none;border:1.5px dashed var(--accent);
  background:color-mix(in srgb,var(--accent) 12%,transparent);border-radius:3px}
.ed-marquee.draw{border-style:solid;background:color-mix(in srgb,var(--accent) 18%,transparent)}
.ed-marquee[data-size]::after{content:attr(data-size);position:absolute;left:0;top:-22px;white-space:nowrap;
  background:var(--accent);color:#fff;font-family:var(--mono);font-size:10.5px;padding:2px 6px;border-radius:5px}
.ed-canvas{position:absolute;top:0;left:0;transform-origin:0 0;will-change:transform}
.ed-canvas img.hall{display:block;user-select:none;-webkit-user-drag:none;pointer-events:none;opacity:.94}
.ed-canvas.no-underlay{background:var(--panel);background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px);background-size:var(--grid,120px) var(--grid,120px);border:1px solid var(--line-2)}
.ed-note{position:absolute;top:12px;left:14px;font-family:var(--mono);font-size:13px;color:var(--muted);pointer-events:none;background:color-mix(in srgb,var(--panel) 80%,transparent);padding:4px 9px;border-radius:7px;border:1px solid var(--line);z-index:3}

.booth-e{position:absolute;border:1px solid rgba(255,255,255,.9);display:flex;align-items:flex-end;font-family:var(--mono);font-variant-numeric:tabular-nums;cursor:move;overflow:visible;user-select:none}
.booth-e .bn{padding:1px 4px 2px;font-size:26px;font-weight:600;line-height:1;pointer-events:none;overflow:hidden}
.booth-e.sel{outline:3px solid var(--accent);outline-offset:0;z-index:6}
.booth-e.dragging{opacity:.75;cursor:grabbing;z-index:8;box-shadow:0 10px 26px rgba(0,0,0,.3)}
.booth-e .rz{position:absolute;right:-7px;bottom:-7px;width:14px;height:14px;border-radius:4px;background:var(--accent);border:2px solid #fff;cursor:nwse-resize;box-shadow:0 1px 4px rgba(0,0,0,.35);z-index:7}
.cal-dot{position:absolute;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;background:var(--accent);border:3px solid #fff;box-shadow:0 1px 5px rgba(0,0,0,.4);z-index:9;pointer-events:none}
.cal-line{position:absolute;height:0;border-top:3px dashed var(--accent);transform-origin:0 0;z-index:8;pointer-events:none}

.ed-insp{position:absolute;top:12px;right:12px;width:262px;max-height:calc(100% - 24px);overflow-y:auto;background:var(--panel);border:1px solid var(--line-2);border-radius:14px;box-shadow:var(--shadow-md);z-index:20}
.ed-insp .ihead{padding:13px 15px 10px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:8px}
.ed-insp .ihead h3{margin:0;font-size:14.5px;font-weight:750;flex:1}
.ed-insp .ihead .x{width:24px;height:24px;border:0;border-radius:7px;background:transparent;color:var(--muted);cursor:pointer;font-size:16px}
.ed-insp .ihead .x:hover{background:var(--panel-3)}
.ed-insp .ibody{padding:6px 15px 15px}
.ed-insp label{margin:9px 0 3px;font-size:10px}
.ed-insp .duo{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.ed-insp .quad{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:6px}
.ed-insp input,.ed-insp select{height:33px;font-size:12.5px;padding:5px 9px}
.ed-insp .flags{display:grid;grid-template-columns:1fr 1fr;gap:2px 10px;margin-top:6px}
.ed-insp .flags .check{margin-top:3px;font-size:12px}
.ed-insp .iact{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px}
.ed-insp .exname{font-size:13px;font-weight:650;padding:7px 0 2px}
.ed-insp .stpill{display:inline-block;padding:2px 9px;border-radius:20px;font-size:10px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:#fff}

.ed-zoom{position:absolute;bottom:14px;right:14px;display:flex;align-items:center;gap:2px;z-index:19;background:var(--panel);border:1px solid var(--line-2);border-radius:11px;padding:3px;box-shadow:var(--shadow-sm)}
.ed-zoom .zbtn{min-width:34px;height:32px;padding:0 10px;border:0;border-radius:8px;background:transparent;color:var(--muted-2);font-size:15px;font-weight:650;cursor:pointer;transition:background .13s,color .13s}
.ed-zoom .zbtn:hover{background:var(--panel-2);color:var(--text)}
.ed-zoom .zbtn:active{background:var(--accent-soft);color:var(--accent-text)}

.ed-foot{display:flex;align-items:center;gap:14px;background:var(--ink-2);color:#c9beac;padding:0 14px;height:34px;font-size:11.5px;z-index:20}
.ed-foot .mono{font-family:var(--mono);font-size:11px;color:#9a9080}
.ed-foot .right{margin-left:auto;display:flex;gap:10px;align-items:center}
.ed-foot kbd{background:#3a332b;border-radius:4px;padding:1px 6px;font-family:var(--mono);font-size:10px;color:#d8d0c3}

/* ---------- scrollbars ---------- */
#main::-webkit-scrollbar,.ed-list::-webkit-scrollbar,.ed-insp::-webkit-scrollbar,.modal::-webkit-scrollbar,.nav::-webkit-scrollbar{width:10px}
#main::-webkit-scrollbar-thumb,.ed-list::-webkit-scrollbar-thumb,.ed-insp::-webkit-scrollbar-thumb,.modal::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:8px;border:3px solid var(--paper)}
#main::-webkit-scrollbar-thumb:hover,.ed-list::-webkit-scrollbar-thumb:hover{background:var(--muted)}
.nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,.14);border-radius:8px}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* ---- Admin-UX additions (setup checklist, help page, editor banner, price preview) ---- */
.linkbtn{border:none;background:none;color:var(--accent);cursor:pointer;font-size:11.5px;font-weight:600;padding:0 2px;text-decoration:underline}
.checklist .cl-step{display:flex;align-items:flex-start;gap:12px;padding:9px 0;border-top:1px solid var(--line)}
.checklist .cl-step:first-of-type{border-top:none}
.checklist .cl-mark{flex:0 0 auto;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;font-size:12px;font-weight:700;background:var(--panel-2);color:var(--muted);border:1px solid var(--line)}
.checklist .cl-step.done .cl-mark{background:var(--accent);color:#fff;border-color:var(--accent)}
.checklist .cl-title{font-size:13.5px;font-weight:600}
.checklist .cl-step.done .cl-title{color:var(--muted);text-decoration:line-through;text-decoration-thickness:1px}
.checklist .cl-hint{font-size:12px;color:var(--muted);margin-top:1px}
.checklist .cl-opt{font-weight:400;color:var(--muted);font-size:11.5px}
.help-gloss{display:flex;flex-direction:column;gap:8px;font-size:13px;margin-top:6px}
.help-gloss .sw{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:7px;vertical-align:-1px}
.ed-live{padding:5px 14px;font-size:12px;border-bottom:1px solid var(--line)}
.ed-live.is-draft{background:var(--accent-soft);color:var(--accent)}
.ed-live.is-pub{background:var(--panel-2);color:var(--muted)}
.ed-insp .stlock{font-size:12px;color:var(--muted);background:var(--panel-2);border:1px solid var(--line);border-radius:8px;padding:7px 9px;margin:2px 0 4px}
.ed-insp .pp{font-size:12.5px;background:var(--panel-2);border:1px solid var(--line);border-radius:8px;padding:7px 9px;margin:6px 0 2px}
.ed-insp .pp .mut2{font-size:11px;color:var(--muted)}

/* ---- Events → Archive (ADR-026) -------------------------------------------
   A disclosure, not a tab: a finished show should take a deliberate act to look
   at, and a deliberate act to destroy. Native <details> carries the keyboard
   behaviour and the expanded/collapsed state screen readers announce. */
.arch{margin-top:28px;border:1px solid var(--line);border-radius:12px;background:var(--panel-2);overflow:hidden}
.arch-sum{display:flex;align-items:center;gap:10px;padding:13px 16px;cursor:pointer;list-style:none;
  font-size:14px;font-weight:650;color:var(--text);user-select:none}
.arch-sum::-webkit-details-marker{display:none}
.arch-sum:hover{background:var(--panel-3)}
.arch-sum:focus-visible{outline:2px solid var(--brand);outline-offset:-2px}
.arch-sum small{font-weight:450;color:var(--muted);font-size:12.5px}
.arch-sum .chev{width:15px;height:15px;flex:0 0 auto;color:var(--muted);transition:transform .16s ease}
.arch[open] .arch-sum .chev{transform:rotate(90deg)}
.arch[open] .arch-sum{border-bottom:1px solid var(--line)}
.arch-body{padding:6px 16px 14px;display:flex;flex-direction:column;gap:2px}
.arch-row{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:12px 0;border-bottom:1px solid var(--line)}
.arch-row:last-child{border-bottom:none}
.arch-nm{flex:1 1 220px;min-width:0;display:flex;flex-direction:column;gap:2px}
.arch-nm b{font-size:14px;font-weight:640}
.arch-nm small{color:var(--muted);font-size:12px}
.arch-meta{flex:0 1 auto;font-size:12.5px;color:var(--muted);font-variant-numeric:tabular-nums}
.arch-meta .locked{color:var(--bad)}
.arch-acts{flex:0 0 auto;display:flex;gap:7px;margin-left:auto}
.arch-acts .btn[disabled]{opacity:.45;cursor:not-allowed;pointer-events:none}
@media (max-width:560px){ .arch-acts{margin-left:0;width:100%} }

/* Composite booth outline in the layout editor (ADR-027) — see viewer.css for why it is a sibling. */
.booth-outline{position:absolute;pointer-events:none;z-index:3;overflow:visible}
.booth-outline path{fill:none;stroke:rgba(255,255,255,.92);stroke-width:1.5;vector-effect:non-scaling-stroke}

/* ---- Booth-size / area palette (ADR-0039, ADR-0040) ------------------------
   The rail's middle band. It replaces two dimension fields in a dialog with one click, which is the
   whole argument for a template library: the common case should not be a form. */
.ed-palette:not(:empty){border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--panel-2);padding:8px 10px 9px}
.ed-palette h4{margin:0 0 6px;font-size:9.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted-2);display:flex;align-items:center;gap:8px}
.ed-palette .palmini{margin-left:auto;border:0;background:transparent;color:var(--accent);cursor:pointer;font:inherit;font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;text-decoration:underline}
.ed-palette .pal{display:flex;flex-direction:column;gap:3px;max-height:190px;overflow-y:auto}
.palitem{display:flex;align-items:center;gap:7px;width:100%;padding:5px 7px;border:1px solid transparent;border-radius:7px;
  background:transparent;cursor:pointer;font:inherit;font-size:12px;color:var(--text);text-align:left}
.palitem:hover{background:var(--panel-3);border-color:var(--line)}
.palitem.on{background:var(--accent-soft);border-color:var(--accent);font-weight:650}
.palitem .sw{width:13px;height:13px;border-radius:3px;flex:0 0 auto;border:1px solid rgba(0,0,0,.22)}
.palitem .nm{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.palitem .dim{font-family:var(--mono);font-size:10.5px;color:var(--muted)}
.palitem .pr{font-family:var(--mono);font-size:10.5px;color:var(--accent-text,var(--accent));font-weight:650}
.palitem .np{font-size:9.5px;color:var(--muted);font-style:italic}
.ed-subhead{padding:9px 12px 3px;font-size:9.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted-2);border-top:1px solid var(--line);margin-top:5px}

/* ---- Non-bookable plan features (ADR-0040) --------------------------------
   Hatched, translucent and behind the booths, so a feature can never be mistaken for something on
   sale — the one visual rule this element has to get right. */
.feat-e{position:absolute;z-index:1;display:flex;align-items:center;justify-content:center;user-select:none;cursor:move;
  border:1.5px dashed var(--fc,#9E9E9E);border-radius:4px;
  background:repeating-linear-gradient(45deg,color-mix(in srgb,var(--fc,#9E9E9E) 16%,transparent) 0 6px,transparent 6px 12px)}
.feat-e .fl{font-size:11px;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--fc,#666);
  background:color-mix(in srgb,var(--panel) 84%,transparent);padding:2px 7px;border-radius:5px;pointer-events:none;
  max-width:96%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.feat-e.sel{outline:3px solid var(--accent);outline-offset:0;z-index:5}
.feat-e .rz{position:absolute;right:-7px;bottom:-7px;width:14px;height:14px;border-radius:4px;background:var(--accent);border:2px solid #fff;cursor:nwse-resize;box-shadow:0 1px 4px rgba(0,0,0,.35);z-index:7}

/* ---- Aisle clearance findings (ADR-0041) ---------------------------------- */
.aisle-mark{position:absolute;z-index:4;pointer-events:auto;display:grid;place-items:center;
  background:repeating-linear-gradient(45deg,rgba(244,67,54,.42) 0 5px,rgba(244,67,54,.16) 5px 10px);
  outline:1px solid rgba(244,67,54,.75)}
.aisle-mark span{font-family:var(--mono);font-size:9.5px;font-weight:700;color:#fff;background:#d32f2f;padding:0 4px;border-radius:4px;white-space:nowrap}
.ed-foot .footbtn{border:0;border-radius:6px;padding:2px 9px;font:inherit;font-size:11px;font-weight:650;cursor:pointer;background:#3a332b;color:#d8d0c3}
.ed-foot .footbtn.warn{background:#8c2f28;color:#ffe6e3}
.ed-foot .footbtn.good{background:#2c4a30;color:#d6f0d8}
.ed-foot .footbtn.on{outline:2px solid rgba(255,255,255,.5)}

/* ---- Renumber preview (ADR-0042) ------------------------------------------
   The proposed number rides on the booth next to the current one, so the change is read on the map
   where the ordering actually lives, not in a list of before/after pairs. */
.booth-e .bnew{position:absolute;top:2px;right:3px;font-family:var(--mono);font-size:11px;font-weight:700;
  background:var(--accent);color:#fff;padding:0 4px;border-radius:4px;pointer-events:none;box-shadow:0 1px 3px rgba(0,0,0,.3)}
.rnsum{margin-top:12px;padding:9px 11px;border:1px solid var(--line);border-radius:9px;background:var(--panel-2);font-size:12.5px}
.rnsum .warn{margin-top:6px;color:var(--bad,#b3261e);font-size:12px}
.ttab{width:100%;border-collapse:collapse;font-size:12.5px}
.ttab th{text-align:left;font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted-2);padding:0 5px 5px;font-weight:700}
.ttab td{padding:2px 5px 2px 0}
.ttab input{height:31px;font-size:12.5px;padding:4px 8px;width:100%}
.ttab td:nth-child(2) input,.ttab td:nth-child(3) input{width:62px}

/* ---- Pricing card: fee groups + the coverage read-out (ADR-0039) ---------- */
.pgrp{margin:20px 0 4px;font-size:11px;letter-spacing:.15em;text-transform:uppercase;color:var(--muted-2);
  border-top:1px solid var(--line);padding-top:14px}
#typeRates .ttab td:nth-child(2) input,#typeRates .ttab td:nth-child(3) input{width:auto}
#typeRates .ttab td{padding:3px 8px 3px 0}
#coverOut .ttab td{padding:5px 10px 5px 0;border-top:1px solid var(--line)}
#coverOut .ttab tr.bad td{background:color-mix(in srgb,var(--bad,#b3261e) 7%,transparent)}
#coverOut .mut{color:var(--muted)}
#coverOut .bad{color:var(--bad,#b3261e)}
.fchips{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.fchip{font-size:11.5px;padding:3px 9px;border-radius:20px;background:var(--panel-2);border:1px solid var(--line);color:var(--muted-2)}
.fchip.bad{border-color:var(--bad,#b3261e);color:var(--bad,#b3261e)}

/* ---- Panel design canvas (ADR-0080 D5) ----
   A dot-accurate rendering of the real media. Everything here is positioned from the SERVER's
   resolved blocks, so the canvas cannot disagree with what the printer draws. */
.ptstage{position:relative;background:#fff;border:1px solid var(--line-2);border-radius:4px;overflow:hidden;box-shadow:0 1px 3px rgba(0,0,0,.12)}
.ptpunch{position:absolute;inset:0 0 auto 0;background:repeating-linear-gradient(45deg,#f2ede2,#f2ede2 4px,#fff 4px,#fff 8px);border-bottom:1px dashed #d8cfbc}
.ptb{position:absolute;color:#111;line-height:1.05;overflow:hidden;white-space:nowrap;outline:1px dashed rgba(20,80,160,.35);cursor:pointer;background:rgba(20,80,160,.04)}
.ptb.sel{outline:2px solid var(--accent);background:rgba(20,80,160,.10)}
.ptb.bad{outline:2px solid var(--bad);background:var(--bad-soft)}
.ptrow{display:flex;gap:10px;align-items:baseline;padding:6px 10px;border-bottom:1px solid var(--line);cursor:pointer;font-size:12.5px}
.ptrow:last-child{border-bottom:none}
.ptrow.sel{background:var(--panel-3)}
.ptrow span{color:var(--muted);font-family:var(--mono);font-size:11px}
.chip.warn{background:var(--bad-soft);color:var(--bad)}
.banner.err{background:var(--bad-soft);color:var(--bad);border:1px solid color-mix(in srgb,var(--bad) 35%,transparent);border-radius:8px;padding:10px 12px;font-size:13px}
/* The resize grip. Width only — height is derived from type size and line count, so a height
   control would set a number the renderer ignores (ADR-0045). */
.ptgrip{position:absolute;right:0;top:0;bottom:0;width:8px;cursor:ew-resize;background:var(--accent);opacity:.35;border-radius:2px}
.ptb:hover .ptgrip,.ptb.sel .ptgrip{opacity:.9}
/* A visible dot grid, so "snapped" is something the eye can check rather than something the
   properties panel merely claims. */
.ptstage{background-image:radial-gradient(circle,rgba(20,80,160,.16) .5px,transparent .5px);background-size:11.2px 11.2px}

/* Panel design — the Canva-shaped editor (SPEC-0009 / ADR-0106) */
.pttop{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-bottom:10px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.ptgroup{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.pttabs{display:flex;gap:6px}
.ptbody{display:flex;gap:18px;flex-wrap:wrap;align-items:flex-start}
.ptside{flex:1;min-width:280px}
.pttoolbar{margin-bottom:10px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.pttoolbar input[type=number]{width:74px}
.ptstage:focus{outline:2px solid var(--accent);outline-offset:2px}
.ptb.ptimg{background:transparent;outline-color:rgba(20,80,160,.25)}
.ptb.ptimg canvas{display:block;width:100%;height:100%;image-rendering:pixelated}
.ptb.ptqr{background:repeating-linear-gradient(45deg,rgba(0,0,0,.08) 0 3px,transparent 3px 6px)}
.ptb.ptrule{background:#111}
.ptl{position:absolute;display:block;white-space:pre;line-height:1;overflow:visible;font-family:"Arial Narrow","Helvetica Neue Condensed","Roboto Condensed",Arial,sans-serif;text-align:inherit}
.ptl[data-align=left]{text-align:left}.ptl[data-align=right]{text-align:right}.ptl[data-align=center]{text-align:center}
.ptb.ptover{overflow:visible}
.ptb.editing{outline:2px solid var(--accent);background:#fff;white-space:normal;cursor:text}
.pth{position:absolute;width:9px;height:9px;background:#fff;border:1.5px solid var(--accent);border-radius:2px;z-index:5}
/* Handles sit INSIDE the box: the box and the stage both clip overflow, so a handle hanging
   outside the edge could not be grabbed on a block that touches the media edge. */
.pth-nw{left:0;top:0;cursor:nwse-resize}.pth-ne{right:0;top:0;cursor:nesw-resize}
.pth-sw{left:0;bottom:0;cursor:nesw-resize}.pth-se{right:0;bottom:0;cursor:nwse-resize}
.pth-e{right:0;top:50%;margin-top:-5px;cursor:ew-resize}
.ptrow.over{box-shadow:inset 0 2px 0 var(--accent)}
.ptrow[draggable]{cursor:grab}
.ptstrip{display:flex;gap:10px;align-items:center;padding:8px 10px;border:1px solid var(--line);border-radius:8px;margin-bottom:6px;background:var(--panel);cursor:grab}
.ptstrip.over{box-shadow:inset 0 2px 0 var(--accent)}
.ptcheck{display:inline-flex;gap:6px;align-items:center;margin:0;text-transform:none;font-size:12.5px}
.banner.warn{background:var(--warn-soft,#fff6e0);border:1px solid var(--warn,#c98a00);border-radius:8px;padding:8px 10px;font-size:13px}

/* ---------- 9. networking workspace (SPEC-0026) ----------
   One page, no scrolling: the shell, results pane, detail pane and fixed action footer fit the
   screen, and every list pages instead of scrolling. Reuses the tokens, .btn, .pill and table
   language above; everything here is scoped to .nw-* so no other page changes. */
#main.nw-mode{overflow:hidden}
.nw-page{height:100%;padding:22px 22px 18px;display:grid;grid-template-rows:auto auto minmax(0,1fr);gap:12px;animation:none}
.nw-page .page-head{margin:0;flex-wrap:nowrap;align-items:flex-end}
.nw-page .page-head .sub{max-width:48ch}
.nw-page .crumb{margin-bottom:4px}
.nw-tabs{display:flex;gap:6px;flex-wrap:nowrap}
.nw-tabs button{font-size:13px;font-weight:650;padding:0 14px;height:34px;border-radius:8px;border:1px solid var(--line);background:var(--panel);color:var(--muted-2);cursor:pointer;white-space:nowrap}
.nw-tabs button.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-text)}
.nw-tabs small{font-size:12px;margin-left:6px}
.nw-panes{display:grid;grid-template-columns:280px minmax(0,1fr);gap:16px;min-height:0;min-width:0}
.nw-results,.nw-detail{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);min-height:0;min-width:0;box-shadow:var(--shadow-sm);overflow:hidden}
.nw-results{display:grid;grid-template-rows:auto minmax(0,1fr) 48px}
.nw-rhead{padding:18px 20px 12px;display:grid;gap:10px;border-bottom:1px solid var(--line)}
.nw-rlabel,.nw-reason{margin:0}
.nw-rlabel{font-size:12px;letter-spacing:.08em;font-weight:700}
.nw-rhead input{height:34px;font-size:13px}
.nw-small{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:12px;color:var(--muted-2)}
.nw-small select{width:auto;height:30px;padding:0 24px 0 8px;font-size:12px;border:0;background-color:transparent;color:var(--muted-2)}
.nw-list{padding:0 12px;min-height:0;overflow:hidden}
.nw-item{width:100%;text-align:left;display:grid;gap:4px;padding:12px 8px;min-height:64px;height:64px;border:0;border-bottom:1px solid var(--line);background:none;color:var(--text);font-size:13px;cursor:pointer}
.nw-item b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nw-item.on{background:var(--accent-soft);box-shadow:inset 3px 0 var(--accent)}
.nw-item:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.nw-item small{display:flex;justify-content:space-between;gap:8px;font-size:12px;color:var(--muted-2);min-width:0}
.nw-item small span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nw-item small span:last-child{flex:0 0 auto}
.nw-list .empty{margin:12px 0;padding:18px 12px}
.nw-pager{border-top:1px solid var(--line);padding:8px 14px;display:flex;justify-content:space-between;align-items:center;font-size:12px;gap:8px;color:var(--muted-2)}
.nw-pager.inline{border:0;padding:0;min-height:32px}
.nw-pagebtns{display:flex;gap:6px}
.nw-pagebtns .btn{width:32px;padding:0}
.nw-detail{display:grid;grid-template-rows:auto auto minmax(0,1fr) 56px}
.nw-detail:not(:has(.nw-sub)):not(:has(.nw-steps)){grid-template-rows:auto minmax(0,1fr) 56px}
.nw-detail.with-steps:has(.nw-sub):has(.nw-steps){grid-template-rows:auto auto auto minmax(0,1fr) 56px}
.nw-dhead{padding:18px 20px 12px;display:flex;justify-content:space-between;gap:12px;align-items:flex-start;min-width:0}
.nw-dtitle{min-width:0}
.nw-dhead h2{margin:0;font-size:20px;font-weight:800;letter-spacing:-.02em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nw-dhead h2:focus{outline:none}
.nw-dhead p{margin:4px 0 0;font-size:12.5px;color:var(--muted-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nw-label{display:block;font-size:10px;font-weight:800;letter-spacing:.2em;text-transform:uppercase;color:var(--accent-text);margin-bottom:5px}
.nw-back{border:0;background:none;color:var(--accent-text);padding:0 8px 6px 0;font-size:12px;font-weight:600;cursor:pointer}
.nw-sub{display:flex;gap:6px;padding:0 20px 10px;border-bottom:1px solid var(--line);align-items:center;flex-wrap:nowrap;min-width:0}
.nw-sub button{font-size:13px;height:32px;padding:0 10px;border-radius:7px;color:var(--muted-2);border:0;background:none;cursor:pointer;white-space:nowrap}
.nw-subsel{display:flex;align-items:center;gap:8px;margin:0;text-transform:none;letter-spacing:0;font-size:12px;color:var(--muted-2);font-weight:600;width:100%}
.nw-subsel select{height:40px;font-size:13px;flex:1;min-width:0}
.nw-sub button.on{color:var(--accent-text);background:var(--accent-soft);font-weight:600}
.nw-steps{display:flex;gap:10px;font-size:12px;color:var(--muted-2);padding:0 20px 12px;border-bottom:1px solid var(--line);flex-wrap:nowrap;white-space:nowrap}
.nw-steps b{color:var(--accent-text)}
.nw-body{min-height:0;min-width:0;padding:16px 20px;display:flex;flex-direction:column;gap:12px;overflow:hidden}
.nw-body>*{flex-shrink:0}
.nw-toolbar{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:32px;min-width:0}
.nw-toolbar>b{font-size:12px;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap}
.nw-tools{display:flex;gap:6px;align-items:center;min-width:0}
.nw-tools input,.nw-toolbar>input,.nw-body>input[type=search]{height:32px;font-size:13px;width:180px}
.nw-body>input[type=search]{width:100%}
.nw-tools select{height:32px;font-size:12px;width:auto;max-width:150px;padding:0 24px 0 8px}
.dim{color:var(--muted-2);font-size:12px;font-weight:500}
.nw-tablebox{flex:1 1 0;min-height:0;overflow:hidden}
.nw-table{width:100%;border-collapse:separate;border-spacing:0;table-layout:fixed;border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;font-size:13px;background:var(--panel)}
.nw-table th{text-align:left;color:var(--muted-2);font-size:9.5px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;padding:0 8px;height:34px;background:var(--panel-2);border-bottom:1px solid var(--line)}
.nw-table td{height:48px;padding:5px 8px;border-bottom:1px solid var(--line);vertical-align:middle;overflow:hidden;white-space:nowrap}
.nw-table tr:last-child td{border-bottom:0}
.nw-table td small{display:block;font-size:12px;color:var(--muted-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nw-cell{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nw-table tr.pick{background:var(--accent-soft)}
.nw-table .cbox{display:table-cell;width:38px;text-align:center}
.nw-table .cbox input{width:15px;height:15px;accent-color:var(--accent);margin:0}
.nw-table .act{width:auto;text-align:right}
.nw-table th.act{width:190px}
.nw-table tbody tr[data-nw-detail] td:not(.cbox),.nw-rowlink{cursor:pointer}
.nw-rowlink:hover,.nw-table tbody tr[data-nw-detail]:hover{background:var(--panel-2)}
.nw-rowlink:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.nw-table.small td{height:40px}
.nw-selline{font-size:12px;color:var(--muted-2);min-height:18px}
.nw-foot{border-top:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:10px;padding:0 18px;background:var(--panel-2);min-width:0}
.nw-status{font-size:12px;color:var(--muted-2);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nw-status b{color:var(--text)}
.nw-status.err{color:var(--bad)}
.nw-actions{display:flex;gap:8px;align-items:center;flex-shrink:0}
.nw-actions .btn{height:34px;font-size:12px;padding:0 12px}
.nw-box{border:1px solid var(--line);border-radius:8px;padding:12px 14px;background:var(--panel-2);min-width:0}
.nw-box p{margin:6px 0 0;font-size:13px;line-height:1.45}
.nw-box h3{margin:0;font-size:16px}
.nw-box.grow{flex:1 1 auto;min-height:0;overflow:hidden}
.nw-full{white-space:pre-wrap;overflow-wrap:anywhere}
.nw-grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px;min-width:0}
.nw-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.nw-metric{background:var(--panel-2);border:1px solid var(--line);border-radius:8px;padding:12px}
.nw-metric b{display:block;font-size:25px;line-height:1.1;margin-bottom:6px}
.nw-metric span{color:var(--muted-2);font-size:12px}
.nw-notice{padding:10px 12px;border-radius:7px;background:var(--warn-soft);color:var(--warn);font-size:12px;line-height:1.4}
.nw-notice.info{background:var(--accent-soft);color:var(--accent-text)}
/* ADR-0260 D3: a ghost's emailed address and the registrant it matches, with Merge into beside it */
.nw-notice.match{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}
.nw-notice.match .btn{flex:none}
.nw-choice{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--line);border-radius:8px;padding:12px;margin:0;text-transform:none;letter-spacing:0;font-size:13px;color:var(--text);font-weight:400;cursor:pointer}
.nw-choice.on{border-color:var(--accent);background:var(--accent-soft)}
.nw-choice input{width:auto;margin-top:3px;accent-color:var(--accent)}
.nw-choice span span,.nw-choice p{display:block;font-size:12px;color:var(--muted-2);margin:4px 0 0}
.nw-choice select{margin-top:6px;height:32px;font-size:12px;width:auto}
.nw-check{display:flex;gap:8px;align-items:center;text-transform:none;letter-spacing:0;font-size:13px;color:var(--text);font-weight:400;margin:0}
.nw-check input{width:auto;accent-color:var(--accent)}
.nw-reason{display:grid;gap:6px;font-size:12px}
.nw-reason input{height:34px;font-size:13px;text-transform:none;letter-spacing:0}
.nw-fill{flex:1 1 0;min-height:0}
.nw-write{width:100%;resize:none;height:124px;min-height:0;font-size:14px;line-height:1.6;padding:12px}
.nw-notefoot{font-size:12px;color:var(--muted-2);display:flex;justify-content:space-between}
.nw-actionlist{display:grid;grid-template-columns:1fr 1fr;gap:8px;min-height:0}
.nw-action{display:grid;gap:4px;text-align:left;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:var(--panel);color:var(--text);cursor:pointer;font-size:13px;min-height:44px}
.nw-action span{font-size:12px;color:var(--muted-2);line-height:1.35}
.nw-action:hover:not(:disabled){border-color:var(--accent);background:var(--accent-soft)}
.nw-action:disabled{opacity:.5;cursor:default}
.nw-chips{display:flex;flex-wrap:wrap;gap:6px}
@media(max-height:800px) and (min-width:901px){
  .nw-page{padding:14px 22px 14px;gap:8px}
  .nw-page .page-head h1{font-size:22px}
  .nw-rhead{padding:12px 16px 10px;gap:8px}
  .nw-item{min-height:56px;height:56px;padding:9px 8px}
  .nw-dhead{padding:12px 20px 8px}
  .nw-body{padding:10px 20px;gap:8px}
  .nw-table td{height:40px}
  .nw-box{padding:9px 12px}
  .nw-metric{padding:9px}.nw-metric b{font-size:22px}
  .nw-write{height:96px}
}
@media(max-height:620px) and (min-width:901px){ .nw-page .crumb,.nw-page .page-head .sub{display:none} }
@media(max-width:1180px){.nw-panes{grid-template-columns:250px minmax(0,1fr)}.nw-page .page-head .sub{max-width:32ch}}
@media(max-width:1100px){.nw-actionlist{grid-template-columns:1fr}.nw-tools input{width:130px}}
/* One pane at a time: phones, narrow windows and 200% zoom. Results and details swap in place. */
@media(max-width:900px){
  .nw-page{padding:10px 12px;gap:8px;grid-template-rows:auto minmax(0,1fr)}
  .nw-title{display:none}
  .nw-tabs button{height:44px;flex:1;padding:0 8px}
  .nw-panes{grid-template-columns:minmax(0,1fr)}
  .nw-panes .nw-results{display:none}
  .nw-panes.show-results .nw-results{display:grid}
  .nw-panes.show-results .nw-detail{display:none}
  .nw-results{grid-template-rows:auto minmax(0,1fr) 52px}
  .nw-rhead{padding:10px 12px}
  .nw-rhead input{height:44px}
  .nw-item{min-height:64px;height:64px}
  .nw-pagebtns .btn{width:44px;height:44px}
  .nw-dhead{padding:10px 12px 6px}
  .nw-dhead h2{font-size:18px}
  .nw-dhead .pill{display:none}
  .nw-back{min-height:44px;padding:0 10px 0 0}
  .nw-sub{padding:0 8px 6px;gap:0;overflow:hidden}
  .nw-sub button{height:44px;padding:0 8px;font-size:12.5px}
  .nw-steps{padding:0 12px 8px;font-size:11px;gap:6px;overflow:hidden}
  .nw-body{padding:10px 12px;gap:8px}
  .nw-tools{flex-wrap:nowrap}
  .nw-tools input{width:110px;height:44px}
  .nw-tools select{height:44px;max-width:96px}
  .nw-tools .btn{height:44px}
  .nw-toolbar{flex-wrap:nowrap}
  .nw-toolbar>b{display:none}
  .nw-table td{height:54px}
  .nw-table .opt{display:none}
  .nw-table th.act{width:150px}
  .nw-foot{padding:0 10px}
  .nw-detail{grid-template-rows:auto auto minmax(0,1fr) 60px}
  .nw-actions .btn{height:44px;font-size:12.5px;padding:0 10px}
  .nw-status{max-width:40%}
  .nw-grid2,.nw-actionlist{grid-template-columns:1fr}
  .nw-metrics{grid-template-columns:repeat(2,1fr)}
  .nw-metric b{font-size:20px}
  .nw-selline,.nw-page .dim{font-size:12px}
}
@media(max-width:900px) and (max-height:540px){
  .nw-tabs{display:none}
  .nw-page{grid-template-rows:minmax(0,1fr);padding:6px 8px}
  .nw-dhead p,.nw-dhead .nw-label{display:none}
  .nw-table td{height:44px}
  .nw-metrics{grid-template-columns:repeat(4,1fr)}
  .nw-metric{padding:6px}.nw-metric b{font-size:16px;margin:0}
  .nw-body{padding:6px 10px;gap:6px}
  .nw-selline{display:none}
  .nw-write{height:64px}
}

/* ---------- 9. the badge studio (SPEC-0028) ----------
   Three columns on one screen: who prints and what size on the left, the printer's own picture
   in the middle, the selected element on the right. The stage's plane is in printer dots and is
   scaled as a whole, so the boxes over the picture never disagree with it. */
#main.bs-mode{overflow:hidden}
.bs{height:100%;display:grid;grid-template-rows:1fr auto;min-height:0}
.bs-studio{display:grid;grid-template-columns:268px minmax(0,1fr) 300px;min-height:0}
.bs-col{position:relative;min-height:0;overflow:auto;background:var(--panel);display:flex;flex-direction:column}
.bs-left{border-right:1px solid var(--line)}
.bs-right{border-left:1px solid var(--line)}
.bs-sec{padding:12px 14px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:8px;position:relative}
.bs-sec:last-child{border-bottom:0}
.bs-sec label{font-size:10.5px;color:var(--muted);letter-spacing:.04em;text-transform:uppercase;font-weight:600}
.bs-h{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.bs-h h2{margin:0;font-size:11px;font-weight:650;letter-spacing:.07em;text-transform:uppercase;color:var(--muted-2)}
.bs-h span{font-size:11.5px;color:var(--muted)}
.bs-search{display:flex;align-items:center;gap:7px;border:1px solid var(--line-2);border-radius:8px;padding:6px 9px;background:var(--panel-2)}
.bs-search svg{width:14px;height:14px;stroke:var(--muted);fill:none;stroke-width:2;flex:none}
.bs-search input{border:0;background:none;outline:none;flex:1;min-width:0;font-size:12.5px;padding:0;box-shadow:none}
.bs-people{display:flex;flex-direction:column;gap:2px;max-height:190px;overflow:auto}
.bs-person{display:grid;grid-template-columns:1fr auto;gap:0 8px;text-align:left;border:1px solid transparent;background:none;border-radius:8px;padding:6px 8px;cursor:pointer;color:inherit;font:inherit}
.bs-person:hover{background:var(--panel-2)}
.bs-person[aria-pressed="true"]{background:var(--accent-soft);border-color:color-mix(in srgb,var(--accent) 30%,transparent)}
.bs-person.withdrawn b{color:var(--muted)}
.bs-person b{font-weight:600;font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bs-person small{grid-column:1;color:var(--muted);font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bs-person .n{grid-row:1/3;grid-column:2;align-self:center;font-size:11px;color:var(--muted)}
.bs-chips{display:flex;flex-wrap:wrap;gap:5px}
.bs-chip{border:1px solid var(--line-2);background:var(--panel);border-radius:999px;padding:3px 9px;font-size:11.5px;color:var(--muted-2);cursor:pointer;font:inherit}
.bs-chip:hover{border-color:var(--accent);color:var(--accent-text)}
.bs-checkcard{display:flex;gap:9px;align-items:flex-start;padding:8px 10px;border-radius:8px;background:var(--good-soft);color:var(--text)}
.bs-checkcard.warn{background:var(--warn-soft)}
.bs-checkcard.bad{background:var(--bad-soft)}
.bs-checkcard svg{width:16px;height:16px;flex:none;margin-top:1px;stroke:var(--good);fill:none;stroke-width:2.4}
.bs-checkcard.warn svg{stroke:var(--warn)}.bs-checkcard.bad svg{stroke:var(--bad)}
.bs-checkcard b{font-weight:650;font-size:12.5px}
.bs-checkcard small{display:block;color:var(--muted-2);font-size:11.5px;line-height:1.4}
.bs-checkcard button{border:0;background:none;padding:0;color:var(--accent-text);font-size:11.5px;text-decoration:underline;text-underline-offset:2px;cursor:pointer;font-family:inherit}
.bs-refused{display:flex;flex-wrap:wrap;gap:4px 8px;margin-top:5px}
.bs-routes{font-size:11.5px;color:var(--muted-2);display:flex;flex-direction:column;gap:3px}
.bs-routes div{display:flex;justify-content:space-between;gap:8px}
.bs-routes b{color:var(--text);font-weight:600;text-align:right}
.bs-sizerow{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.bs-sizerow input[type=number]{width:62px}
.bs-sizerow select{font-size:12px}
.bs-film{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.bs-frame{border:1px solid var(--line);background:var(--panel-2);border-radius:8px;padding:6px 6px 5px;display:flex;flex-direction:column;align-items:center;gap:5px;text-align:center;cursor:pointer;color:inherit;font:inherit}
.bs-frame:hover{border-color:var(--line-2)}
.bs-frame[aria-pressed="true"]{border-color:var(--info);box-shadow:0 0 0 1px var(--info);background:var(--panel)}
.bs-frame img{width:100%;aspect-ratio:var(--ar);object-fit:contain;background:#fff;border:1px solid var(--line)}
.bs-frame .bs-noimg{width:100%;aspect-ratio:var(--ar);display:grid;place-items:center;background:var(--bad-soft);color:var(--bad);font-size:11px;border-radius:4px}
.bs-frame span{font-size:11px;font-weight:600;line-height:1.15}
.bs-frame small{font-size:10.5px;color:var(--muted)}
.bs-add{border:1px dashed var(--line-2);background:none;border-radius:8px;padding:6px;color:var(--muted-2);font-size:12px;cursor:pointer;font-family:inherit}
.bs-center{display:grid;grid-template-rows:auto 1fr auto;min-height:0;min-width:0;background:var(--mat)}
.bs-stagebar{display:flex;align-items:center;gap:10px;padding:8px 14px;flex-wrap:wrap}
.bs-sp{flex:1}
.bs-seg{display:inline-flex;border:1px solid var(--line-2);border-radius:8px;padding:2px;background:var(--panel-2);gap:2px;flex-wrap:wrap}
.bs-seg button{border:0;background:none;padding:4px 10px;border-radius:6px;font-size:12px;color:var(--muted-2);white-space:nowrap;cursor:pointer;font-family:inherit}
.bs-seg button[aria-pressed="true"]{background:var(--panel);color:var(--text);box-shadow:var(--shadow-sm);font-weight:600}
.bs-toggle{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--muted-2);border:0;background:none;padding:2px 4px;cursor:pointer;font-family:inherit}
.bs-toggle i{width:12px;height:12px;border-radius:3px;border:1.5px solid var(--line-2);display:grid;place-items:center}
.bs-toggle[aria-pressed="true"] i{background:var(--accent);border-color:var(--accent)}
.bs-toggle[aria-pressed="true"] i::after{content:"";width:5px;height:3px;border:solid #fff;border-width:0 0 1.6px 1.6px;transform:rotate(-45deg) translate(0,-1px)}
.bs-stage{position:relative;min-height:0;overflow:auto;display:grid;place-items:center;padding:28px 24px 22px 36px}
.bs-board{position:relative;outline:none}
.bs-board:focus-visible{outline:2px solid var(--accent-text);outline-offset:6px;border-radius:4px}
.bs-ruler{position:absolute;color:var(--muted-2);font:10px/1 var(--mono);pointer-events:none}
.bs-ruler.top{left:0;top:-18px;height:14px;right:0;border-bottom:1px solid var(--mat-line)}
.bs-ruler.left{top:0;left:-26px;width:22px;bottom:0;border-right:1px solid var(--mat-line)}
.bs-ruler span{position:absolute}
.bs-ruler.top span{bottom:0;border-left:1px solid var(--mat-line);height:5px}
.bs-ruler.top span.in{height:14px;padding-left:3px}
.bs-ruler.left span{right:0;border-top:1px solid var(--mat-line);width:5px}
.bs-ruler.left span.in{width:22px;padding-top:2px;text-align:left}
.bs-label{position:relative;background:#fff;box-shadow:var(--shadow-md);border-radius:2px}
.bs-label.refused{background:repeating-linear-gradient(135deg,#fff 0 12px,var(--bad-soft) 12px 24px)}
.bs-plane{position:absolute;left:0;top:0;transform-origin:0 0}
.bs-plane>img{position:absolute;left:0;top:0;display:block;user-select:none;-webkit-user-drag:none;pointer-events:none}
.bs-label.crisp .bs-plane>img{image-rendering:pixelated}
.bs-punch{position:absolute;border:1px dashed #d77a2b;background:repeating-linear-gradient(135deg,rgba(215,122,43,.14) 0 6px,transparent 6px 12px);pointer-events:none}
.bs-punch em{position:absolute;right:6px;bottom:4px;font:600 22px/1 var(--font);font-style:normal;color:#b4621f;letter-spacing:.02em}
.bs-box{position:absolute;border:1px solid transparent;border-radius:2px;background:none;padding:0;cursor:move;box-sizing:border-box}
.bs-box:hover{border-color:color-mix(in srgb,var(--info) 55%,transparent)}
.bs-label.bounds .bs-box{border-color:color-mix(in srgb,var(--info) 45%,transparent);border-style:dashed}
.bs-box.sel{border-color:var(--info);border-style:solid;background:color-mix(in srgb,var(--info) 10%,transparent)}
.bs-box.bad{border-color:var(--bad);border-style:solid;background:color-mix(in srgb,var(--bad) 12%,transparent)}
.bs-box.over{background:color-mix(in srgb,var(--bad) 18%,transparent)}
.bs-hd{position:absolute;width:14px;height:14px;background:#fff;border:2px solid var(--info);border-radius:3px;box-sizing:border-box;transform-origin:center}
.bs-hd.e{right:-7px;top:calc(50% - 7px);cursor:ew-resize}
.bs-hd.nw{left:-7px;top:-7px;cursor:nwse-resize}.bs-hd.ne{right:-7px;top:-7px;cursor:nesw-resize}.bs-hd.sw{left:-7px;bottom:-7px;cursor:nesw-resize}.bs-hd.se{right:-7px;bottom:-7px;cursor:nwse-resize}
.bs-refusal{position:absolute;left:0;top:0;padding:24px;color:var(--bad);font-size:26px;line-height:1.35;z-index:9}
.bs-refusal b{font-weight:700}
.bs-refusal ul{margin:10px 0 0 24px;padding:0;color:var(--text);font-size:22px}
.bs-ctx{position:absolute;z-index:40;display:flex;align-items:center;gap:2px;background:var(--panel);border:1px solid var(--line-2);border-radius:10px;box-shadow:var(--shadow-md);padding:3px;white-space:nowrap}
.bs-ctx .t{display:inline-flex;align-items:center;gap:5px;border:0;background:none;border-radius:7px;padding:5px 8px;font-size:12px;cursor:pointer;color:inherit;font-family:inherit;height:auto;box-shadow:none}
.bs-ctx select.t,.bs-ctx input.t{border:1px solid var(--line);background:var(--panel-2);padding:3px 6px;cursor:auto}
.bs-ctx .t:hover{background:var(--panel-3)}
.bs-ctx .t.on{background:var(--accent-soft);color:var(--accent-text);font-weight:650}
.bs-ctx .t b{font-weight:650}
.bs-ctx .dv{width:1px;height:18px;background:var(--line);margin:0 3px}
.bs-ctx .fit{font-size:11.5px;color:var(--muted-2);padding:0 8px}
.bs-ctx .fit.shrunk{color:var(--warn)}.bs-ctx .fit.bad{color:var(--bad)}
.bs-inline{position:absolute;z-index:45;font:14px var(--font);padding:6px 8px;border:2px solid var(--info);border-radius:6px;background:var(--panel);color:var(--text)}
.bs-caption{display:flex;align-items:center;gap:6px 14px;padding:6px 14px;min-height:30px;font-size:11.5px;color:var(--muted-2);border-top:1px solid var(--mat-line);flex-wrap:wrap}
.bs-stagebar{gap:6px 10px;padding:6px 10px}
.bs-caption b{color:var(--text);font-weight:600}
.bs-caption .dot{width:7px;height:7px;border-radius:50%;background:var(--good);display:inline-block;margin-right:5px;vertical-align:1px}
.bs-tabs{display:flex;gap:2px;padding:8px 10px 0;border-bottom:1px solid var(--line)}
.bs-tabs button{border:0;background:none;padding:7px 10px 8px;font-size:12.5px;color:var(--muted-2);border-bottom:2px solid transparent;margin-bottom:-1px;cursor:pointer;font-family:inherit;border-radius:0}
.bs-tabs button[aria-selected="true"]{color:var(--text);font-weight:650;border-bottom-color:var(--accent)}
.bs-kv{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:6px}
.bs-row2{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.bs-fld{display:flex;flex-direction:column;gap:3px;min-width:0}
.bs-fld input,.bs-fld select{width:100%;min-width:0;font-size:12.5px;padding:5px 7px}
.bs-fld .mut{text-transform:none;letter-spacing:0;font-weight:400}
.bs-wifi{display:flex;gap:4px;align-items:center;flex-wrap:wrap}
.bs-wifi input{flex:1;min-width:90px}
.bs-elname{display:flex;align-items:center;gap:8px}
.bs-elname b{font-size:14px;font-weight:650}
.bs-tag{font-size:10.5px;font-weight:650;padding:2px 7px;border-radius:999px;background:var(--accent-soft);color:var(--accent-text);letter-spacing:.02em}
.bs-fitcard{border-radius:8px;border:1px solid var(--line);padding:8px 10px;display:flex;flex-direction:column;gap:5px;background:var(--panel-2)}
.bs-fitcard .bar{height:6px;border-radius:3px;background:var(--panel-3);position:relative;overflow:hidden}
.bs-fitcard .bar i{position:absolute;left:0;top:0;bottom:0;background:var(--accent);border-radius:3px}
.bs-fitcard .ln{display:flex;justify-content:space-between;font-size:11.5px;color:var(--muted-2);gap:8px}
.bs-fitcard .ln b{color:var(--text);font-weight:600;text-align:right}
.bs-art{display:grid;grid-template-columns:96px 1fr;gap:10px;align-items:center;border:1px solid var(--line);border-radius:9px;padding:8px}
.bs-art .thumb{background:#fff;border:1px solid var(--line);border-radius:4px;height:52px;display:grid;place-items:center;padding:4px;overflow:hidden}
.bs-art .thumb canvas{max-width:100%;max-height:100%;image-rendering:pixelated}
.bs-art b{font-size:12.5px;font-weight:650;display:block}
.bs-art small{color:var(--muted);font-size:11.5px;display:block}
.bs-art .acts{display:flex;gap:6px;margin-top:5px;flex-wrap:wrap}
.bs-note{font-size:11.5px;color:var(--muted-2);line-height:1.45;margin:0}
.bs-addrow{display:flex;gap:6px;flex-wrap:wrap}
.bs-lyr{display:flex;flex-direction:column;gap:1px}
.bs-lyr button{display:flex;justify-content:space-between;gap:8px;text-align:left;border:0;background:none;border-radius:6px;padding:5px 8px;font-size:12px;cursor:pointer;color:inherit;font-family:inherit}
.bs-lyr button:hover{background:var(--panel-2)}
.bs-lyr button.over{outline:2px dashed var(--info)}
.bs-lyr button[aria-pressed="true"]{background:color-mix(in srgb,var(--info) 12%,transparent);color:var(--info);font-weight:600}
.bs-lyr small{color:var(--muted);font-size:11px}
.bs-striprow{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid var(--line);flex-wrap:wrap}
.bs-striprow.over{outline:2px dashed var(--info)}
.bs-striprow label{display:inline-flex;align-items:center;gap:4px;text-transform:none;letter-spacing:0;font-size:12px;color:var(--text);font-weight:400}
.bs-striprow select{width:auto;font-size:12px}
.bs-stripacts{margin-left:auto;display:flex;gap:4px}
.bs-errors{padding:0 14px;max-height:180px;overflow:auto;background:var(--panel);border-top:1px solid var(--line)}
.bs-errors:empty{display:none}
.bs-errors .banner{margin:8px 0}
.bs-errors ul{margin:6px 0 0 18px}
.bs-save{font-size:12px;color:var(--muted);display:inline-flex;align-items:center;gap:6px;margin-right:6px}
.bs-save i{width:7px;height:7px;border-radius:50%;background:var(--warn)}
.bs-save.on i{background:var(--good)}
@media (max-width:1180px){.bs-studio{grid-template-columns:236px minmax(0,1fr) 262px}}
@media (max-width:900px){#main.bs-mode{overflow:auto}.bs{height:auto}.bs-studio{grid-template-columns:1fr}.bs-col{border:0;border-bottom:1px solid var(--line);max-height:none}.bs-center{min-height:560px}}

/* ---- Pre-print badges (SPEC-0027) ---------------------------------------------------------- */
/* The entry animation holds only its start: a held transform would make the page, not the screen,
   the frame of the phone sheet below. The finished look is the same. */
.pp-page{animation-fill-mode:backwards}
.pp-page .pp-steps{display:flex;gap:22px;border-bottom:1px solid var(--line);margin:4px 0 14px;flex-wrap:wrap}
.pp-steps span{padding:0 0 10px;color:var(--muted-2);font-size:12.5px;display:flex;align-items:center;gap:7px}
.pp-steps b{display:inline-grid;place-items:center;width:21px;height:21px;border-radius:50%;background:var(--panel-3);font-size:11px}
.pp-steps span.on{color:var(--accent-text);font-weight:750;border-bottom:2px solid var(--accent)}
.pp-steps span.on b{background:var(--accent);color:#fff}
.pp-status{min-height:20px;font-size:12.5px;color:var(--muted-2);margin:0 0 8px}
.pp-status.bad{color:var(--bad);font-weight:650}
.pp-presets{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:14px}
.pp-preset{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-md);text-align:left;padding:14px 16px;color:var(--text);cursor:pointer;font:inherit}
.pp-preset strong{display:block;font-size:14px;margin-bottom:3px}
.pp-preset span{font-size:12px;color:var(--muted-2)}
.pp-preset.on{background:var(--accent-soft);border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}
.pp-preset:focus-visible,.pp-page button:focus-visible,.pp-page input:focus-visible,.pp-page select:focus-visible,.pp-page a:focus-visible{outline:3px solid var(--accent-2);outline-offset:2px}
.pp-grid{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:18px;align-items:start}
.pp-aside{position:sticky;top:12px}
.pp-h{margin:0 0 10px;font-size:18px;font-weight:800;letter-spacing:-.01em;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.pp-h:focus{outline:none}
.pp-h2{margin:0 0 10px;font-size:14.5px;font-weight:750;display:flex;align-items:center;gap:8px}
.pp-big{font-size:22px;font-weight:800;margin:4px 0 6px;letter-spacing:-.01em}
.pp-filters{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px 14px}
.pp-wide{grid-column:1/-1}
.pp-label{display:block;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted-2);font-weight:700;margin:10px 0 5px}
.pp-label .muted,.pp-page .muted{text-transform:none;letter-spacing:0;font-weight:500;color:var(--muted)}
.pp-check{display:inline-flex;align-items:center;gap:7px;font-size:13px;text-transform:none;letter-spacing:0;font-weight:500;color:var(--text);margin:0;cursor:pointer}
.pp-inline{display:block;margin:0 0 6px}
.pp-cardhead{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.pp-cardhead .pp-h2{margin:0}
.pp-acts{display:inline-flex;gap:8px;flex-wrap:wrap;align-items:center}
.pp-mainacts{margin-top:12px}
.pp-table{width:100%;border-collapse:collapse;font-size:13px}
.pp-table th{text-align:left;font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted-2);padding:6px 8px;border-bottom:1px solid var(--line)}
.pp-table td{padding:8px;border-bottom:1px solid var(--line);vertical-align:top}
.pp-table small,.pp-row small,.pp-list small,.pp-copy small{display:block;color:var(--muted-2);font-size:11.5px;margin-top:2px}
.pp-num{font-family:var(--mono);font-size:12px;color:var(--muted-2)}
.pp-pager{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:10px;flex-wrap:wrap}
.pp-pager .hint{margin:0}
.ok{color:var(--good)} .bad{color:var(--bad)}
/* Filter dropdowns: a button that reads like the selects beside it, opening a panel of choices. */
.pp-dd{position:relative}
.pp-ddbtn{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;padding:9px 11px;border:1px solid var(--line-2);border-radius:var(--r-sm);background:var(--panel);color:var(--text);font:inherit;font-size:13.5px;text-align:left;cursor:pointer;transition:border-color .15s,box-shadow .15s}
.pp-ddbtn span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pp-ddbtn svg{width:15px;height:15px;flex:0 0 auto;color:var(--muted-2);transition:transform .15s}
.pp-ddbtn:hover{border-color:var(--muted)}
.pp-ddbtn[aria-expanded="true"]{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.pp-ddbtn[aria-expanded="true"] svg{transform:rotate(180deg)}
.pp-ddbtn.set{border-color:color-mix(in srgb,var(--accent) 55%,var(--line-2));background:var(--accent-soft);color:var(--accent-text);font-weight:650}
.pp-ddbtn.set svg{color:var(--accent-text)}
.pp-ddpanel{position:absolute;z-index:40;top:calc(100% + 6px);left:0;width:max(100%,340px);max-width:calc(100vw - 32px);background:var(--panel);border:1px solid var(--line-2);border-radius:var(--r-md);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;max-height:430px}
[data-dd="when"] .pp-ddpanel{left:auto;right:0;width:max(100%,360px)}
.pp-window .frow{grid-template-columns:minmax(0,1fr);gap:0}
.pp-window .frow-tight>div:last-child{flex:0 0 auto;min-width:0}
.pp-ddsearch{padding:10px 10px 8px;border-bottom:1px solid var(--line)}
.pp-ddsearch input{padding:8px 10px;font-size:13px}
.pp-ddlist{overflow:auto;padding:4px 0 6px;flex:1;min-height:0}
.pp-ddsec{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-weight:700;padding:9px 12px 3px}
.pp-ddopt{display:flex;align-items:center;gap:9px;padding:6px 12px;margin:0;font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--text);cursor:pointer}
.pp-ddopt:hover{background:var(--panel-2)}
.pp-ddopt span{flex:1;min-width:0}
.pp-ddopt b{font-family:var(--mono);font-size:11.5px;font-weight:500;color:var(--muted-2);font-variant-numeric:tabular-nums}
.pp-ddopt input,.pp-pl input{margin:0;accent-color:var(--accent)}
.pp-ddmore{margin:6px 12px 4px}
.pp-ddempty{padding:14px 12px;font-size:12.5px;color:var(--muted-2)}
.pp-ddfoot{display:flex;align-items:center;gap:10px;padding:8px 10px;border-top:1px solid var(--line);font-size:12px;color:var(--muted-2)}
.pp-ddfoot .btn{margin-left:auto}
.pp-ddbody{padding:4px 12px 12px;overflow:auto}
.pp-active{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:14px}
.pp-active .fchip{display:inline-flex;align-items:center;gap:6px;color:var(--text);background:var(--panel)}
.pp-active .fchip i{font-style:normal;color:var(--muted);font-size:10.5px}
.pp-active .fchip button{border:0;background:none;color:var(--muted-2);cursor:pointer;font-size:14px;line-height:1;padding:0 1px}
.pp-active .fchip button:hover{color:var(--bad)}
/* Show-day lists (ADR-0266): search, counted filters, sortable headings and a 50-row pager. */
.lst-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:14px 0 10px;padding-top:12px;border-top:1px solid var(--line)}
.lst-bar.flush{border-top:0;padding-top:0;margin-top:0}
.lst-bar .search{position:relative;flex:1;min-width:220px;max-width:360px}
.lst-bar .search input{height:34px;padding-left:32px;font-size:13px}
.lst-bar .search svg{position:absolute;left:10px;top:9px;width:15px;height:15px;color:var(--muted);pointer-events:none}
.lst-dd{width:240px;max-width:100%}
.lst-dd .pp-ddbtn{height:34px;padding:0 11px;font-size:13px}
.lst-range{margin-left:auto;font-size:12px;color:var(--muted-2);font-variant-numeric:tabular-nums;white-space:nowrap}
.lst-chips{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 10px}
.lst-bar .lst-chips{margin:0}
.fchip.pick{cursor:pointer;font-family:inherit;line-height:1.5}
.fchip.pick:hover{border-color:var(--muted)}
.fchip.pick b{font-weight:600;margin-left:4px;font-variant-numeric:tabular-nums;color:inherit}
.fchip.pick.on{background:var(--ink);color:#f4efe7;border-color:var(--ink)}
th .lst-sort{all:unset;cursor:pointer;display:inline-flex;align-items:center;gap:5px;font:inherit;letter-spacing:inherit;text-transform:inherit;color:inherit}
th .lst-sort:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:3px}
th .lst-sort svg{width:9px;height:9px;opacity:.35}
th .lst-sort:hover svg{opacity:.7}
th .lst-sort.on{color:var(--text)}
th .lst-sort.on svg{opacity:1;color:var(--accent-text)}
.lst-pager{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-top:12px}
.lst-pager .hint{margin:0;font-variant-numeric:tabular-nums}
.lst-pages{display:flex;gap:4px;align-items:center;flex-wrap:wrap}
.lst-pages .btn{min-width:34px;justify-content:center;font-variant-numeric:tabular-nums}
.lst-pages .btn[disabled]{opacity:.45;pointer-events:none}
.lst-pages .gap{color:var(--muted-2);padding:0 4px}
/* Your batch: one headline count, then the printers one line each under their label size. */
.pp-sum{display:flex;align-items:baseline;gap:8px;margin:0 0 4px}
.pp-sum b{font-size:30px;font-weight:800;letter-spacing:-.02em;font-variant-numeric:tabular-nums;line-height:1.1}
.pp-sum span{color:var(--muted-2);font-size:13px}
.pp-plhead{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.pp-plhead small{font-size:11.5px;color:var(--good);font-weight:650}
.pp-plhead small.bad{color:var(--bad)}
.pp-plsize{display:block;font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-weight:700;margin:8px 0 1px}
.pp-pl{display:flex;align-items:center;gap:8px;margin:0;padding:5px 0;font-size:12.5px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--text);cursor:pointer;border-bottom:1px solid var(--line)}
.pp-pl:last-child{border-bottom:0}
.pp-pl span{flex:1;min-width:0}
.pp-pl em{display:block;font-style:normal;font-weight:500;font-size:11.5px;color:var(--bad)}
.pp-pl small{font-size:11.5px;font-weight:650;display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.pp-pl small::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
.pp-full{width:100%;margin-top:10px}
.pp-notice{padding:10px 12px;border-radius:8px;background:var(--warn-soft);color:var(--warn);font-size:12.5px;line-height:1.45;margin:10px 0}
.pp-notice.bad{background:var(--bad-soft);color:var(--bad)}
.pp-notice ul{margin:6px 0 0 18px;padding:0}
.pp-chips{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0}
.pp-block{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--panel-2);margin-bottom:8px}
.pp-block>div{flex:1;min-width:0}
.pp-block .hint{margin:2px 0 0}
.pp-blockicon{font-size:20px;color:var(--accent-text)}
.pp-count{font-family:var(--mono);font-size:20px;text-align:right}
.pp-count small{display:block;font-family:var(--font);font-size:10px;font-weight:500;color:var(--muted)}
.pp-kv{display:flex;justify-content:space-between;gap:10px;padding:6px 0;border-bottom:1px solid var(--line);font-size:13px}
.pp-row{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;padding:8px 0;border-bottom:1px solid var(--line);font-size:13px;flex-wrap:wrap}
.pp-row:last-child{border-bottom:none}
.pp-list{margin:0;padding-left:28px}
.pp-list li{display:flex;justify-content:space-between;gap:10px;padding:6px 0;border-bottom:1px solid var(--line);font-size:13px}
.pp-list li::marker{color:var(--muted)}
.pp-runhead{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;margin:4px 0 12px}
.pp-runhead .kicker{font-size:11px;color:var(--muted-2)}
.pp-progress{height:8px;background:var(--panel-3);border-radius:5px;overflow:hidden;margin:10px 0 16px}
.pp-progress i{display:block;height:100%;background:linear-gradient(90deg,var(--accent),var(--accent-2))}
.pp-attention{border-color:color-mix(in srgb,var(--warn) 45%,var(--line))}
.pp-attention.bad{border-color:color-mix(in srgb,var(--bad) 45%,var(--line))}
.pp-changes,.pp-copies{list-style:none;margin:0;padding:0;max-height:60vh;overflow:auto}
.pp-changes>li,.pp-copies>li{padding:10px 0;border-bottom:1px solid var(--line);font-size:13px}
.pp-changes ul{margin:6px 0 0 22px;padding:0}
.pp-confirm{margin-top:10px;font-size:13px}
.pp-tz .frow-tight{max-width:420px}
@media (max-width:1100px){.pp-grid{grid-template-columns:minmax(0,1fr)}.pp-aside{position:static}}
@media (max-width:700px){
  .pp-presets{grid-template-columns:minmax(0,1fr)}
@media (max-width:560px){
  .pp-ddpanel,[data-dd="when"] .pp-ddpanel{position:fixed;left:0;right:0;bottom:0;top:auto;width:auto;max-width:none;max-height:78vh;border-radius:16px 16px 0 0;z-index:61}
  .pp-dd.open::before{content:"";position:fixed;inset:0;background:color-mix(in srgb,var(--ink) 45%,transparent);z-index:60}
  .pp-ddopt{min-height:44px}
  .pp-ddfoot{padding-bottom:calc(8px + env(safe-area-inset-bottom,0px))}
}
  .pp-filters{grid-template-columns:minmax(0,1fr)}
  .pp-table th:nth-child(3),.pp-table td:nth-child(3){display:none}
  .pp-runhead{flex-direction:column}
  .pp-page .stats{grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* The email preview is an email, not a console table: its cells wrap the way a mail app's do. */
#et_preview_html td{white-space:normal}
