:root{
  --orange:#f96a00; --orange-dark:#d95700; --orange-soft:#ffe9d6;
  --black:#111; --ink:#1c1c1e;
  --muted:#6b7280; --line:#e5e7eb; --bg:#ffffff; --card:#fff; --red:#c62828;
  --reason:#b45309;
  --font-display:'Oswald','Arial Narrow',Arial,sans-serif;
  --field-h:48px; --field-radius:10px; --field-border:#cfd2d6;
  /* design-kit consolidation (Oct 21, 2026): recurring literals named.
     Every value below is copied from existing rules — rendering is
     unchanged; see goals/student-progress-tracker/files/
     design-kit-inventory-2026-10-21.md */
  --grey-soft:#f1f1f3; --grey-fill:#eee; --grey-mid:#555; --grey-faint:#8a8a8e; --grey-text:#9ca3af;
  --hairline:#f4f4f5; --panel:#fafafa; --panel-dim:#f4f4f4; --track:#ececf0; --dashed:#c9ccd1;
  --tint:#fff1e8; --note-bg:#fff6ec; --note-line:#f0dcb8; --peach-line:#f3c39a;
  --warn-bg:#fdf3d7; --warn-line:#f0d48a; --warn-ink:#92600a; --amber-line:#f3c48a;
  --danger-bg:#fdecec; --danger-line:#f0a3a3;
  --orange-ink:#9a3d00; --ok-ink:#1a7f37; --ok-ink-deep:#1d5c1a;
  --band:#141414; --on-dark-mut:#b9b9be; --on-dark-sub:#c9c9ce; --dark-line:#333338;
  --radius:14px; --radius-md:12px; --radius-lg:16px; --radius-sm:10px; --radius-xs:8px;
  --radius-pill:999px; --radius-track:99px;
  --shadow-card:0 1px 2px rgba(16,24,40,.05),0 4px 14px rgba(16,24,40,.05);
  --shadow-float:0 1px 2px rgba(16,24,40,.05),0 8px 24px rgba(16,24,40,.10);
}
*{box-sizing:border-box}
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;background:var(--bg);color:var(--ink);padding-bottom:calc(88px + env(safe-area-inset-bottom))}
a{color:var(--orange-dark)}
h1{font-family:var(--font-display);font-weight:600;letter-spacing:.01em;font-size:1.55rem;margin:.4rem 0 .8rem}
h2{font-family:var(--font-display);font-weight:600;text-transform:uppercase;letter-spacing:.03em;font-size:1.15rem;margin:.2rem 0 .6rem}
h3{font-size:1rem;margin:.9rem 0 .4rem}
.muted{color:var(--muted)} .small{font-size:.82rem} .center{text-align:center}
.wrap{max-width:760px;margin:0 auto;padding:14px 14px 48px}

/* header: slim, white, logo left shown whole, identity block right */
.topbar{background:var(--card);color:var(--ink);padding:8px 14px;display:flex;justify-content:space-between;align-items:center;gap:10px;border-bottom:3px solid var(--orange);position:sticky;top:0;z-index:20}
.brand{display:flex;align-items:center;gap:10px;min-width:0}
.logo{height:38px;width:auto;flex:none}
.brand-text{min-width:0}
.brand-name{font-family:var(--font-display);font-weight:600;letter-spacing:.01em;font-size:1rem;line-height:1.25;white-space:nowrap}
.brand-sub{font-size:.7rem;color:var(--muted);line-height:1.25}
.identity{flex:none;text-align:left}
.identity-name{font-weight:700;font-size:.9rem;line-height:1.25}
.identity-rank{display:flex;align-items:center;gap:5px;font-size:.8rem;color:var(--orange);line-height:1.3}
.identity-dot{color:var(--muted)}
@media (max-width:480px){ .brand-sub{white-space:normal} .brand-name{white-space:normal} }

/* bottom tab bar — icon over label, soft orange pill on the active icon */
.tabbar{position:fixed;left:0;right:0;margin:0 auto;width:min(608px,calc(100% - 24px));bottom:calc(6px + env(safe-area-inset-bottom));background:var(--card);border:1px solid var(--line);border-radius:20px;box-shadow:var(--shadow-float);display:flex;z-index:30;padding:5px 12px 6px}
.tabbar a{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;gap:1px;text-align:center;color:var(--muted);text-decoration:none;padding:2px 2px 0;font-size:.8rem;font-weight:600}
.tab-icon{display:inline-flex;align-items:center;justify-content:center;padding:3px 16px;border-radius:var(--radius-pill);line-height:0}
.tab-icon svg{width:22px;height:22px}
.tabbar a.active{color:var(--orange-dark)}
.tabbar a.active .tab-icon{background:var(--orange-soft);color:var(--orange-dark)}
@media (max-width:560px){
  .tabbar{padding:5px 6px 6px}
  .tabbar a{font-size:.7rem;padding:2px 0 0}
  .tab-icon{padding:3px 9px}
  .tab-icon svg{width:20px;height:20px}
}

/* belt swatches — Muse app spec: 28x14 standard swatch, 1px border
   rgba(0,0,0,.5), radius 3px; stripe band at 55%-82%; Dan gold bars
   #f5b81d, 1.5px wide, 1px gap, grouped at the right end (1.5px inset) */
.belt{position:relative;display:inline-block;width:28px;height:14px;border-radius:3px;border:1px solid rgba(0,0,0,.5);flex:none;vertical-align:middle;overflow:hidden}
.belt-band{position:absolute;top:0;bottom:0;left:55%;width:27%}
.belt-dans{position:absolute;top:0;bottom:0;right:1.5px;display:flex;gap:1px}
.belt-dan{width:1.5px;background:#f5b81d;display:block}
.belt-skinny{width:36px;height:11px;border-radius:2px;border-color:rgba(0,0,0,.6)}
.belt-skinny .belt-dans{right:2px;gap:1.5px}
.belt-skinny .belt-dan{width:2px}
@media (min-width:480px){.belt-skinny{width:40px;height:12px}}

/* cards, buttons, forms */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px;margin:0 0 14px;box-shadow:var(--shadow-card)}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:14px}
.cards .card{margin:0}
.stat-grid{grid-template-columns:1fr 1fr}
.stat{text-align:left}
.stat-num{font-size:2.1rem;font-weight:800;line-height:1.05;color:var(--orange)}
.stat-num.small-stat{font-size:.95rem;padding-top:.45rem}
.stat-label{color:var(--muted);font-size:.78rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;margin-top:5px}
.alert-card{border-color:var(--amber-line);background:#fff8ef}

/* home: greeting, section headers, sync line */
.greeting{text-transform:uppercase;font-size:1.9rem;margin:.2rem 0 .3rem}
.greet-title{color:var(--orange)}
.date-line{display:flex;align-items:center;gap:10px;margin:0 0 10px;flex-wrap:wrap}
.date-actions{margin-left:auto}
.date-actions .org-allrow{margin:0}
.date-tile{width:46px;height:46px;flex:none;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden;text-align:center;box-shadow:0 1px 2px rgba(16,24,40,.06);display:flex;flex-direction:column}
.date-tile-month{background:var(--orange);color:#fff;font-size:.55rem;font-weight:800;letter-spacing:.14em;padding:2px 0}
.date-tile-day{font-family:var(--font-display);font-weight:600;font-size:1.25rem;color:var(--black);display:flex;flex:1;align-items:center;justify-content:center}
.date-text{display:flex;flex-direction:column}
.date-weekday{font-weight:700;font-size:.98rem;line-height:1.25}
.date-full{color:var(--muted);font-size:.85rem;line-height:1.25}
.section-title{font-size:1.35rem;margin:22px 0 8px}
.section-sub{color:var(--muted);font-size:.78rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;margin:-4px 0 10px}
.section-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.section-head .section-title{margin-bottom:8px}
.section-link{color:var(--orange-dark);font-weight:600;text-decoration:none;white-space:nowrap}

/* needs attention rows */
.attn-list{list-style:none;margin:0;padding:0}
.attn-list li{padding:10px 0;border-bottom:1px solid var(--line)}
.attn-list li:first-child{padding-top:2px}
.attn-list li:last-child{border-bottom:none;padding-bottom:2px}
.attn-row{display:flex;gap:12px;align-items:flex-start;text-decoration:none;color:var(--ink)}
.avatar{width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.9rem;color:#44403c;flex:none}
.attn-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.attn-name{font-weight:700}
.attn-meta{color:var(--muted);font-size:.85rem;display:flex;align-items:center;gap:6px}
.attn-reason{color:var(--reason);font-size:.92rem}
.mini{display:inline-flex;flex:none}
.mini .belt{width:28px;height:14px}

/* the starting line — one tappable row */
a.startline-row{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--ink)}
.startline-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.startline-title{font-weight:700;font-size:1.02rem}
.startline-sub{color:var(--muted);font-size:.9rem}
.chevron{font-size:1.7rem;line-height:1;color:var(--muted);flex:none}

/* top 5 — points */
.top5{list-style:none;margin:0;padding:0}
.top5 li{display:flex;gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line)}
.top5 li:first-child{padding-top:2px}
.top5 li:last-child{border-bottom:none;padding-bottom:2px}
.top5-num{font-family:var(--font-display);font-size:1.5rem;font-weight:600;color:var(--orange);width:1.7rem;text-align:center;flex:none}
.top5-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.top5-name{font-weight:700;color:var(--ink);text-decoration:none}
.top5-meta{color:var(--muted);font-size:.85rem;display:flex;align-items:center;gap:6px}
.top5-pts{font-weight:800;flex:none}

/* recent activity feed */
.feed{list-style:none;margin:0;padding:0}
.feed li{display:flex;gap:10px;align-items:flex-start;padding:9px 0;border-bottom:1px solid var(--line)}
.feed li:first-child{padding-top:2px}
.feed li:last-child{border-bottom:none;padding-bottom:2px}
.feed-badge{background:var(--grey-soft);color:#55575c;border-radius:var(--radius-pill);padding:3px 9px;font-size:.66rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;flex:none;margin-top:2px}
.feed-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.feed-date{color:var(--muted);font-size:.83rem}

/* app menu rows */
.menu-row{display:block;width:100%;padding:13px 14px;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--card);color:var(--ink);text-decoration:none;font-weight:600;font-size:.95rem;text-align:left;cursor:pointer}
button.menu-row{font-family:inherit}
.notif-card{border:1px solid var(--line);border-radius:var(--radius-md);background:var(--card);padding:13px 14px}
.notif-title{font-weight:700;font-size:.95rem;color:var(--ink)}
.notif-card .muted{margin:4px 0 10px;font-size:.88rem}
.notif-actions{display:flex;flex-wrap:wrap;gap:8px}
.btn{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:10px 16px;border-radius:var(--radius-sm);border:1px solid transparent;font-size:.95rem;font-weight:600;cursor:pointer;text-decoration:none;background:var(--grey-fill);color:var(--ink)}
.btn-orange{background:var(--orange);color:#fff}
.btn-orange:active{background:var(--orange-dark)}
.btn-dark{background:var(--black);color:#fff}
.btn-light{background:var(--card);border-color:var(--line);color:var(--ink)}
.btn-danger{background:var(--card);border-color:var(--red);color:var(--red)}
.btn-small{min-height:36px;padding:6px 10px;font-size:.82rem}
.btn-block{width:100%}
.badge-count{background:var(--orange);color:#fff;font-size:.72rem;font-weight:800;border-radius:var(--radius-pill);padding:1px 7px;margin-left:4px}
.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.row input[type="text"],.row input[type="search"]{flex:1;min-width:140px}
.wrap-row{gap:12px;margin-bottom:12px}
.stack{display:flex;flex-direction:column;gap:12px}
/* A button that is a direct child of a .stack sizes to its
   CONTENT, never stretched by the column's default align
   (Sebastian, Oct 19, late: "Add note" / "Link student" rendered
   as full-width slabs inside profile cards). Buttons that truly
   want full width say so with .btn-block (width:100% still
   wins over align-self) — login, kiosk setup, hero CTAs. */
.stack>.btn{align-self:flex-start}
label{display:flex;flex-direction:column;gap:5px;font-size:.9rem;font-weight:600}

/* shared field tokens — date inputs and sibling selects sized identically,
   hardened for iOS WebKit (which otherwise inflates date inputs) */
input,select,textarea{font:inherit;font-weight:400;padding:11px;border:1px solid var(--field-border);border-radius:var(--field-radius);background:var(--card);min-height:var(--field-h)}
textarea{min-height:auto}
input.num{width:86px;min-height:40px}
select{height:var(--field-h)}
input[type="date"]{-webkit-appearance:none;appearance:none;height:var(--field-h);line-height:var(--field-h);padding-top:0;padding-bottom:0}
input[type="date"]::-webkit-date-and-time-value{text-align:left;line-height:var(--field-h);margin:0;min-height:var(--field-h)}
input[type="date"]::-webkit-datetime-edit{line-height:var(--field-h);padding:0}
input[type="date"]::-webkit-calendar-picker-indicator{margin:0;padding:0}
.inline{display:inline}
form.inline{display:inline}
ul.plain{list-style:none;margin:0;padding:0}
ul.plain li{padding:7px 0;border-bottom:1px solid var(--line)}
ul.plain li:last-child{border-bottom:none}
ol.leaders{margin:0;padding-left:1.3rem}
ol.leaders li{padding:6px 0;border-bottom:1px solid var(--line)}
ol.leaders li:last-child{border-bottom:none}
.pts{float:right;font-weight:700}

/* flashes */
.flash{border-radius:var(--radius-sm);padding:11px 14px;margin:0 0 12px;font-size:.92rem}
.flash-ok{background:#e9f9ee;border:1px solid #9fd8ae}
.flash-error{background:var(--danger-bg);border:1px solid var(--danger-line)}
.flash-warn{background:#fff4e0;border:1px solid var(--amber-line)}
.code-big{font-size:1.6rem;font-weight:800;letter-spacing:2px;margin:6px 0}

/* segmented control — the Pickup board pill design (Sebastian,
   Oct 19: everywhere, no more orange rectangle): soft grey rounded
   track, active = white pill + subtle shadow + orange text. Values
   copied from .asp-seg/.asp-pill in after_school.html. */
.segmented{display:flex;gap:2px;background:var(--grey-soft);border:1px solid var(--line);border-radius:var(--radius-pill);padding:5px;margin-bottom:12px}
.segmented a{flex:1;min-width:0;overflow:hidden;background:transparent;border-radius:var(--radius-pill);padding:7px 2px;font-weight:600;font-size:.82rem;cursor:pointer;color:var(--ink);white-space:nowrap;text-align:center;text-decoration:none}
.segmented a.active{background:var(--card);box-shadow:0 2px 8px rgba(0,0,0,.08);color:var(--orange-dark)}

/* students — names never truncate */
.student-list{display:flex;flex-direction:column;gap:10px;margin-bottom:16px}
.student-row{display:flex;gap:10px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-md);padding:13px 14px;text-decoration:none;color:var(--ink);align-items:flex-start}
a.student-row{align-items:flex-start}
.sr-link{display:flex;gap:12px;flex:1;min-width:0;text-decoration:none;color:var(--ink);align-items:flex-start}
.sr-belt{padding-top:2px}
.sr-main{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}
.sr-name{font-weight:700;white-space:normal;overflow:visible;text-overflow:clip;word-break:break-word}
.sr-sub{color:var(--muted);font-size:.83rem;white-space:normal}
.sr-flag{color:var(--red);font-size:.8rem}
.sr-side{display:flex;flex-direction:column;align-items:flex-end;gap:4px;flex:0 1 auto;min-width:0;max-width:55%}
.sr-side .sr-sub{overflow-wrap:anywhere;text-align:right}
.sr-more{flex:none;background:var(--grey-soft);border:1px solid var(--line);border-radius:9px;min-width:44px;min-height:44px;font-size:1rem;cursor:pointer;color:var(--ink)}
.dots{display:flex;gap:4px}
.dot{width:11px;height:11px;border-radius:50%;border:2px solid var(--orange);display:inline-block}
.dot.on{background:var(--orange)}
.badge-ready{background:var(--orange);color:#fff;font-weight:700;font-size:.74rem;padding:3px 8px;border-radius:var(--radius-pill)}
.badge{display:inline-block;background:var(--black);color:#fff;font-size:.74rem;padding:3px 9px;border-radius:var(--radius-pill);margin:2px 3px 2px 0}
.filter-panel{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-md);padding:14px;margin:10px 0 14px}
.back-pill{display:inline-flex;align-items:center;gap:6px;min-height:40px;background:var(--black);color:#fff;text-decoration:none;font-weight:600;font-size:.9rem;padding:8px 14px;border-radius:var(--radius-pill);margin-bottom:10px}
.back-pill .back-arrow{color:var(--orange);font-weight:800}
.chips{display:flex;gap:6px;flex-wrap:wrap;margin-top:4px}
.chip{display:inline-block;background:var(--grey-soft);border:1px solid var(--line);color:var(--ink);font-size:.74rem;font-weight:600;padding:3px 8px;border-radius:var(--radius-pill)}
.chip-orange{background:#fff1e3;border-color:var(--amber-line)}
.chip-red{background:var(--danger-bg);border-color:var(--danger-line);color:var(--red)}

/* profile */
.profile-chips{display:flex;align-items:center;gap:10px;color:var(--muted);margin:.2rem 0 .8rem}
.stripe-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;margin-bottom:10px}
.stripe-box{border:1px solid var(--line);border-radius:var(--radius-md);padding:12px;text-align:center}
.stripe-name{font-weight:700;margin-bottom:6px}
.stripe-on{color:var(--orange-dark);font-weight:700}
.ledger li.voided{opacity:.55;text-decoration:line-through}
.note-deleted{color:var(--muted)}
details.card summary{cursor:pointer;padding:2px 0}
.setting-row{justify-content:space-between;border-bottom:1px solid var(--line);padding:8px 0}
.setting-row:last-child{border-bottom:none}
.setting-label{flex:1;font-size:.92rem}

/* achievements */
.ach-list li{display:flex;align-items:center;gap:10px}
.ach-mark{font-weight:800;width:18px;text-align:center;flex:none}
.ach-earned .ach-mark{color:var(--orange-dark)}
.ach-label{flex:1}
.ach-earned .ach-label{font-weight:600}

/* belt journey strip */
.journey{display:flex;flex-wrap:wrap;gap:8px 10px;margin:8px 0 4px}
.journey-step{display:flex;flex-direction:column;align-items:center;gap:3px;width:52px;text-align:center}
.journey-step .belt{width:46px}
.journey-label{font-size:.62rem;color:var(--muted);line-height:1.15;white-space:normal}
.journey-past{opacity:.9}
.journey-current .belt{outline:3px solid var(--orange);outline-offset:1px;width:54px;height:17px}
.journey-current .journey-label{color:var(--orange-dark);font-weight:700}
.journey-next{opacity:.75}
.journey-next .belt{border-style:dashed}
.journey-future{opacity:.45}

/* tables */
table.board{width:100%;border-collapse:collapse;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-md);overflow:hidden;margin-bottom:16px}
table.board th,table.board td{padding:11px 10px;text-align:left;border-bottom:1px solid var(--line);font-size:.92rem;vertical-align:top}
table.board tr:last-child td{border-bottom:none}
table.board tr.top1 td{background:#fff3e6;font-weight:600}
table.board tr.top2 td,table.board tr.top3 td{background:var(--panel)}

/* pyramid / rank breakdown — thin progress track per rank row */
.pyramid{margin-bottom:10px}
.pyr-program{margin:14px 0 6px}
.card .pyr-program:first-child{margin-top:0}
.pyr-row{display:flex;align-items:center;gap:10px;padding:4px 0;font-size:.88rem}
.pyr-rank{flex:0 0 172px;min-width:0;color:var(--ink);display:flex;align-items:center;gap:7px}
.pyr-track{flex:1;height:8px;background:var(--track);border-radius:var(--radius-track);overflow:hidden}
.pyr-fill{display:block;height:100%;background:var(--orange);border-radius:var(--radius-track);min-width:3px}
.pyr-n{font-weight:600;white-space:nowrap;min-width:76px;text-align:right}

/* stripe celebration overlay */
.celebrate{position:fixed;inset:0;background:rgba(255,255,255,.72);display:flex;align-items:center;justify-content:center;z-index:60}
.celebrate-card{background:var(--card);border:2px solid var(--orange);border-radius:18px;padding:26px 30px;text-align:center;box-shadow:0 12px 40px rgba(0,0,0,.18);animation:celebrate-pop 1.6s ease-in-out}
.celebrate-belt .belt{width:108px;height:34px;border-width:2px;border-color:rgba(0,0,0,.6);border-radius:6px}
.celebrate-belt .belt-dans{display:none}
.celebrate-set .belt,.celebrate-ready .belt{width:136px;height:42px}
.celebrate-ready .belt{border-color:var(--orange)}
.celebrate-title{font-size:1.35rem;font-weight:800;margin-top:12px}
.celebrate-sub{color:var(--muted);margin-top:4px}
@keyframes celebrate-pop{0%{transform:scale(.7);opacity:0}18%{transform:scale(1.06);opacity:1}30%{transform:scale(1)}85%{transform:scale(1);opacity:1}100%{transform:scale(1);opacity:.98}}

/* dialogs as bottom sheets on phones */
dialog.sheet{border:none;border-radius:var(--radius-lg);padding:20px;width:min(560px,94vw);max-height:88vh;overflow:auto}
/* iOS zooms the page when a focused editable is under 16px — floor every dialog field at 16px. */
dialog input,dialog select,dialog textarea{font-size:16px}
dialog.sheet::backdrop{background:rgba(0,0,0,.45)}
@media (max-width:640px){
  dialog.sheet{position:fixed;left:0;right:0;bottom:0;top:auto;margin:0;width:100%;max-width:100%;border-radius:18px 18px 0 0}
  .pyr-rank{flex-basis:136px}
  .pyr-n{min-width:64px}
}

/* auth */
.auth-card{max-width:420px;margin:5vh auto;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-lg);padding:24px;text-align:left;box-shadow:var(--shadow-card)}
.auth-card h1{font-size:1.3rem}
.auth-logo{width:120px;height:auto;display:block;margin:0 auto 8px}
.progress-card{text-align:left}
.card-logo{width:130px;height:auto;display:block;margin:0 auto 6px}
.progress-card h1,.progress-card h2{text-align:center}
.progress-card h2{font-size:1.25rem}

/* ==== restyle pass 2: students list, profile, progress card ==== */
.btn-pill{border-radius:var(--radius-pill)}
.btn-peach{background:#fbd9ae;color:#7a3c00}
.btn-peach:active{background:#f6c390}
.link-btn{background:none;border:none;padding:0;color:var(--ink);font:inherit;font-size:.92rem;text-decoration:underline;cursor:pointer;flex:none}
.divider{border:none;border-top:1px solid var(--line);margin:16px 0}
.section-head h2{margin:0}
.card .section-head{margin-bottom:10px}

/* students list — search row, add button, cards */
.search-stack{gap:10px;margin-bottom:0}
.search-row{display:flex;gap:8px;align-items:stretch}
.search-input{flex:1;min-width:0}
.search-row .btn{flex:none}
.add-btn{margin-top:10px}
.count-line{margin:10px 0 12px}
.student-card{display:flex;gap:6px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:13px 12px;align-items:flex-start}
a.student-card{text-decoration:none;color:var(--ink)}
.sc-link{display:flex;gap:12px;flex:1;min-width:0;text-decoration:none;color:var(--ink);align-items:flex-start}
.sc-card-link{gap:12px}
.sc-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.sc-namerow{display:flex;align-items:flex-start;gap:8px}
.sc-namerow .sr-name{flex:1;min-width:0}
.sc-meta{display:flex;align-items:center;gap:6px}
.sdots{display:flex;gap:4px;flex:none;padding-top:1px}
.sdot{width:20px;height:20px;border-radius:50%;background:var(--track);color:var(--grey-text);font-size:.55rem;font-weight:800;display:inline-flex;align-items:center;justify-content:center}
.sdot.on{background:var(--orange);color:#fff}
.sc-classes{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:.9rem;margin-top:3px}
.sc-pct{font-weight:700}
.track{display:block;height:7px;background:var(--track);border-radius:var(--radius-track);overflow:hidden;margin-top:4px}
.track-fill{display:block;height:100%;background:var(--orange);border-radius:var(--radius-track);min-width:3px}
.track-lg{height:9px}
.track-thick{height:12px}
.sc-badges{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px;align-items:center}
.alert-badge{display:inline-block;background:var(--warn-bg);border:1px solid var(--warn-line);color:var(--warn-ink);font-size:.68rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase;padding:4px 9px;border-radius:var(--radius-pill)}
.sr-more{background:transparent;border:none;border-radius:9px;min-width:36px;min-height:44px;font-size:1.05rem;cursor:pointer;color:var(--muted);padding:0 4px}

/* profile header */
.profile-head{display:flex;gap:14px;align-items:flex-start;flex-wrap:wrap}
.medical-card{flex:1 1 100%;background:#b3271e;color:#fff;border-radius:var(--radius-lg);padding:16px;margin-top:2px}
.starter-head .medical-card{margin-top:12px}
.medical-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.medical-card-title{font-weight:700;font-size:1.05rem}
.medical-chip{flex:none;background:#ffe9d6;color:#7a2a12;font-weight:700;font-size:.72rem;letter-spacing:.04em;padding:5px 10px;border-radius:var(--radius-pill)}
.medical-line{margin:.45rem 0 0;font-weight:600}
.medical-meta{margin:.3rem 0 0;font-size:.9rem;opacity:.92}
.medical-nudge-light{margin:.45rem 0 0;font-weight:700;text-decoration:underline}
.medical-actions{margin-top:12px;gap:10px}
.med-btn-white{background:var(--card);color:#b3271e;font-weight:700}
.med-btn-outline{background:transparent;color:#fff;border:2px solid #fff;font-weight:700}
.avatar-lg{width:66px;height:66px;font-size:1.3rem}
/* Accounts page (redesigned Oct 18, 2026): app-language user rows */
.acct-list{display:flex;flex-direction:column}
.acct-row{display:flex;gap:12px;padding:14px 0;border-top:1px solid var(--line)}
.acct-row:first-child{border-top:none;padding-top:4px}
.acct-avatar{background:var(--orange-soft);color:var(--orange-ink)}
.acct-main{flex:1;min-width:0}
.acct-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.acct-name{font-weight:700}
.acct-pill{font-size:.7rem;font-weight:700;border-radius:var(--radius-pill);padding:2px 9px;flex:none;white-space:nowrap}
.acct-pill-on{background:#e6f4ea;color:#137333}
.acct-pill-pend{background:var(--orange-soft);color:var(--orange-dark)}
.acct-pill-off{background:var(--grey-soft);color:var(--muted)}
.acct-ident{display:flex;align-items:center;gap:6px;font-size:.78rem;color:var(--orange-dark);font-weight:600;margin-top:1px}
.acct-email{color:var(--muted);font-size:.84rem;overflow-wrap:anywhere}
.acct-controls{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-top:8px}
.acct-controls form{display:inline-flex;gap:6px;align-items:center;margin:0}
.acct-spacer{flex:1}
.acct-you{background:var(--black);color:#fff;border-radius:var(--radius-pill);padding:4px 12px;font-size:.8rem;font-weight:600;white-space:nowrap}
/* Admin hub (Oct 18, 2026): header button + tiles page */
.identity-link{display:block;text-decoration:none;color:inherit}
.admin-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media (max-width:560px){.admin-grid{grid-template-columns:1fr}}
.admin-tile{display:block;border:1px solid var(--line);border-radius:var(--radius);padding:13px 14px;background:var(--card);text-decoration:none;color:var(--ink)}
.admin-tile-wide{grid-column:1 / -1;background:#fff7f0;border-color:#f2c09a}
.admin-tile-top{display:flex;justify-content:space-between;align-items:center}
.admin-mark{background:var(--orange-soft);color:var(--orange-ink);border-radius:var(--radius-xs);padding:3px 8px;font-weight:800;font-size:.72rem}
.admin-chev{color:var(--grey-text);font-weight:700}
.admin-tile h3{font-family:var(--display);letter-spacing:.02em;margin:5px 0 2px;font-size:1.02rem}
.admin-sub{color:var(--muted);font-size:.8rem;margin:0}
/* Pricing presets (redesigned Oct 18, 2026): stacked blocks, fields paired */
.preset-row{padding:11px 0;border-bottom:1px solid var(--line)}
.preset-row:first-child{padding-top:2px}
.preset-row:last-child{border-bottom:none;padding-bottom:2px}
.preset-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.preset-name{font-weight:700;font-size:1.02rem}
.preset-margin{color:var(--muted);font-size:.78rem;font-weight:600;white-space:nowrap}
.preset-fields{display:flex;gap:8px;align-items:flex-end;margin-top:8px}
.preset-field{flex:1;min-width:0}
.preset-field label{display:block;font-size:.76rem;font-weight:600;margin-bottom:3px}
.preset-field input{width:100%}
.preset-fields .btn{flex:none}
.ph-main{flex:1;min-width:0}
.profile-name{margin:0 0 7px;text-transform:uppercase;font-size:1.55rem;line-height:1.15}
.pill{display:inline-flex;align-items:center;gap:6px;border-radius:var(--radius-pill);padding:4px 11px;font-size:.74rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase}
.pill-belt{background:var(--card);border:1px solid var(--line);color:var(--ink)}
.pill-uniform{background:var(--warn-bg);border:1px solid var(--warn-line);color:var(--warn-ink)}
.pill-belt .belt{width:28px;height:14px}
.pill-row{display:flex;gap:7px;flex-wrap:wrap}
.ph-promoted{margin:7px 0 0}
.badge-row{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.badge-row .badge{margin:0}
.badge-orange{background:var(--orange);color:#fff;text-transform:uppercase;letter-spacing:.04em}

/* profile sections */
.sect-label{font-size:.76rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);margin:16px 0 7px}
.progress-card .sect-label:first-of-type{margin-top:2px}
.card>.sect-label:first-child{margin-top:0}
.inline-label{margin:0}
.bydate-row{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:14px}
.bydate-row label{font-size:.9rem}
.stripe-circles{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.scircle-form{display:flex;flex-direction:column;align-items:center;gap:3px;margin:0}
.scircle{width:64px;height:64px;border-radius:50%;border:2.5px dashed var(--dashed);background:var(--card);color:#6b7280;font-weight:800;font-size:1.05rem;cursor:pointer;padding:0}
.scircle.on{border-style:solid;border-color:var(--orange);background:var(--orange);color:#fff}
.scircle:active{transform:scale(.96)}
.scircle-name{font-weight:700;font-size:.9rem}
.scircle-status{color:var(--muted);font-size:.76rem;text-align:center}
.recent-classes{margin-top:12px}
.progress-actions{margin-top:12px}
.classes-line{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:1.02rem}
.classes-pct{font-weight:700}
.needs-box{background:#f3f4f6;border-radius:var(--radius-md);padding:12px 14px;margin-top:10px}
.needs-box.center{text-align:center}

/* points stats + ledger */
.points-stats{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;text-align:center;margin:4px 0 8px}
/* slim stat strip (calm Home) + profile window grid */
.stat-strip{display:flex;align-items:center;justify-content:space-between;gap:6px;flex-wrap:wrap;padding:14px 16px}
.strip-item{display:flex;align-items:baseline;gap:6px;text-decoration:none;color:inherit}
.strip-num{font-family:var(--font-display);font-size:1.45rem;font-weight:700;line-height:1;color:var(--orange)}
.strip-label{font-size:.8rem;font-weight:600;color:var(--muted)}
.strip-sep{color:var(--line);font-weight:700}
.window-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin:4px 0 8px}
.window-block{border:1px solid var(--line);border-radius:var(--radius-md);padding:10px 4px;text-align:center}
.window-title{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--ink);margin-bottom:6px}
.window-block .pstat + .pstat{margin-top:8px}
.window-block .pstat-num{font-size:1.5rem}
.pstat-num{font-family:var(--font-display);font-size:1.9rem;font-weight:600;line-height:1.1}
.pstat-label{color:var(--muted);font-size:.66rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;margin-top:3px}
.ledger-row{display:flex;gap:10px;align-items:flex-start}
.ledger-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}

/* achievements — circular indicators */
.ach-list li{align-items:flex-start;padding:9px 0}
.ach-circle{width:26px;height:26px;border-radius:50%;border:2px solid #d4d4d8;background:var(--card);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:.8rem;font-weight:800;flex:none;margin-top:1px}
.ach-circle.on{background:var(--orange);border-color:var(--orange)}
.ach-name{font-weight:700;display:block}
.ach-sub{display:block}
.ach-earned .ach-label{font-weight:400}

/* compact single-row belt journey (profile + progress card) */
.journey-strip{display:flex;gap:4px;align-items:flex-start;margin:4px 0 2px}
.jstep{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;gap:3px}
.jstep-belt{display:block;width:100%;line-height:0}
.jstep-belt .belt{width:100%;height:12px}
.jstep-belt .belt-dans{right:2px;gap:1.5px}
.jstep-belt .belt-dan{width:2px}
.jstep-current .belt{outline:2px solid var(--orange);outline-offset:1px;height:20px;border-width:2px}
.jstep-next{opacity:.6}
.jstep-next .belt{border-style:dashed;filter:saturate(.65)}
.jstep-past{opacity:1}
.jstep-future{opacity:.3}
.jstep-future .belt{filter:saturate(.4)}
.jstep-label{font-size:.58rem;color:var(--muted);line-height:1.15;text-align:center;white-space:normal}
.jstep-current .jstep-label{color:var(--orange-dark);font-weight:700}
/* one caption line under the strip replaces the per-swatch labels
   (they overlapped on long rank names) */
.journey-caption{font-size:.82rem;color:var(--muted);margin-top:5px}
.journey-caption .jc-current{color:var(--orange-dark);font-weight:700}

/* testing pace — road to testing (profile), due-for-a-check (ready),
   check tags (tonight) */
.pace-status{display:inline-block;font-weight:800;font-size:.74rem;letter-spacing:.05em;text-transform:uppercase;padding:4px 10px;border-radius:var(--radius-pill)}
.pace-on{background:#e7f6ec;color:#166534}
.pace-behind{background:var(--warn-bg);color:var(--warn-ink)}
.pace-past{background:var(--danger-bg);color:var(--red)}
.pace-dots{display:flex;gap:8px;margin:12px 0 2px}
.pace-dot-wrap{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;gap:3px;text-align:center}
.pace-dot{width:26px;height:26px;border-radius:50%;border:2.5px solid var(--orange);background:var(--card);display:inline-block;flex:none}
.pace-dot.on{background:var(--orange)}
.pace-dot-label{font-weight:700;font-size:.82rem}
.pace-dot-date{color:var(--muted);font-size:.72rem;line-height:1.2}
.pace-next{font-weight:700;margin:10px 0 2px}
.pace-ready-line{margin-top:8px}
.pace-due-line{font-weight:700;font-size:.95rem;margin-top:6px;color:var(--warn-ink)}
.pace-due-line.overdue{color:var(--red)}
.pace-tag{align-self:flex-start;display:inline-block;margin-top:4px;font-size:.7rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase;padding:3px 8px;border-radius:var(--radius-pill)}
.pace-tag-due{background:var(--warn-bg);border:1px solid var(--warn-line);color:var(--warn-ink)}
.pace-tag-overdue{background:var(--danger-bg);border:1px solid var(--danger-line);color:var(--red)}

.watch-current{margin:0 0 8px}
.watch-row{margin-bottom:8px}
.edit-details summary{cursor:pointer}
.edit-details form{margin-top:12px}

/* progress card (parent-facing) */
.pc-school{text-align:center;color:var(--muted);font-size:.78rem;font-weight:700;letter-spacing:.22em;text-transform:uppercase;margin:8px 0 4px}
.pc-name{text-align:center;text-transform:uppercase;font-size:2rem;margin:2px 0 10px}
.pc-pills{justify-content:center}
.pc-promoted{margin:8px 0 0}
.pc-rule{border:none;border-top:3px solid var(--orange);border-radius:var(--radius-track);margin:14px 0 4px}
.pc-stripes li{display:flex;align-items:center;gap:10px}
.pc-stripe .ach-name{font-weight:700;min-width:110px}
.pc-points{display:flex;justify-content:space-between;align-items:baseline;gap:10px;margin-top:16px}
.pc-points-num{font-family:var(--font-display);font-size:1.7rem;font-weight:600}

/* ==== restyle pass 3: ready board ==== */
.ready-title{text-transform:uppercase}
.ready-count{font-weight:700}
.ready-stripes{display:flex;align-items:center;gap:8px;margin-top:7px}
.ready-stripes-label{flex:1;min-width:0;color:var(--muted);font-size:.7rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;line-height:1.4}
.ready-line{font-weight:700;font-size:.98rem;line-height:1.4;margin-top:7px}

/* ==== restyle pass 4: points pages (leaderboard / races / awards) ==== */
.points-seg{margin-bottom:16px}
.points-filters{margin-bottom:4px}
.points-filters .sect-label{margin-top:0}
.season-select{width:100%}
.fchip-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.fchip{appearance:none;-webkit-appearance:none;border:1px solid var(--field-border);background:var(--card);color:var(--ink);border-radius:var(--radius-pill);padding:9px 18px;font:inherit;font-weight:600;font-size:.92rem;cursor:pointer;min-height:44px}
.fchip.active{background:var(--orange);border-color:var(--orange);color:#fff}

/* standings — one white card, divider rows, rank badges */
.standings-card{padding-top:6px;padding-bottom:6px}
.standings-card h2{margin-top:10px}
.standing-row{display:flex;gap:12px;align-items:center;padding:11px 0;border-bottom:1px solid var(--line)}
.standing-row:last-child{border-bottom:none}
.standing-empty{padding:10px 0}
.rank-badge{width:40px;height:40px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:600;font-size:1.12rem;flex:none}
.rb-1{background:var(--orange);color:#fff}
.rb-2{background:var(--black);color:#fff}
.rb-3{background:var(--card);border:2px solid var(--black);color:var(--black)}
.rb-n{background:transparent;color:var(--muted);font-size:1rem}
.standing-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.standing-name{font-weight:700;color:var(--ink);text-decoration:none;font-size:1.02rem}
.standing-meta{color:var(--muted);font-size:.85rem;display:flex;align-items:center;gap:6px;white-space:nowrap}
.standing-side{flex:none;display:flex;flex-direction:column;gap:1px;align-items:flex-end;text-align:right}
.standing-pts{font-family:var(--font-display);font-size:1.45rem;font-weight:600;line-height:1.1;color:var(--ink)}
.standing-pts small{font-size:.75rem;color:var(--muted);font-weight:500}
.standing-rate{color:var(--muted);font-size:.83rem}
.race-metric{font-weight:800;color:var(--ink)}
.standing-row.muted .race-metric{color:var(--muted)}

/* ==== restyle pass 5: teach pages (what to teach / tonight's classes) ==== */
.teach-title{text-transform:uppercase}
.teach-gear{float:right;color:var(--grey-mid);line-height:1}
.teach-gear .ico{width:22px;height:22px;margin-right:0;vertical-align:middle}
.teach-filter-btn{margin-bottom:12px}

/* stripe-gap accordion cards */
details.gap-card{padding:0;overflow:hidden}
details.gap-card .gap-summary{display:flex;align-items:center;gap:10px;padding:15px 16px;cursor:pointer;list-style:none}
.gap-summary::-webkit-details-marker{display:none}
.gap-title{font-family:var(--font-display);font-weight:600;font-size:1.22rem;letter-spacing:.01em;flex:1;min-width:0}
.gap-toggle{flex:none;color:var(--orange);font-family:var(--font-display);font-weight:700;font-size:1.55rem;line-height:1}
.gap-toggle::before{content:"+"}
details.gap-card[open ] .gap-toggle::before{content:"−"}
.gap-rows{border-top:1px solid var(--line)}
.gap-row{display:flex;gap:12px;align-items:center;padding:10px 16px;border-bottom:1px solid var(--line)}
.gap-row:last-child{border-bottom:none}
.gap-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.gap-name{font-weight:700;color:var(--ink);text-decoration:none;font-size:1.02rem}
.gap-empty{padding:0 16px 14px}

/* tonight's classes rows */
.tcard{padding-top:6px;padding-bottom:6px}
.trow{display:flex;gap:12px;align-items:center;padding:11px 0;border-bottom:1px solid var(--line)}
.trow:last-child{border-bottom:none}
.trow-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.trow-name{font-weight:700;color:var(--ink);text-decoration:none;font-size:1.02rem}
.trow-needs{color:var(--muted);font-size:.92rem}
.trow-ready{color:var(--orange-dark);font-weight:700}
.tmeta{color:var(--muted);font-size:.85rem;display:flex;align-items:center;gap:6px}

/* ==== restyle pass 6: starting line profile ==== */
.starter-head-top{display:flex;gap:14px;align-items:flex-start}
.starter-prog{font-weight:700;font-size:1.06rem}
.starter-meta{margin:4px 0 0}
.starter-head .divider{margin:14px 0 12px}
.starter-head .bydate-row{margin-top:0}

/* ==== restyle pass 8: races rows — plain numerals, faded unqualified ==== */
.race-rank{flex:none;width:32px;text-align:center;font-size:1.05rem;font-weight:600;color:var(--ink)}
.race-unqualified .race-rank,
.race-unqualified .standing-name,
.race-unqualified .race-metric{color:var(--muted)}

/* ==== restyle pass 9: points H1 caps + awards page — one card per leader ==== */
.points-title{text-transform:uppercase}
.award-card .sect-label{margin-bottom:6px}
.award-line{margin:0 0 12px;font-size:1.02rem}
.award-card .btn{padding-left:26px;padding-right:26px}

/* ==== organization pass: collapsible sections + bounded lists ====
   Markup contract (behavior in static/js/app.js): a [data-org] wrapper
   holds a [data-org-head] toggle button and a direct-child .org-body;
   [hidden] always wins over component display rules. The +/− sign
   mirrors the Teach accordion's .gap-toggle treatment. */
[hidden]{display:none!important}

/* expand / collapse all row — small text links in the .section-link
   style (orange-dark, weight 600, no underline) */
.org-allrow{display:flex;gap:6px;align-items:center;justify-content:flex-end;margin:0 0 10px}
.org-all-btn{background:none;border:none;padding:0;font:inherit;color:var(--orange-dark);font-weight:600;cursor:pointer;white-space:nowrap}
.org-all-sep{color:var(--muted)}
/* teach meta row (Oct 19, 2026): "Signed in on …" and Expand all /
   Collapse all share one aligned row instead of two stacked rows
   with dead space between them. */
.teach-meta-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:0 0 10px}
.teach-meta-row p{margin:0}
.teach-meta-row .org-allrow{margin:0 0 0 auto}
.profile-toprow{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}
.profile-toprow .back-pill{margin-bottom:0}
.profile-toprow .org-allrow{margin:0}
.note-list li.note-row{padding:10px 0;border-top:1px solid var(--line)}
.note-list li.note-row:first-child{border-top:none;padding-top:2px}
.note-meta{display:flex;justify-content:space-between;align-items:baseline;gap:10px;color:var(--muted);font-size:.85rem;margin-bottom:2px}
.note-delete{background:none;border:none;padding:0;font:inherit;font-size:.85rem;color:var(--muted);text-decoration:underline;cursor:pointer}
.note-text{margin:0}
.medical-banner{background:var(--danger-bg);border:1px solid var(--danger-line);color:#7a1f1f}
.chip-group{display:flex;flex-wrap:wrap;gap:6px}
.chip-opt{position:relative;display:inline-block}
.chip-opt input{position:absolute;opacity:0;pointer-events:none}
.chip-opt span{display:inline-block;border:1px solid var(--line);background:var(--card);border-radius:var(--radius-pill);padding:7px 12px;font-size:.88rem;font-weight:600;cursor:pointer}
.chip-opt input:checked + span{background:var(--orange);border-color:var(--orange);color:#fff}
.chip-opt input:focus-visible + span{outline:2px solid var(--orange-dark);outline-offset:2px}
.med-marker{font-size:.85em}
.med-marker .ico{width:15px;height:15px;margin-right:2px;vertical-align:-2px}
.medical-nudge{color:#b3261e;font-weight:700}
.medical-item{padding:8px 0;border-top:1px solid var(--line)}
.medical-item:first-child{border-top:none;padding-top:0}
/* Home Medical Flags: one structured row per flag (Sebastian,
   Oct 20, 2026) — name + status chip, injury, restrictions,
   meta, and the expected-back alert each on their own line
   instead of one run-on paragraph. */
.medical-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.medical-item .medical-summary{margin-top:2px}
.medical-item .medical-nudge{margin-top:3px}
.medical-summary p{margin:.15rem 0}
.note-head-pill{min-height:38px;padding:6px 14px;font-size:.85rem;flex:none}
.org-sign-btn{background:none;border:none;padding:6px;cursor:pointer;display:flex;align-items:center;flex:none}
.org-sign-btn .org-sign{margin-left:0}
.medical-history{margin-top:10px}

/* toggle header — full-width button, ~56px tall, Oswald title, orange
   +/− glyph at 1.5rem on the right (mirrors the Muse component and
   the Teach accordion's summary treatment) */
.org-head{display:flex;align-items:center;gap:9px;width:100%;min-height:56px;background:none;border:none;padding:0;cursor:pointer;font:inherit;color:var(--ink);text-align:left}
.org-head-title{font-family:var(--font-display);font-weight:600;text-transform:uppercase;letter-spacing:.03em;font-size:1.15rem;line-height:1.25}
.org-head-title-lg{font-size:1.35rem}
.org-head-title-md{font-size:1.22rem;letter-spacing:.01em;text-transform:none}
.org-count{color:var(--muted);font-size:.85rem;font-weight:600;white-space:nowrap}
.org-sign{flex:none;margin-left:auto;color:var(--orange);font-family:var(--font-display);font-weight:700;font-size:1.5rem;line-height:1}
.org-sign::before{content:"+"}
.org:not(.org-closed)>.org-head .org-sign::before,
.org:not(.org-closed)>.org-headrow .org-sign::before{content:"−"}

/* header row inside a card: toggle button + trailing link/action */
.org-headrow{display:flex;align-items:center;justify-content:space-between;gap:10px}
.org-headrow .org-head{flex:1;min-width:0;width:auto}

/* card-level collapsibles: the header sits inside the card, full
   width (edge-to-edge, like the Teach accordion card); the body
   carries the card's usual 16px inset */
.card.org{padding:0;overflow:hidden}
.card.org>.org-head{padding:8px 16px}
.card.org>.org-headrow{padding:8px 16px}
.card.org>.org-headrow .org-head{min-height:40px}
.card.org>.org-body{padding:2px 16px 16px}
.card.org>.org-headrow+.org-body{padding-top:0}
.card.org[data-org^="profile-"]>.org-body{padding-top:12px}
.card.org[data-org^="profile-"]>.org-headrow+.org-body{padding-top:12px}

/* grouped lists (students / ready program groups) — same header
   treatment, standalone above the list */
.org-group{margin:14px 0 4px}
.org-group-head{padding:2px}
.org-group .student-list{margin-bottom:10px}

/* sub-headers inside a card or accordion (teach programs, settings
   minimum groups, awards months) — same treatment, scaled down */
.org-sub{border-top:1px solid var(--line)}
.org-sub:first-of-type{border-top:none}
.org-head-sub{min-height:48px}
.org-head-sub .org-head-title{font-size:1rem}
.gap-rows .org-head-sub{padding:2px 16px}
.gap-rows .org-body .gap-row:first-child{border-top:1px solid var(--line)}
.award-months .org-body{padding-bottom:4px}

/* bounded lists — the Show all / Show less toggle is a small text
   link in the .section-link style, never a button */
.bound-row{display:flex;justify-content:center;padding:10px 0 2px}
.bound-btn{background:none;border:none;padding:4px 2px;font:inherit;color:var(--orange-dark);font-weight:600;cursor:pointer;white-space:nowrap}

/* ==== tablet & wide screens (min-width:768px) — additive only.
   Nothing below 768px changes: the phone layout is untouched. ==== */
@media (min-width:768px){
  .wrap{max-width:1200px}
  .profile-layout{display:grid;grid-template-columns:repeat(12,1fr);gap:14px;align-items:start}
  .profile-layout>.card{grid-column:span 6;margin-bottom:0}
  .profile-layout>.profile-head,.profile-layout>.starter-head{grid-column:span 5}
  .profile-layout>.profile-main{grid-column:span 7}
  .profile-layout>.profile-wide{grid-column:span 12}
  .lb-layout{display:grid;grid-template-columns:1fr 1fr;gap:14px;align-items:start}
  .lb-layout>.card{margin-bottom:0}
  .ready-layout{display:grid;grid-template-columns:1fr 1fr;gap:14px;align-items:start}
  .ready-layout>.card{margin-bottom:0}
}

/* Road to White Belt + White Belt certificate (Oct 16, 2026 port) */
.road-stops{display:grid;gap:10px;margin-top:10px}
.road-stop{display:flex;align-items:center;gap:10px;padding:10px;border:1px solid var(--line);border-radius:var(--radius-md)}
.road-stop.current{border-color:var(--orange);background:#fff7f1}
.road-stop.done{background:var(--panel)}
.road-stop-main{flex:1;min-width:0}
.road-stop-title{font-weight:700}
.road-bar{height:8px;background:#eee7e2;border-radius:var(--radius-track);overflow:hidden;margin:5px 0 3px}
.road-bar span{display:block;height:100%;background:var(--orange);border-radius:var(--radius-track)}
.road-note{margin-top:10px;font-weight:600}
.warn-line{color:#b91c1c;font-weight:600;margin:0}
.radio-row,.check-row{flex-direction:row;align-items:center;gap:10px;padding:4px 0}
.radio-row input[type="radio"],.check-row input[type="checkbox"]{-webkit-appearance:auto;appearance:auto;width:20px;height:20px;min-height:0;padding:0;border:none;background:none;flex:0 0 auto;margin:0;accent-color:var(--orange)}
.wb-banner{border:2px solid var(--orange);background:#fff7f1}
.cert-sheet{background:var(--card);border:2px solid var(--orange);outline:1px solid var(--black);outline-offset:-7px;border-radius:6px;padding:32px 22px 28px;text-align:center;box-shadow:var(--shadow-card);margin-bottom:14px}
.cert-logo{width:min(64%,280px);height:auto}
.cert-school{letter-spacing:.18em;text-transform:uppercase;color:var(--muted);font-weight:700;font-size:.78rem;margin:10px 0 2px}
.cert-heading{font-size:2rem;margin:6px 0}
.cert-recognizes{color:var(--muted);margin:6px 0 4px;font-size:1.02rem}
.cert-name{font-size:2.6rem;font-weight:800;color:var(--orange);margin:6px 0;line-height:1.1}
.cert-body{font-size:1.08rem}
.cert-program{font-weight:800;font-size:1.08rem}
.cert-curriculum{margin:18px 0 8px}
.cert-curriculum p{font-size:1.02rem}
.cert-date{color:var(--muted);font-size:1rem}
.cert-sigs{display:flex;justify-content:center;gap:34px;flex-wrap:wrap;margin-top:34px}
.cert-sig{min-width:185px}
.cert-sig-line{border-top:1.5px solid var(--black);margin-bottom:5px}
.cert-sig-name{font-weight:800}
.cert-sig-title{color:var(--muted);font-size:.85rem}
@media (min-width:768px){
  .profile-layout>.profile-side{grid-column:span 5}
}

/* Graduate card (starter profile) — built to the Muse app's spec:
   state title/body, tappable uniform check row, muted primary until
   the road is complete, black-outline manual-award button. */
.grad-ready{border:2px solid var(--orange)}
.grad-title{font-family:var(--font-display);font-weight:600;text-transform:uppercase;letter-spacing:.02em;font-size:1.25rem;line-height:1.2;margin:.15rem 0 .3rem;color:var(--ink)}
.grad-title.ready{font-size:1.5rem;color:var(--orange)}
.grad-body{font-size:.875rem;line-height:1.45;color:var(--muted);margin:0}
.grad-uniform{border-top:1px solid var(--line);margin-top:12px;padding-top:12px}
.grad-uniform form{margin:0}
.uniform-row{display:flex;align-items:center;gap:12px;width:100%;min-height:44px;padding:6px 0;background:none;border:0;cursor:pointer;text-align:left;font:inherit;color:inherit}
.uniform-circle{flex:none;width:28px;height:28px;border-radius:var(--radius-pill);border:2px solid var(--line);background:transparent;display:flex;align-items:center;justify-content:center;font-size:.85rem;font-weight:700;color:transparent}
.uniform-circle.on{background:var(--orange);border-color:var(--orange);color:#fff}
.uniform-main{flex:1;min-width:0}
.uniform-label{display:block;font-weight:600;line-height:1.3;color:var(--muted)}
.uniform-label.on{color:var(--ink)}
.uniform-help{display:block;font-size:.75rem;line-height:1.35;color:var(--muted)}
.uniform-chevron{flex:none;font-size:1.3rem;font-weight:700;line-height:1;color:var(--muted)}
.grad-primary{margin-top:12px}
.grad-primary:disabled{opacity:.5;cursor:default}
.btn-outline-dark{background:transparent;border:2px solid #0a0a0a;color:var(--ink)}
.grad-secondary{margin-top:12px}
.grad-help{font-size:.75rem;line-height:1.4;color:var(--muted);margin:.35rem 0 0}

/* Advanced-rank patch system (ported from the Muse app, Oct 17, 2026) */
/* Profile section header dividers + quiet medical row (Muse parity, Oct 17, 2026) */
section.org[data-org^="profile-"]:not(.org-closed)>.org-head,
section.org[data-org^="profile-"]:not(.org-closed)>.org-headrow{border-bottom:1px solid var(--line)}
.med-row .sect-label{margin-top:0}
.patch-block{display:flex;align-items:center;gap:12px;flex-wrap:nowrap;margin-top:4px}
.patch-block form{flex:none}
.patch-circle{width:56px;height:56px;flex:none;border-radius:50%;border:3px dashed var(--dashed);background:var(--card);color:var(--muted);font-weight:800;font-size:1.05rem;display:inline-flex;align-items:center;justify-content:center}
.patch-circle.on{border-style:solid;border-color:var(--orange);background:var(--orange);color:#fff}
.patch-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.patch-name{font-weight:700;font-size:1rem}
.patch-status{color:var(--muted);font-size:.86rem}
.patch-none{margin-top:6px}
.patch-milestone{border:1px solid var(--line);background:var(--panel);border-radius:var(--radius-md);padding:10px 12px;margin-top:10px}
.patch-milestone .sect-label{margin-top:0}
.patch-milestone.earned{border-color:var(--orange)}
.patch-milestone.overdue{border-color:var(--red)}
.patch-ms-line{font-weight:600;font-size:.95rem;margin:2px 0}
.past-patches{margin-top:10px}
.past-patches li{color:var(--muted);font-size:.8rem;margin:3px 0}
.past-patches strong{color:var(--ink)}
.poom-age{margin:8px 0 2px;font-size:.95rem}
.adv-track{position:relative;margin-top:14px;min-height:72px}
.adv-track-line{position:absolute;left:16px;right:16px;top:15px;height:2px;background:var(--line)}
.adv-track-fill{position:absolute;left:16px;top:15px;height:2px;background:var(--orange)}
.adv-marker{position:relative;margin:0 auto;width:11rem;display:flex;flex-direction:column;align-items:center;text-align:center}
.adv-end{position:absolute;right:0;top:0;width:5rem;display:flex;flex-direction:column;align-items:flex-end;text-align:right}
.adv-dot{width:32px;height:32px;border-radius:50%;border:2.5px solid var(--dashed);background:var(--card);color:var(--muted);font-size:.68rem;font-weight:800;display:inline-flex;align-items:center;justify-content:center;flex:none}
.adv-dot.on{border-color:var(--orange);background:var(--orange);color:#fff}
.adv-marker-label{font-size:.66rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-top:5px}
.adv-marker-date{font-size:.75rem;color:var(--muted)}

/* ==== profile parity pass (Oct 17, 2026): profile pages rebuilt to
   the Muse app's composition — section titles above cards, one
   Progress card, Muse-style road headers, window stat rows, subgroup
   + More Actions treatments. New classes only; belt and student-card
   CSS above are untouched. ==== */
.profile-section-title{font-family:var(--font-display);font-weight:600;text-transform:uppercase;letter-spacing:.03em;font-size:1.18rem;margin:0 0 12px}
@media (min-width:768px){
  .profile-layout>.profile-cell{grid-column:span 6}
  .profile-cell>.card,.profile-main>.card{margin-bottom:0}
}
.prof-divide{border-top:1px solid var(--line);margin-top:20px}
.prof-divide>.sect-label{margin-top:16px}
.eyebrow-text{font-size:.76rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--muted)}
.road-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin:16px 0 2px}
.prof-divide>.road-head{margin-top:16px}
.road-status{font-weight:700;font-size:.95rem;white-space:nowrap}
.road-status.on{color:var(--orange)}
.road-status.bad{color:var(--red)}
.needs-pill{border-radius:var(--radius-md);padding:11px 12px;margin-top:16px;text-align:center;font-size:1rem;font-weight:700;background:var(--hairline);color:var(--ink)}
.needs-pill.ready{background:var(--orange);color:#fff}
.classes-plain{font-size:.95rem;margin:2px 0}
.classes-needed{margin:6px 0 0;font-size:.92rem;font-weight:500}
.row-end{justify-content:flex-end}

/* road-to-testing check dots with numbers (profile only) */
.rt-dots{position:relative;display:flex;gap:8px;margin:14px 0 2px}
.rt-dots::before{content:"";position:absolute;left:16%;right:16%;top:15px;height:2px;background:var(--line)}
.rt-dot-wrap{position:relative;flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;gap:3px;text-align:center}
.rt-dot{width:32px;height:32px;border-radius:50%;border:2px solid var(--line);background:var(--card);color:var(--muted);font-size:.72rem;font-weight:700;display:inline-flex;align-items:center;justify-content:center;flex:none}
.rt-dot.on{background:var(--orange);border-color:var(--orange);color:#fff}
.rt-dot-label{font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.rt-dot-date{color:var(--muted);font-size:.72rem;line-height:1.2}

/* window stats — Muse WindowStatsGrid rows */
.winrows{margin:2px 0 4px}
.winrow{padding:10px 0;border-bottom:1px solid var(--line)}
.winrow:last-child{border-bottom:none}
.winrow-flex{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
.winrow-label{font-size:.76rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--muted)}
.winrow-nums{font-size:.95rem;white-space:nowrap}
.winrow-num{font-family:var(--font-display);font-size:1.3rem;font-weight:600}
.winrow-unit{font-size:.78rem;color:var(--muted)}
.winrow-sep{color:var(--muted);margin:0 7px}
.winrow-rate{margin:3px 0 0;text-align:right;font-size:.8rem;color:var(--muted)}
.winrow-rate strong{color:var(--ink)}

/* Achievements, Points & Awards subgroups */
.apa-card .ach-circle{width:32px;height:32px;font-size:.95rem}
.ach-form{margin:0;flex:1;min-width:0}
.ach-row{display:flex;align-items:center;gap:12px;width:100%;min-height:44px}
.ach-row-btn{display:flex;align-items:center;gap:12px;width:100%;min-height:44px;background:none;border:none;padding:0;font:inherit;color:inherit;text-align:left;cursor:pointer}
.ach-chevron{flex:none;font-size:1.35rem;font-weight:700;line-height:1;color:var(--muted)}
.bound-btn.showall-btn{display:flex;width:100%;min-height:44px;align-items:center;justify-content:center;border:1px solid var(--line);border-radius:var(--radius-pill);background:var(--card);color:var(--orange);font-weight:700;padding:10px 16px}
.award-row{padding:9px 0;border-bottom:1px solid var(--line)}
.award-row:last-child{border-bottom:none}
.award-name{font-weight:700;display:block}
.award-meta{color:var(--muted);font-size:.83rem;display:block}
.award-note{display:block;margin-top:2px}

/* More Actions subsections */
.sub-h{font-size:.88rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;margin:0 0 6px}
.sub-block{border-top:1px solid var(--line);margin-top:20px;padding-top:16px}
.sub-block:first-child{border-top:none;margin-top:2px;padding-top:0}
.medflag-line{margin:2px 0 10px;font-size:.95rem}
.edit-summary{display:inline-flex;align-items:center;min-height:44px;padding:9px 18px;border:1px solid var(--line);border-radius:var(--radius-pill);background:var(--card);font:inherit;font-weight:600;color:var(--ink);cursor:pointer;list-style:none}
.edit-summary::-webkit-details-marker{display:none}
.danger-link{display:inline-flex;align-items:center;min-height:44px;background:none;border:none;padding:0;font:inherit;font-size:.92rem;font-weight:600;color:var(--red);text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.delete-form{margin-top:8px}
.note-head-pill{font-weight:700}
.cert-open{margin-top:12px}
.cert-note{margin-top:6px}
.uniform-row.static{cursor:default}
.medhist-head{font-weight:600}
.medhist-meta{color:var(--muted);font-size:.8rem;margin-top:2px}
.apa-card .ach:not(.ach-earned) .ach-name{color:var(--muted);font-weight:600}
.ach-list li>.ach-row{flex:1;min-width:0}

/* ==== wide-screen pass (Oct 17, 2026): iPad landscape + desktop.
   Additive at >=768px; the phone layout below 768px is untouched. ==== */
@media (min-width:768px){
  /* a notch more air in type on tablet/desktop */
  .org-head-title{font-size:1.22rem}
  .feed li{font-size:1.03rem}
  .medical-item{font-size:1.03rem;line-height:1.55;padding:10px 0}
  .attn-name{font-size:1.06rem}
  .section-sub{font-size:.95rem}
  /* school totals: four tiles instead of one stretched strip */
  .stat-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;background:transparent;border:none;box-shadow:none;padding:0;overflow:visible}
  .stat-strip .strip-sep{display:none}
  .stat-strip .strip-item{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:0 1px 2px rgba(16,24,40,.05);padding:14px 16px;flex-direction:column;align-items:flex-start;gap:4px}
  .strip-num{font-size:1.9rem}
  .strip-label{font-size:.85rem}
  /* student cards: two across */
  .student-list{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:start}
}
@media (min-width:1024px){
  /* dashboard sections in two columns */
  .dash-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;align-items:start}
  .dash-grid>.card{margin-bottom:0}
  .dash-actions{display:flex;gap:12px;align-items:center;margin-top:14px}
  .dash-actions .btn{width:auto;flex:0 0 auto;padding-left:26px;padding-right:26px}
}
@media (min-width:1200px){
  .student-list{grid-template-columns:repeat(3,1fr)}
}
@media (max-width:1023.5px){
  .dash-kiosk-btn{display:none}
}

/* ==== check-in rows (Oct 18, 2026): rows span their card with the
   action at the right edge. ==== */
.checkin-feed li{display:flex;align-items:center;gap:10px}
.checkin-feed li form{margin-left:auto}

/* ==== students header row (Oct 18, 2026): Add a Student lines up
   with Expand all / Collapse all on one row; no standalone count
   (the tab already shows it). ==== */
.students-meta-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:10px 0}
.students-meta-row .org-allrow{margin:0}
.students-meta-row .add-btn{flex:1}
@media (min-width:768px){
  .students-meta-row .add-btn{flex:0 0 auto;width:auto;padding-left:24px;padding-right:24px}
}

/* ==== kiosk setup (Oct 18, 2026): Start Kiosk Mode shrinks to a
   compact pill on tablet/desktop instead of a full-width slab;
   phone keeps the full-width bar. ==== */
@media (min-width:768px){
  .kiosk-start-form .btn{width:auto;padding-left:28px;padding-right:28px}
}

/* masonry columns (JS-built on wide screens — see app.js) */
.masonry-on{display:flex !important;gap:14px;align-items:flex-start;}
.masonry-col{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:14px;}
.masonry-col>*{margin-bottom:0 !important;}

/* ==== Belt Testing Manager module (admin-only, Oct 18, 2026) ==== */
.bt-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;}
.bt-tile{background:#f7f7f7;border:1px solid transparent;border-radius:var(--radius);padding:12px 14px;display:flex;flex-direction:column;gap:2px;}
.bt-tile-dark{background:rgba(255,255,255,.10);border-color:rgba(255,255,255,.25);}
.bt-tile-num{font-size:1.3rem;font-weight:800;font-variant-numeric:tabular-nums;order:2;}
.bt-tile-dark .bt-tile-num{color:#fff;}
.bt-tile-label{font-size:.78rem;color:var(--muted,#667085);font-weight:600;order:1;}
.bt-tile-dark .bt-tile-label{color:#d1d5db;}
.bt-tiles-c .bt-tile{text-align:center;align-items:center;}
.bt-tiles-spot{grid-template-columns:repeat(2,1fr);}
.bt-tiles-sum{grid-template-columns:repeat(2,1fr);}
.bt-tiles-card{grid-template-columns:repeat(3,1fr);}
.bt-glance{color:var(--muted,#667085);}
.bt-glance strong{color:var(--ink,#111);}
@media (min-width:768px){
  .bt-tiles-spot{grid-template-columns:repeat(3,1fr);}
  .bt-tiles-sum{grid-template-columns:repeat(4,1fr);}
}
@media (min-width:1024px){
  .bt-tiles-card{grid-template-columns:repeat(6,1fr);}
}
.bt-status{text-transform:uppercase;font-size:.72rem;font-weight:800;letter-spacing:.06em;border-radius:var(--radius-pill);padding:4px 10px;color:#fff;white-space:nowrap;}
.bt-status-up{background:var(--orange,#f0670c);}
.bt-status-done{background:var(--black);}
.bt-tabs{display:flex;gap:3px;background:var(--grey-soft);border:none;border-radius:var(--radius-pill);padding:5px;margin:12px 0;overflow-x:auto;}
.bt-tab{color:var(--ink);text-decoration:none;font-weight:600;font-size:.92rem;padding:12px 6px;border-radius:var(--radius-pill);white-space:nowrap;text-align:center;}
.bt-tab.is-active{background:var(--card);color:var(--orange-dark);box-shadow:0 2px 8px rgba(0,0,0,.12);}
.bt-export-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.bt-export-grid .btn{display:flex;align-items:center;justify-content:center;gap:8px;border-radius:var(--radius-lg);padding:13px 10px;font-weight:700;text-align:center;}
.bt-export-wide{grid-column:1/-1;}
.bt-exp-ico{color:var(--orange-dark,#b3540e);display:inline-flex;flex:none;}
@media (min-width:1024px){.bt-export-grid{grid-template-columns:1fr 1fr 1fr;}}
.bt-export-grid .btn{min-height:48px;display:flex;align-items:center;justify-content:center;text-align:center;}
.bt-form-grid{display:grid;gap:10px;}
@media (min-width:768px){.bt-form-grid{grid-template-columns:1fr 1fr;}}
.bt-group{padding:0;overflow:hidden;}
.bt-group{padding:10px 0 6px;}
.bt-grouphead{background:var(--black);color:#fff;font-family:var(--font-display);font-weight:800;text-transform:uppercase;letter-spacing:.06em;font-size:1rem;padding:9px 14px;margin:0 10px;border-radius:var(--radius-md);}
.bt-gcount{color:var(--orange,#f0670c);}
.asp-check{display:flex;flex-direction:row;align-items:center;gap:9px;font-size:.95rem;font-weight:500;padding:7px 0;cursor:pointer;}
.bt-xopts{max-width:560px;margin-left:auto;margin-right:auto;}
.bt-xopts-kicker{font-size:.72rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--orange-dark,#c2410c);margin:0;}
.bt-xopts-title{font-family:var(--font-display);font-size:1.3rem;font-weight:700;text-transform:none;letter-spacing:0;margin:2px 0 0;}
.bt-xopts-sub{font-size:.88rem;color:var(--muted,#667085);margin:2px 0 14px;}
.bt-xopts-proghead{display:flex;align-items:baseline;justify-content:space-between;gap:12px;}
.bt-xopts-proghead h3{font-size:.92rem;margin:0;}
.bt-xopts-proghead h3 span{font-weight:600;}
.bt-xopts-allclear{display:flex;gap:12px;flex:none;}
.bt-xopts-allclear button{background:none;border:none;padding:0;font-size:.78rem;font-weight:700;cursor:pointer;color:var(--muted,#667085);}
.bt-xopts-allclear button:first-child{color:var(--orange-dark,#c2410c);}
.bt-xopts-list{display:grid;gap:6px;margin-top:8px;}
.bt-opt-card{display:flex;flex-direction:row;align-items:center;gap:12px;min-height:44px;border:1px solid var(--line);border-radius:var(--radius-md);padding:8px 12px;cursor:pointer;background:var(--card);}
.bt-opt-card:has(input:checked){border-color:var(--orange,#f0670c);background:var(--tint);}
.bt-opt-card input[type="checkbox"],.bt-opt-card input[type="radio"]{width:20px;height:20px;min-height:0;padding:0;margin:0;flex:none;accent-color:var(--orange,#f0670c);}
.bt-opt-name{flex:1;min-width:0;font-weight:600;font-size:.92rem;}
.bt-opt-count{flex:none;font-size:.78rem;font-weight:600;color:var(--muted,#667085);}
.bt-opt-label{display:block;font-weight:600;}
.bt-opt-hint{display:block;font-size:.78rem;font-weight:400;color:var(--muted,#667085);}
.bt-xopts-sorthead{font-size:.92rem;margin:16px 0 0;}
.bt-xopts-locked{margin-top:8px;border:1px solid var(--line);background:#f7f7f7;border-radius:var(--radius-md);padding:10px 12px;font-size:.92rem;}
.bt-xopts-preview-line{font-size:.92rem;font-weight:600;margin:12px 0 0;min-height:1.2em;}
.bt-xopts-btns{display:flex;gap:8px;margin-top:12px;justify-content:flex-end;}
.bt-xopts-btns .btn{width:auto;border-radius:var(--radius-md);text-align:center;}
.bt-xopts-btns .btn:disabled{opacity:.5;}
.asp-export-wrap{max-width:860px;margin-inline:auto;}
.bt-xopts.asp-preview-win{max-width:860px;}
.asp-sticky-bar{position:sticky;top:57px;z-index:10;background:var(--card);margin-left:-16px;margin-right:-16px;padding:12px 16px;border-bottom:1px solid var(--line);box-shadow:0 8px 14px -10px rgba(16,24,40,.25);}
.asp-back-btn{display:inline-flex;margin-bottom:10px;}
.asp-sheet-frame{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:18px;box-shadow:0 1px 3px rgba(16,24,40,.06);}
.asp-sheet-group{margin-bottom:22px;}
.asp-sheet-group:last-child{margin-bottom:0;}
.asp-check input[type="checkbox"],.asp-check input[type="radio"]{width:20px;height:20px;min-height:0;padding:0;margin:0;flex:none;accent-color:var(--orange,#f0670c);}
.bt-row{border-top:none;}
.bt-row-summary{border-top:1px solid var(--line);margin:0 16px;padding-left:0;padding-right:0;}
.bt-grouphead + .bt-row .bt-row-summary{border-top:none;}
.bt-row-summary{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:11px 16px;cursor:pointer;list-style:none;flex-wrap:nowrap;}
.bt-row-summary::-webkit-details-marker{display:none;}
.bt-row-arrow{color:var(--muted,#667085);font-size:.75rem;flex:none;transition:transform .15s;}
.bt-row[open ] .bt-row-arrow{transform:rotate(90deg);}
.bt-row[open ] .bt-row-pills{display:none;}
.bt-row-main{display:flex;flex-direction:column;min-width:0;flex:1;}
.bt-row-name{font-weight:700;}
.bt-note-pill{background:var(--orange-soft,#fde8d7);color:var(--orange-dark,#b3540e);border-radius:var(--radius-pill);padding:1px 8px;font-size:.72rem;font-weight:700;}
.bt-row-pills{display:flex;gap:6px;flex-wrap:nowrap;flex-direction:column;align-items:flex-end;flex:none;}
@media (min-width:640px){.bt-row-pills{flex-direction:row;align-items:center;}}
.bt-pill{border-radius:var(--radius-pill);padding:3px 10px;font-size:.78rem;font-weight:700;white-space:nowrap;}
.bt-pill-orange{background:var(--orange,#f0670c);color:#fff;}
.bt-pill-outline{border:1.5px solid var(--orange,#f0670c);color:var(--orange-dark,#b3540e);}
.bt-pill-black{background:var(--black);color:#fff;}
.bt-pill-dim{border:1.5px solid var(--line,#e3e3e3);color:#888;}
.bt-row-body{padding:2px 16px 16px 38px;}
.bt-chip{background:var(--panel-dim);border:1px solid var(--line);border-radius:var(--radius-pill);padding:2px 9px;font-size:.78rem;font-weight:600;white-space:nowrap;}
.bt-chip-warn{background:var(--orange-soft,#fde8d7);color:var(--orange-dark,#b3540e);border-color:transparent;border-radius:9px;padding:4px 8px;}
.bt-toggles{gap:6px;}
.bt-toggles .btn{font-size:.88rem;font-weight:700;padding:7px 13px;border:1.5px solid var(--line);background:var(--card);color:var(--muted,#667085);}
.bt-toggles .btn.btn-orange{background:var(--orange,#f0670c);border-color:var(--orange,#f0670c);color:#fff;}
.bt-toggles .btn.btn-dark{background:var(--black);border-color:var(--black);color:#fff;}
.bt-toggles .btn.bt-print-app{border-color:var(--orange,#f0670c);color:var(--orange-dark,#b3540e);background:var(--card);}
.bt-toggles .btn:disabled{opacity:.5;}
.bt-flabel{display:block;font-size:.76rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted,#667085);margin-bottom:6px;}
.bt-notes{margin-top:12px;background:#f7f7f7;border:1px solid var(--line);border-radius:var(--radius);padding:12px;}
.bt-notes-head{display:flex;justify-content:space-between;align-items:center;}
.bt-notes-label{font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted,#667085);}
.bt-saved{font-size:.75rem;font-weight:700;color:var(--orange-dark,#b3540e);}
.bt-notes textarea{margin-top:8px;background:var(--card);width:100%;}
.bt-notes-actions{display:flex;gap:8px;margin-top:8px;}
.bt-save-notes{background:var(--orange,#f0670c);color:#fff;font-weight:700;border:none;border-radius:9px;padding:7px 13px;font-size:.88rem;cursor:pointer;}
.bt-save-notes:disabled{opacity:.4;cursor:default;}
.bt-revert-notes{background:var(--card);border:1px solid var(--line);border-radius:9px;padding:7px 13px;font-size:.88rem;font-weight:600;cursor:pointer;}
.bt-entry-dlg label{font-size:.76rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted,#667085);font-weight:700;}
/* iOS zooms the whole page when a focused field renders under 16px, and the
   global label size (.9rem) shrank Testing fields to ~14px — pin every
   Testing-module field to 16px so tapping one never zooms (Sebastian) */
.bt-entry-dlg input,.bt-entry-dlg select,.bt-entry-dlg textarea,#btFeeDlg input,#btFeeDlg select,#btNewTesting input,#btNewTesting select,[id^="btEditTesting-"] input,[id^="btEditTesting-"] select,.bt-notes textarea,.bt-searchwrap input,.bt-toolbar select,.bt-filters input,.bt-filters select,.bt-size-select,.bt-preset-form input,.bt-sumtools input,.bt-sumtools select{font-size:16px;}
.bt-inline-form{background:var(--card);border:1.5px solid var(--orange,#f0670c);border-radius:var(--radius-lg);padding:16px;}
.bt-inline-form h3{font-size:1.05rem;}
.bt-row-edit{margin:10px 0 0 -22px;}
#btAddPanel{margin:0 0 12px;}
.bt-entry-dlg label input,.bt-entry-dlg label select,.bt-entry-dlg label textarea{text-transform:none;letter-spacing:0;color:var(--ink,#111);font-weight:400;}
.bt-add-student{width:auto;flex:none;margin-left:auto;border:2px dashed var(--orange,#f0670c);color:var(--orange-dark,#b3540e);background:var(--card);font-weight:700;padding:10px 18px;}
.bt-filters{margin-bottom:10px;}
.bt-toolbar{display:flex;gap:8px;flex-wrap:nowrap;align-items:stretch;margin-bottom:8px;}
.bt-searchwrap{position:relative;flex:1 1 0;min-width:0;display:flex;}
.bt-searchwrap>svg{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:#9aa0a6;pointer-events:none;}
.bt-searchwrap input[type="search"]{flex:1;min-width:0;padding-left:33px;}
.bt-toolbar select{flex:1.2 1 0;min-width:0;}
.bt-toolbar .btn{white-space:nowrap;}
.bt-filters summary{cursor:pointer;font-weight:700;}
.bt-tabs-5{gap:0;padding:5px;border-radius:var(--radius-pill);}
.bt-tabs-5 .bt-tab{flex:1;display:flex;align-items:center;justify-content:center;height:44px;font-size:.75rem;padding:0 2px;letter-spacing:0;white-space:nowrap;border-bottom:none;border-radius:var(--radius-pill);box-shadow:none;}
.bt-tabs-5 .bt-tab.is-active{background:var(--card);color:var(--orange-dark);box-shadow:0 2px 8px rgba(0,0,0,.12);border-bottom:none;}
.bt-exports{box-shadow:none;border-radius:var(--radius-lg);}
.bt-exports .org-head-title{font-family:inherit;font-size:.8rem;letter-spacing:.08em;color:var(--muted,#667085);font-weight:700;}
.bt-exports .org-sign{color:var(--muted,#667085);font-size:1.15rem;font-family:inherit;transition:transform .2s;}
section.bt-exports .org-head .org-sign::before{content:"⌄";}
.bt-exports:not(.org-closed) .org-sign{transform:rotate(180deg);}
.bt-count-badge{background:var(--orange,#f0670c);color:#fff;border-radius:var(--radius-pill);padding:0 7px;font-size:.75rem;}
.bt-sec-card{padding:0;overflow:hidden;}
.bt-secbar{background:var(--black);color:#fff;font-weight:800;text-transform:uppercase;letter-spacing:.05em;font-size:.85rem;padding:10px 16px;}
.bt-secbody{padding:14px 16px;}
.bt-table{width:100%;border-collapse:collapse;font-size:.9rem;font-variant-numeric:tabular-nums;}
.bt-table th,.bt-table td{padding:6px 8px;border-bottom:1px solid var(--line);text-align:right;}
.bt-table th:first-child,.bt-table td:first-child{text-align:left;}
.bt-table tfoot td{border-bottom:none;border-top:2px solid var(--black);}
.bt-ci-head{background:var(--black);color:#fff;border-color:var(--black);}
.bt-ci-title{margin:0;color:#fff;font-family:var(--font-display);font-weight:800;font-size:1.25rem;text-transform:none;letter-spacing:0;}
.bt-ci-sub{margin:4px 0 0;color:var(--orange);font-weight:600;font-size:.9rem;}
.bt-ci-noshow{color:rgba(255,255,255,.75);}
.bt-ci-btns{display:flex;align-items:center;gap:8px;margin-top:12px;flex-wrap:wrap;}
.bt-ci-wait{border-radius:var(--radius-pill);padding:8px 14px;font-size:.9rem;font-weight:700;background:transparent;color:#fff;border:1px solid rgba(255,255,255,.45);cursor:pointer;font-family:inherit;}
.bt-ci-wait.is-on{background:var(--orange);border-color:var(--orange);color:#fff;}
.bt-ci-reset-form{margin-left:auto;}
.bt-ci-reset{border-radius:var(--radius-pill);padding:8px 12px;font-size:.78rem;font-weight:600;background:transparent;color:#fff;border:1px solid rgba(255,255,255,.3);cursor:pointer;font-family:inherit;}
.bt-ci-reset:disabled{opacity:.4;cursor:default;}
.bt-ci-group{margin-top:16px;}
.bt-ci-grouphead{font-family:var(--font-display);font-weight:800;text-transform:uppercase;letter-spacing:.05em;font-size:.9rem;background:var(--panel-dim);color:var(--ink);border-radius:var(--radius-xs);padding:6px 10px;}
.bt-ci-gcount{margin-left:8px;font-weight:700;text-transform:none;letter-spacing:0;color:var(--muted);}
.bt-waiting-list,.bt-in-list,.bt-noshow-rows{display:grid;gap:8px;margin-top:8px;}
.bt-checkin-row{display:flex;justify-content:space-between;align-items:center;gap:12px;width:100%;text-align:left;background:var(--card);border:2px solid var(--line);border-radius:var(--radius-lg);padding:12px 16px;min-height:64px;cursor:pointer;font:inherit;color:var(--ink);}
.bt-checkin-row.is-in{background:var(--black);border-color:var(--black);color:#fff;}
.bt-checkin-row.is-in .bt-checkin-sub{color:var(--orange);}
.bt-checkin-row.is-noshow{background:var(--panel-dim);border:1px solid var(--line);opacity:.7;cursor:default;}
.bt-checkin-main{display:flex;flex-direction:column;min-width:0;}
.bt-checkin-name{font-weight:700;font-size:1.05rem;color:inherit;}
.bt-checkin-sub{color:var(--muted);font-size:.88rem;}
.bt-checkin-circle{flex:0 0 auto;width:44px;height:44px;border-radius:50%;border:2px solid var(--line);color:var(--muted);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.85rem;background:transparent;}
.bt-checkin-circle.is-in{background:var(--orange);border-color:var(--orange);color:#fff;font-size:1.4rem;}
.bt-in-subhead{font-family:var(--font-display);font-weight:800;font-size:.78rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin:16px 0 0;padding:0 4px;}
.bt-in-count{text-transform:none;letter-spacing:0;font-weight:700;}
.bt-waiting-only .bt-in-list,.bt-waiting-only .bt-in-subhead,.bt-waiting-only .bt-noshow-rows{display:none;}
.btp-list-title{font-size:.9rem;font-weight:700;margin:18px 0 4px;}
.btp-list{list-style:none;margin:0;padding:0;}
.btp-list li{border-top:1px solid var(--line);}
.btp-list li:first-child{border-top:none;}
.btp-list-row{display:block;padding:10px 0;text-decoration:none;color:inherit;}
.btp-list-name{font-size:.9rem;font-weight:700;color:var(--ink);}
.btp-list-name.is-active{color:#c2410c;}
.btp-noshow-pill{margin-left:8px;background:var(--orange);color:#fff;border-radius:var(--radius-pill);padding:2px 8px;font-size:11px;font-weight:700;vertical-align:middle;}
.btp-list-pages{margin-left:8px;font-size:11px;font-weight:700;color:var(--muted);vertical-align:middle;}
.btp-list-meta{display:block;margin-top:2px;font-size:.82rem;color:var(--muted);}
.btp-list-missing{color:#c2410c;}
.btp-dlg{width:min(720px,96vw);}
.btp-title{font-family:var(--font-display);font-weight:700;font-size:1.3rem;margin:2px 0 0;text-transform:none;}
.btp-explainer{font-size:.78rem;color:var(--muted);margin-top:8px;}
.btp-datesbox{margin-top:12px;background:var(--panel-dim);border:1px solid var(--line);border-radius:var(--radius-md);padding:12px;}
.btp-datesbox [hidden]{display:none !important;}
.btp-dates-view{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;}
.btp-dates-line{margin:0;font-size:.92rem;}
.btp-edit-dates{background:none;border:none;color:#c2410c;font-weight:700;font-size:.78rem;cursor:pointer;padding:4px;font-family:inherit;}
.btp-dates-title{font-weight:700;margin:0;}
.btp-dates-sub{font-size:.78rem;color:var(--muted);margin:2px 0 0;}
.btp-dates-btns{display:flex;gap:8px;margin-top:10px;}
.btp-sortgrid{display:grid;gap:10px;margin-top:14px;}
.btp-sortgrid select{width:100%;}
@media(min-width:560px){.btp-sortgrid{grid-template-columns:1fr 1fr;align-items:end;}}
.btp-noshow-card{margin:0;align-self:end;}
.btp-missing{margin-top:10px;background:var(--tint);color:#c2410c;font-weight:700;font-size:.82rem;border-radius:var(--radius-xs);padding:6px 10px;}
.btp-pager{display:flex;gap:8px;align-items:center;margin-top:14px;}
.btp-pager-btn{border:1px solid var(--line);border-radius:var(--radius-md);padding:10px 12px;font-size:.9rem;font-weight:700;color:var(--ink);text-decoration:none;white-space:nowrap;min-height:44px;display:flex;align-items:center;background:var(--card);}
.btp-pager-btn.is-disabled{opacity:.4;}
.btp-pager-form{flex:1;min-width:0;}
.btp-pager-form select{width:100%;}
.btp-appline{font-size:.78rem;font-weight:600;color:var(--muted);margin-top:10px;}
.btp-empty{padding:24px 0;font-size:.9rem;color:var(--muted);}
.btp-list-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;}
.btp-print-count{font-size:.78rem;color:var(--muted);font-weight:600;white-space:nowrap;}
.btp-list-item{display:flex;gap:10px;align-items:flex-start;}
.btp-list-item .btp-list-row{flex:1;min-width:0;}
.btp-list-check{padding-top:8px;}
.btp-list-check input{width:20px;height:20px;accent-color:var(--orange);display:block;}
.btp-list-item.is-skipped .btp-list-row{opacity:.45;}
.btp-export-btn.is-disabled{opacity:.45;pointer-events:none;}
.btp-dlg .btp-actions{position:sticky;bottom:-20px;margin:14px -20px -20px;padding:12px 20px 20px;background:var(--card);z-index:2;}
.btp-dates-facts{display:grid;gap:2px;}
.btp-dates-view{align-items:flex-start;}
.btp-nowrap{white-space:nowrap;}
.bt-ci-btns{gap:6px;row-gap:8px;}
.bt-ci-wait{font-size:.82rem;padding:8px 11px;white-space:nowrap;}
.bt-ci-reset{font-size:.76rem;padding:8px 10px;white-space:nowrap;}
.bt-sec-card{padding:12px;overflow:visible;}
@media(min-width:640px){.bt-sec-card{padding:16px;}}
.bt-secbar{border-radius:var(--radius-xs);padding:6px 10px;font-size:.875rem;font-family:var(--font-display);letter-spacing:.04em;}
.bt-secbody{padding:8px 0 0;}
.bt-bo-text{color:var(--muted);font-size:.85rem;line-height:1.45;}
.bt-bo-text strong{color:var(--ink);}
.bt-bo-chips{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 0;}
.bt-bo-chips .bt-chip{font-size:.68rem;padding:4px 8px;border:none;}
.bt-bo-counted{font-size:.85rem;margin:8px 0 0;}
.bt-bo-list{display:grid;gap:6px;margin:0;padding:0;list-style:none;}
.bt-bo-rowbox{background:var(--panel-dim);border-radius:var(--radius-xs);padding:8px 10px;font-size:.85rem;line-height:1.45;}
.bt-bo-pill{display:inline-block;background:var(--tint);color:#c2410c;border:1px solid var(--orange);border-radius:var(--radius-pill);padding:1px 8px;font-size:.68rem;font-weight:700;white-space:nowrap;}
.bt-bo-tiles{grid-template-columns:repeat(3,1fr);gap:6px;}
@media(min-width:640px){.bt-bo-tiles{grid-template-columns:repeat(4,1fr);}}
.bt-bo-tiles .bt-tile{border-radius:var(--radius-xs);padding:6px 8px;background:var(--panel-dim);}
.bt-bo-tiles .bt-tile-num{font-family:var(--font-display);font-size:1.05rem;}
.bt-bo-tiles .bt-tile-label{font-size:.68rem;}
.bt-bo-table{font-size:.85rem;}
.bt-bo-table th,.bt-bo-table td{padding:4px 2px;}
.bt-bo-table thead tr{background:var(--panel-dim);}
.bt-bo-table th{font-weight:600;border-bottom:none;}
.bt-bo-table td{border-bottom:none;border-top:1px solid var(--line);}
.bt-bo-table th:nth-child(n+2),.bt-bo-table td:nth-child(n+2){text-align:center;}
.bt-bo-table th:last-child,.bt-bo-table td:last-child{text-align:right;}
.bt-bo-table .bt-belt{font-weight:600;}
.bt-bo-table .bt-zero{color:var(--muted);}
.bt-bo-table tfoot td{border-top:2px solid var(--black);background:var(--panel-dim);font-weight:700;}
.bt-bo-table .bt-rowtotal{font-weight:700;white-space:nowrap;}
.bt-roster-dlg{width:min(640px,96vw);}
.bt-roster-search{width:100%;font-size:16px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);margin-top:12px;font-family:inherit;}
.bt-roster-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;}
.bt-rchip{border:1px solid var(--line);background:var(--card);border-radius:var(--radius-pill);padding:6px 12px;font-weight:600;font-size:.82rem;cursor:pointer;font-family:inherit;color:var(--ink);}
.bt-rchip.is-on{background:var(--black);border-color:var(--black);color:#fff;}
.bt-roster-group{margin-top:14px;}
.bt-roster-row{display:flex;flex-direction:row;align-items:center;gap:10px;padding:9px 2px;border-top:1px solid var(--line);cursor:pointer;text-align:left;}
.bt-roster-row input{width:20px;height:20px;accent-color:var(--orange);flex:none;}
.bt-roster-row.is-added{opacity:.55;cursor:default;}
.bt-roster-main{display:flex;flex-direction:column;min-width:0;flex:1;}
.bt-roster-name{font-weight:700;}
.bt-roster-sub{color:var(--muted);font-size:.82rem;}
.bt-roster-foot{position:sticky;bottom:-20px;margin:14px -20px -20px;padding:12px 20px 20px;background:var(--card);border-top:1px solid var(--line);display:flex;gap:8px;z-index:2;}
.bt-roster-foot .btn-orange{flex:1;}
.bt-roster-foot .btn-orange:disabled{opacity:.45;}
.bt-roster-manual{margin-top:14px;border-top:1px solid var(--line);padding-top:12px;}
.bt-roster-manual-link{background:none;border:none;color:#c2410c;font-weight:700;font-size:.85rem;cursor:pointer;padding:4px 0;font-family:inherit;}
.bt-sugg-banner{display:flex;align-items:center;justify-content:space-between;gap:10px;background:var(--tint);border:1px solid #f5c9a8;border-radius:var(--radius-md);padding:10px 12px;margin:0 0 10px;font-size:.9rem;}
.bt-roster-rowwrap{display:flex;align-items:center;gap:6px;}
.bt-roster-rowwrap .bt-roster-row{flex:1;min-width:0;}
.bt-sugg-x{border:none;background:none;color:var(--muted);font-size:1rem;cursor:pointer;padding:8px;font-family:inherit;}
.bt-prof-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 0;border-top:1px solid var(--line);flex-wrap:wrap;}
.bt-prof-t{font-weight:700;margin:0;}
.bt-prof-state{margin:2px 0 0;font-size:.85rem;color:var(--muted);}
.bt-prof-state.is-on{color:#c2410c;font-weight:700;}
.bt-prof-btns{display:flex;gap:6px;flex-wrap:wrap;}

/* Promotions tab bulk promote */
.bt-promo-controls{display:flex;gap:16px;margin-top:10px;align-items:center;}

.bt-promo-link{background:none;border:none;color:#ffb37a;font-weight:700;font-size:.85rem;padding:2px 0;cursor:pointer;}
.bt-promo-go{width:auto;text-align:center;margin-top:10px;padding:10px 22px;}
#btPromoForm>.bt-promo-go{display:block;margin-left:auto;}
.bt-promo-done{color:var(--accent-strong);font-weight:700;font-size:.8rem;white-space:nowrap;}
.bt-promo-lock{color:var(--muted,#667085);font-size:.78rem;text-align:right;max-width:48%;}

/* ---- iPad / wide pass: Testing section ---- */
@media (min-width:900px){
  #btRosterDlg, #btAppDlg{width:min(880px,94vw);}
  #btRosterDlg .bt-roster-group{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:18px;align-items:start;}
  #btRosterDlg .bt-roster-group>*{min-width:0;}
  #btRosterDlg .bt-roster-group .bt-ci-grouphead{grid-column:1/-1;}
}
@media (min-width:1000px){
  section.bt-group{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:18px;align-items:start;}
  section.bt-group .bt-grouphead{grid-column:1/-1;}
  section.bt-group>*{min-width:0;}
  .bt-waiting-list, .bt-in-list{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px 16px;align-items:start;}
  #btPromoForm .bt-secbody{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:18px;align-items:start;}
  #btPromoForm .bt-secbody>*{min-width:0;}
  .bt-tabgrid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:14px;align-items:start;}
  .bt-tabgrid .bt-span2{grid-column:1/-1;}
  .bt-tabgrid .card{margin-bottom:0;min-width:0;}
  .bt-tabgrid .bt-secbody{overflow-x:auto;}
  .bt-home-cards{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:14px;align-items:start;}
  .bt-home-cards .card{margin-bottom:0;min-width:0;}
  .bt-home-cards .bt-tiles-card{grid-template-columns:repeat(3,1fr);}
}

/* ---- iPad tightening: centered column, calmer rows ---- */
@media (min-width:1000px){
  .bt-detail, .bt-homewrap{max-width:1060px;margin-inline:auto;}
  .bt-detail .bt-export-grid{grid-template-columns:repeat(6,1fr);}
  .bt-detail .bt-export-grid>*{grid-column:span 2;}
  .bt-detail .bt-export-grid>.bt-export-wide{grid-column:span 3;}

  section.bt-group .bt-row-summary{align-items:flex-start;}
  section.bt-group .bt-row-pills{padding-top:2px;}
}

/* Settings-style link row at the foot of the Testing home (Presets) */
.bt-settings-row{display:flex;align-items:center;gap:12px;text-decoration:none;color:inherit;margin-top:14px;}
.bt-settings-ico{font-size:1.25rem;line-height:1;flex:0 0 auto;}
.bt-settings-ico .ico{width:22px;height:22px;margin-right:0;vertical-align:middle}
.bt-note-pill .ico{width:13px;height:13px;margin-right:3px;vertical-align:-2px}
.bt-settings-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;text-align:left;}
.bt-settings-title{font-weight:700;font-size:1rem;}
.bt-settings-sub{color:var(--muted);font-size:.83rem;}
.bt-settings-arrow{color:var(--orange-dark);font-weight:800;font-size:1.1rem;flex:0 0 auto;}


/* Promotions header card: title block left, Promote button top-right */
.bt-promo-toprow{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;}
.bt-promo-titles{flex:1;min-width:0;}
.bt-promo-toprow .bt-promo-go{margin:0;flex:0 0 auto;}
.bt-promo-head .bt-promo-controls .bt-promo-go{margin-left:0;}

/* Black Belt Testing kind: badge, create-dialog type picker, 3-tab bar */
.bt-kind-badge{display:inline-block;background:var(--black);color:#fff;border-radius:var(--radius-pill);padding:4px 10px;font-size:.7rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;line-height:1.35;}
.bt-kindpick{display:grid;gap:8px;margin-bottom:12px;}
.bt-kindopt{display:flex;gap:10px;align-items:flex-start;border:1.5px solid var(--line);border-radius:var(--radius);padding:12px;cursor:pointer;text-transform:none;letter-spacing:0;}
.bt-kindopt:has(input:checked){border-color:var(--orange,#f0670c);background:var(--tint);}
.bt-kindopt input[type="radio"]{width:20px;height:20px;min-height:0;padding:0;margin:2px 0 0;flex:none;accent-color:var(--orange,#f0670c);}
.bt-kindopt-main{display:flex;flex-direction:column;gap:2px;min-width:0;}
.bt-kindopt-name{font-weight:800;color:var(--ink,#111);font-size:.95rem;}
.bt-kindopt-sub{font-size:.82rem;color:var(--muted,#667085);font-weight:400;}
.bt-tabs-3{gap:0;padding:5px;border-radius:var(--radius-pill);}
.bt-tabs-3 .bt-tab{flex:1;display:flex;align-items:center;justify-content:center;height:44px;font-size:.8rem;padding:0 2px;letter-spacing:0;white-space:nowrap;border-bottom:none;border-radius:var(--radius-pill);box-shadow:none;}
.bt-tabs-3 .bt-tab.is-active{background:var(--card);color:var(--orange-dark);box-shadow:0 2px 8px rgba(0,0,0,.12);border-bottom:none;}

/* Black Belt home card tiles + light kind badge (Muse canvas parity) */
.bt-kind-badge-belt{background:var(--tint);color:#c2410c;border:1px solid #ea580c;}
.bt-tiles-card.bt-tiles-bb{grid-template-columns:repeat(2,1fr);}
@media (min-width:640px){.bt-tiles-card.bt-tiles-bb{grid-template-columns:repeat(4,1fr);}}

/* Messaging campaigns */
.camp-head{display:flex;justify-content:space-between;align-items:center;gap:12px}
.camp-row{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:12px 0;border-top:1px solid var(--line)}
.camp-row:first-child{border-top:none;padding-top:4px}
.camp-meta{color:var(--muted);font-size:.85rem;margin-top:2px}
.camp-field{margin-bottom:12px}
.camp-field label{display:block;font-size:.76rem;font-weight:600;margin-bottom:3px}
.camp-field input,.camp-field select,.camp-field textarea{width:100%}
.camp-pair{display:flex;gap:10px}
.camp-pair>div{flex:1}
.camp-preview{width:100%;height:560px;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--hairline)}

/* Rich-text email composer */
.rt-toolbar{display:flex;flex-wrap:wrap;gap:6px;align-items:center;border:1px solid var(--line);border-bottom:none;border-radius:var(--radius-md) 12px 0 0;padding:8px;background:var(--panel)}
.rt-btn{border:1px solid #d7dade;background:var(--card);border-radius:var(--radius-xs);padding:6px 10px;font-size:.9rem;cursor:pointer;line-height:1.2;color:var(--ink)}
.rt-btn:active{background:var(--orange-soft)}
.rt-bold{font-weight:800}
.rt-italic{font-style:italic;font-family:Georgia,serif}
.rt-sep{width:1px;height:20px;background:var(--line);margin:0 2px}
.camp-field .rt-select{width:auto;height:auto;min-height:0;padding:5px 8px;font-size:16px}
.rt-editor{border:1px solid var(--line);border-radius:0 0 12px 12px;min-height:230px;padding:14px;background:var(--card);font-size:16px;line-height:1.55;outline:none}
.rt-editor:focus{border-color:var(--orange)}
.rt-codes{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:8px}
.rt-chip{border:1px dashed var(--dashed);background:var(--card);border-radius:var(--radius-pill);padding:4px 10px;font-size:.8rem;cursor:pointer;font-family:ui-monospace,Menlo,monospace;color:var(--ink)}
.rt-count-line{margin:.2rem 0 .6rem}
.rt-source{width:100%;min-height:230px;border:1px solid var(--line);border-radius:0 0 12px 12px;padding:12px;font-family:ui-monospace,Menlo,monospace;font-size:16px;line-height:1.5;background:var(--card);color:var(--ink)}
.rt-upload{cursor:pointer;display:inline-block}
.rt-colorwrap{display:inline-flex;align-items:center;gap:2px;border:1px solid #d7dade;background:var(--card);border-radius:var(--radius-xs);padding:3px 6px;font-weight:800;cursor:pointer;font-size:.9rem;line-height:1}
.rt-colorwrap input{border:none;padding:0;width:22px;height:22px;background:none;cursor:pointer}
.rt-emoji{display:flex;flex-wrap:wrap;gap:2px;border:1px solid var(--line);border-top:none;padding:8px;background:#fff}
.rt-emoji button{border:none;background:none;font-size:20px;cursor:pointer;padding:2px 4px;line-height:1.2}
#rtEditor div[data-cond]{border:1.5px dashed var(--orange);border-radius:var(--radius-xs);padding:8px;margin:6px 0}
#rtEditor div[data-cond]::before{content:"👁 Only: " attr(data-cond);display:block;font-size:11px;color:var(--orange-dark);font-weight:700;margin-bottom:4px}

.aud-zone{border-radius:var(--radius);padding:.8rem .9rem;margin-bottom:.8rem}
.aud-zone-in{background:var(--orange-soft)}
.aud-zone-out{background:#fef2f2}
.aud-zone-head{font-family:var(--font-display);text-transform:uppercase;letter-spacing:.04em;font-size:.95rem;margin-bottom:.6rem}
.aud-zone-head span{text-transform:none;letter-spacing:0;color:var(--muted);font-size:.8rem;margin-left:.3rem;font-family:inherit}
.aud-zone-out .aud-zone-head{color:#b91c1c}
.aud-row{display:flex;gap:.5rem;align-items:center;margin-bottom:.5rem;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-md);padding:.45rem .5rem .45rem .7rem;box-shadow:0 1px 2px rgba(0,0,0,.04)}
.aud-row select{flex:1;min-width:140px;border:none;background:transparent;font-weight:600}
.aud-row select:focus{outline:none}
.aud-row .aud-refwrap{display:flex;align-items:center}
.aud-row .aud-ref{font-weight:400}
.aud-row input.aud-ref{border:none;background:transparent}
.aud-del{border:none;background:#f3f4f6;border-radius:50%;width:30px;height:30px;cursor:pointer;color:#b91c1c;flex:none}
.aud-allchip{display:inline-block;background:var(--card);border:1.5px solid var(--orange);color:var(--orange-dark);border-radius:var(--radius-pill);padding:.3rem .8rem;font-weight:700;margin-bottom:.6rem}
.aud-none{color:var(--muted);font-size:.85rem;margin:.1rem 0 .6rem}
.aud-add-out{color:#b91c1c;border:1px solid #fecaca;background:#fff}
.aud-dedupe{display:flex;gap:.6rem;align-items:flex-start;background:#f9fafb;border:1px solid var(--line);border-radius:var(--radius-md);padding:.7rem .8rem;margin-bottom:1rem;cursor:pointer}
.aud-dedupe input[type="checkbox"]{width:22px;height:22px;min-height:0;padding:0;margin:2px 0 0;flex:none;accent-color:var(--orange)}

.cmp-steps{display:flex;gap:6px;margin:0 0 14px}
.cmp-step{flex:1;text-align:center;padding:8px 4px;border-radius:var(--radius-pill);background:var(--grey-soft);color:var(--muted);font-size:.85rem;font-weight:600;border:none;cursor:pointer}
.cmp-step.on{background:var(--orange);color:#fff}
.cmp-sec{padding:0;overflow:hidden}
.cmp-head{display:flex;align-items:center;gap:10px;width:100%;background:none;border:none;padding:14px 16px;cursor:pointer;text-align:left;font:inherit;color:inherit}
.cmp-n{width:26px;height:26px;border-radius:50%;background:var(--orange);color:#fff;font-weight:700;font-size:.9rem;display:flex;align-items:center;justify-content:center;flex:none}
.cmp-sec:not(.open) .cmp-n{background:#e5e7eb;color:var(--muted)}
.cmp-t{font-family:var(--font-display);text-transform:uppercase;letter-spacing:.03em;font-size:1.1rem;font-weight:600}
.cmp-s{color:var(--muted);font-size:.85rem;margin-left:auto;text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:45%}
.cmp-chev{color:var(--muted);transition:transform .2s;flex:none}
.cmp-sec .cmp-body{display:none;padding:0 16px 16px}
.cmp-sec.open .cmp-body{display:block}
.cmp-sec.open .cmp-head .cmp-chev{transform:rotate(180deg)}
.aud-summary{display:flex;align-items:center;gap:12px;background:var(--orange-soft);border-radius:var(--radius-md);padding:10px 14px;margin-bottom:6px}
.aud-big{font-family:var(--font-display);font-size:1.7rem;font-weight:700;color:var(--orange-dark);white-space:nowrap}
.aud-txt{font-size:.92rem;line-height:1.4}
.aud-lbl{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin:12px 0 6px}
.aud-chips{display:flex;flex-wrap:wrap;gap:6px;min-height:6px}
.aud-chip{display:inline-flex;align-items:center;gap:6px;border-radius:var(--radius-pill);padding:5px 6px 5px 12px;font-size:.88rem;font-weight:600;background:var(--orange-soft);color:var(--orange-ink);border:1px solid var(--orange)}
.aud-chip.out{background:var(--card);border-color:#e02424;color:#b91c1c}
.aud-chip-x{width:19px;height:19px;border-radius:50%;border:none;background:rgba(0,0,0,.13);color:inherit;font-size:.62rem;cursor:pointer;line-height:1;padding:0}
.aud-btnrow{display:flex;gap:8px;margin-top:14px;flex-wrap:wrap}
.aud-picker{margin-top:14px;border-top:1px dashed var(--line);padding-top:12px}
.aud-picker-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.aud-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}
.aud-tile{border:1.5px solid var(--line);border-radius:var(--radius-md);padding:10px 12px;font-size:.92rem;font-weight:600;background:var(--card);text-align:left;cursor:pointer;color:inherit;font-family:inherit}
.aud-tile small{display:block;font-weight:400;color:var(--muted);font-size:.76rem;margin-top:2px}
.aud-tile.sel{border-color:var(--orange);background:var(--orange-soft);color:var(--orange-ink)}
.aud-chooser{display:flex;gap:8px;align-items:center;margin-top:12px;flex-wrap:wrap}
.aud-chooser select{flex:1;min-width:160px}
.aud-disc{margin-top:14px;border:1px dashed var(--line);border-radius:var(--radius-md)}
.aud-disc-head{display:flex;align-items:center;width:100%;background:none;border:none;padding:10px 12px;font:inherit;font-size:.9rem;font-weight:600;color:var(--muted);cursor:pointer;text-align:left}
.aud-disc-head .cmp-chev{margin-left:auto}
.aud-disc.open .aud-disc-head .cmp-chev{transform:rotate(90deg)}
.aud-disc-body{padding:0 12px 12px}
.aud-dedupe2{display:flex;gap:.7rem;align-items:center;margin-top:16px;cursor:pointer}
.aud-switch{position:relative;display:inline-block;width:46px;height:26px;flex:none}
.aud-switch input{position:absolute;opacity:0;width:100%;height:100%;margin:0;cursor:pointer}
.aud-track{position:absolute;inset:0;background:#d1d5db;border-radius:var(--radius-pill);transition:.2s;pointer-events:none}
.aud-track:before{content:"";position:absolute;width:20px;height:20px;left:3px;top:3px;background:var(--card);border-radius:50%;transition:.2s;box-shadow:0 1px 3px rgba(0,0,0,.25)}
.aud-switch input:checked + .aud-track{background:var(--orange)}
.aud-switch input:checked + .aud-track:before{transform:translateX(20px)}
.aud-stu{display:flex;gap:.5rem;align-items:flex-start;padding:.45rem .2rem;border-bottom:1px solid var(--line);cursor:pointer;width:100%}
.aud-stu.dis{opacity:.55;cursor:default}
.aud-stu input[type="checkbox"]{width:20px;height:20px;min-height:0;padding:0;margin:1px 0 0;flex:none;accent-color:var(--orange)}
.cmp-sticky{position:sticky;bottom:88px;z-index:40;display:flex;align-items:center;gap:10px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 6px 20px rgba(0,0,0,.12);padding:10px 14px;margin-top:10px}
.cmp-sticky-txt{font-size:.92rem}
.cmp-sticky .btn{margin-left:auto}

.aud-zones{display:grid;gap:.7rem}
@media (min-width:760px){.aud-zones{grid-template-columns:1fr 1fr}}
.aud-zone{padding:.65rem .75rem;margin-bottom:0}
.aud-zone-head{margin-bottom:.45rem}
label.aud-dedupe2{flex-direction:row;justify-content:flex-start;text-align:left;border-top:1px solid var(--line);padding-top:14px;width:100%}
.aud-stu{flex-direction:row}

/* email section theme pass */
.cmp-sec input[name="subject"]{font-size:1.05rem;font-weight:600}
.rt-toolbar{background:#f4f4f6;border:1px solid var(--line);border-bottom:none;border-radius:var(--radius) 14px 0 0;padding:7px;gap:5px}
.rt-btn{border:1px solid transparent;background:var(--card);box-shadow:0 1px 2px rgba(16,24,40,.07);border-radius:9px;height:36px;padding:0 11px;display:inline-flex;align-items:center;gap:5px;font-size:.88rem;font-weight:600}
.rt-btn:hover{border-color:var(--orange)}
.rt-btn svg{width:17px;height:17px;flex:none}
.rt-sep{background:#dddde1;height:22px}
.camp-field .rt-select{height:36px;min-height:36px;border:1px solid transparent;border-radius:9px;background:var(--card);box-shadow:0 1px 2px rgba(16,24,40,.07);font-weight:600;padding:0 8px}
label.rt-colorwrap{flex-direction:row;height:36px;border:1px solid transparent;border-radius:9px;background:var(--card);box-shadow:0 1px 2px rgba(16,24,40,.07);padding:0 8px;gap:5px}
.rt-colorwrap input{-webkit-appearance:none;appearance:none;width:20px;height:20px;border-radius:6px;overflow:hidden}
.rt-colorwrap input::-webkit-color-swatch-wrapper{padding:0}
.rt-colorwrap input::-webkit-color-swatch{border:1px solid rgba(0,0,0,.18);border-radius:6px}
.rt-colorwrap input::-moz-color-swatch{border:1px solid rgba(0,0,0,.18);border-radius:6px}
label.rt-hlwrap{background:var(--orange-soft)}
.rt-editor{border-radius:0 0 14px 14px;padding:16px}
.rt-editor:focus{border-color:var(--orange);box-shadow:0 0 0 3px var(--orange-soft)}
.rt-source{border-radius:0 0 14px 14px}
.rt-chip{background:var(--orange-soft);color:var(--orange-dark);border:1px solid #ffd9bd;font-family:inherit;font-weight:600}
.rt-emoji{border-radius:0 0 14px 14px}
.cmp-more{margin-top:16px}

/* compose-on-the-sheet pass */
.rt-toolbar{border-radius:var(--radius);border-bottom:1px solid var(--line);position:relative;z-index:1}
.rt-flex{flex:1}
.rt-insert{background:var(--orange);color:#fff;font-weight:700}
.rt-menu{position:absolute;top:calc(100% + 6px);right:0;width:330px;max-width:calc(100vw - 48px);background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 14px 34px rgba(16,24,40,.16);padding:10px;z-index:30}
.rt-menu[hidden]{display:none}
.rt-menu-h{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin:2px 4px 8px}
.rt-tiles{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.rt-tile{border:1px solid var(--line);border-radius:var(--radius-sm);padding:9px 10px;background:var(--card);font-weight:600;font-size:.88rem;text-align:left;cursor:pointer;color:var(--ink)}
.rt-tile small{display:block;color:var(--muted);font-weight:400;font-size:.74rem;margin-top:1px}
.rt-tile:hover{border-color:var(--orange)}
label.rt-tile{display:flex;flex-direction:column;align-items:flex-start;gap:1px}
.rt-menu-list{width:230px;padding:6px}
.rt-mi{display:flex;width:100%;background:none;border:none;padding:9px 10px;font-size:.9rem;font-weight:600;color:var(--ink);border-radius:var(--radius-xs);cursor:pointer;text-align:left}
.rt-mi:hover{background:var(--orange-soft)}
.rt-swatch{position:relative;display:inline-flex;flex-direction:row;align-items:center;gap:5px;height:36px;background:var(--card);border-radius:9px;box-shadow:0 1px 2px rgba(16,24,40,.07);padding:0 8px;cursor:pointer}
.rt-swatch input{position:absolute;inset:0;opacity:0;width:100%;height:100%;cursor:pointer;margin:0;padding:0}
.rt-sw-a{font-weight:800;font-size:.9rem}
.rt-sw-sq{width:19px;height:19px;border-radius:5px;border:1px solid rgba(0,0,0,.2);flex:none}
label.rt-hlwrap{background:var(--orange-soft)}
.rt-emoji{border:1px solid var(--line);border-radius:var(--radius-md);margin-top:6px}
.rt-codes{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-md);padding:10px;margin-top:6px}
.rt-codes[hidden]{display:none}
.rt-toolbar .rt-select,.cmp-under .rt-select{width:auto;height:36px;min-height:36px;border:1px solid transparent;border-radius:9px;background:var(--card);box-shadow:0 1px 2px rgba(16,24,40,.07);font-weight:600;padding:0 8px;font-size:16px;color:var(--ink)}
.cmp-sheet{border:1px solid var(--line);border-radius:var(--radius);background:var(--card);box-shadow:0 2px 8px rgba(16,24,40,.05);overflow:hidden;margin-top:12px}
.cmp-sec .sheet-subject{border:none;box-shadow:none;font-size:1.12rem;font-weight:700;padding:14px 16px 2px;width:100%;background:transparent;border-radius:0}
.cmp-sec .sheet-preview{border:none;box-shadow:none;color:var(--muted);font-size:16px;padding:2px 16px 12px;width:100%;background:transparent;border-radius:0}
.sheet-art{border-top:1px solid var(--line);background:linear-gradient(120deg,var(--orange-soft),#fff3e6);display:flex;align-items:center;justify-content:center}
.sheet-art img{width:100%;max-height:230px;object-fit:cover;display:block}
.sheet-art-empty{color:var(--orange-dark);font-weight:600;font-size:.85rem;padding:22px}
.sheet-artrow{display:flex;align-items:center;gap:.6rem;padding:7px 16px;border-bottom:1px solid #f0f0f1}
.cmp-sec .sheet-artrow input{flex:1;border:none;box-shadow:none;font-size:16px;color:var(--muted);padding:2px 0;background:transparent;border-radius:0}
.cmp-sec .sheet-headline{border:none;box-shadow:none;font-family:var(--font-display);font-size:1.45rem;font-weight:600;padding:14px 16px 0;width:100%;background:transparent;border-radius:0}
.rt-editor.sheet-editor{border:none;border-radius:0;min-height:180px;padding:10px 16px 16px;box-shadow:none}
.rt-editor.sheet-editor:focus{box-shadow:none}
.cmp-sheet .rt-source{border:none;border-top:1px solid var(--line);border-radius:0;width:100%}
.sheet-foot{padding:10px 16px;color:var(--grey-text);font-size:.74rem;border-top:1px solid #f0f0f1}
.cmp-under{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin-top:12px;padding:6px 8px;border-radius:var(--radius-md)}
.cmp-howlink{background:none;border:none;color:var(--orange-dark);font-weight:600;cursor:pointer;font-size:.85rem;font-family:inherit}
.cmp-how{margin-top:4px}
.cmp-flash{animation:cmpFlash 1.25s ease}
@keyframes cmpFlash{0%{box-shadow:0 0 0 0 rgba(249,106,0,0)}25%{box-shadow:0 0 0 3px rgba(249,106,0,.55)}100%{box-shadow:0 0 0 0 rgba(249,106,0,0)}}
.cmp-disc-sub{margin-left:.35rem}

/* sticky bar as a dock sibling: compact centered pill, same border/shadow */
.cmp-sticky{width:fit-content;max-width:calc(100% - 24px);margin:12px auto 0;bottom:calc(82px + env(safe-area-inset-bottom));border-radius:var(--radius-pill);padding:5px 5px 5px 16px;box-shadow:var(--shadow-float)}
.cmp-sticky .btn{margin-left:0;border-radius:var(--radius-pill);padding:.55rem 1.05rem}
.cmp-sticky-txt{font-weight:600;white-space:nowrap}

/* sections are stacking contexts: compose widgets can never paint over the app header (z 20) or dock (z 30) */
.cmp-sec{position:relative;z-index:0}

/* A/B subject switch in the sheet */
.sheet-subjrow{display:flex;align-items:center;gap:10px;padding:14px 16px 2px}
.sheet-subjrow .sheet-subject,.sheet-brow .sheet-subject{padding:0}
.ab-tag{flex:none;width:24px;height:24px;border-radius:var(--radius-xs);background:var(--black);color:#fff;font-weight:800;font-size:.8rem;display:inline-flex;align-items:center;justify-content:center}
.ab-tag-b{background:var(--orange)}
.ab-tag[hidden]{display:none}
label.sheet-abrow{display:flex;flex-direction:row;align-items:center;gap:.6rem;padding:8px 16px 10px;cursor:pointer}
.sheet-brow{display:flex;align-items:center;gap:10px;padding:2px 16px 6px}
.sheet-brow[hidden],.sheet-split[hidden]{display:none}
.sheet-split{display:flex;align-items:center;gap:8px;padding:0 16px 12px 50px;font-size:.74rem;color:var(--muted);font-weight:600}
.split-bar{flex:1;display:flex;height:8px;border-radius:var(--radius-track);overflow:hidden}
.split-a{flex:1;background:var(--orange)}
.split-b{flex:1;background:var(--orange-soft)}

/* messaging hub + report pass */
.msg-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(128px,1fr));gap:8px;margin:.7rem 0}
.msg-stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-md);padding:10px 12px}
.msg-stat-n{display:block;font-family:var(--font-display);font-size:1.5rem;font-weight:600;line-height:1.1}
.msg-stat-n small{font-size:.95rem;color:var(--orange-dark)}
.msg-stat-l{display:block;color:var(--muted);font-size:.78rem;margin-top:2px}
.msg-cal{width:100%;border-collapse:collapse;margin-top:.4rem}
.msg-cal th{font-size:.72rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);padding:4px;text-align:left}
.msg-cal td{border:1px solid #f0f0f1;width:14.28%;height:42px;vertical-align:top;padding:4px}
.cal-n{font-size:.8rem}
.cal-today{background:var(--orange-soft)}
.cal-today .cal-n{font-weight:800;color:var(--orange-dark)}
.cal-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin:2px 1px 0}
.cal-sent{background:var(--orange)}
.cal-scheduled{background:var(--card);border:2px solid var(--orange);width:7px;height:7px}
.tpl-card{border:1px solid var(--line);border-radius:var(--radius);padding:12px;margin-top:10px}
.tpl-head{display:flex;justify-content:space-between;gap:.6rem;align-items:flex-start;flex-wrap:wrap}
.tpl-pv{width:100%;height:250px;border:1px solid var(--line);border-radius:var(--radius-sm);margin-top:10px;pointer-events:none;background:var(--hairline)}
.tpl-pv-sm{height:150px}
.rep-pill{font-size:.74rem;font-weight:700;border-radius:var(--radius-pill);padding:3px 9px;background:var(--grey-soft);color:var(--muted);white-space:nowrap}
.rep-clicked{background:var(--orange);color:#fff}
.rep-opened{background:#e7f6ec;color:#137333}
.rep-bounced,.rep-complained{background:var(--danger-bg);color:#b3261e}
.rep-delivered{background:#eef2ff;color:#3b4ea2}

/* family & contacts + coach's corner */
.fromgd{color:var(--grey-text);font-size:.66rem;font-weight:800;letter-spacing:.05em}
.fam-person{padding:.3rem 0}
.fam-missing{margin-top:.8rem;color:var(--orange-dark);font-weight:700;font-size:.88rem}
.sd-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:6px 0;border-bottom:1px solid var(--hairline);font-size:.92rem}
.sd-row .k{color:var(--muted)}
.sd-stack{padding:6px 0;border-bottom:1px solid var(--hairline)}
.sd-stack .k{display:block;color:var(--muted);font-size:.92rem}
.sd-stack .v{display:block;font-weight:600;font-size:.92rem;margin-top:1px;word-break:break-word}
.sd-stack .sub{display:block;color:var(--muted);font-size:.82rem;font-weight:600;margin-top:1px;word-break:break-word}
.sd-stack .v-empty{color:var(--grey-text)}
#details .sect-label{margin:18px 0 2px}
#details .sect-label:first-of-type{margin-top:10px}
#details .kv,#details .sd-stack{padding-top:9px;padding-bottom:9px}
#details .sd-row{padding-top:9px;padding-bottom:9px}
.sd-missing{display:inline-block;margin-top:.7rem;background:var(--orange-soft);color:var(--orange-dark);font-weight:700;font-size:.78rem;border-radius:var(--radius-xs);padding:4px 9px}
/* --- families (Oct 19, 2026) --- */
.sd-famhead{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.sd-famhead .sect-label{flex:1;min-width:0}
.sd-viewlink{color:var(--orange);font-size:.82rem;font-weight:700;text-decoration:none;flex:none}
a.sd-rowlink{text-decoration:none;color:inherit}
.fam-tag{display:inline-block;background:var(--grey-soft);color:var(--muted);font-size:.64rem;font-weight:800;letter-spacing:.04em;border-radius:var(--radius-track);padding:2px 8px;margin-left:6px;vertical-align:2px}
.fam-chip{display:inline-block;margin:0 6px 6px 0;background:var(--orange-soft);color:var(--orange-dark);font-weight:700;font-size:.78rem;border-radius:var(--radius-xs);padding:4px 9px;text-transform:capitalize}
.fam-kid{display:flex;align-items:center;gap:11px;padding:10px 0;border-bottom:1px solid var(--hairline);text-decoration:none;color:inherit}
.fam-kid:last-child{border-bottom:none;padding-bottom:2px}
.fam-kid .fk-main{flex:1;min-width:0;display:block}
.fam-kid .fk-name{display:block;font-weight:700;font-size:.95rem}
.fam-kid .fk-sub{display:block;color:var(--muted);font-size:.84rem;font-weight:600;margin-top:1px}
.fam-kid .fk-chev{color:var(--grey-text);font-weight:700;flex:none}
.fam-testing{display:inline-block;background:var(--orange-soft);color:var(--orange-dark);font-size:.68rem;font-weight:800;border-radius:var(--radius-track);padding:2px 8px;margin-left:6px;vertical-align:2px}
.fam-msg{padding:9px 0;border-bottom:1px solid var(--hairline)}
.fam-msg:last-child{border-bottom:none;padding-bottom:2px}
.fam-msg .fm-t{font-weight:600;font-size:.92rem}
.fam-msg .fm-meta{color:var(--muted);font-size:.8rem;font-weight:600;margin-top:2px}
.fam-admintag{display:inline-block;background:#16161a;color:#fff;font-size:.58rem;font-weight:800;letter-spacing:.06em;border-radius:var(--radius-track);padding:2px 7px}
.manage-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 0;border-bottom:1px solid var(--hairline)}
.manage-row:last-child{border-bottom:none;padding-bottom:2px}
.manage-row .nm3{font-weight:600;font-size:.9rem}
.unlink-btn{background:none;border:none;color:var(--red,#c0272d);font:inherit;font-size:.82rem;font-weight:700;cursor:pointer;padding:0}
.link-results{display:flex;flex-direction:column;gap:6px;margin-top:8px}
.link-result{display:block;width:100%;text-align:left;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-sm);padding:10px 12px;font:inherit;font-size:.9rem;font-weight:600;cursor:pointer}
.link-result:active{background:var(--orange-soft)}
.sd-add{display:flex;align-items:center;gap:.5rem;background:none;border:none;padding:.45rem 0;font:inherit;font-weight:700;font-size:.88rem;color:var(--orange-dark);cursor:pointer}
.sd-add .plus{display:inline-flex;width:20px;height:20px;border-radius:50%;background:var(--orange-soft);color:var(--orange-dark);align-items:center;justify-content:center;font-weight:800;flex:none}
.sd-switchrow{display:flex;flex-direction:row;justify-content:space-between;align-items:center;gap:12px;padding:.35rem 0;font-size:.92rem}
.sd-lock{border:1px solid var(--line);border-radius:9px;padding:8px 11px;background:var(--panel);color:var(--muted);font-size:.9rem}
.sd-del{margin-top:1rem;border-top:1px solid var(--hairline);padding-top:.4rem}
#detailsDlg input[type="date"]{color:#16161a}
#detailsDlg input[type="date"]::-webkit-date-and-time-value{color:#16161a;text-align:left}
.addr-wrap{position:relative}
.addr-suggest{position:absolute;left:0;right:0;top:100%;z-index:5;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-sm);box-shadow:0 10px 28px rgba(16,24,40,.18);overflow:hidden;margin-top:4px}
.addr-item{display:block;width:100%;text-align:left;background:var(--card);border:none;border-bottom:1px solid var(--hairline);padding:11px 12px;font:inherit;font-size:.92rem;cursor:pointer}
.addr-item:last-child{border-bottom:none}
.addr-item:active{background:var(--orange-soft)}
.addr-row{display:flex;gap:10px}
.addr-row label{margin:0;min-width:0}
.addr-row input{width:100%;min-width:0}
.addr-city{flex:2 1 0}
.addr-state{flex:0 0 76px}
.addr-state input{text-transform:uppercase}
.addr-zip{flex:1 1 0}
.coach-block{border-bottom:1px solid #f0f0f1;padding-bottom:.85rem;margin-bottom:.85rem}
.kv{display:flex;justify-content:space-between;gap:12px;padding:6px 0;border-bottom:1px solid var(--hairline);font-size:.92rem}
.kv:last-of-type{border-bottom:none}
.kv .k{color:var(--muted)}
.kv .v{font-weight:600;text-align:right}

/* ASP roster rows: two stacked lines — identity (avatar + name block,
   chips flowing under the name) over an actions row — so no element
   competes for horizontal space on a phone and nothing can overflow
   sideways. The pickup-school control is one compact button opening
   the shared picker sheet instead of a per-row select. */
.feed li.asp-row{flex-direction:column;align-items:stretch;gap:7px;min-width:0}
.asp-row-top{display:flex;gap:10px;align-items:flex-start;min-width:0}
.asp-row-top .avatar{width:40px;height:40px;font-size:.85rem}
.asp-row-id{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.asp-row-name{color:inherit;text-decoration:none;overflow-wrap:break-word;min-width:0}
.asp-row-meta{overflow-wrap:break-word;min-width:0}
.asp-chiprow{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px;align-items:center;min-width:0}
.asp-gone-chip{background:#e5f4e3;color:var(--ok-ink-deep);border-radius:var(--radius-pill);padding:3px 10px;font-size:.78rem;font-weight:700}
.asp-sib-chip{background:#e8edf7;color:#31456e;border-radius:var(--radius-pill);padding:3px 10px;font-size:.78rem;font-weight:700}
.asp-row-actions{display:flex;flex-wrap:nowrap;gap:8px;align-items:center;min-width:0}
.asp-row-actions>*{flex:none}
.asp-row-actions>.asp-school-btn{flex:0 1 auto;min-width:84px}
.asp-school-btn{margin-left:auto;display:inline-flex;align-items:center;gap:6px;max-width:62%;min-width:0;background:var(--card);border:1.5px solid var(--line,#e3e3e3);border-radius:var(--radius-pill);padding:6px 12px;font:inherit;font-size:.85rem;font-weight:600;color:inherit;cursor:pointer}
.asp-school-btn-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.asp-school-btn-chev{flex:none;color:var(--muted,#888)}
.asp-school-list{display:flex;flex-direction:column}
.asp-school-opt{display:block;width:100%;text-align:left;background:var(--card);border:none;border-bottom:1px solid #f1f1f4;padding:13px 6px;font:inherit;font-size:16px;cursor:pointer;color:var(--ink);-webkit-text-fill-color:currentColor;-webkit-appearance:none;appearance:none;border-radius:0}
.asp-school-opt:last-child{border-bottom:none}
.asp-school-opt:active{background:var(--orange-soft,#fde8d7)}
.asp-grouphdr{flex-wrap:nowrap}
.asp-note-btn{background:var(--grey-soft);color:inherit;border:1.5px solid var(--track)}

/* ---- Driver Mode (ASP Phase 3) ---- */
.drv-strip{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}
.drv-banner{background:var(--band);color:#fff;border-radius:var(--radius);padding:12px 14px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.drv-banner .b-main{flex:1;min-width:180px}
.drv-banner .b-title{font-weight:700;font-size:.95rem}
.drv-banner .b-sub{color:var(--on-dark-sub);font-size:.8rem;margin-top:1px}
.drv-banner-light{background:var(--card);color:var(--ink);border:1.5px solid var(--line)}
.drv-banner-light .b-sub{color:var(--muted)}
.drv-done{background:#e5f4e3;border:1.5px solid #7dbb74;color:var(--ok-ink-deep);border-radius:var(--radius-md);padding:10px 14px;font-weight:600;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.drv-done .sp{flex:1;min-width:180px}
.drv-done .note-delete{color:var(--ok-ink-deep)}
.drv-done-bar{display:flex;justify-content:flex-end;padding:0 2px}
.drv-done-bar .note-delete{font-size:.8rem}
.drv-done .drv-done-x{font-size:1.05rem;text-decoration:none;padding:0 4px;line-height:1}
.drv-alert-row{display:flex;gap:9px;align-items:center;background:#fdeceb;border:1px solid #efb3ae;border-radius:var(--radius-md);padding:9px 11px;font-size:.85rem;flex-wrap:wrap}
.drv-alert-row .sp{flex:1;min-width:180px}
.drv-alert-row strong{color:var(--red)}
.drv-band-pill{display:inline-flex;align-items:center;border-radius:var(--radius-pill);padding:3px 10px;font-size:.78rem;font-weight:700;background:var(--orange);color:#fff;white-space:nowrap}
.drv-band-pill.there{background:var(--orange-soft);color:var(--orange-dark)}
.drv-band-pill.picked{background:var(--card);color:var(--ok-ink)}
.drv-band-pill.queued{background:rgba(255,255,255,.18);color:#fff}
.drv-van-chip{background:#e8f0fe;color:#1a56c4;border-radius:var(--radius-pill);padding:3px 10px;font-size:.78rem;font-weight:700}
.drv-head{background:var(--band);color:#fff;border-radius:var(--radius-lg);padding:14px 16px;margin-bottom:14px}
.drv-kicker{color:var(--orange);font-size:.62rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase}
.drv-title{font-family:var(--font-display);font-size:1.3rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;margin-top:2px}
.drv-sub{color:var(--on-dark-sub);font-size:.8rem;margin-top:2px}
.drv-route-card{border:1.5px solid var(--line);border-radius:var(--radius);padding:11px 12px;display:flex;align-items:center;gap:10px;margin-bottom:8px;background:#fff}
.drv-rc-main{flex:1;min-width:0}
.drv-rc-name{font-weight:700;font-size:.95rem}
.drv-rc-sub{color:var(--muted);font-size:.76rem;margin-top:1px}
.drv-del{background:none;border:none;color:var(--red);font-size:1.05rem;cursor:pointer;padding:4px 6px;line-height:1}
.drv-school-row{display:flex;align-items:center;gap:11px;border:1.5px solid var(--line);border-radius:var(--radius);padding:11px 12px;margin-bottom:8px;background:var(--card);cursor:pointer}
.drv-school-row:has(input:checked){border-color:var(--orange);background:#fff8f1}
.drv-school-row.claimed{opacity:.72;cursor:default;background:#f7f7f8}
.drv-check{width:26px;height:26px;accent-color:var(--orange);flex:none;margin:0}
.drv-ck-off{width:26px;height:26px;flex:none}
.drv-s-main{flex:1;min-width:0}
.drv-s-name{font-weight:700;font-size:.95rem}
.drv-s-sub{color:var(--muted);font-size:.76rem;margin-top:1px}
.drv-tag{font-size:.68rem;font-weight:700;border-radius:var(--radius-pill);padding:3px 9px;background:var(--orange-soft);color:var(--orange-dark);white-space:nowrap;display:inline-flex;align-items:center;gap:7px}
.drv-tag.claim{background:var(--grey-fill);color:var(--grey-mid)}
.drv-save-lbl{display:block;margin-top:14px;font-weight:600;font-size:.85rem}
.drv-save-input{display:block;width:100%;margin-top:5px;font-size:16px;padding:11px 12px;border:1.5px solid var(--line);border-radius:var(--radius-md);background:#fff}
.drv-bigbtn{display:block;width:100%;padding:14px;font-size:1rem;margin-top:14px}
.drv-bigbtn:disabled{opacity:.45}
.drv-prog-line{display:flex;justify-content:space-between;font-size:.85rem;margin-bottom:5px}
.drv-prog{height:8px;background:var(--grey-soft);border-radius:var(--radius-track);overflow:hidden;margin-bottom:14px}
.drv-prog i{display:block;height:100%;background:var(--orange);border-radius:var(--radius-track)}
.drv-kid{display:flex;align-items:flex-start;gap:11px;border:1.5px solid var(--line);border-radius:var(--radius);padding:11px 12px;margin-bottom:8px;background:#fff}
.drv-kid.boarded{border-color:var(--peach-line);background:#fffaf5}
.drv-kid.missing{border-color:var(--note-line);background:var(--note-bg)}
.drv-k-main{flex:1;min-width:0}
.drv-k-name{font-weight:700;font-size:1rem}
.drv-k-sub{color:var(--muted);font-size:.76rem;margin-top:1px}
.drv-board-btn{border:none;border-radius:var(--radius-pill);padding:11px 14px;font-weight:700;font-size:.84rem;cursor:pointer;background:var(--orange);color:#fff;flex:none}
.drv-kid.boarded .drv-board-btn{background:#e6f4ea;color:var(--ok-ink)}
.drv-flag-btn{border:none;border-radius:var(--radius-pill);padding:11px 14px;font-weight:700;font-size:.84rem;cursor:pointer;background:var(--red);color:#fff;flex:none}
.drv-mini{background:none;border:none;color:var(--red);font-weight:600;font-size:.8rem;cursor:pointer;padding:3px 0 0;text-align:left}
.drv-mini-dark{color:var(--ink)}
.drv-chip{display:inline-block;font-size:.68rem;font-weight:700;border-radius:var(--radius-pill);padding:2px 8px;margin:4px 4px 0 0}
.drv-chip-note{background:var(--orange-soft);color:var(--orange-dark)}
.drv-chip-med{background:#fdeceb;color:#c2261b}
.drv-chip-nc{background:var(--grey-fill);color:var(--grey-mid)}
.drv-next{margin:2px 0;font-size:.9rem}
.drv-duo{display:flex;gap:8px;margin-top:14px}
.drv-duo form{flex:1;margin:0}
.drv-duo .btn{width:100%;padding:13px 6px;font-size:.95rem}
.drv-duo .btn:disabled{opacity:.45}
.drv-way-card{border:1.5px solid var(--line);border-radius:var(--radius-lg);padding:16px 14px;text-align:center;background:#fff}
.drv-way-emoji{font-size:2rem}
.drv-way-title{font-family:var(--font-display);font-size:1.25rem;font-weight:600;text-transform:uppercase;margin-top:4px}
.drv-way-sub{color:var(--muted);font-size:.85rem;margin-top:4px;line-height:1.5}
.drv-stat-row{display:flex;gap:8px;margin-top:12px}
.drv-stat{flex:1;border:1px solid var(--line);border-radius:var(--radius-md);padding:9px 6px;text-align:center}
.drv-stat .v{font-family:var(--font-display);font-size:1.1rem;font-weight:600}
.drv-stat .k{color:var(--muted);font-size:.64rem;text-transform:uppercase;letter-spacing:.08em;font-weight:700}
.drv-mini-list{margin-top:12px}
.drv-m-row{display:flex;justify-content:space-between;gap:10px;font-size:.85rem;padding:7px 2px;border-bottom:1px dashed var(--line)}
.drv-m-row:last-child{border-bottom:none}

/* ---- Driver Mode admin package (Oct 19, 2026) ---- */
.inline-form{display:inline}
.drv-card{background:var(--card);border:1.5px solid var(--line);border-radius:var(--radius-lg);padding:14px;margin-bottom:14px}
.drv-h{font-family:var(--font-display);font-size:1rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;margin:16px 0 8px}
.drv-other{margin:4px 0;font-size:.92rem}
.drv-late{background:#fdeceb;color:#c2261b;font-weight:700;font-size:.72rem;border-radius:var(--radius-pill);padding:2px 8px;white-space:nowrap}
.drv-mini-btn{display:inline-flex;align-items:center;background:var(--card);border:1.5px solid var(--line);color:var(--ink);border-radius:var(--radius-pill);padding:5px 12px;font-weight:600;font-size:.8rem;cursor:pointer;text-decoration:none;min-height:32px}
.drv-daybar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:#fff8f1;border:1.5px solid var(--peach-line);border-radius:var(--radius-md);padding:8px 12px;margin-bottom:12px;font-size:.88rem}
.drv-strip .drv-daybar{margin-bottom:0}
.drv-daybar-state{flex:1;min-width:170px}
.drv-dayflip{display:inline}
.drv-dayflip-btn{background:none;border:none;color:var(--orange-dark);font-weight:700;font-size:.82rem;cursor:pointer;text-decoration:underline;padding:2px 0}
/* the day kind as a read-only indicator pill (Pickup board strip
   + driver screen): an early day reads orange at a glance, a
   regular day stays neutral. The switch itself lives only on
   the Fleet Dashboard (Sebastian, Oct 19, 2026). */
.drv-daypill{display:inline-flex;align-items:center;border-radius:var(--radius-pill);padding:3px 10px;font-size:.78rem;font-weight:700;white-space:nowrap;vertical-align:middle}
.drv-daypill-early{background:var(--orange-soft);color:var(--orange-dark)}
.drv-daypill-reg{background:var(--grey-soft);color:var(--muted)}
.drv-vans-link{margin-left:auto}
/* stop picker (tap-to-number) */
.drv-picker{display:flex;flex-direction:column}
.drv-pick-tools{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}
.drv-pick-status{color:var(--muted);font-size:.84rem;font-weight:600}
.drv-pick-btns{display:flex;gap:6px}
.drv-school-row{padding:8px 12px;border-radius:var(--radius-md);gap:10px}
.drv-pick-zone{flex:none;width:26px;display:flex;justify-content:center}
.drv-pick-badge{width:24px;height:24px;border-radius:50%;border:2px solid #cfcfd4;color:#fff;font-weight:700;font-size:.8rem;display:flex;align-items:center;justify-content:center;background:#fff}
.drv-school-row.picked .drv-pick-badge{background:var(--orange);border-color:var(--orange)}
.drv-school-row.picked{border-color:var(--orange);background:var(--tint)}
/* the dojang row's left badge is the same plain empty circle as
   every school row (Sebastian: the orange "+" looked funny); the
   add affordance is a small muted pill at the row's right end */
.drv-pick-add{flex:none;font-size:.78rem;font-weight:700;color:var(--muted);border:1.5px solid var(--line);border-radius:var(--radius-pill);padding:3px 10px}
.drv-row-nudge{display:none;gap:4px;flex:none}
.drv-school-row.picked .drv-row-nudge{display:flex}
.drv-row-nudge button{width:30px;height:30px;border-radius:var(--radius-xs);border:1.5px solid var(--line);background:var(--card);font-size:.85rem;cursor:pointer;line-height:1}
.drv-picked-wrap{margin-top:10px;border-top:1px dashed var(--line);padding-top:10px}
.drv-picked-title{font-weight:700;font-size:.8rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:6px}
.drv-picked-row{display:flex;align-items:center;gap:8px;padding:6px 8px;border:1.5px solid var(--line);border-radius:var(--radius-sm);margin-bottom:6px;background:#fff}
.drv-picked-num{flex:none;width:22px;height:22px;border-radius:50%;background:var(--orange);color:#fff;font-weight:700;font-size:.76rem;display:flex;align-items:center;justify-content:center}
.drv-picked-name{flex:1;font-weight:600;font-size:.9rem;min-width:0}
.drv-picked-btn{flex:none;width:30px;height:30px;border-radius:var(--radius-xs);border:1.5px solid var(--line);background:var(--card);font-size:.9rem;cursor:pointer;line-height:1}
/* Start-run bar: FIXED above the dock, never sticky. The old
   bottom-sticky version (transparent strip + a shadowed button)
   ghosted and doubled all over the driver page on iOS Safari —
   bottom-sticky elements repaint on every scroll frame and
   WebKit smears them across the content beneath. A fixed bar
   composites once, like the dock itself: solid background, the
   shadow on the bar (not the button), its own layer via
   translateZ(0), z-index below the dock (30), and geometry that
   tracks the pick card's width (page padding 14px, wrap cap). */
.drv-startbar{position:fixed;left:14px;right:14px;margin:0 auto;max-width:1172px;bottom:calc(88px + env(safe-area-inset-bottom));z-index:25;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:10px;box-shadow:var(--shadow-float);transform:translateZ(0)}
.drv-start-btn{display:block;width:100%;padding:14px;font-size:1rem;font-weight:700;border:none;border-radius:var(--radius-md);background:var(--orange);color:#fff;cursor:pointer}
.drv-start-btn:disabled{opacity:.45}
/* the bar renders ONLY while the driver is hand-picking (Sebastian:
   it sat in the way and doubled with the route cards' own Start
   buttons). display:none is a hard off — no paint, no layer, no
   ghosting relapse; the JS toggles it off the pick count. */
.drv-startbar-off{display:none}
/* while the fixed bar is shown it is out of flow: pad the pick
   card so its last rows + the hidden-schools note scroll fully
   clear of it; the padding collapses with the bar */
.drv-start-form.bar-on{padding-bottom:88px}
.drv-hidden-note{margin-top:10px}
.drv-empty{margin:4px 0}
/* route cards */
.drv-route-card{display:block}
.drv-route-name{font-weight:700;font-size:1rem;display:inline-flex;align-items:center;gap:7px}
.drv-route-sub{color:var(--muted);font-size:.84rem;margin-top:2px}
.drv-route-meta{font-size:.82rem;margin:4px 0 10px}
.drv-route-admin{border-bottom:1px dashed var(--line);padding:10px 0}
.drv-route-admin:first-child{padding-top:2px}
.drv-route-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.drv-tag-grey{background:var(--grey-fill);color:var(--grey-mid)}
.drv-route-stops{margin:8px 0 2px;padding-left:22px;font-size:.9rem}
.drv-route-stops li{margin:2px 0}
.drv-route-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:6px}
.drv-route-note{margin-top:6px}
/* Routes as a collapsible list (Sebastian, Oct 19, 2026): every
   route renders as a slim two-line row; tapping the head expands
   the full card (stops, notes, actions) — one open at a time.
   Inside a [data-route-list] card the rows lose their old
   standalone-card chrome and take hairline separators. */
[data-route-list] .drv-route-card{display:block;border:none;border-radius:0;padding:0;margin:0;background:none}
[data-route-list] .drv-route-card + .drv-route-card{border-top:1px dashed var(--line)}
[data-route-list] .drv-route-admin:last-child{border-bottom:none;padding-bottom:2px}
/* Fleet Settings → Routes: the sort + driver/vehicle filter row
   (Sebastian, Oct 19, 2026) between the kind tabs and the list
   card; the page-local script reorders and show/hides whole
   accordion rows client-side. Restyled (Sebastian, Oct 20,
   2026): the selects wear the app's shared form-select language
   (field height / border / radius tokens, appearance:none + an
   SVG chevron) instead of the native OS look, labels sit
   left-aligned above each field, and the three lay out as a
   grid — Sort + Driver on row 1, Vehicle on row 2. The
   elements, ids and the filter/sort script are untouched;
   tapping still opens the native picker. */
.drv-routefilters{display:grid;grid-template-columns:1fr 1fr;gap:10px 8px;margin-bottom:12px}
.drv-rf-field{display:flex;flex-direction:column;align-items:stretch;gap:5px;min-width:0;margin:0}
.drv-rf-label{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);text-align:left}
.drv-rf-select{appearance:none;-webkit-appearance:none;width:100%;height:var(--field-h);min-height:var(--field-h);padding:0 34px 0 11px;border:1px solid var(--field-border);border-radius:var(--field-radius);background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") no-repeat right 12px center;background-size:13px 13px;font-size:16px;font-weight:600;color:var(--ink)}
/* App-wide modern select (Sebastian, Oct 20, 2026): the SAME
   treatment as .drv-rf-select — shared field tokens, appearance:
   none + SVG chevron, 16px semibold — for every other user-facing
   dropdown. Inline selects (beside a button) size to content;
   .wide fills its row (stacked form labels, filter panels). */
.app-select{appearance:none;-webkit-appearance:none;width:auto;max-width:100%;height:var(--field-h);min-height:var(--field-h);padding:0 34px 0 11px;border:1px solid var(--field-border);border-radius:var(--field-radius);background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") no-repeat right 12px center;background-size:13px 13px;font-size:16px;font-weight:600;color:var(--ink)}
.app-select.wide{width:100%}
.drv-nomatch{margin:6px 0 2px}
/* Driver Mode exclusive run view (driver_run.html): the top
   identity row (route + van left, Exit right) and the all-stops
   overview — done stops muted with a check, the current stop
   highlighted, upcoming stops plain with their times + counts. */
.drv-run-top{display:flex;align-items:flex-start;gap:10px;margin-bottom:10px}
.drv-run-id{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.drv-run-name{font-weight:700;font-size:1.05rem}
.drv-run-van{color:var(--muted);font-size:.85rem}
.drv-overview{margin-top:14px}
.drv-ov-row{display:flex;align-items:center;gap:9px;padding:7px 0;border-bottom:1px dashed var(--line);font-size:.92rem}
.drv-ov-row:last-child{border-bottom:none}
.drv-ov-row.done{color:var(--muted)}
.drv-ov-row.current{font-weight:700;background:#fff8f1;border-radius:var(--radius-sm);padding-left:8px;padding-right:8px;margin-left:-8px;margin-right:-8px}
.drv-ov-mark{flex:none;width:18px;text-align:center}
.drv-ov-row.current .drv-ov-mark{color:var(--orange)}
.drv-ov-label{flex:1;min-width:0}
.drv-ov-meta{flex:none;font-size:.8rem}
.drv-route-head{display:flex;align-items:center;gap:10px;width:100%;background:none;border:none;padding:8px 0;cursor:pointer;text-align:left;font:inherit;color:inherit}
.drv-route-headmain{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.drv-route-line1{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.drv-route-line2{font-size:.8rem;color:var(--muted)}
.drv-route-chev{flex:none;width:9px;height:9px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg);transition:transform .15s ease}
.drv-route-head[aria-expanded="true"] .drv-route-chev{transform:rotate(225deg)}
.drv-route-body{padding:2px 0 8px}
.drv-route-warn{color:#b45309;font-weight:600;font-size:.84rem;margin:4px 0}
/* route form: the assigned-drivers checklist — a tidy 2-column
   grid of equal cells (the old flex-wrap left ragged orphan chips) */
.drv-assign-block{margin:10px 0}
.drv-assign-list{display:grid;grid-template-columns:repeat(2,1fr);gap:6px}
@media (max-width:350px){.drv-assign-list{grid-template-columns:1fr}}
.drv-assign-chip{display:flex;flex-direction:row;align-items:center;gap:8px;border:1.5px solid var(--line);border-radius:var(--radius-pill);padding:7px 12px;font-size:.88rem;font-weight:600;cursor:pointer;margin:0;min-height:42px}
.drv-assign-chip span{min-width:0}
/* custom checkbox: the native box renders iOS blue — restyle it in
   the app's orange with a white SVG check. min-height:0 + padding:0
   are load-bearing: the global field rule gives every input
   min-height:var(--field-h) (48px) and 11px padding, which
   stretched this 22px box into a tall empty rectangle on device
   until both were pinned back to zero here. */
.drv-assign-chip input{appearance:none;-webkit-appearance:none;width:22px;height:22px;min-height:0;padding:0;align-self:center;border-radius:7px;border:1.5px solid #c9cdd4;background:var(--card);margin:0;flex:none;cursor:pointer}
.drv-assign-chip input:checked{background-color:var(--orange);border-color:var(--orange);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4.5 12.6 9.8 17.8 19.5 6.4'/%3E%3C/svg%3E");background-size:14px 14px;background-position:center;background-repeat:no-repeat}
.drv-assign-chip:has(input:checked){border-color:var(--orange);background:var(--tint)}
/* backstop: any native control left in the route sheet tints orange,
   never the platform blue */
.drv-route-sheet input{accent-color:var(--orange)}
.drv-assign-help{display:block;margin-top:6px;font-size:.8rem}
/* Fleet Dashboard + Fleet Settings */
.van-vehicle{display:flex;align-items:center;justify-content:space-between;gap:8px;font-weight:700;font-size:.95rem;margin-top:4px}
.fleet-menu{padding-top:6px;padding-bottom:6px}
.fleet-row{display:flex;align-items:center;gap:10px;padding:12px 0;text-decoration:none;color:inherit}
.fleet-row + .fleet-row{border-top:1px solid var(--line)}
.fleet-row-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.fleet-row-title{font-weight:700;font-size:1rem}
.fleet-row-sub{font-size:.82rem}
.fleet-chev{transform:rotate(-45deg)}
.drv-kind-row{display:flex;align-items:center;gap:10px;margin:10px 0;flex-wrap:wrap}
.drv-kind-label{font-weight:600;font-size:.9rem}
.drv-kind-opts{display:flex;gap:12px}
.drv-kind-opt{flex-direction:row !important;align-items:center;gap:5px;font-size:.9rem}
.sheet-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:14px}
/* run views */
.drv-banner-kicker{color:var(--orange);font-size:.62rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase}
.drv-banner h1.drv-title,.drv-banner .drv-title{color:#fff}
.drv-times{display:flex;gap:14px;flex-wrap:wrap;margin-top:8px;font-size:.86rem;color:#e8e8ec}
.drv-times .drv-late{vertical-align:1px}
.drv-done-list{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
.drv-done-chip{background:#e5f4e3;color:var(--ok-ink-deep);border-radius:var(--radius-pill);padding:4px 11px;font-size:.8rem;font-weight:600}
.drv-kid-main,.drv-k-main{flex:1;min-width:0}
.drv-kid-name{font-weight:700;font-size:1rem;display:block}
.drv-med{display:block;font-size:.8rem;margin-top:2px}
.drv-med{color:#c2261b;font-weight:600}
.drv-kid-state{display:block;color:var(--muted);font-size:.8rem;margin-top:2px}
.drv-kid.aboard{border-color:var(--peach-line);background:#fffaf5}
.drv-missing-badge{flex:none;background:#fdeceb;color:#c2261b;font-weight:700;font-size:.78rem;border-radius:var(--radius-pill);padding:6px 11px}
.drv-allaboard{margin-top:4px}
.drv-depart-note{margin-top:6px}
.drv-bigbtn{background:var(--orange);color:#fff;border:none;border-radius:var(--radius-md);font-weight:700;cursor:pointer}
.drv-next{margin-top:14px}
.drv-cancel{margin-top:16px}
.drv-wait-big{font-weight:700;font-size:1.05rem;margin:2px 0 6px}
.drv-stats{display:flex;gap:8px;margin-top:12px}
.drv-stat-n{font-family:var(--font-display);font-size:1.15rem;font-weight:600;display:block}
.drv-stat-l{color:var(--muted);font-size:.64rem;text-transform:uppercase;letter-spacing:.08em;font-weight:700}
.drv-way-row{display:flex;justify-content:space-between;gap:10px;font-size:.88rem;padding:7px 2px;border-bottom:1px dashed var(--line)}
.drv-way-row:last-child{border-bottom:none}
.drv-way-missing{margin-top:10px}
.drv-way-missing-h{font-weight:700;font-size:.8rem;text-transform:uppercase;letter-spacing:.06em;color:#c2261b}
/* van dashboard */
/* Header row (Sebastian, Oct 20, 2026): every pill stays on one
   line — the pills are flex:none + nowrap, and the Updated stamp
   lives inside the black title band (still #vans-updated on the
   time element, still outside #vans-live, so the live poller
   keeps finding and updating it exactly as before). The pill row
   sits an explicit 12px above the band (its margin-bottom; the
   band's margin-top is pinned to 0) — the page's normal section
   rhythm, tightened after the stamp moved into the band. */
.vans-headrow{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:12px}
.vans-headbtns{display:flex;align-items:center;gap:8px}
.vans-navbtn{flex:none;white-space:nowrap}
.vans-band{display:flex;justify-content:space-between;align-items:flex-end;gap:12px;margin-top:0}
.drv-head-stamp{text-align:right;color:#a9a9ae;font-size:.78rem;line-height:1.3;white-space:nowrap;padding-bottom:2px}
.drv-head-stamp b{display:block;color:#e8e8ea;font-size:.92rem;font-weight:600}
.van-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.van-driver{font-weight:700;font-size:1.05rem}
.van-call{color:var(--orange-dark);font-weight:700;text-decoration:none;font-size:.9rem}
.van-phase{font-weight:600;margin-top:6px}
.van-phase-hero{font-size:1.19rem;font-weight:700;line-height:1.3;margin-top:9px}
.van-meta{font-size:.88rem;line-height:1.5;margin-top:5px}
.van-flags{margin-top:12px;display:flex;flex-direction:column;gap:8px}
.van-flag{background:var(--note-bg);border:1px solid var(--note-line);border-radius:var(--radius-md);padding:10px 12px}
.van-flag-name{font-weight:600}
.van-flag-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}
.van-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:12px}
.van-tools{margin-top:12px;border-top:1px dashed var(--line);padding-top:8px}
.van-options-summary{font-weight:700;font-size:.95rem;cursor:pointer;padding:2px 0}
.van-options .van-tool{margin-top:10px}
.van-tool{display:flex;flex-direction:column;gap:5px}
.van-tool-label{display:block;font-size:.88rem;font-weight:600}
.van-tool-row{display:flex;gap:8px;align-items:center}
.van-tool-row select{flex:1;min-width:0}
.van-tool-row .btn{flex:none}
.van-tool select{font-size:16px;padding:7px 9px;border:1.5px solid var(--line);border-radius:var(--radius-sm);background:#fff}
/* Vans Out Now as black LIVE cards (Sebastian, Oct 20, 2026):
   the dashboard cards join the driver page's live-card family
   (pulse kicker, route headline, phase, meta, stops bar) but
   WITHOUT the orange ring — the ring means "your run" and the
   dashboard can show many vans at once. The light pieces the
   white card carried (flag panels, the Run options tools)
   keep their light surfaces inside the black card, so every
   form inside reads — and works — exactly as before. */
.btn-outline-light{background:transparent;border-color:#6d6d74;color:#f2f2f4}
.van-live{box-shadow:none}
.van-live .van-notes{color:var(--on-dark-mut)}
.van-live-meta{color:var(--on-dark-mut);font-size:.92rem;line-height:1.55;margin-top:10px}
.van-live-meta strong{color:#fff}
.van-meta-driver{font-size:1rem}
.van-live .van-call{color:var(--orange)}
.van-live .van-flag{color:var(--ink)}
.van-live .van-tools{background:var(--card);color:var(--ink);border-top:none;border-radius:var(--radius-md);padding:10px 12px}
/* Fleet Dashboard at wide widths (Sebastian, Oct 20, 2026 —
   approved mock): Vans Out Now cards lay out two-up and each
   card's main row splits into its content on the left and a
   stat rail on the right (big Oswald number over a small-caps
   muted label: Aboard / Dropped off / To pick up, plus Flags
   when the run has any). At wide widths the rail carries the
   counts, so the inline counts in the meta line hide — no
   duplication; the vehicle name stays in the meta line and
   the flag panels below keep every flag actionable. Below
   900px nothing changes: one column, rail hidden, counts
   inline, exactly as the card has always rendered. */
.van-rail{display:none}
@media (min-width:900px){
.vans-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;align-items:start;margin-bottom:14px}
.vans-grid>.drv-card{margin-bottom:0}
.van-live-main{display:flex;gap:18px}
.van-live-left{flex:1;min-width:0}
.van-rail{display:flex;flex-direction:column;justify-content:center;gap:12px;flex:none;width:96px;border-left:1px solid var(--dark-line);padding-left:16px}
.van-rail-n{display:block;font-family:var(--font-display);font-size:1.5rem;font-weight:700;line-height:1;color:#fff}
.van-rail-l{display:block;font-size:.62rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#9a9aa0;margin-top:3px}
.van-counts-inline{display:none}
}
.van-done-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:7px 0;border-bottom:1px dashed var(--line);font-size:.92rem}
.van-done-row:last-child{border-bottom:none}
.van-drivers{display:flex;flex-direction:column;gap:10px;margin-bottom:14px}
.van-driver-card{display:flex;align-items:center;gap:12px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px}
.van-driver-main{flex:1;min-width:0}
.van-driver-name2{font-weight:700;font-size:1rem}
.van-driver-phone{display:inline-block;margin-top:2px;color:var(--muted);font-size:.92rem;font-weight:600;text-decoration:none}
.van-driver-nophone{font-weight:500}
.van-driver-side{display:flex;flex-direction:column;align-items:flex-end;gap:5px;flex:none}
.van-lock-cap{font-size:.62rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);white-space:nowrap}
.van-switch{position:relative;display:inline-block;width:46px;height:26px;flex:none}
.van-switch input{position:absolute;opacity:0;width:100%;height:100%;margin:0;cursor:pointer}
.van-track{position:absolute;inset:0;background:#d1d5db;border-radius:var(--radius-pill);transition:.2s;pointer-events:none}
.van-track:before{content:"";position:absolute;width:20px;height:20px;left:3px;top:3px;background:var(--card);border-radius:50%;transition:.2s;box-shadow:0 1px 3px rgba(0,0,0,.25)}
.van-switch input:checked + .van-track{background:var(--orange)}
.van-switch input:checked + .van-track:before{transform:translateX(20px)}
.van-saved{font-family:inherit;font-size:.75rem;font-weight:700;color:#15803d;text-transform:none;letter-spacing:0}
.van-err{background:#fef2f2;border:1px solid #fecaca;color:#b91c1c;border-radius:var(--radius-sm);padding:8px 12px;font-size:.88rem;margin-bottom:10px}

/* ---- Driver Mode: route sheet redesign + route color/notes +
   add-a-driver (Sebastian, Oct 19, 2026) ---- */
/* time inputs get the exact iOS treatment date inputs already had,
   so they stop rendering as tall empty boxes */
input[type="time"]{-webkit-appearance:none;appearance:none;height:var(--field-h);line-height:var(--field-h);padding-top:0;padding-bottom:0}
input[type="time"]::-webkit-date-and-time-value{text-align:left;line-height:var(--field-h);margin:0;min-height:var(--field-h)}
input[type="time"]::-webkit-datetime-edit{line-height:var(--field-h);padding:0}
input[type="time"]::-webkit-calendar-picker-indicator{margin:0;padding:0}
/* the shared pill segmented control with <button> children (forms) */
.segmented button{flex:1;min-width:0;overflow:hidden;background:transparent;border:none;border-radius:var(--radius-pill);padding:7px 2px;font:inherit;font-weight:600;font-size:.82rem;cursor:pointer;color:var(--ink);white-space:nowrap;text-align:center}
.segmented button.active{background:var(--card);box-shadow:0 2px 8px rgba(0,0,0,.08);color:var(--orange-dark)}
/* route sheet: sticky action bar pinned to the top of the sheet,
   grouped soft cards, compact times row, color swatches */
.drv-route-bar{position:sticky;top:-20px;z-index:5;display:flex;align-items:center;justify-content:space-between;gap:10px;background:var(--card);margin:-20px -20px 14px;padding:14px 20px 10px;border-bottom:1px solid var(--line)}
.drv-route-bar h3{margin:0}
.drv-route-bar-btns{display:flex;gap:6px;flex:none}
.drv-fgroup{border:1.5px solid var(--line);border-radius:var(--radius);padding:12px;margin-bottom:12px;background:#fff}
.drv-fgroup-h{font-size:.68rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-bottom:10px}
/* Direct field labels only: this rule once reached EVERY
   descendant label, and its :last-child margin reset quietly
   stripped the bottom margin from the last swatch chip (black)
   — in the centered flex row that centered black's margin box
   5px lower than the other five (Sebastian's "black sits low",
   Oct 19, 2026). Component labels (chips, swatches) own their
   margins; the group rule must never reach them again. */
.drv-fgroup>label{margin-bottom:10px}
.drv-fgroup>label:last-child{margin-bottom:0}
.drv-f-label{display:block;font-size:.9rem;font-weight:600;margin-bottom:6px}
.drv-times-row{display:flex;gap:10px;margin-bottom:10px}
.drv-times-row label{flex:1;min-width:0;margin-bottom:0}
.drv-dayseg{margin-bottom:10px}
.drv-swatches{display:grid;grid-auto-flow:column;grid-auto-columns:max-content;align-items:center;gap:8px}
.drv-swatch{position:relative;display:inline-flex;flex-direction:row;align-items:center;gap:0;cursor:pointer;margin:0;line-height:0}
.drv-swatch input{position:absolute;opacity:0;width:100%;height:100%;min-height:0;padding:0;border:none;margin:0;cursor:pointer}
/* each face sits in a fixed cell (Sebastian, Oct 19, late): the
   cell is 34px tall (a 34px square for the dots) and centers its
   face with grid place-items — no baseline or inline math left
   anywhere in the chain — so all six items share one center
   line. All six items are structurally identical; only the
   face's background value differs. */
.drv-swatch-cell{display:grid;place-items:center;height:34px;min-width:34px;flex:none;line-height:0}
.drv-swatch-face{display:block;flex:none;width:30px;height:30px;border-radius:50%}
.drv-swatch-dotface{border:2px solid rgba(0,0,0,.08)}
.drv-swatch-noneface{width:auto;height:30px;border-radius:var(--radius-pill);padding:0 12px;display:inline-flex;align-items:center;font-size:.8rem;font-weight:600;border:1.5px solid var(--line);background:var(--card);color:var(--muted)}
.drv-swatch:has(input:checked) .drv-swatch-face{border-color:var(--orange);box-shadow:0 0 0 2.5px var(--orange)}
.drv-pick-search{width:100%;margin-bottom:10px}
/* dock-style stroke icons (templates/_icons.html) — the app's only
   icon language on the driver/fleet surfaces; no emoji icons.
   Spacing (Sebastian, Oct 19): an icon sits on its label's center
   line with a 7–8px gap — in inline flow the template space after
   the icon (~4px) plus this margin makes the gap; inside a .btn
   (inline-flex, where that space is dropped) the icon's own margin
   below carries the whole gap. */
.ico{width:18px;height:18px;vertical-align:-3px;flex:none;display:inline-block;margin-right:4px}
.btn>.ico{margin-right:7px}
/* sheet/dialog buttons take an orange focus ring, not iOS blue —
   flush (offset 0) so the ring hugs the button's own border
   instead of reading as a second, nested frame */
dialog.sheet .btn:focus-visible,.sheet .btn:focus-visible{outline:2.5px solid var(--orange);outline-offset:0}
/* route color dot + notes lines across the driver surfaces.
   The dot centers on the route name structurally (Sebastian,
   Oct 19: it rode the text baseline like a bullet): every name
   line is a flex row and the dot is a fixed flex child inside a
   line-height:0 wrapper, so no baseline math survives. */
.route-dot{display:inline-block;width:10px;height:10px;border-radius:50%;line-height:0;flex:none}
.route-nm{display:inline-flex;align-items:center;gap:7px}
.drv-route-notes{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:.82rem;margin-top:3px}
.drv-route-line{margin-top:8px;font-weight:700;font-size:.9rem;color:#fff;display:flex;align-items:center;gap:7px}
.drv-route-line .ico{margin-right:0}
.drv-run-note{margin-top:6px;background:rgba(255,255,255,.13);border-radius:var(--radius-sm);padding:8px 10px;font-size:.88rem;color:#fff;text-align:left}
.van-notes{font-size:.85rem;color:var(--muted);margin-top:3px}
.van-drivers-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:16px 0 8px}
.van-drivers-head .drv-h{margin:0}
/* section header row with a right-aligned action pill — the
   .org-headrow pattern, for the driver page's Saved routes head */
.drv-headrow{display:flex;align-items:center;justify-content:space-between;gap:10px}
.drv-headrow .drv-h{flex:1;min-width:0}
/* Driver run view, Oct 20, 2026 pass (Sebastian's test drive):
   the view is a full-height flex column; content flows from the
   top in one evenly-spaced column — button sizes don't change,
   only positions. The hero gets one consistent spacing rhythm
   and a single aligned meta line, and boarding rows are rebuilt
   so the buttons (flex:none, in their own group) can never
   overlap the name cell (flex:1, min-width:0). */
.drv-run-wrap{display:flex;flex-direction:column;padding-bottom:calc(20px + env(safe-area-inset-bottom))}
/* The run page ends shortly after its last element (Sebastian,
   Oct 20, 2026 — a long blank stretch trailed the Cancel run
   button): this standalone page has no dock, so the global body
   rule's dock-clearance padding (88px + safe-area) is switched
   off for it — it also duplicated the safe-area inset the wrap's
   own bottom padding already carries. And the wrap no longer
   forces min-height:100dvh: that full-height stretch only had a
   job while the action cluster pinned to the bottom (removed in
   the E22 pass); with the pin gone it just stretched short stops
   to viewport height, manufacturing blank page below the last
   button. Page height is now content height + the wrap's normal
   bottom padding. */
body.drv-run-body{padding-bottom:0}
/* .drv-run-bottom carries NO margin rule on purpose: the action
   cluster (Depart / Finish area + Cancel run) follows the content
   above it in the page's normal rhythm. It used to pin to the
   bottom via margin-top:auto, which left a huge empty void
   between the kid list and the buttons at stops with few kids
   (Sebastian, Oct 20, 2026 — "Don't like all that empty space
   down there"). */
/* the hero's bottom margin IS the gap to whatever follows it
   (kid list, way card, wait card) and matches the kid cards' own
   bottom margin, so the first card below the hero sits at the
   same even spacing as every card after it (Sebastian, Oct 20:
   the top student was stuck to the black card). */
.drv-hero{background:var(--band);color:#fff;border-radius:var(--radius-lg);padding:14px 16px;display:flex;flex-direction:column;margin-bottom:8px}
.drv-hero .drv-title{color:#fff;margin-top:5px}
.drv-hero-meta{display:flex;align-items:center;gap:5px 14px;flex-wrap:wrap;margin-top:9px;font-size:.86rem;color:var(--on-dark-sub);line-height:1.35}
.drv-hero-meta strong{color:#fff}
.drv-hero .drv-run-note{margin-top:9px}
.drv-kid{align-items:center}
.drv-kid-main{overflow-wrap:anywhere}
.drv-kid-btns{display:flex;gap:8px;flex:none;align-items:center}
.drv-kid-btns form{flex:none;margin:0}

/* Route chains (Sebastian, Oct 20, 2026): the driver page's
   "Your routes, in order" card — numbered steps on a rail, done
   steps checked off and muted, the next step lit with an orange
   ring and the full Start button, later steps quiet but still
   startable (flexible order) — plus the Fleet Settings editor. */
.drv-chain{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:16px 16px 6px;margin-bottom:14px}
.drv-chain-title{font-family:var(--font-display);font-size:1.35rem;font-weight:700;text-transform:none;letter-spacing:.01em;margin:0 0 2px}
.drv-chain-sub{color:var(--muted);font-size:.92rem;margin:0 0 14px}
.drv-chain-steps{position:relative}
.drv-chain-steps::before{content:"";position:absolute;left:19px;top:22px;bottom:22px;width:2px;background:#e3e3e0;border-radius:2px}
.drv-chain-step{position:relative;display:flex;gap:13px;margin-bottom:12px}
.drv-chain-num{flex:none;width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1.05rem;font-weight:800;z-index:1;background:var(--card);border:2px solid #d8d8d5;color:#9a9aa0}
.drv-chain-step.done .drv-chain-num{background:var(--ink);border-color:var(--ink);color:#fff}
.drv-chain-step.now .drv-chain-num{background:var(--orange);border-color:var(--orange);color:#fff;box-shadow:0 0 0 5px var(--orange-soft)}
.drv-chain-card{flex:1;min-width:0;background:var(--card);border:1px solid #e5e5e2;border-radius:var(--radius-lg);padding:13px 15px}
.drv-chain-step.done .drv-chain-card{background:#f2f2f0;border-color:#e8e8e5}
.drv-chain-step.now .drv-chain-card{border:2px solid var(--orange);padding:12px 14px;box-shadow:0 6px 18px rgba(249,106,0,.13)}
.drv-chain-rrow{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.drv-chain-rname{font-family:var(--font-display);font-size:1.18rem;font-weight:700;letter-spacing:.02em}
.drv-chain-step.done .drv-chain-rname,.drv-chain-step.done .drv-chain-meta{color:#8a8a90}
.drv-chain-tag{margin-left:auto;flex:none;font-size:.72rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;border-radius:var(--radius-pill);padding:4px 9px;background:#f0f0ee;color:#9a9aa0}
.drv-chain-step.done .drv-chain-tag{background:#e8e8e5;color:#6d6d72}
.drv-chain-step.now .drv-chain-tag{background:var(--orange-soft);color:#b34a00}
.drv-chain-step.inprogress .drv-chain-tag{background:var(--ink);color:#fff}
.drv-chain-meta{color:var(--muted);font-size:.88rem;margin-top:3px;line-height:1.45}
.drv-chain-start{width:100%;margin-top:11px;font-size:1.03rem;padding:12px}
.drv-chain-card form{margin:0}
.drv-chain-step.later .drv-chain-card form{margin-top:10px}
/* YOUR RUN live card (Sebastian, Oct 20, 2026): the resume card
   is a black LIVE card — 2px orange ring, pulsing dot, dashboard
   phase line, stops progress segments, full-width Resume. */
.drv-live{background:#101012;color:#fff;border:none;box-shadow:0 0 0 2px var(--orange);padding:16px}
.drv-live-kicker{display:flex;align-items:center;gap:8px;color:var(--orange);font-size:.78rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase}
.drv-live-dot{flex:none;width:9px;height:9px;border-radius:50%;background:var(--orange);animation:drvLivePulse 2s ease-out infinite}
@keyframes drvLivePulse{0%{box-shadow:0 0 0 0 rgba(249,106,0,.45)}70%{box-shadow:0 0 0 8px rgba(249,106,0,0)}100%{box-shadow:0 0 0 0 rgba(249,106,0,0)}}
.drv-live-route{display:flex;align-items:center;gap:9px;font-family:var(--font-display);font-size:1.56rem;font-weight:700;letter-spacing:.02em;margin-top:9px}
.drv-live-phase{font-size:1.09rem;font-weight:600;margin-top:5px}
.drv-live-meta{display:flex;align-items:center;color:var(--on-dark-mut);font-size:.95rem;margin-top:9px}
.drv-live-meta .ico{color:var(--on-dark-mut)}
.drv-live-prog{display:flex;align-items:center;gap:10px;margin-top:14px}
.drv-live-prog-label{flex:none;font-size:.72rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#9a9aa0}
.drv-live-segs{display:flex;gap:5px;flex:1}
.drv-seg{flex:1;height:7px;border-radius:var(--radius-track);background:var(--dark-line)}
.drv-seg.done{background:var(--orange)}
.drv-seg.current{background:linear-gradient(90deg,var(--orange) 50%,var(--dark-line) 50%)}
.drv-live form{margin:0}
.drv-live-resume{width:100%;margin-top:16px}
/* the live card's action row (Sebastian, Oct 20, 2026): Resume
   run stretches, Van arrived sits beside it when the run can
   land; alone, Resume keeps the full width it always had. */
.drv-live-acts{display:flex;gap:9px;margin-top:16px}
.drv-live-acts form{display:flex;margin:0}
.drv-live-acts form:first-child{flex:1}
.drv-live-acts .drv-live-resume{margin-top:0}
/* YOUR RUN doorway on the Pickup board (Sebastian, Oct 20,
   2026): the board's black live card was a pointless duplicate
   of the driver page's — now the board carries only this slim
   white button into the driver page, where the one real card
   lives. Pulsing dot (shared with the live card) marks it live. */
.drv-run-door{display:flex;align-items:center;gap:10px;background:var(--card);border:1.5px solid var(--line);border-radius:var(--radius);padding:12px 15px;text-decoration:none;color:var(--ink)}
.drv-run-door-t{flex:none;font-weight:700;font-size:1.02rem}
.drv-run-door-s{color:var(--muted);font-size:.92rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.drv-run-door-chev{margin-left:auto;flex:none;color:var(--grey-text);font-size:1.3rem;font-weight:700;line-height:1}
/* Driver Mode stop groups (Sebastian, Oct 20, 2026): the stop
   list splits into NOT ABOARD (flagged pinned first) and
   ABOARD; a tap updates the row in place — it sinks to the
   Aboard group — instead of reloading the page to the top.
   Each row carries every state block and CSS keyed on
   data-state shows the right one, so a row's state flip is
   pure presentation: the server payload stays the truth. */
.drv-group-h{display:flex;align-items:baseline;gap:8px;margin:14px 2px 8px}
.drv-group-t{font-size:.8rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.drv-group-n{font-size:.8rem;font-weight:800;color:var(--orange-dark)}
.drv-group-h.done .drv-group-n{color:var(--ok-ink)}
.drv-group-line{flex:1;border-top:1.5px solid var(--line);transform:translateY(-3px)}
.drv-kid{flex-wrap:wrap}
.drv-kid .lbl-aboard{display:none}
.drv-kid[data-state="boarded"] .lbl-aboard{display:inline}
.drv-kid[data-state="boarded"] .lbl-when{display:none}
.drv-kid[data-state="boarded"] .drv-board-btn{background:#e6f4ea;color:var(--ok-ink)}
.drv-kid[data-state="boarded"] .drv-flag-form{display:none}
.drv-kid .drv-missing-badge{display:none}
.drv-kid[data-state="missing"] .drv-missing-badge{display:block}
.drv-kid:not([data-state="missing"]) .drv-kid-state{display:none}
.drv-kid[data-state="missing"] .drv-kid-btns{display:none}
.drv-flag-actions{display:none;flex-basis:100%;gap:8px;margin-top:10px}
.drv-kid[data-state="missing"] .drv-flag-actions{display:flex}
.drv-flag-actions form{flex:1;margin:0;display:flex}
.drv-resolve-btn{flex:1;border:1.5px solid transparent;border-radius:var(--radius-sm);padding:10px;font:inherit;font-size:.88rem;font-weight:700;cursor:pointer}
.drv-resolve-btn.solid{background:var(--orange);color:#fff}
.drv-resolve-btn.ghost{background:var(--card);border-color:#d8d8d5;color:var(--ink)}
/* Per-day note band (Sebastian, Oct 20, 2026): a kid's note
   for today sits in its own tinted band below the name row —
   the flag-panel tint family — instead of loose orange text
   squeezed into the name column. The band is part of the
   kid's row element, so the in-place regrouping carries it.
   The Pickup board rows use the same treatment (.asp-note-
   band) so a note looks identical everywhere it appears. */
.drv-note-band{flex-basis:100%;display:flex;gap:9px;background:var(--note-bg);border:1px solid var(--note-line);border-radius:11px;padding:10px 12px;margin-top:10px}
.drv-note-ico{flex:none;color:var(--orange-dark);line-height:0;margin-top:1px}
.drv-note-ico .ico{width:16px;height:16px;margin-right:0}
.drv-note-kick{font-size:11px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;color:var(--orange-dark)}
.drv-note-text{font-size:.906rem;line-height:1.45;color:var(--ink);margin:2px 0 0}
/* chains editor (Fleet Settings → Route chains) */
.chain-driverpick{margin-bottom:12px}
.chain-driverpick .drv-rf-field{display:block}
.chain-weekdays{margin-bottom:14px}
.chain-steps{display:flex;flex-direction:column}
.chain-step-row{display:flex;align-items:center;gap:12px;padding:11px 2px;border-top:1px solid var(--line)}
.chain-step-num{flex:none;width:32px;height:32px;border-radius:50%;background:var(--ink);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:.95rem}
.chain-step-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.chain-step-name{font-weight:700;display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.chain-step-meta{font-size:.85rem}
.chain-step-btns{flex:none;display:flex;gap:6px;align-items:center}
.chain-step-btns form{margin:0}
.chain-add{display:flex;gap:8px;align-items:center;margin-top:14px;flex-wrap:wrap}

/* ==== This Week page + dashboard Today card (Sebastian, Oct 20,
   2026 — mock v3): the week replaces Tonight's Classes in the
   Teach tab. Rows are view-only links to the student profile. */
.wk-bar{padding:14px 16px}
.wk-nav{display:flex;align-items:flex-start;justify-content:space-between}
.wk-chev{font-size:1.5rem;color:var(--orange);text-decoration:none;padding:0 10px;line-height:1.2}
.wk-title{text-align:center}
.wk-h{font-family:var(--font-display);font-weight:600;font-size:1.3rem}
.wk-range{font-size:.8rem;color:var(--muted)}
.wk-load{font-size:.85rem;color:var(--muted);margin:8px 0 0;text-align:center}
.wk-load b{color:var(--ink)}
.wk-back{display:block;text-align:center;font-size:.82rem;font-weight:700;margin-top:6px}
.wk-pills{display:flex;gap:6px;flex-wrap:wrap;justify-content:center;margin-top:10px}
.wk-fpill{font-size:.78rem;padding:5px 12px;border-radius:var(--radius-pill);border:1px solid var(--line);color:var(--grey-mid);background:var(--panel);text-decoration:none}
.wk-fpill.on{background:var(--orange);border-color:var(--orange);color:#fff;font-weight:700}
.wk-week{padding-top:4px;padding-bottom:8px}
.wk-day{padding:10px 0 6px;border-bottom:1px solid #f0f0f2}
.wk-day:last-of-type{border-bottom:none}
.wk-today{background:#fff7f0;border-left:3px solid var(--orange);margin:0 -16px;padding-left:13px;padding-right:16px}
.wk-dayhead{display:flex;justify-content:space-between;align-items:center;margin-bottom:2px}
.wk-d{font-size:.92rem;font-weight:800}
.wk-c{font-size:.78rem;color:var(--grey-faint)}
.wk-todaytag{font-size:.6rem;font-weight:800;color:#fff;background:var(--orange);border-radius:4px;padding:2px 6px;margin-left:6px;letter-spacing:.04em;vertical-align:2px}
.wk-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 0;border-top:1px solid #f5f5f7;text-decoration:none;color:inherit}
.wk-main{min-width:0}
.wk-nm{font-size:.92rem;font-weight:600;display:block}
.wk-belt{font-size:.75rem;color:var(--grey-faint);display:block;margin-top:1px}
.wk-here{display:flex;align-items:center;gap:4px;font-size:.68rem;font-weight:800;color:#1f7a3d;margin-top:3px;letter-spacing:.03em}
.wk-dot{width:8px;height:8px;border-radius:50%;background:#2e9e4f;display:inline-block;flex:none}
.wk-pace{font-size:.75rem;color:#b3540a;font-style:italic;display:block;margin-top:2px}
.wk-shift{font-size:.75rem;color:var(--grey-faint);font-style:italic;display:block;margin-top:2px}
.wk-pill{font-size:.68rem;font-weight:800;padding:4px 9px;border-radius:var(--radius-pill);white-space:nowrap;letter-spacing:.02em;flex:none}
.wk-pb{background:var(--orange);color:#fff}
.wk-psd{background:#2b2b2e;color:#fff}
.wk-pf{border:1.5px solid var(--orange);color:var(--orange-dark)}
.wk-pp{background:var(--black);color:#fff}
.wk-pr{background:#e9e9ee;color:var(--grey-mid)}
.wk-none{font-size:.82rem;color:#a9a9ad;font-style:italic;padding:6px 0}
.wk-foot{font-size:.75rem;color:#a9a9ad;font-style:italic;padding:10px 0 4px;margin:0}
.wk-more{font-size:.8rem;color:var(--muted);margin:6px 0 0}
.wk-seeweek{display:block;text-align:center;font-size:.85rem;font-weight:800;color:var(--orange);margin-top:10px;text-decoration:none}

/* ==== class schedule settings (Oct 20, 2026): day-toggle pills
   per program + the closures list on the admin Settings page */
.sched-prog{margin:0 0 4px}
.sched-prog-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.sched-days{display:flex;gap:5px;flex-wrap:wrap;align-items:center;margin-top:6px}
.sched-day{position:relative;margin:0}
.sched-day input{position:absolute;opacity:0;width:1px;height:1px;min-height:0;padding:0;margin:0}
.sched-day span{display:inline-block;font-size:.78rem;font-weight:700;padding:6px 10px;border-radius:var(--radius-pill);border:1.5px solid var(--line);color:var(--grey-mid);background:var(--panel);cursor:pointer}
.sched-day input:checked+span{background:var(--orange);border-color:var(--orange);color:#fff}
.sched-day input:focus-visible+span{outline:2px solid var(--orange-dark);outline-offset:2px}
.sched-clear{margin:0 0 10px}
.sched-tag{font-size:.62rem;font-weight:800;letter-spacing:.04em;padding:2px 6px;border-radius:4px;background:#2b2b2e;color:#fff;vertical-align:2px;white-space:nowrap}
.sched-tag.extra{background:#1f7a3d}
.sched-add{margin-top:10px;border-top:1px solid #f0f0f2;padding-top:10px}
.sched-add-grid{display:flex;gap:10px;flex-wrap:wrap}
.sched-add-grid label{flex:1;min-width:130px}

/* ==== Home live tiles (reorganization Slice 3, Oct 21, 2026):
   a two-column grid under the Today card. Tiles are data-driven
   and render only when live, so the grid itself is absent when
   nothing is live. */
.home-tiles{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.home-tile{display:flex;flex-direction:column;gap:3px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-lg);padding:14px;text-decoration:none;color:var(--ink);box-shadow:var(--shadow-card);min-width:0}
.home-tile-label{font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.home-tile-value{font-family:var(--font-display);font-weight:600;font-size:1.45rem;line-height:1.15;color:var(--orange-dark)}
.home-tile-detail{font-size:.86rem;line-height:1.35;color:var(--muted)}
@media (min-width:1024px){.dash-grid>.home-tiles{grid-column:1/-1}}
