/* Servatto Back Office — the same look as the Servatto Manager app.
 *
 * Tokens come from manager-app/src/theme.ts: dark here is the app, value for value; light is
 * the same family on warm paper, with brass deepened wherever it is text so it passes AA.
 * See docs/BACK-OFFICE-VISUAL-PLAN.md. Light or dark follows the device unless the person
 * picks one in the sidebar.
 *
 * The variable names --ground/--surface/--line/--ink/--muted/--faint/--accent
 * are the ones the older portal panels (kiosk, register, screens) are drawn
 * with, so those panels sit inside this page in the same colours. */

:root{
  /* surfaces */
  --ground:#F6F5F2;
  --surface:#FFFFFF;
  --raised:#FAF9F6;
  --hover:#F1EFEA;
  --line:#E7E3DB;
  /* the outline of something you can press or type into (3:1 on surface) */
  --line-strong:#B9B3A7;
  --control:var(--line-strong);
  /* text */
  --ink:#14171C;
  --muted:#4D5663;
  --faint:#6B7380;
  /* brand: brass, as in the app */
  --brand:#D8A657;
  --brand-ink:#8A5A12;
  --brand-soft:#F6ECDA;
  --primary:#D8A657;
  --primary-ink:#17120A;
  --link:#8A5A12;
  /* state */
  --accent:#1F8A57;
  --accent-soft:#E3F3EA;
  --accent-ink:#FFFFFF;
  --amber:#A86A08;
  --amber-soft:#FBF0DC;
  --red:#C4372D;
  --red-soft:#FBE9E7;
  --blue-soft:#E8F0F9;
  --chart:#C08A35;
  --chart-2:#E6D6B6;
  /* platforms: fixed everywhere, always with a word */
  --uber:#BC873F; --doordash:#B0608E; --square:#5795C9; --otter:#8A7CC7;
  /* depth: hairlines first, a whisper of lift in light only */
  --shadow:0 1px 0 rgba(20,23,28,.03),0 1px 3px rgba(20,23,28,.04);
  --shadow-pop:0 18px 48px rgba(20,23,28,.18),0 2px 6px rgba(20,23,28,.06);
  --scrim:rgba(8,9,12,.45);
  --focus:0 0 0 3px color-mix(in srgb,var(--brand) 38%,transparent);
  /* type: the app's scale, body one step smaller on a desktop */
  --font:"Instrument Sans",ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --fs-title:28px; --fs-h2:20px; --fs-h3:16px; --fs-body:15px; --fs-meta:14px; --fs-caption:13px;
  /* shape and rhythm */
  --radius:14px; --r-card:14px; --r-control:10px; --r-pill:999px;
  --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px; --sp-5:24px; --sp-6:32px;
  --ctl-h:40px;
  --side:252px;
  color-scheme:light;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --ground:#08090C; --surface:#131820; --raised:#1B222C; --hover:#1F2732; --line:#28303C; --line-strong:#6B7686;
    --ink:#F0F2F6; --muted:#B8C0CD; --faint:#9CA6B5;
    --brand:#D8A657; --brand-ink:#E3B874; --brand-soft:rgba(216,166,87,.14); --primary:#D8A657; --primary-ink:#17120A; --link:#E3B874;
    --accent:#63C08F; --accent-soft:rgba(99,192,143,.14); --accent-ink:#06120C; --amber:#E0A64B; --amber-soft:rgba(224,166,75,.14);
    --red:#E06B64; --red-soft:rgba(224,107,100,.14); --blue-soft:rgba(87,149,201,.16); --chart:#D8A657; --chart-2:#3A4452;
    --shadow:none; --shadow-pop:0 18px 48px rgba(0,0,0,.6); --scrim:rgba(0,0,0,.6); color-scheme:dark;
  }
}
:root[data-theme="dark"]{
  --ground:#08090C; --surface:#131820; --raised:#1B222C; --hover:#1F2732; --line:#28303C; --line-strong:#6B7686;
  --ink:#F0F2F6; --muted:#B8C0CD; --faint:#9CA6B5;
  --brand:#D8A657; --brand-ink:#E3B874; --brand-soft:rgba(216,166,87,.14); --primary:#D8A657; --primary-ink:#17120A; --link:#E3B874;
  --accent:#63C08F; --accent-soft:rgba(99,192,143,.14); --accent-ink:#06120C; --amber:#E0A64B; --amber-soft:rgba(224,166,75,.14);
  --red:#E06B64; --red-soft:rgba(224,107,100,.14); --blue-soft:rgba(87,149,201,.16); --chart:#D8A657; --chart-2:#3A4452;
  --shadow:none; --shadow-pop:0 18px 48px rgba(0,0,0,.6); --scrim:rgba(0,0,0,.6); color-scheme:dark;
}
@media (max-width:640px){:root{--fs-body:16px;--fs-title:24px;--ctl-h:44px}}

*{box-sizing:border-box}
html,body{margin:0;min-height:100%}
body{background:var(--ground);color:var(--ink);font:400 var(--fs-body)/1.5 var(--font);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
button,input,select,textarea{font:inherit;color:inherit}
a{color:var(--link);text-decoration:none}
a:hover{text-decoration:underline;text-underline-offset:2px}
:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
::selection{background:color-mix(in srgb,var(--brand) 35%,transparent)}
h1,h2,h3,h4{margin:0;font-weight:650;letter-spacing:-.01em;line-height:1.25}
h1{font-size:var(--fs-title);font-weight:700;letter-spacing:-.02em}
h2{font-size:var(--fs-h2);letter-spacing:-.015em}
h3{font-size:var(--fs-h3)}
h4{font-size:15px}
p{margin:0}
.mono,.num{font-variant-numeric:tabular-nums}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.hide{display:none!important}
.muted{color:var(--muted)}
.faint{color:var(--faint)}
.small{font-size:12.5px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.spread{display:flex;gap:12px;align-items:center;justify-content:space-between;flex-wrap:wrap}
.grow{flex:1 1 auto;min-width:0}
.stack{display:flex;flex-direction:column;gap:14px}
.grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.grid4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
@media (max-width:1100px){.grid4{grid-template-columns:repeat(2,minmax(0,1fr))}.grid3{grid-template-columns:repeat(2,minmax(0,1fr))}}
.split-21{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:14px}
.split-11{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:14px}
@media (max-width:1000px){.split-21,.split-11{grid-template-columns:1fr}}
@media (max-width:640px){.grid2,.grid3{grid-template-columns:1fr}.grid4{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.kpi .value{font-size:21px}.card{padding:14px 16px}.topbar h1{font-size:18px}}

/* ------------------------------------------------------------------ shell */
.app{display:grid;grid-template-columns:var(--side) minmax(0,1fr);min-height:100vh}
.side{position:sticky;top:0;height:100vh;overflow:auto;background:var(--surface);border-right:1px solid var(--line);display:flex;flex-direction:column;padding:16px 12px 14px;scrollbar-width:thin}
.biz{color:var(--ink);font-weight:500;display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-card);margin-bottom:14px;background:var(--raised);cursor:pointer;width:100%;text-align:left;min-height:56px}
.biz:hover{filter:none;border-color:var(--line-strong);background:var(--hover)}
.biz .mark{width:28px;height:28px;color:var(--brand);flex:0 0 auto}
.biz b{display:block;font-size:15px;font-weight:650;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;letter-spacing:-.01em}
.biz span{display:block;font-size:var(--fs-caption);color:var(--faint)}
.nav{display:flex;flex-direction:column;gap:2px}
.nav a,.nav button.navgroup{position:relative;display:flex;align-items:center;gap:12px;padding:9px 12px;min-height:40px;border-radius:var(--r-control);color:var(--muted);font-weight:500;font-size:15px;background:none;border:0;cursor:pointer;width:100%;text-align:left;text-decoration:none;transition:background-color .12s,color .12s}
.nav a:hover,.nav button.navgroup:hover{background:var(--hover);color:var(--ink);text-decoration:none;filter:none}
.nav a.on{background:var(--brand-soft);color:var(--ink);font-weight:650}
.nav a.on svg{color:var(--brand-ink)}
.nav button.navgroup.open{color:var(--ink)}
.nav svg{width:19px;height:19px;flex:0 0 auto;color:var(--faint)}
.nav .sub{display:flex;flex-direction:column;gap:1px;margin:2px 0 8px 22px;padding-left:9px;border-left:1px solid var(--line)}
.nav .sub a{font-weight:500;font-size:14px;padding:7px 10px;min-height:36px;color:var(--muted)}
.nav .sub a.on{color:var(--ink);font-weight:650;background:var(--brand-soft)}
.nav .sub a.on::before{content:"";position:absolute;left:-10px;top:8px;bottom:8px;width:2px;border-radius:2px;background:var(--brand)}
.nav .chev{margin-left:auto;transition:transform .15s;width:14px;height:14px}
.nav .open > .chev{transform:rotate(180deg)}
.nav hr{border:0;border-top:1px solid var(--line);margin:10px 6px}
.side-foot{margin-top:auto;padding-top:14px;display:flex;flex-direction:column;gap:8px;border-top:1px solid var(--line)}
.side-foot button,.side-foot a{justify-content:flex-start}
.side-foot .btn.ghost{border-color:var(--line);color:var(--muted);font-weight:500}
.side-foot .btn.ghost:hover{color:var(--ink)}
.main{min-width:0;display:flex;flex-direction:column}
.topbar{position:sticky;top:0;z-index:5;background:color-mix(in srgb,var(--ground) 86%,transparent);-webkit-backdrop-filter:saturate(1.4) blur(12px);backdrop-filter:saturate(1.4) blur(12px);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:12px;padding:12px clamp(16px,2.2vw,40px);min-height:68px}
.topbar h1{font-size:24px;line-height:1.2;letter-spacing:-.02em}
.topbar .crumb{color:var(--muted);font-weight:500}
.topbar .tools{margin-left:auto;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.menu-btn{display:none}
/* Fills the screen like Square: fluid up to very wide monitors, with padding that grows with the window. */
.page{padding:24px clamp(16px,2.2vw,40px) 80px;max-width:2200px;width:100%}
.banner{margin:14px clamp(16px,2.2vw,40px) 0;padding:12px 16px;border-radius:var(--r-card);background:var(--amber-soft);color:var(--ink);border:1px solid color-mix(in srgb,var(--amber) 35%,transparent)}
.banner.bad{background:var(--red-soft);border-color:color-mix(in srgb,var(--red) 35%,transparent)}
@media (max-width:900px){
  .app{grid-template-columns:1fr}
  .side{position:fixed;inset:0 auto 0 0;width:min(86vw,300px);z-index:30;transform:translateX(-102%);transition:transform .22s cubic-bezier(.2,.8,.2,1);box-shadow:var(--shadow-pop)}
  .app.nav-open .side{transform:none}
  .scrim{position:fixed;inset:0;background:var(--scrim);z-index:25}
  .menu-btn{display:inline-flex}
  .topbar{padding:10px 16px;min-height:60px}
  .page{padding:16px 16px 80px}
  .banner{margin:12px 16px 0}
}

/* ----------------------------------------------------------------- blocks */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-card);padding:20px 22px;box-shadow:var(--shadow)}
.card.flush{padding:0;overflow:hidden}
.card h2{font-size:18px}
.card h2 + p,.card h3 + p{color:var(--muted);margin-top:4px}
.card-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:16px 22px;border-bottom:1px solid var(--line)}
/* The app's section label: small caps, tracked out, quiet. */
.section-title{font-size:var(--fs-caption);font-weight:650;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin:26px 0 10px}
.kpi{display:flex;flex-direction:column;gap:4px}
.kpi .label{color:var(--muted);font-size:var(--fs-meta)}
.kpi .value{font-size:28px;font-weight:700;letter-spacing:-.025em;line-height:1.2;font-variant-numeric:tabular-nums}
.kpi .sub{font-size:var(--fs-caption);color:var(--faint)}
.delta{display:inline-flex;align-items:center;gap:3px;font-size:12.5px;font-weight:650;padding:2px 8px;border-radius:var(--r-pill);font-variant-numeric:tabular-nums}
.delta.up{background:var(--accent-soft);color:var(--accent)}
.delta.down{background:var(--red-soft);color:var(--red)}
.delta.flat{background:var(--hover);color:var(--muted)}
/* Status pills: always a word, colour only adds to it. */
.pill{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-caption);font-weight:600;line-height:18px;padding:2px 10px;border-radius:var(--r-pill);background:var(--hover);color:var(--muted);white-space:nowrap;border:1px solid transparent}
.pill.good{background:var(--accent-soft);color:var(--accent)}
.pill.warn{background:var(--amber-soft);color:var(--amber)}
.pill.bad{background:var(--red-soft);color:var(--red)}
.pill.info{background:var(--blue-soft);color:var(--ink)}
.dotlive{width:9px;height:9px;border-radius:50%;background:var(--faint);display:inline-block}
.dotlive.on{background:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
/* Empty states, as in the app: a quiet dashed frame, one bold line, one helpful line. */
.empty{padding:40px 24px;text-align:center;color:var(--muted);font-size:var(--fs-meta)}
.empty b{display:block;color:var(--ink);font-size:16px;font-weight:650;margin-bottom:4px}
.card > .empty:only-child,.page > .empty{border:1px dashed var(--line);border-radius:var(--r-card)}
.card > .empty:only-child{border:0}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:20px;overflow-x:auto;scrollbar-width:none}
.tabs a{padding:10px 14px;color:var(--muted);font-weight:600;font-size:15px;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;text-decoration:none;transition:color .12s,border-color .12s}
.tabs a.on{color:var(--ink);border-bottom-color:var(--brand)}
.tabs a:hover{color:var(--ink);text-decoration:none}

/* ----------------------------------------------------------------- tables */
.table-wrap{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:var(--fs-body)}
th{font-size:var(--fs-caption);font-weight:600;color:var(--muted);text-align:left;padding:10px 14px;border-bottom:1px solid var(--line);white-space:nowrap;background:var(--raised);letter-spacing:.01em}
td{padding:12px 14px;border-bottom:1px solid var(--line);vertical-align:middle}
tr:last-child td{border-bottom:0}
tr.click{cursor:pointer}
tr.click td{transition:background-color .1s}
tr.click:hover td{background:var(--hover)}
td.r,th.r{text-align:right;font-variant-numeric:tabular-nums}
td.nowrap{white-space:nowrap}
tfoot td{font-weight:650;background:var(--raised)}
.bar-cell{position:relative}
.bar-cell i{position:absolute;left:0;top:7px;bottom:7px;background:var(--brand-soft);border-radius:6px;z-index:0}
.bar-cell span{position:relative;z-index:1}

/* ------------------------------------------------------------------ forms */
label{display:block;font-size:var(--fs-caption);font-weight:600;color:var(--muted);margin-bottom:6px}
.field{margin-bottom:16px}
.field .hint{font-size:var(--fs-caption);color:var(--faint);margin-top:6px}
input[type=text],input[type=email],input[type=password],input[type=number],input[type=search],input[type=date],input[type=datetime-local],input[type=tel],input[type=url],input[type=time],select,textarea{
  width:100%;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--r-control);padding:9px 12px;outline:none;min-height:var(--ctl-h);transition:border-color .12s,box-shadow .12s}
input::placeholder,textarea::placeholder{color:var(--faint)}
textarea{min-height:96px;resize:vertical}
input:focus,select:focus,textarea:focus{border-color:var(--brand);box-shadow:var(--focus)}
input:disabled,select:disabled,textarea:disabled{background:var(--raised);color:var(--faint)}
input[type=checkbox],input[type=radio]{accent-color:var(--brand);width:18px;height:18px;cursor:pointer;vertical-align:middle}
.check{display:flex;gap:10px;align-items:flex-start;font-size:var(--fs-body);font-weight:500;color:var(--ink);cursor:pointer;margin-bottom:12px}
.check input{margin-top:2px}
.check small{display:block;color:var(--faint);font-weight:400;font-size:var(--fs-caption)}
.inline-inputs{display:flex;gap:8px;align-items:center}
.inline-inputs select,.inline-inputs input{width:auto}
.money-in{position:relative}
.money-in::before{content:"$";position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--faint)}
.money-in input{padding-left:24px}
/* Buttons: brass for the one thing to do, quiet outlines for the rest. */
button,.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;border-radius:var(--r-control);border:1px solid transparent;background:var(--primary);color:var(--primary-ink);font-weight:650;padding:8px 16px;min-height:var(--ctl-h);cursor:pointer;white-space:nowrap;text-decoration:none;font-size:var(--fs-body);letter-spacing:-.005em;transition:background-color .12s,border-color .12s,color .12s,opacity .12s}
button:hover,.btn:hover{filter:brightness(1.06);text-decoration:none}
button:active,.btn:active{opacity:.75}
button:disabled{opacity:.5;cursor:default;filter:none}
button.ghost,.btn.ghost{background:var(--surface);color:var(--ink);border-color:var(--line-strong)}
button.ghost:hover,.btn.ghost:hover{background:var(--hover);filter:none}
button.danger{background:var(--surface);color:var(--red);border-color:color-mix(in srgb,var(--red) 45%,var(--line))}
button.danger:hover{background:var(--red-soft);filter:none}
button.link{background:none;border:0;color:var(--link);padding:0;min-height:0;font-weight:600}
button.link:hover{background:none;text-decoration:underline;text-underline-offset:2px}
button.icon{padding:6px;min-height:36px;width:36px;background:var(--surface);color:var(--ink);border-color:var(--line-strong)}
button.icon:hover{background:var(--hover)}
button svg,.btn svg{width:17px;height:17px;flex:0 0 auto}
button.small,.btn.small{min-height:32px;padding:4px 12px;font-size:var(--fs-meta)}
.msg{font-size:var(--fs-meta);margin-top:8px;min-height:0}
.msg.good{color:var(--accent)}
.msg.bad{color:var(--red)}
/* Segmented control, as in the app: a padded track, the chosen one raised. */
.seg{display:inline-flex;gap:2px;padding:3px;border:1px solid var(--line);border-radius:var(--r-control);background:var(--raised)}
.seg button{background:none;color:var(--muted);border:1px solid transparent;border-radius:8px;min-height:32px;padding:4px 12px;font-weight:600;font-size:var(--fs-meta)}
.seg button:hover{background:var(--hover);color:var(--ink)}
.seg button.on{background:var(--surface);color:var(--ink);border-color:var(--line-strong);font-weight:650}
.select-sm{width:auto!important;min-height:36px!important;padding:6px 10px!important}

/* ------------------------------------------------------------------ drawer */
.sheet-scrim{position:fixed;inset:0;background:var(--scrim);z-index:40;display:flex;justify-content:flex-end;animation:fade .16s ease-out}
.sheet{background:var(--surface);width:min(560px,100%);height:100%;overflow:auto;box-shadow:var(--shadow-pop);display:flex;flex-direction:column;border-left:1px solid var(--line);animation:slidein .22s cubic-bezier(.2,.8,.2,1)}
.sheet-head{display:flex;align-items:center;gap:10px;padding:18px 22px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--surface);z-index:1}
.sheet-head h2{flex:1;font-size:var(--fs-h2)}
.sheet-body{padding:20px 22px 32px}
.sheet-foot{margin-top:auto;padding:14px 22px;border-top:1px solid var(--line);display:flex;gap:8px;justify-content:flex-end;position:sticky;bottom:0;background:var(--surface)}
@keyframes fade{from{opacity:0}}
@keyframes slidein{from{transform:translateX(24px);opacity:.6}}
@media (prefers-reduced-motion:reduce){.sheet,.sheet-scrim{animation:none}}
.dl{display:grid;grid-template-columns:auto 1fr;gap:8px 18px;font-size:var(--fs-body)}
.dl dt{color:var(--muted)}
.dl dd{margin:0;text-align:right;font-variant-numeric:tabular-nums}
.lines{display:flex;flex-direction:column}
.lines > div{display:flex;justify-content:space-between;gap:14px;padding:11px 0;border-bottom:1px solid var(--line)}
.lines > div:last-child{border-bottom:0}
.lines .mods{color:var(--faint);font-size:var(--fs-caption)}
.total-row{font-weight:700}

/* ------------------------------------------------------------------ charts */
.chart{width:100%;height:220px;display:block}
.chart text{fill:var(--faint);font-size:11px;font-family:inherit}
.chart .grid{stroke:var(--line)}
.legend{display:flex;gap:14px;font-size:12.5px;color:var(--muted);margin-top:6px}
.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px}

/* -------------------------------------------------------------- calendar */
.cal{display:grid;grid-template-columns:160px repeat(7,minmax(90px,1fr));border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--surface)}
.cal > div{border-bottom:1px solid var(--line);border-right:1px solid var(--line);padding:8px;min-height:54px;font-size:12.5px}
.cal .head{background:var(--raised);font-weight:620;color:var(--muted);min-height:0}
.cal .head.hol{color:var(--amber)}
.cal .who{font-weight:620;font-size:13.5px}
.shift{display:block;border-radius:6px;padding:4px 6px;margin-bottom:4px;background:var(--blue-soft);color:var(--ink);cursor:pointer;border:0;width:100%;text-align:left;font-weight:500;font-size:12px;min-height:0;white-space:normal}
.shift:hover{filter:none;outline:2px solid var(--chart)}
.shift.open{background:var(--accent-soft)}
.shift.edited{box-shadow:inset 3px 0 0 var(--amber)}
.cal-wrap{overflow-x:auto}

/* ------------------------------------------------------------------ items */
/* Item cards (the Square read-only menu); the editor's two columns are .item-grid below. */
.item-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px}
.item-card{align-items:stretch;justify-content:flex-start;border:1px solid var(--line);border-radius:10px;background:var(--surface);overflow:hidden;display:flex;flex-direction:column;cursor:pointer;text-align:left;padding:0;color:var(--ink);font-weight:500;min-height:0;white-space:normal}
.item-card:hover{filter:none;border-color:var(--line-strong)}
.item-card .ph{width:100%;aspect-ratio:4/3;background:var(--raised) center/cover no-repeat;display:flex;align-items:center;justify-content:center;color:var(--faint);font-size:28px;font-weight:700}
.item-card .bd{padding:10px 12px}
.item-card .bd b{display:block;font-size:14px;line-height:1.3}
.cat-list{display:flex;flex-direction:column;gap:2px}
.cat-list button{justify-content:space-between;background:none;color:var(--ink);border:0;font-weight:500;padding:7px 10px}
.cat-list button.on{background:var(--hover);font-weight:650}
.cat-list button:hover{background:var(--hover);filter:none}
.two-col{display:grid;grid-template-columns:230px minmax(0,1fr);gap:18px}
@media (max-width:900px){.two-col{grid-template-columns:1fr}}

/* ------------------------------------------------------------------ auth */
/* Sign-in, Square-style: a plain page, the mark top-left, one narrow column, one step per screen. */
.auth{min-height:100vh;display:grid;place-items:center;padding:96px 20px 40px;background:var(--surface)}
.auth .card{width:min(400px,100%);padding:0;border:0;box-shadow:none;background:transparent}
.auth .brand{position:fixed;top:20px;left:24px;display:flex;align-items:center;gap:8px;margin:0;font-weight:700;font-size:17px}
.auth .brand svg{width:26px;height:26px;color:var(--brand)}
.auth h1{font-size:28px;line-height:1.2;margin-bottom:8px;letter-spacing:-.01em}
.auth p.lead{color:var(--muted);margin-bottom:22px}
.auth .field input{min-height:48px;font-size:16px}
.auth button[type=submit]{width:100%;min-height:48px;margin-top:6px;border-radius:10px;font-size:15.5px}
.auth .alt{margin-top:18px;text-align:center;font-size:14px;color:var(--muted)}
.auth .who{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:2px 0 20px;padding:10px 14px;border:1px solid var(--line);border-radius:10px;font-weight:500}
.auth .who span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.auth .code-in{letter-spacing:.5em;font-size:22px!important;text-align:center;font-variant-numeric:tabular-nums}
.auth .trust{margin:2px 0 14px;font-size:14px}

/* --------------------------------------------- older portal panels, inside */
.legacy .venue-settings button,.legacy .kiosk button,.legacy details summary{font-size:13.5px}
.legacy h4{margin:18px 0 8px}
.legacy .dot{font-size:12.5px;color:var(--muted)}
.legacy details{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-top:10px}
.legacy details summary{cursor:pointer;font-weight:600}
.legacy .help-text,.legacy .why{color:var(--muted);font-size:13px}
.legacy code,.legacy .code{font-family:ui-monospace,Menlo,monospace}
.legacy .sources{margin-top:16px}
.legacy .srclist{display:flex;flex-direction:column;gap:8px;margin-top:8px}
.legacy .fields2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media (max-width:640px){.legacy .fields2{grid-template-columns:1fr}}

.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);background:var(--primary);color:var(--primary-ink);padding:10px 16px;border-radius:10px;z-index:60;box-shadow:var(--shadow);font-weight:500;max-width:calc(100vw - 32px)}
.toast.bad{background:var(--red);color:#fff}
.skeleton{background:linear-gradient(90deg,var(--hover),var(--raised),var(--hover));background-size:200% 100%;animation:sk 1.2s infinite;border-radius:8px;min-height:18px}
@keyframes sk{to{background-position:-200% 0}}
@media print{.side,.topbar,.menu-btn{display:none!important}.app{display:block}.card{box-shadow:none}}
.page-heading{min-width:0;flex:1}.context-label{display:block;background:none;color:var(--muted);padding:0;border:0;min-height:24px;font-size:12px;text-align:left;white-space:normal;font-weight:500}.topbar .tools{flex-shrink:1}.context-label:hover{color:var(--ink)}
@media(max-width:640px){.topbar{flex-wrap:wrap;gap:8px}.topbar .page-heading{min-width:0}.topbar .tools{flex-basis:100%;margin-left:0}.topbar h1{font-size:19px}.topbar .tools .row{flex-wrap:wrap}.sheet-foot{padding-bottom:max(14px,env(safe-area-inset-bottom))}.sheet input,.sheet select,.sheet textarea{font-size:16px}.sheet button{min-height:44px}}

/* Items & menus: list view, drag handles, switches, bulk bar */
.menu-rows{display:flex;flex-direction:column;gap:6px}
.menu-row{display:grid;grid-template-columns:28px 22px 44px 1fr auto auto auto;gap:10px;align-items:center;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:8px 12px}
.menu-row.dragging{opacity:.45}.menu-row.over{border-color:var(--link);box-shadow:0 0 0 2px var(--blue-soft)}
.menu-row .grip{cursor:grab;color:var(--muted);font-size:18px;user-select:none;text-align:center}
.menu-row .ph{width:44px;height:44px;border-radius:8px;background:var(--hover) center/cover no-repeat;display:flex;align-items:center;justify-content:center;font-weight:700;color:var(--muted)}
.menu-row .nm{min-width:0}.menu-row .nm b{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.menu-row .price{font-variant-numeric:tabular-nums;white-space:nowrap;min-width:70px;text-align:right}
.menu-row .price input{width:84px;text-align:right}
.menu-row.off{opacity:.72}.menu-row.off .nm b{text-decoration:line-through;text-decoration-color:var(--amber)}
/* Phone: each item is a small card — name first and whole, price and the sold-out switch under it.
   Dragging to reorder is a desktop job (it does not work with touch), so the handle goes. */
@media (max-width:640px){
  .menu-row{grid-template-columns:22px 44px minmax(0,1fr) auto auto;grid-template-areas:"pick ph nm nm nm" "pick ph price sz sw";gap:4px 10px;padding:10px 12px}
  .menu-row>[data-pick]{grid-area:pick;align-self:center}
  .menu-row .grip{display:none}
  .menu-row .ph{grid-area:ph;align-self:center}
  .menu-row .nm{grid-area:nm}
  .menu-row .nm b{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
  .menu-row .price{grid-area:price;text-align:left;min-width:0}
  .menu-row .sz{grid-area:sz;align-self:center}
  .menu-row .switch{grid-area:sw;justify-self:end;align-self:center;min-height:0}
}
.switch{position:relative;width:40px;height:22px;min-height:0;border-radius:999px;background:var(--line-strong);border:0;cursor:pointer;flex:none;padding:0}
.switch::after{content:"";position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;transition:left .15s}
.switch.on{background:var(--accent)}.switch.on::after{left:21px}
.bulk-bar{position:sticky;bottom:12px;display:flex;gap:8px;align-items:center;background:#14171C;color:#fff;border:1px solid #28303C;padding:10px 14px;border-radius:12px;margin-top:12px;box-shadow:0 8px 24px rgba(0,0,0,.2)}
.bulk-bar button{background:rgba(255,255,255,.14);color:#fff;border:0}.bulk-bar button.danger{background:var(--red)}
.cat-list button.dragging{opacity:.45}.cat-list button.over{outline:2px solid var(--link)}
.key-row{display:flex;gap:12px;align-items:center;padding:8px 0;border-bottom:1px solid var(--line)}.key-row code{background:var(--hover);padding:2px 6px;border-radius:6px}

/* Search (⌘K): the top-bar button and the palette it opens. */
.searchbtn{display:inline-flex;align-items:center;gap:8px;min-height:36px;padding:0 10px 0 12px;border-radius:10px;border:1px solid var(--line);background:var(--surface);color:var(--muted);font-weight:500;cursor:pointer;white-space:nowrap;margin-left:4px}
.searchbtn:hover{border-color:var(--line-strong);color:var(--ink)}
.searchbtn svg{width:16px;height:16px}
.searchbtn kbd,.palette kbd{font:600 11px/1 ui-monospace,SFMono-Regular,Menlo,monospace;padding:3px 5px;border-radius:5px;border:1px solid var(--line);background:var(--raised);color:var(--faint)}
.palette-scrim{position:fixed;inset:0;z-index:60;background:rgba(15,17,21,.38);display:flex;justify-content:center;align-items:flex-start;padding:10vh 16px 16px}
.palette{width:min(640px,100%);max-height:70vh;display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:0 24px 60px rgba(0,0,0,.25);overflow:hidden}
.palette-in{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--line)}
.palette-in svg{width:18px;height:18px;color:var(--faint);flex:0 0 auto}
.palette-in input{flex:1;border:0;outline:0;background:transparent;font-size:16px;padding:6px 0;box-shadow:none;min-width:0}
.palette-list{overflow:auto;padding:6px}
.palette-row{display:grid;grid-template-columns:auto minmax(0,auto) minmax(0,1fr);align-items:center;gap:10px;width:100%;text-align:left;padding:10px 10px;min-height:44px;border:0;border-radius:9px;background:transparent;color:var(--ink);cursor:pointer}
.palette-row b{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.palette-row .faint{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.palette-row.on{background:var(--hover)}
.palette-row.on .pill{background:var(--surface)}
.palette-row .pill{min-width:74px;justify-content:center}
.palette-empty{padding:18px 12px}
.palette-foot{padding:8px 14px;border-top:1px solid var(--line)}
@media (max-width:640px){.searchbtn span,.searchbtn kbd{display:none}.searchbtn{padding:0 10px}.palette-scrim{padding-top:12px}.palette-foot{display:none}.palette-row{grid-template-columns:auto minmax(0,1fr)}.palette-row .faint{grid-column:2}}

/* Menu → one item (full page). */
.item-page{padding-bottom:84px}
.item-grid{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:16px;align-items:start}
.item-grid .card h2{font-size:16px;margin-bottom:10px}
@media (max-width:1000px){.item-grid{grid-template-columns:minmax(0,1fr)}}
.item-photo img,.item-photo .tile{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:10px;border:1px solid var(--line);background:var(--raised)}
.item-photo .tile{display:flex;align-items:center;justify-content:center;font-size:34px;font-weight:700;color:var(--muted)}
.tbl-wrap{overflow-x:auto}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.chip{display:inline-flex;align-items:center;gap:4px;padding:4px 4px 4px 10px;border-radius:999px;background:var(--hover);border:1px solid var(--line);font-size:13px;font-weight:500}
.chip button{border:0;background:transparent;color:var(--muted);width:24px;height:24px;border-radius:999px;cursor:pointer;font-size:16px;line-height:1;padding:0}
.chip button:hover{background:var(--line);color:var(--ink)}
.picker{position:relative}
.picker-list{position:absolute;left:0;right:0;top:calc(100% + 4px);z-index:20;max-height:320px;overflow:auto;background:var(--surface);border:1px solid var(--line-strong);border-radius:10px;box-shadow:0 12px 30px rgba(0,0,0,.14);padding:4px}
.picker-list button{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 10px;width:100%;text-align:left;padding:8px 10px;min-height:40px;border:0;border-radius:8px;background:transparent;color:var(--ink);cursor:pointer}
.picker-list button.on,.picker-list button:hover{background:var(--hover)}
.picker-list .picker-sub{grid-column:1/-1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.picker-head{padding:8px 10px 4px;font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--faint)}
.modlist{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}
.modrow{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:var(--surface)}
.modrow .grow{min-width:0}.modrow .grow .faint{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.modrow .grip{cursor:grab;color:var(--faint);user-select:none}
.modrow.dragging{opacity:.5}.modrow.over{border-color:var(--link)}
.modrow .mini{display:flex;flex-direction:column;font-size:11px;color:var(--muted);gap:2px}
.modrow .mini input{width:64px;padding:6px 8px}
@media (max-width:640px){.modrow{flex-wrap:wrap}.modrow .grow{flex:1 1 60%}}
/* Phone: each size is a stacked row — size name across the top, price, SKU and barcode under it. */
@media (max-width:640px){
  .item-page [data-vars] thead{display:none}
  .item-page [data-vars],.item-page [data-vars] tbody{display:block}
  .item-page [data-vars] tr{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) 36px;gap:6px 8px;padding:10px 0;border-bottom:1px solid var(--line)}
  .item-page [data-vars] td{display:block;padding:0;border:0}
  .item-page [data-vars] td[data-label]::before{content:attr(data-label);display:block;font-size:11px;color:var(--muted);margin-bottom:2px}
  .item-page [data-vars] td:first-child{grid-column:1/3}
  .item-page [data-vars] td:nth-child(2){grid-column:1}.item-page [data-vars] td:nth-child(3){grid-column:2}.item-page [data-vars] td:nth-child(4){grid-column:1/3}
  .item-page [data-vars] td.rm{grid-column:3;grid-row:1;align-self:end}
  .item-page [data-vars] td input{width:100%;min-width:0;font-size:16px}
}
.savebar{position:fixed;left:var(--side);right:0;bottom:0;z-index:15;display:flex;align-items:center;gap:10px;padding:12px 28px;background:var(--surface);border-top:1px solid var(--line);box-shadow:0 -6px 18px rgba(0,0,0,.05)}
.savebar.dirty{background:var(--amber-soft)}
.savebar .grow{flex:1}
@media (max-width:900px){.savebar{left:0;padding:10px 16px}}
.item-photo.drop{border-radius:12px;outline:2px dashed transparent;outline-offset:3px;transition:outline-color .15s}
.item-photo.drop.over{outline-color:var(--link)}

/* Menu hours sheet. */
.hours-row{padding:12px 0 14px;border-bottom:1px solid var(--line);margin-bottom:10px}
.day-pills{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 10px}
.day-pills label{position:relative;cursor:pointer}
.day-pills input{position:absolute;opacity:0;inset:0;margin:0}
.day-pills span{display:inline-flex;align-items:center;justify-content:center;min-width:48px;min-height:36px;padding:0 10px;border-radius:999px;border:1px solid var(--line-strong);font-weight:600;font-size:13px;color:var(--muted);background:var(--surface)}
.day-pills input:checked+span{background:var(--primary);color:var(--primary-ink);border-color:var(--primary)}
.day-pills input:focus-visible+span{outline:2px solid var(--link);outline-offset:2px}

/* ---- Batch 2: one location switch, Devices badge, Square-like top bar ---- */
.loc-switch{display:inline-flex;align-items:center;gap:6px;min-height:28px;padding:3px 10px 3px 8px;margin:0 0 4px -2px;border-radius:999px;border:1px solid var(--line);background:var(--surface);color:var(--ink);font-size:13px;font-weight:500}
.loc-switch:hover:not(:disabled){border-color:var(--line-strong);background:var(--hover);filter:none}
.loc-switch:disabled{border-color:transparent;padding-left:0;cursor:default;color:var(--muted);opacity:1}
.loc-switch svg{width:15px;height:15px;color:var(--muted)}
.loc-switch .chev{width:13px;height:13px}
.loc-menu{position:absolute;z-index:60;min-width:240px;max-width:320px;padding:6px;border:1px solid var(--line);border-radius:12px;background:var(--surface);box-shadow:0 12px 32px rgba(0,0,0,.14)}
.loc-menu button{display:flex;width:100%;align-items:center;gap:10px;justify-content:flex-start;min-height:40px;padding:8px 10px;border-radius:8px;background:none;color:var(--ink);border:0;font-weight:500}
.loc-menu button:hover:not(:disabled),.loc-menu button:focus-visible{background:var(--hover);filter:none}
.loc-menu button[aria-checked=true]{font-weight:650}
.loc-menu button:disabled{color:var(--faint);cursor:not-allowed;opacity:1}
.loc-menu button svg{width:16px;height:16px;color:var(--muted)}
.loc-menu .tick{margin-left:auto;color:var(--ink)!important}
.loc-menu .dot-v{width:8px;height:8px;border-radius:50%;background:var(--accent);margin:0 4px}
.nav-badge{margin-left:auto;min-width:20px;height:20px;padding:0 6px;border-radius:999px;background:var(--amber-soft);color:var(--amber);font:700 11.5px/20px var(--font, inherit);font-style:normal;text-align:center}
.topbar .tools .btn,.topbar .tools button{border-radius:999px}

/* ---- Batch 3: Home ---- */
.home-head{margin-bottom:14px}
.dchips{gap:8px;flex-wrap:wrap}
.dchip-group{display:inline-flex;align-items:center;border:1px solid var(--line);border-radius:999px;background:var(--surface);overflow:hidden}
.dchip{display:inline-flex;align-items:center;gap:4px;min-height:32px;padding:0 12px;border:0;border-radius:999px;background:var(--surface);color:var(--ink);font-size:13.5px;font-weight:500}
button.dchip{min-width:34px;padding:0 10px;color:var(--muted);font-size:17px}
button.dchip:hover:not(:disabled){background:var(--hover);filter:none}
button.dchip:disabled{opacity:.35}
.dchip.on{font-weight:650}
.dchip.ghost{border:1px solid var(--line);font-weight:500}
.home-grid{display:grid;grid-template-columns:minmax(0,2fr) minmax(280px,1fr);gap:14px;align-items:start}
@media(max-width:1000px){.home-grid{grid-template-columns:1fr}}
.perf .label,.metric .label{color:var(--muted);font-size:13px;font-weight:500}
.perf .big{font-size:34px;font-weight:720;letter-spacing:-.02em;line-height:1.15;margin:2px 0 4px}
.metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;margin-top:16px;border-top:1px solid var(--line)}
.metric{display:flex;flex-direction:column;gap:2px;padding:14px 12px 4px 0}
.metric .value{font-size:19px;font-weight:680}
.metric .sub{font-size:12px;color:var(--faint)}
@media(max-width:640px){.metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.perf .big{font-size:28px}}
.attention h2{margin-bottom:10px}
.att-list{display:flex;flex-direction:column;gap:8px}
.att{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-radius:10px;border:1px solid var(--line);color:var(--ink);text-decoration:none}
.att:hover{background:var(--hover);text-decoration:none}
.att i{flex:0 0 auto;width:9px;height:9px;border-radius:50%;margin-top:6px;background:var(--amber)}
.att.bad i{background:var(--red)}
.att b{display:block;font-size:14px;font-weight:620}
.att span{display:block;font-size:12.5px;color:var(--muted)}
.att .att-go{margin-left:auto;white-space:nowrap;color:var(--link);font-weight:600;font-size:12.5px}
.all-good{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-radius:10px;background:var(--accent-soft)}
.all-good i{flex:0 0 auto;width:9px;height:9px;border-radius:50%;margin-top:6px;background:var(--accent)}
.all-good b{display:block}.all-good span{display:block;font-size:12.5px;color:var(--muted)}
.quick{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}
.quick a{display:flex;align-items:center;gap:8px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;color:var(--ink);font-weight:500;font-size:13.5px;text-decoration:none}
.quick a:hover{background:var(--hover);text-decoration:none}
.quick svg{width:17px;height:17px;color:var(--muted);flex:0 0 auto}

/* ---- Batch 4: list pages ---- */
th{background:transparent;font-size:12.5px;padding:12px 16px}
td{padding:14px 16px}
.card-head input[type=search]{border-radius:999px;padding-left:36px;min-height:38px;background:var(--surface) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%235B656C' stroke-width='2' stroke-linecap='round' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m20 20-3.5-3.5'/%3E%3C/svg%3E") no-repeat 12px center}
.card-head select.select-sm{border-radius:999px;min-height:38px;padding:0 30px 0 14px;font-weight:500}
.av{display:inline-grid;place-items:center;flex:0 0 auto;width:34px;height:34px;border-radius:50%;font-size:12.5px;font-weight:700;letter-spacing:.02em;background:hsl(var(--h) 60% 92%);color:hsl(var(--h) 45% 32%)}
:root[data-theme=dark] .av{background:hsl(var(--h) 30% 24%);color:hsl(var(--h) 60% 82%)}
@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .av{background:hsl(var(--h) 30% 24%);color:hsl(var(--h) 60% 82%)}}
.who-cell{display:flex;align-items:center;gap:12px}
.list-foot{margin-top:10px;gap:12px;flex-wrap:wrap}
/* Every table is a stack of cards on a phone; labels come from the column headings. */
@media (max-width:640px){
  .page .table-wrap{overflow:visible}
  .page .table-wrap table,.page .table-wrap tbody{display:block;width:100%}
  .page .table-wrap thead{display:none}
  .page .table-wrap tbody tr{display:grid;grid-template-columns:1fr 1fr;gap:8px 14px;padding:14px 16px;border-bottom:1px solid var(--line)}
  .page .table-wrap td{display:block;border:0;padding:0;min-width:0;overflow-wrap:anywhere;text-align:left}
  .page .table-wrap td:first-child{grid-column:1/-1}
  .page .table-wrap td[data-label]:not(:first-child)::before{content:attr(data-label);display:block;font-size:11.5px;color:var(--faint);font-weight:500;margin-bottom:1px}
  .page .table-wrap td:empty{display:none}
}

/* ---- Batch 5: own dialogs, full-screen editors ---- */
.dlg-scrim{position:fixed;inset:0;z-index:90;display:grid;place-items:center;padding:20px;background:rgba(15,18,22,.42)}
.dlg{width:min(440px,100%);background:var(--surface);border-radius:16px;padding:22px 22px 18px;box-shadow:0 24px 60px rgba(0,0,0,.25)}
.dlg h2{font-size:18px;line-height:1.3;margin-bottom:6px}
.dlg p{color:var(--muted);margin-bottom:6px}
.dlg .field{margin-top:12px}
.dlg-foot{display:flex;justify-content:flex-end;gap:8px;margin-top:18px}
.dlg-foot button{border-radius:999px;min-width:96px}
.sheet-full .sheet{width:100%!important;max-width:none;height:100%;border-radius:0}
.sheet-full .sheet-head{position:sticky;top:0;z-index:2;display:flex;align-items:center;gap:12px;padding:12px clamp(16px,3vw,40px);background:var(--surface);border-bottom:1px solid var(--line)}
.sheet-full .sheet-head h2{flex:1;font-size:20px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sheet-full .close-x{width:40px;height:40px;border-radius:50%;border:1px solid var(--line)}
.sheet-full .sheet-actions{display:flex;gap:8px;align-items:center}
.sheet-full .sheet-actions button,.sheet-full .sheet-actions .btn{border-radius:999px}
.sheet-full .sheet-actions .msg{margin:0 8px 0 0}
.sheet-full .sheet-body{width:min(760px,100%);margin:0 auto;padding:28px 20px 80px}
.sheet-full .sheet-actions [data-x]{display:none}
.nav .sub .sub-h{margin:10px 0 2px 10px;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--faint)}
.nav .sub .sub-h:first-child{margin-top:4px}

/* ---- Phone pass: top bar, tabs, summary tiles ---- */
@media (max-width:640px){
  /* Search sits top-right beside the title instead of on a row of its own. */
  .topbar{position:sticky;padding:10px 64px 10px 16px}
  .topbar .searchbtn{position:absolute;top:12px;right:14px;margin:0;min-height:40px;width:40px;justify-content:center;padding:0}
  .topbar .tools{gap:6px}
  .topbar .tools select{border-radius:999px;min-height:36px}
  /* Tabs scroll sideways; the fade says there are more. */
  .tabs{-webkit-mask-image:linear-gradient(90deg,#000 85%,transparent);mask-image:linear-gradient(90deg,#000 85%,transparent);margin-bottom:14px}
  .tabs a{flex:0 0 auto;padding:9px 10px}
  /* Summary tiles: smaller, and three across where there are three. */
  .kpi{padding:12px 14px;gap:2px}
  .kpi .value{font-size:20px}
  .kpi .sub{display:none}
  .grid3:has(> .kpi){grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
  .grid3:has(> .kpi) .kpi .label{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .grid3:has(> .kpi) .kpi .value{font-size:18px}
}
/* Menu: sold out with a timer (P1-8) and where an item is sold (P1-6). */
.choice-list{display:grid;gap:8px}
.choice{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;text-align:left;padding:12px 14px;height:auto;min-height:56px;white-space:normal}
.choice span{font-weight:400;font-size:13px;opacity:.8}
.row-notes{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:center;margin-top:3px}
.loc-row{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-top:8px}
.loc-row.off .loc-prices{opacity:.5}
.loc-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.loc-prices{display:flex;flex-wrap:wrap;gap:8px 14px;margin:8px 0}
.loc-prices .mini{display:flex;flex-direction:column;font-size:12px;color:var(--muted);gap:2px}
.loc-prices .mini input{width:96px}
.loc-foot{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.so-list{display:flex;flex-direction:column}
.so-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-top:1px solid var(--line);flex-wrap:wrap}
.so-row:first-child{border-top:0}
.so-row .grow{min-width:160px}
button.warn{color:var(--amber);border-color:var(--amber)}
@media (max-width:640px){.loc-prices .mini{flex:1 1 40%}.loc-prices .mini input{width:100%}.so-row .grow{flex-basis:100%}.so-row .pill{margin-right:auto}}
.mod-choices input[name=mname]{min-width:140px}

/* ======================================================= Servatto Crew (phase 1)
 * rs- = Team → Roster (office-roster.js), cw- = Team → Crew app (office-crew.js). */
.rs-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.rs-banner,.cw-banner{margin-bottom:14px;padding:10px 14px;border-radius:10px;background:var(--amber-soft);color:var(--ink);border:1px solid color-mix(in srgb,var(--amber) 30%,transparent)}
.rs-banner span,.cw-banner span{color:var(--muted)}
.rs-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.rs-week{display:flex;align-items:center;gap:8px}
.rs-week b{min-width:118px;text-align:center;font-size:15px}
.rs-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12.5px;color:var(--muted)}
.rs-legend i{display:inline-block;width:18px;height:12px;border-radius:3px;margin-right:6px;vertical-align:-1px;background:var(--raised);border:1px solid var(--line-strong);border-top:3px solid var(--chart)}
.rs-legend i.rs-k-draft{background:var(--surface);border-style:dashed}
.rs-legend i.rs-k-changed{border-color:var(--amber)}
.rs-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow)}
.rs-grid{table-layout:fixed;min-width:1000px;font-size:13px}
.rs-grid .rs-c-who{width:190px}
.rs-grid .rs-c-week{width:88px}
.rs-grid th,.rs-grid td{padding:6px;border-bottom:1px solid var(--line);border-right:1px solid var(--line);vertical-align:top;white-space:normal}
.rs-grid th:last-child,.rs-grid td:last-child{border-right:0}
.rs-grid thead th{font-size:12.5px;padding:9px 8px;color:var(--muted)}
.rs-grid thead th.rs-today{color:var(--ink);box-shadow:inset 0 -2px 0 var(--ink)}
.rs-now{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--link)}
.rs-grid tbody th,.rs-grid tfoot th{text-align:left;font-weight:inherit;font-size:13px;color:var(--ink);background:var(--surface);position:sticky;left:0;z-index:1;padding:10px}
.rs-who{display:flex;align-items:center;gap:10px;min-width:0}
.rs-who > span{display:flex;flex-direction:column;min-width:0}
.rs-who b,.rs-who .small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rs-open .rs-name{color:var(--brand)}
.rs-cell{background:var(--surface)}
.rs-grid td.rs-today{background:color-mix(in srgb,var(--blue-soft) 45%,var(--surface))}
.rs-shift{display:flex;flex-direction:column;align-items:flex-start;gap:1px;width:100%;min-height:0;padding:5px 8px;margin-bottom:4px;border-radius:8px;background:var(--raised);color:var(--ink);border:1px solid var(--line);border-top:3px solid var(--rs-c,var(--chart));font-weight:500;text-align:left;white-space:normal;cursor:pointer}
.rs-shift:hover{filter:none;background:var(--hover)}
.rs-shift:focus-visible,.rs-add:focus-visible{outline:2px solid var(--link);outline-offset:1px}
.rs-time{font-variant-numeric:tabular-nums;font-weight:650;font-size:13px}
.rs-role{font-size:12px;color:var(--muted);overflow-wrap:anywhere}
.rs-badge{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:1px 6px;border-radius:999px;background:var(--hover);color:var(--muted);margin-top:2px}
.rs-shift.rs-draft{background:var(--surface);border:1px dashed var(--line-strong);border-top:3px dashed var(--rs-c,var(--chart))}
.rs-shift.rs-changed{border-color:color-mix(in srgb,var(--amber) 55%,var(--line));border-top-color:var(--rs-c,var(--chart))}
.rs-shift.rs-changed .rs-badge{background:var(--amber-soft);color:var(--amber)}
.rs-open .rs-shift{border-left:1px dashed var(--brand);border-right:1px dashed var(--brand);border-bottom:1px dashed var(--brand)}
.rs-add{display:flex;width:100%;min-height:46px;padding:0;background:none;border:1px dashed var(--line);border-radius:8px;color:var(--faint);font-size:18px;font-weight:400}
.rs-add:hover{filter:none;background:var(--hover);color:var(--ink);border-color:var(--line-strong)}
.rs-add.rs-add-more{min-height:24px;font-size:14px;border-color:transparent;opacity:0}
.rs-cell:hover .rs-add-more,.rs-add-more:focus-visible{opacity:1;border-color:var(--line-strong)}
@media (hover:none){.rs-add.rs-add-more{opacity:1;border-color:var(--line)}}
.rs-week-cell b,.rs-grid tfoot td b,.rs-grid tfoot th b{display:block;font-variant-numeric:tabular-nums}
.rs-week-cell .small,.rs-grid tfoot .small{display:block;font-variant-numeric:tabular-nums}
.rs-grid tbody td.rs-week-cell{padding:10px 8px;background:var(--raised)}
.rs-grid tfoot td,.rs-grid tfoot th{background:var(--raised);padding:10px 8px;font-size:12.5px;border-bottom:0}
.rs-grid tfoot td.rs-week-cell{background:var(--hover)}

.cw-people{list-style:none;margin:0;padding:0}
.cw-person{display:grid;grid-template-columns:minmax(180px,1.3fr) minmax(120px,1fr) minmax(150px,1.2fr) auto;gap:12px;align-items:center;padding:10px 20px;border-bottom:1px solid var(--line)}
.cw-person:last-child{border-bottom:0}
.cw-phone{font-variant-numeric:tabular-nums;font-size:13.5px}
.cw-act{justify-self:end;text-align:right}
.cw-areas{display:flex;flex-direction:column;gap:12px;margin-top:14px}
.cw-area{border:1px solid var(--line);border-radius:10px;padding:14px 16px;background:var(--raised)}
.cw-area-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.cw-grid4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.cw-area .msg{margin:0}
.cw-url{overflow-wrap:anywhere;max-width:520px}
.cw-shops{border:0;padding:0;margin:0 0 14px}
.cw-shops legend{font-size:12.5px;font-weight:600;color:var(--muted);margin-bottom:8px;padding:0}
@media (max-width:900px){.cw-grid4{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:640px){
  .cw-person{grid-template-columns:1fr auto;padding:12px 16px}
  .cw-person .cw-phone{grid-column:1}
  .cw-person .cw-act{grid-column:2;grid-row:1}
  .rs-legend{display:none}
}

/* ======================================================= Servatto Crew (phase 2)
 * rq- = Team → Requests (office-requests.js) and the roster's availability stripes,
 * "N requests →" chip and add-shift warning (office-roster.js). */
.rq-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.rq-list{list-style:none;margin:0;padding:0}
.rq-card{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:12px;align-items:start;padding:14px 20px;border-bottom:1px solid var(--line)}
.rq-card:last-child{border-bottom:0}
.rq-ico{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:10px;background:var(--hover);color:var(--muted)}
.rq-ico svg{width:19px;height:19px}
.rq-ico-swap{background:var(--amber-soft);color:var(--amber)}
.rq-ico-claim,.rq-ico-offer{background:color-mix(in srgb,var(--brand) 16%,var(--surface));color:var(--brand)}
.rq-ico-drop,.rq-ico-clock_fix{background:var(--red-soft);color:var(--red)}
.rq-ico-leave{background:var(--blue-soft);color:var(--link)}
.rq-body{display:flex;flex-direction:column;gap:4px;min-width:0}
.rq-line{font-size:14px;line-height:1.45;overflow-wrap:anywhere}
.rq-line .muted{font-variant-numeric:tabular-nums}
.rq-note{font-size:13.5px;color:var(--ink);font-style:italic}
.rq-flags{display:flex;flex-wrap:wrap;gap:6px}
.rq-side{display:flex;flex-direction:column;align-items:flex-end;gap:8px;min-width:180px}
.rq-act{display:flex;gap:8px}
.rq-decline{display:flex;flex-direction:column;gap:6px;width:260px;max-width:100%}
.rq-decline input{width:100%}
.rq-decline .row{justify-content:flex-end;gap:8px}
.rq-decline .msg{margin:0}
.rq-chip{display:inline-flex;align-items:center;min-height:34px;padding:4px 12px;border-radius:999px;background:var(--amber-soft);color:var(--amber);font-weight:650;font-size:13px;white-space:nowrap;text-decoration:none;border:1px solid color-mix(in srgb,var(--amber) 35%,transparent)}
.rq-chip:hover{text-decoration:none;filter:brightness(.97)}
.rs-grid td.rq-limited{background:repeating-linear-gradient(135deg,var(--surface) 0 8px,var(--raised) 8px 16px)}
.rs-grid td.rq-limited.rs-today{background:repeating-linear-gradient(135deg,color-mix(in srgb,var(--blue-soft) 45%,var(--surface)) 0 8px,var(--raised) 8px 16px)}
.rq-avail{display:block;font-size:11.5px;font-weight:650;color:var(--muted);text-align:center;padding:2px 4px 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rq-k-leave .rq-avail{color:var(--link)}
.rq-limited .rs-add{background:color-mix(in srgb,var(--surface) 70%,transparent)}
.rs-legend i.rq-k-legend{border-top-width:1px;border-color:var(--line-strong);background:repeating-linear-gradient(135deg,var(--surface) 0 3px,var(--line) 3px 6px)}
.rq-warn{margin:0 0 8px;padding:8px 12px;border-radius:8px;background:var(--amber-soft);color:var(--amber);font-size:13px;font-weight:500}
@media (max-width:640px){
  .rq-card{grid-template-columns:auto minmax(0,1fr);padding:12px 16px}
  .rq-side{grid-column:1 / -1;align-items:stretch;min-width:0}
  .rq-side .pill{align-self:flex-start}
  .rq-act button{flex:1}
  .rq-decline{width:100%}
}

/* ======================================================= Servatto Crew (phase 3)
 * an- = Team → Announcements (office-announcements.js): the sent list, the compose sheet's
 * shop picker and the who-has-read detail sheet. */
.an-list{list-style:none;margin:0;padding:0}
.an-list li{border-bottom:1px solid var(--line)}
.an-list li:last-child{border-bottom:0}
.an-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:12px;align-items:start;width:100%;padding:14px 20px;background:none;border:0;border-radius:0;color:var(--ink);text-align:left;font:inherit;cursor:pointer;min-height:0}
.an-row:hover{background:var(--hover)}
.an-ico{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:10px;background:color-mix(in srgb,var(--brand) 16%,var(--surface));color:var(--brand)}
.an-ico svg{width:18px;height:18px}
.an-ico-lg{width:48px;height:48px;border-radius:14px;margin:0 auto 10px}
.an-ico-lg svg{width:24px;height:24px}
.an-body{display:flex;flex-direction:column;gap:3px;min-width:0}
.an-title{font-size:14.5px;line-height:1.4;overflow-wrap:anywhere}
.an-pin svg{width:12px;height:12px}
.an-first{font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.an-side{display:flex;flex-direction:column;align-items:flex-end;gap:6px;min-width:150px}
.an-count{font-size:13px;font-weight:620;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.an-count.good{color:var(--accent)}
.an-bar{display:block;width:120px;height:5px;border-radius:999px;background:var(--line);overflow:hidden}
.an-bar i{display:block;height:100%;background:var(--accent);border-radius:inherit}
.an-shops{border:0;margin:0 0 6px;padding:0}
.an-shops legend{font-size:13px;font-weight:600;color:var(--ink);padding:0;margin-bottom:2px}
.an-shops p{margin:0 0 8px}
.an-detail{display:flex;flex-direction:column;gap:12px}
.an-meta{margin:0}
.an-text{white-space:pre-wrap;overflow-wrap:anywhere;font-size:14.5px;line-height:1.55;padding:12px 14px;border-radius:10px;background:var(--raised);border:1px solid var(--line)}
.an-people-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px;margin-top:4px}
.an-people{list-style:none;margin:0;padding:0;border:1px solid var(--line);border-radius:10px}
.an-people li{display:flex;align-items:center;gap:10px;padding:9px 12px;border-bottom:1px solid var(--line)}
.an-people li:last-child{border-bottom:0}
.an-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px}
@media (max-width:640px){
  .an-row{grid-template-columns:auto minmax(0,1fr);padding:12px 16px}
  .an-side{grid-column:2;align-items:flex-start;min-width:0}
  .an-first{white-space:normal}
}

/* ======================================================= Servatto Crew (phase 4)
 * ck- = Team → Checklists (office-checklists.js): the Today record (one card per run, items
 * table, readings, photos; prints cleanly) and the Templates editor sheet. */
.ck-tools{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px;margin-bottom:16px}
.ck-tools .field{margin-bottom:0;min-width:180px}
.ck-sum{margin:0 0 8px auto}
.ck-bad-text{color:var(--red);font-weight:600}
.ck-ico{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:10px;background:color-mix(in srgb,var(--accent) 14%,var(--surface));color:var(--accent)}
.ck-ico-lg{width:48px;height:48px;border-radius:14px;margin:0 auto 10px}
.ck-starters{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:14px}
.ck-print-head{display:none}
.ck-run > summary{list-style:none;cursor:pointer}
.ck-run > summary::-webkit-details-marker{display:none}
.ck-run-head{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:12px;align-items:center;padding:14px 20px}
.ck-run-head:hover{background:var(--hover)}
.ck-chev{display:inline-flex;color:var(--faint);transition:transform .15s}
.ck-run[open] .ck-chev{transform:rotate(90deg)}
.ck-run[open] .ck-run-head{border-bottom:1px solid var(--line)}
.ck-run-main{display:flex;flex-direction:column;gap:2px;min-width:0}
.ck-run-side{display:flex;flex-direction:column;align-items:flex-end;gap:6px}
.ck-overdue{border-color:color-mix(in srgb,var(--red) 45%,var(--line))}
.ck-progress{display:flex;align-items:center;gap:8px;font-variant-numeric:tabular-nums;white-space:nowrap}
.ck-bar{display:block;width:90px;height:5px;border-radius:999px;background:var(--line);overflow:hidden}
.ck-bar i{display:block;height:100%;background:var(--accent);border-radius:inherit}
.ck-items-wrap{overflow-x:auto}
.ck-items{width:100%;border-collapse:collapse}
.ck-items td{vertical-align:top}
.ck-items tr:last-child td{border-bottom:0}
.ck-when{white-space:nowrap;font-variant-numeric:tabular-nums}
.ck-label{font-weight:500}
.ck-row-bad td{background:var(--red-soft)}
.ck-reading{font-variant-numeric:tabular-nums}
.ck-reading.bad{color:var(--red)}
.ck-done{display:inline-flex;align-items:center;gap:4px;color:var(--accent);font-weight:600}
.ck-missing{color:var(--amber);font-weight:600}
.ck-note{display:block;white-space:pre-wrap;overflow-wrap:anywhere;color:var(--ink)}
.ck-thumb{display:inline-block;vertical-align:middle;border-radius:8px;overflow:hidden;border:1px solid var(--line)}
.ck-thumb img{display:block;width:64px;height:64px;object-fit:cover}
.ck-grid{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr) minmax(0,1fr);gap:0 12px}
.ck-set{border:0;margin:0 0 12px;padding:0}
.ck-set legend{font-size:13px;font-weight:600;color:var(--ink);padding:0;margin-bottom:2px}
.ck-set p{margin:0 0 8px}
.ck-shops{display:flex;flex-wrap:wrap;gap:0 18px}
.ck-days{display:flex;flex-wrap:wrap;gap:6px}
.ck-chip{background:var(--surface);color:var(--muted);border:1px solid var(--line-strong);border-radius:999px;min-height:32px;padding:4px 12px;font-weight:500}
.ck-chip[aria-pressed=true]{background:var(--primary);color:var(--primary-ink);border-color:var(--primary)}
.ck-editor{list-style:none;margin:0 0 10px;padding:0;display:flex;flex-direction:column;gap:8px}
.ck-item{border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:var(--raised);display:flex;flex-direction:column;gap:8px}
.ck-item-top{display:grid;grid-template-columns:auto minmax(0,1fr) 110px auto;gap:8px;align-items:center}
.ck-n{font-size:12px;font-weight:650;color:var(--faint);min-width:18px;text-align:right}
.ck-moves{display:inline-flex;gap:4px}
.ck-moves button.icon{width:32px;min-height:32px;padding:4px}
.ck-item-opts{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;padding-left:26px}
.ck-item-opts .check{margin:0}
.ck-num{display:inline-flex;align-items:center;gap:6px}
.ck-num input[type=number]{width:84px}
.ck-num input[type=text]{width:120px}
.ck-item-more{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding-left:26px}
@media (max-width:640px){
  .ck-run-head{grid-template-columns:auto minmax(0,1fr);padding:12px 16px}
  .ck-run-side{grid-column:2;align-items:flex-start}
  .ck-grid{grid-template-columns:1fr}
  .ck-item-top{grid-template-columns:auto minmax(0,1fr);}
  .ck-item-top select,.ck-moves{grid-column:2}
  .ck-item-opts,.ck-item-more{padding-left:0;grid-template-columns:1fr}
  .ck-sum{margin-left:0}
}
@media print{
  .ck-tabs,.ck-tools,.ck-chev,.toast,.sheet-scrim{display:none!important}
  .ck-print-head{display:block;margin-bottom:12px}
  .ck-print-head h2{font-size:18px}
  .ck-run{break-inside:avoid;border:1px solid #999}
  .ck-run-head{border-bottom:1px solid #999!important}
  .ck-row-bad td{background:none}
  .ck-reading.bad,.ck-bad-text,.pill.bad{color:#b00020!important;font-weight:700}
  .ck-thumb img{width:80px;height:80px}
  .ck-items-wrap{overflow:visible}
}

/* ---------------------------------------------- Team › Stock ordering (sk-) */
.sk-tools{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px;margin-bottom:10px}
.sk-tools .field{margin-bottom:0;min-width:180px}
.sk-tools .sk-search{flex:1 1 240px;max-width:380px}
.sk-sum{margin:0 0 9px auto}
.sk-note{margin:0 0 12px}
.sk-bad{color:var(--red);font-weight:600}
.sk-ico{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:10px;background:var(--hover);color:var(--muted)}
.sk-ico-lg{width:52px;height:52px;border-radius:14px;margin-bottom:10px}
.sk-empty-acts{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-top:16px}
.sk-items td{padding:7px 12px}
.sk-items th{padding:9px 12px}
.sk-sup-row th{background:var(--surface);color:var(--ink);font-size:14px;font-weight:650;padding:14px 12px 8px;border-bottom:1px solid var(--line-strong)}
.sk-sup-row th svg{vertical-align:-3px;color:var(--muted);margin-right:4px}
.sk-cat-row td{background:var(--raised);color:var(--muted);font-size:12px;font-weight:620;text-transform:uppercase;letter-spacing:.04em;padding:5px 12px}
.sk-name{text-align:left;white-space:normal;font-weight:500}
.sk-code{font-variant-numeric:tabular-nums;color:var(--muted);font-size:13px}
.sk-shops{max-width:180px;color:var(--muted);font-size:13px}
.sk-par-h{max-width:110px;overflow:hidden;text-overflow:ellipsis}
input.sk-par{width:76px;min-height:32px;padding:4px 8px;text-align:right;font-variant-numeric:tabular-nums}
input.sk-par::placeholder{color:var(--faint)}
.sk-dirty td{background:var(--amber-soft)}
.sk-act{width:72px;text-align:right}
.sk-trunc{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sk-warn{display:flex;gap:6px;align-items:flex-start;color:var(--amber);margin:6px 0 0}
.sk-warn:empty{display:none}
.sk-warn svg{flex:0 0 auto;margin-top:2px}
.sk-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 12px}
.sk-set{border:0;margin:0 0 12px;padding:0}
.sk-set legend{font-size:13px;font-weight:600;color:var(--ink);padding:0;margin-bottom:2px}
.sk-set p{margin:0 0 8px}
.sk-shops-pick,.sk-set .sk-shops{display:flex;flex-wrap:wrap;gap:0 18px;max-width:none;color:var(--ink);font-size:14px}
.sk-pars{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:0 12px}
.sk-pars .sk-off{opacity:.45}
.sk-chips{display:inline-flex;flex-wrap:wrap;gap:4px}
.sk-chip svg{flex:0 0 auto}
.pill.bad.sk-chip{cursor:help}
.sk-order-sent{margin:6px 0 12px}
.sk-errors{background:var(--red-soft);border:1px solid color-mix(in srgb,var(--red) 30%,transparent);border-radius:10px;padding:10px 14px;margin-bottom:12px;font-size:13px}
.sk-errors b{color:var(--red)}
.sk-errors ul{margin:4px 0 0;padding-left:18px}
.sk-order-note{font-style:italic;color:var(--muted);margin:0 0 12px}
.sk-lines td,.sk-lines th{padding:8px 12px}
.sk-settings{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;align-items:start}
.sk-settings h2{font-size:16px}
.sk-settings form{margin-top:14px}
.sk-settings code{font-size:12px;background:var(--hover);padding:1px 5px;border-radius:5px}
.sk-ready{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}
.sk-steps{margin:12px 0 0;padding-left:20px;color:var(--muted);line-height:1.7}
.sk-steps b{color:var(--ink)}
.sk-settings .row .msg{margin-top:0}
input[type=file]{font-size:13px;max-width:100%}
.sk-result{margin-top:14px;padding:12px 14px;border-radius:10px;background:var(--accent-soft);font-size:13.5px}
.sk-result.warn{background:var(--amber-soft)}
.sk-result b{display:flex;gap:6px;align-items:center;color:var(--ink)}
.sk-result a{display:inline-block;margin-top:8px}
.sk-skipped{margin:8px 0 0;padding-left:18px;max-height:220px;overflow:auto}
.sk-skipped li{margin:2px 0}
@media (max-width:900px){
  .sk-settings{grid-template-columns:1fr}
}
@media (max-width:640px){
  .sk-grid{grid-template-columns:1fr}
  .sk-tools .field,.sk-tools .sk-search{min-width:0;flex:1 1 100%;max-width:none}
  .sk-sum{margin:0}
}

/* ---- Timecards (web/office-timecards.js): range report, a person's tiles, a shift's timeline ---- */
.tc-range{display:flex;align-items:center;gap:4px}
.tc-range .tc-step{width:36px;min-width:36px;padding:0;border-radius:50%;font-size:18px}
.tc-range-btn{border-radius:999px;gap:8px;padding:6px 14px;font-weight:500}
.tc-range-btn svg{width:16px;height:16px;flex:none}
.tc-range-btn .chev{width:14px;height:14px}
.tc-pop{position:absolute;z-index:80;display:grid;grid-template-columns:150px 290px;background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:0 18px 50px rgba(0,0,0,.18);overflow:hidden}
.tc-pop-presets{display:flex;flex-direction:column;padding:8px;border-right:1px solid var(--line);background:var(--raised)}
.tc-pop-presets button{background:none;color:var(--ink);justify-content:flex-start;font-weight:500;border-radius:8px;min-height:36px}
.tc-pop-presets button:hover{background:var(--hover)}
.tc-pop-presets button.on{background:var(--primary);color:var(--primary-ink)}
.tc-pop-cal{padding:12px 14px}
.tc-cal-head button{width:32px;min-width:32px;min-height:32px;padding:0;border-radius:50%}
.tc-cal{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;margin:8px 0}
.tc-cal i{font-style:normal;text-align:center;font-size:11.5px;color:var(--faint);font-weight:600;padding:4px 0}
.tc-cal button{background:none;color:var(--ink);min-height:34px;padding:0;border-radius:8px;font-weight:500;font-variant-numeric:tabular-nums}
.tc-cal button:hover:not(:disabled){background:var(--hover)}
.tc-cal button:disabled{color:var(--line-strong);cursor:default}
.tc-cal button.in{background:var(--blue-soft);border-radius:0}
.tc-cal button.end{background:var(--primary);color:var(--primary-ink)}
.tc-cal button.today:not(.end){box-shadow:inset 0 0 0 1px var(--line-strong)}
.tc-cal-inputs{display:flex;gap:8px}
.tc-cal-inputs label{flex:1;font-size:12px;color:var(--muted);display:flex;flex-direction:column;gap:2px}
.tc-cal-inputs input{min-height:34px;font-size:13px;width:100%}
.tc-pop-foot{display:flex;justify-content:flex-end;gap:8px;margin-top:10px}
.tc-pop-foot button{border-radius:999px}
.tc-kpis{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:14px}
.tc-attn{border-color:color-mix(in srgb,var(--amber) 35%,var(--line));background:linear-gradient(0deg,var(--surface),var(--surface)) padding-box}
.tc-attn h2{display:flex;align-items:center;gap:8px}
.tc-attn h2::before{content:"";width:9px;height:9px;border-radius:50%;background:var(--amber)}
.tc-attn ul{list-style:none;margin:10px 0 0;padding:0}
.tc-attn li{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 0;border-top:1px solid var(--line);flex-wrap:wrap}
.tc-attn li .who-cell{gap:10px}
.tc-attn-act button,.tc-attn-act .btn{border-radius:999px;min-height:32px;padding:4px 12px;font-size:13px}
.tc-note{background:var(--amber-soft);border-color:color-mix(in srgb,var(--amber) 30%,transparent)}
.tc-bar{display:inline-block;vertical-align:middle;width:80px;height:6px;border-radius:3px;background:var(--hover);overflow:hidden}
.tc-bar i{display:block;height:100%;background:var(--chart);border-radius:3px}
.tc-people tbody tr:hover{background:var(--hover)}
.tc-people .tc-chev{color:var(--faint);font-size:18px;width:28px}
.tc-people tfoot td{border-top:2px solid var(--line);padding-top:12px;padding-bottom:12px}
.tc-crumb a{font-weight:500}
.tc-person-head h2{font-size:20px}
.tc-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}
.tc-tile{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:8px;text-align:left;white-space:normal;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow);font-weight:400;min-height:0}
.tc-tile:hover{border-color:var(--line-strong);background:var(--surface);filter:none;transform:translateY(-1px)}
.tc-tile.attn{border-left:4px solid var(--amber)}
.tc-tile.live{border-left:4px solid var(--accent)}
.tc-tile-top{display:flex;justify-content:space-between;gap:8px;font-size:13px}
.tc-times{font-size:19px;font-weight:650;letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.tc-q{color:var(--red)}
.tc-strip{position:relative;height:22px;border-bottom:1px solid var(--line);margin-bottom:2px}
.tc-strip i{position:absolute;top:4px;height:8px;border-radius:4px;background:var(--ink);opacity:.85}
.tc-strip i.open{background:var(--accent);opacity:1}
.tc-strip span{position:absolute;bottom:-1px;font-size:10px;color:var(--faint);transform:translateY(100%)}
.tc-tile-nums,.tc-shift-nums{display:flex;gap:18px;margin-top:8px;font-variant-numeric:tabular-nums;font-weight:600}
.tc-tile-nums i,.tc-shift-nums i{display:block;font-style:normal;font-size:11.5px;color:var(--faint);font-weight:500}
.tc-tags{display:flex;flex-wrap:wrap;gap:5px}
.tc-shift h2{font-size:20px}
.tc-shift-times{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:12px}
.tc-big{font-size:28px;font-weight:680;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.tc-shift-nums{gap:28px;margin:12px 0 18px}
.tc-axis{margin-top:6px}
.tc-ax-track{position:relative;height:34px;border-radius:8px;background:var(--raised);border:1px solid var(--line)}
.tc-ax-shift{position:absolute;top:8px;height:16px;border-radius:5px;background:var(--ink)}
.tc-ax-shift.open{background:linear-gradient(90deg,var(--accent) 80%,transparent)}
.tc-ax-shift.forgot{background:repeating-linear-gradient(45deg,var(--red),var(--red) 4px,var(--red-soft) 4px,var(--red-soft) 8px);min-width:6px}
.tc-ax-break{position:absolute;top:8px;height:16px;background:repeating-linear-gradient(45deg,var(--amber),var(--amber) 3px,var(--amber-soft) 3px,var(--amber-soft) 6px);border-radius:3px;min-width:3px}
.tc-dot{position:absolute;top:50%;width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:50%;background:var(--surface);border:3px solid var(--ink)}
.tc-dot.break_start,.tc-dot.break_end{border-color:var(--amber)}
.tc-dot.flag{border-color:var(--red)}
.tc-dot.hollow{top:-9px;width:3px;height:14px;margin:0 0 0 -1.5px;border:0;border-radius:2px;background:var(--muted)}
.tc-ticks{position:relative;height:20px;margin-top:4px}
.tc-tick{position:absolute;transform:translateX(-50%);font-size:11px;color:var(--faint);white-space:nowrap}
.tc-tick:first-child{transform:none}
.tc-tick:last-child{transform:translateX(-100%)}
.tc-legend{display:flex;gap:14px;flex-wrap:wrap;margin-top:6px}
.tc-legend .k{display:inline-block;width:14px;height:8px;border-radius:3px;margin-right:5px;vertical-align:middle}
.tc-legend .k.shift{background:var(--ink)}
.tc-legend .k.brk{background:repeating-linear-gradient(45deg,var(--amber),var(--amber) 3px,var(--amber-soft) 3px,var(--amber-soft) 6px)}
.tc-legend .k.hollow{background:var(--muted);height:12px;width:3px;border-radius:2px}
.tc-note-line{margin-top:12px}
.tc-story{list-style:none;margin:12px 0 0;padding:0 0 0 22px;position:relative}
.tc-story::before{content:"";position:absolute;left:6px;top:6px;bottom:6px;width:2px;background:var(--line)}
.tc-story li{position:relative;padding:0 0 16px}
.tc-story li:last-child{padding-bottom:0}
.tc-story li::before{content:"";position:absolute;left:-21px;top:5px;width:12px;height:12px;border-radius:50%;background:var(--surface);border:3px solid var(--ink)}
.tc-story li.k-break_start::before,.tc-story li.k-break_end::before,.tc-story li.k-auto::before{border-color:var(--amber)}
.tc-story li.k-edit::before{border-color:var(--link)}
.tc-story li.k-request::before{border-color:var(--amber);background:var(--amber-soft)}
.tc-story li.k-forgot::before{border-color:var(--red)}
.tc-story li.k-manual::before{border-color:var(--muted)}
.tc-story .small{color:var(--muted);margin-top:2px;overflow-wrap:anywhere}
.tc-warn{color:var(--red)}
@media (max-width:1100px){.tc-kpis{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:640px){
  .tc-kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .tc-kpis .kpi:last-child{grid-column:1/-1}
  .tc-range{width:100%}
  .tc-range-btn{flex:1;min-width:0;justify-content:flex-start}
  .tc-range-btn > span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
  .tc-pop{position:fixed;left:0!important;right:0;bottom:0;top:auto!important;grid-template-columns:1fr;border-radius:16px 16px 0 0;max-height:90vh;overflow:auto}
  .tc-pop-presets{flex-direction:row;flex-wrap:wrap;gap:6px;border-right:0;border-bottom:1px solid var(--line)}
  .tc-pop-presets button{border:1px solid var(--line-strong);border-radius:999px;min-height:34px;padding:4px 12px}
  .tc-tiles{grid-template-columns:1fr}
  .tc-big{font-size:24px}
  .tc-shift-nums{gap:18px}
  .tc-attn li{align-items:flex-start}
  .page .tc-people td.tc-chev{display:none}
  .tc-people tfoot{display:none}
}

/* Sign-up plan picker (web/office-signup.js) */
.su-pick{display:flex;flex-direction:column;gap:8px;margin-bottom:14px}
.su-bundle{white-space:normal;line-height:1.35;display:flex;flex-direction:column;align-items:flex-start;gap:3px;text-align:left;width:100%;padding:12px 14px;border-radius:10px;border:1.5px dashed var(--brand);background:color-mix(in srgb,var(--brand) 8%,transparent);color:var(--ink);font:inherit;cursor:pointer}
.su-bundle b{font-size:15px}
.su-bundle span{font-size:13.5px;color:var(--muted);font-weight:500}
.su-bundle.on{border-style:solid;background:color-mix(in srgb,var(--brand) 16%,transparent)}
.su-bundle.on b::after{content:" ✓ applied";color:var(--accent);font-size:13px}
.su-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;cursor:pointer;background:var(--surface)}
.su-row > span{display:flex;flex-direction:column;gap:2px}
.su-row b{font-size:15px;font-weight:620;color:var(--ink)}
.su-row small{font-weight:500;color:var(--muted);font-size:12.5px}
.su-row input[type=checkbox]{width:20px;height:20px;flex:none}
.su-row select{width:auto;min-width:96px}
.su-sum{display:flex;flex-direction:column;gap:2px;padding:10px 12px;border-radius:10px;background:var(--raised);font-size:13.5px}
.su-sum span{color:var(--muted)}
.auth .su-next{width:100%;min-height:48px;border-radius:10px;font-size:15.5px}

/* ---- Visual batch 1: the Manager app's look (docs/BACK-OFFICE-VISUAL-PLAN.md) ---- */
/* Names in lists read as names, not as blue/brass links; they take the brand colour on hover. */
.menu-row .nm a,td a.name,.who-cell a{color:var(--ink)}
.menu-row .nm a:hover,td a.name:hover,.who-cell a:hover{color:var(--brand-ink)}
.nav a,.nav button.navgroup{font-weight:500}
.nav a.on{font-weight:600}
.nav .sub a{font-weight:450}
.perf .label,.metric .label{font-weight:500}
.perf .big{font-weight:700;letter-spacing:-.03em}
/* Toasts and the bulk bar sit on near-black in both themes, as the app's do. */
.toast{background:#14171C;color:#F0F2F6;border:1px solid #28303C;border-radius:var(--r-card);box-shadow:var(--shadow-pop)}
.toast.bad{background:var(--red);color:#fff;border-color:transparent}
