/* Indy Genesis app. The look of the approved prototype: the shield's navy and red, Plus Jakarta Sans, white cards on
   a lavender-grey page. Families get a phone layout with a tab bar at the bottom; wider screens get a top bar, and the
   admin console uses the full width. */
*{box-sizing:border-box;margin:0;padding:0}
:root{
  --navy:#1D1160;--navy-2:#2A1D8A;--navy-3:#3B2DAE;--deep:#0F0936;
  --navy-50:#F1EFFC;--navy-100:#E3DFF8;--navy-200:#C9C2F0;
  --red:#E31B23;--red-50:#FDECEC;--red-700:#B3141A;
  --ink:#16122F;--ink-2:#3B3757;--muted:#716D8C;--faint:#A29EB8;
  --line:#E9E7F2;--bg:#F5F4FA;--card:#fff;--field:#F8F7FC;
  --green:#0E8F5B;--green-50:#E4F5EC;--amber:#9A5A00;--amber-50:#FFF3DC;--amber-line:#F3D496;
  --sh-1:0 1px 2px rgba(22,18,47,.05),0 4px 14px rgba(22,18,47,.06);
  --font:'Plus Jakarta Sans',system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
  --gutter:16px;--tabbar:64px;
  color-scheme:light;
}
html{-webkit-text-size-adjust:100%}
body{overflow-wrap:anywhere;font-family:var(--font);color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.42;min-height:100vh}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer;text-align:inherit}
input,select,textarea{font:inherit;color:inherit}
a{color:var(--navy-2)}
img{display:block;max-width:100%}
svg.i{width:18px;height:18px;flex:none;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
:focus-visible{outline:3px solid var(--red);outline-offset:2px;border-radius:6px}
.money{font-variant-numeric:tabular-nums}
.muted{color:var(--muted)}
.sm{font-size:12.5px}
.hidden{display:none!important}
/* Long unbroken names and email addresses wrap rather than push the page sideways; tables keep their own widths. */
table.data,table.ftable,table.rp{overflow-wrap:normal}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
h1[tabindex="-1"]:focus{outline:none}
[hidden]{display:none!important}

/* ---------- Top bar (wide screens) and tab bar (phones) ---------- */
.topbar{position:sticky;top:0;z-index:20;background:var(--navy);color:#fff;padding:calc(env(safe-area-inset-top) + 10px) var(--gutter) 10px;
  display:flex;align-items:center;justify-content:space-between;gap:12px;box-shadow:0 2px 12px rgba(15,9,54,.25)}
.brand{display:flex;align-items:center;gap:10px;text-decoration:none;color:#fff;min-width:0}
.brand .badge{width:36px;height:36px;border-radius:11px;background:#fff;display:grid;place-items:center;flex:none}
.brand .badge img{width:28px;height:28px}
.brand b{font-size:15px;font-weight:800;white-space:nowrap}
.brand small{display:block;font-size:11.5px;color:rgba(255,255,255,.65);font-weight:600;white-space:nowrap}
.nav{display:flex;gap:4px;align-items:center}
.nav a,.nav button{color:rgba(255,255,255,.82);text-decoration:none;font-weight:650;font-size:13.5px;padding:8px 10px;border-radius:10px;display:inline-flex;gap:6px;align-items:center}
.nav a:hover,.nav button:hover{background:rgba(255,255,255,.1);color:#fff}
.nav a.on{background:#fff;color:var(--navy)}
.nav svg.i{width:16px;height:16px}
.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:30;display:flex;justify-content:space-around;
  padding:8px 8px calc(8px + env(safe-area-inset-bottom));background:rgba(255,255,255,.97);border-top:1px solid var(--line);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
.tab{flex:1;max-width:120px;display:flex;flex-direction:column;align-items:center;gap:3px;font-size:11px;font-weight:650;color:var(--faint);text-decoration:none;position:relative;padding-top:2px}
.tab svg.i{width:23px;height:23px}
.tab.on{color:var(--navy)}
.tab.on::after{content:'';position:absolute;top:-9px;width:28px;height:3px;border-radius:0 0 3px 3px;background:var(--red)}
@media (max-width:759px){
  .topbar{display:none!important}
  body.has-tabs{padding-bottom:calc(var(--tabbar) + env(safe-area-inset-bottom))}
}
@media (min-width:760px){.tabbar{display:none!important}}
/* The registration runs full screen, like the prototype: its own header, no tab bar or top bar. */
body.flow .topbar,body.flow .tabbar{display:none!important}
body.flow{padding-bottom:0}
.envbar{background:var(--amber-50);color:var(--amber);border-bottom:1px solid var(--amber-line);font-size:12px;font-weight:700;text-align:center;padding:6px var(--gutter)}

/* ---------- Page ---------- */
.app{min-height:calc(100vh - 60px)}
.page{max-width:720px;margin:0 auto;padding:20px var(--gutter) 32px}
.page.wide{max-width:1240px}
.page.flush{padding-top:0}
.boot{min-height:70vh;display:grid;place-items:center}
.enter{animation:enter .3s cubic-bezier(.2,.8,.2,1)}
@keyframes enter{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.enter{animation:none}}
h1{font-size:clamp(24px,6vw,28px);font-weight:800;letter-spacing:-.02em;color:var(--ink);line-height:1.15;text-wrap:balance}
h2{font-size:17px;font-weight:800;color:var(--ink);letter-spacing:-.01em;line-height:1.25}
h3{font-size:15px;font-weight:750;color:var(--ink)}
.lede{color:var(--muted);margin-top:4px;font-size:14px;font-weight:600}
.eyebrow{font-size:11.5px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.page-head h1{font-size:28px}
.stack{display:grid;gap:14px}
.row{display:flex;gap:10px;align-items:center}
.row.between{justify-content:space-between}
.row.wrap{flex-wrap:wrap}
.spacer{height:12px}
.section{margin-top:20px}
.section > h2{margin-bottom:10px}
.sec-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin:22px 0 10px}
.sec-head h2{font-size:17px}

/* ---------- Cards ---------- */
.card{background:var(--card);border:1px solid var(--line);border-radius:16px;box-shadow:var(--sh-1);padding:16px}
.card.flat{box-shadow:none}
.card.tight{padding:14px}
.card-h{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px}
.list{display:grid;gap:10px}
.item{display:flex;gap:12px;align-items:center;padding:12px;border:1px solid var(--line);border-radius:16px;background:#fff;text-decoration:none;color:inherit;box-shadow:var(--sh-1)}
a.item:hover,button.item:hover{border-color:var(--navy-200)}
.item .grow{flex:1;min-width:0}
.item .title{display:block;font-weight:750;font-size:14.5px}
.item .sub{display:block;color:var(--muted);font-size:12.5px;font-weight:600}
.item > svg.i{color:var(--faint)}
.ico{width:42px;height:42px;border-radius:13px;background:var(--navy-50);color:var(--navy);display:grid;place-items:center;flex:none}
.ico svg.i{width:20px;height:20px}
.ico.big{width:56px;height:56px;border-radius:18px}
.ico.big svg.i{width:26px;height:26px}
.ico.sport{font-size:22px}
/* Small grey uppercase card titles, as on the prototype's summary cards. */
.dcard{padding:14px;margin-bottom:10px}
.dcard-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:6px}
.dcard-head h2,.dcard-head h3,.dcard-head h4{font-size:11.5px;font-weight:800;color:var(--faint);text-transform:uppercase;letter-spacing:.07em}
.person{display:flex;align-items:center;gap:11px;padding:7px 0}
.person b{display:block;font-size:14.5px}
.person small{display:block;font-size:12.5px;color:var(--muted);font-weight:600}
.drow{display:flex;gap:10px;align-items:flex-start;padding:7px 0;font-size:14px;font-weight:600}
.drow > svg.i{color:var(--muted);margin-top:1px;width:17px;height:17px}
.drow small{display:block;color:var(--muted);font-size:12.5px;font-weight:600}
.people{display:flex;flex-wrap:wrap;gap:14px}

/* ---------- Buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:0 18px;border-radius:14px;font-weight:700;font-size:15px;
  transition:transform .08s,background .15s,box-shadow .15s;white-space:nowrap;text-align:center;text-decoration:none}
.btn:active{transform:scale(.98)}
.btn.primary{background:linear-gradient(180deg,#2A1C8A,#1D1160);color:#fff;box-shadow:0 8px 18px rgba(29,17,96,.28),inset 0 1px 0 rgba(255,255,255,.15)}
.btn.primary:hover{background:linear-gradient(180deg,#33249c,#22156e)}
.btn.primary[disabled]{background:#CBC8DB;box-shadow:none;cursor:not-allowed;opacity:1}
.btn[disabled]{opacity:.6;pointer-events:none;box-shadow:none}
.btn.busy{opacity:.75;pointer-events:none}
.btn.soft{background:var(--navy-50);color:var(--navy)}
.btn.soft:hover{background:var(--navy-100)}
.btn.ghost{background:#fff;border:1px solid var(--line);color:var(--ink)}
.btn.ghost:hover{background:#FAFAFD}
.btn.danger{background:#fff;border:1px solid #F3C5C7;color:var(--red-700)}
.btn.sm{min-height:36px;padding:0 14px;font-size:13.5px;border-radius:11px}
.btn.block{width:100%}
.btn svg.i{width:17px;height:17px}
.actions{display:flex;gap:10px;justify-content:space-between;align-items:center;margin-top:18px;flex-wrap:wrap}
.actions .btn.primary{flex:1 1 220px}
.link{color:var(--navy-2);font-weight:700;font-size:13.5px;display:inline-flex;align-items:center;gap:4px;text-decoration:none}
.link:hover{text-decoration:underline}
.link svg.i{width:15px;height:15px}
.icon-btn{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;flex:none;color:var(--muted)}
.icon-btn:hover{background:var(--navy-50);color:var(--navy)}

/* ---------- Pills, notes ---------- */
.pill{display:inline-flex;align-items:center;gap:5px;min-height:24px;padding:0 9px;border-radius:999px;font-size:11.5px;font-weight:700;white-space:nowrap}
.pill svg.i{width:13px;height:13px;stroke-width:2.4}
.pill.green{background:var(--green-50);color:var(--green)}
.pill.amber{background:var(--amber-50);color:var(--amber)}
.pill.navy{background:var(--navy-50);color:var(--navy)}
.pill.red{background:var(--red-50);color:var(--red-700)}
.pill.gray{background:#F0EFF5;color:var(--muted)}
.note,.info{display:flex;gap:9px;align-items:flex-start;padding:11px 12px;border-radius:14px;background:var(--navy-50);color:var(--navy);font-size:13px;font-weight:650;line-height:1.42}
.note svg.i,.info svg.i{width:16px;height:16px;margin-top:1px}
.note.amber{background:var(--amber-50);color:var(--amber)}
.note.red{background:var(--red-50);color:var(--red-700)}
.note.green{background:var(--green-50);color:var(--green)}
.note .grow{line-height:1.45}
a.note{text-decoration:none}
a.note:hover{filter:brightness(.98)}
.fine{font-size:12px;color:var(--muted);line-height:1.45}
.fine svg.i{width:13px;height:13px;vertical-align:-2px}

/* ---------- Forms ---------- */
.field{display:grid;gap:5px;min-width:0}
.field > span,.label{font-size:12.5px;font-weight:700;color:var(--muted);line-height:1.3}
.field .hint{font-size:12px;color:var(--muted);font-weight:500}
em.opt{font-style:normal;font-weight:600;color:var(--faint);font-size:12px;margin-left:3px}
.input,select.input,textarea.input{width:100%;min-height:46px;border:1px solid var(--line);border-radius:12px;padding:10px 12px;background:var(--field);font-size:16px;font-weight:600;color:var(--ink)}
.input::placeholder{color:var(--faint);font-weight:500}
.input:focus{outline:none;border-color:var(--navy-3);background:#fff;box-shadow:0 0 0 4px rgba(59,45,174,.12)}
.input[aria-invalid="true"]{border-color:var(--red);background:#fff}
.input:disabled{opacity:.55}
select.input{appearance:none;-webkit-appearance:none;padding-right:34px;cursor:pointer;
  background:var(--field) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23716D8C' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E") no-repeat right 10px center/18px}
select.input:focus{background-color:#fff}
textarea.input{min-height:84px;resize:vertical;line-height:1.4}
.grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.grid4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
@media (max-width:560px){.grid2:not(.keep),.grid3:not(.keep){grid-template-columns:minmax(0,1fr)}.grid4{grid-template-columns:repeat(2,minmax(0,1fr))}}
.grid3.keep{grid-template-columns:repeat(3,minmax(0,1fr))}
.grid2.keep{grid-template-columns:repeat(2,minmax(0,1fr))}
.grid-addr{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,.8fr) minmax(0,1.3fr);gap:10px}
@media (max-width:360px){.grid-addr{grid-template-columns:minmax(0,1fr)}}
.static{min-height:46px;display:flex;align-items:center;padding:0 2px;font-weight:650;color:var(--ink);word-break:break-all}
.field.indent,.cond{margin-left:4px;padding-left:12px;border-left:3px solid var(--navy-200);animation:condIn .25s ease}
@keyframes condIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
/* Yes or No: the question, then two equal buttons across the full width. */
.seg2{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;background:#F1F0F7;border-radius:11px;padding:3px;gap:3px}
.seg2 button{min-height:34px;border-radius:9px;font-size:13.5px;font-weight:700;color:var(--muted);text-align:center;white-space:nowrap;padding:0 10px}
.seg2 button.on{background:#fff;color:var(--navy);box-shadow:0 1px 3px rgba(22,18,47,.12)}
.field.yn{gap:6px}
.field.yn > span{font-size:13px;font-weight:650;color:var(--ink-2)}
.seg2[aria-invalid="true"],.field[aria-invalid="true"] .seg2,section[aria-invalid="true"],.choice[aria-invalid="true"],.choice:has(input[aria-invalid="true"]),.rs-sec[aria-invalid="true"]{outline:3px solid var(--red);outline-offset:3px;border-radius:14px}
.err{color:var(--red-700);font-size:13px;font-weight:650}
.check-inline{display:inline-flex;gap:8px;align-items:center;font-weight:650;font-size:13.5px;color:var(--ink-2)}
.check-inline input{width:18px;height:18px;accent-color:var(--navy)}
/* Tick boxes and radio buttons drawn the prototype's way; the real input stays underneath for keyboards and readers. */
.box,.check{width:24px;height:24px;border-radius:8px;border:2px solid #CFCBE0;display:grid;place-items:center;flex:none;background:#fff;color:#fff;transition:.15s}
.box svg.i,.check svg.i{width:15px;height:15px;stroke-width:3.2;opacity:0}
.check.on,.on > .box,.choice.on .box{background:var(--navy);border-color:var(--navy)}
.check.on svg.i,.choice.on .box svg.i{opacity:1}
.radio{width:20px;height:20px;border-radius:50%;border:2px solid #CFCBE0;flex:none;position:relative;background:#fff}
.on > .radio,.choice.radio.on .box{border-color:var(--navy)}
.on > .radio::after{content:'';position:absolute;inset:3px;border-radius:50%;background:var(--navy)}
.choice{display:flex;gap:11px;align-items:flex-start;padding:12px;border:1.5px solid var(--line);border-radius:14px;background:#fff;cursor:pointer;position:relative}
.choice:hover{border-color:var(--navy-200)}
.choice.on{border-color:var(--navy);background:#FBFAFF}
.choice input{position:absolute;opacity:0;pointer-events:none}
.choice .grow{flex:1;min-width:0}
.choice .t,.choice .d{display:block}
.choice .t{font-weight:700;font-size:14.5px}
.choice .d{font-size:12.5px;color:var(--muted);font-weight:600}
.choice:has(input:focus-visible){outline:3px solid var(--red);outline-offset:2px}
.choice.radio .box{border-radius:50%;width:20px;height:20px}
.choice.radio.on .box{background:#fff;border:6px solid var(--navy)}
button.choice{width:100%;text-align:left}
.choice.dim{cursor:default;opacity:.8;align-items:center}
.choice.dim:hover{border-color:var(--line)}
.rank{display:flex;gap:8px;align-items:center}
.rank > b{width:24px;height:24px;border-radius:8px;background:var(--navy);color:#fff;display:grid;place-items:center;font-size:12px;flex:none}
.rank select{flex:1}

/* ---------- Avatars and sport tiles ---------- */
.av{width:40px;height:40px;border-radius:14px;display:grid;place-items:center;font-weight:800;font-size:14px;flex:none;background:#E4E0F8;color:var(--navy)}
.av.sm{width:34px;height:34px;border-radius:11px;font-size:12px}
.av.c0{background:#E4E0F8;color:#1D1160}.av.c1{background:#FDE3E4;color:#B3141A}.av.c2{background:#DDF3EA;color:#0B7A4B}
.av.c3{background:#FFEBC9;color:#8A5200}.av.c4{background:#DCEBFF;color:#1F4E9E}.av.c5{background:#F1E1FA;color:#6B2A8F}
.prog-emoji{width:48px;height:48px;border-radius:14px;display:grid;place-items:center;font-size:25px;flex:none;background:var(--navy-50)}
.prog-emoji.sm{width:38px;height:38px;font-size:19px;border-radius:12px}
.org-badge{width:32px;height:32px;border-radius:10px;background:#fff;display:grid;place-items:center;flex:none}
.org-badge img{width:25px;height:25px}

/* ---------- Sign-in ---------- */
.signin{min-height:100vh;display:flex;flex-direction:column;background:radial-gradient(600px 320px at 50% -5%,#E7E3FB,transparent 70%),#fff}
.signin-body{flex:1;width:100%;max-width:420px;margin:0 auto;display:flex;flex-direction:column;justify-content:center;padding:28px 26px 20px}
.signin-logo{width:148px;margin:6px auto 14px;filter:drop-shadow(0 10px 20px rgba(29,17,96,.18))}
.signin h1{text-align:center;font-size:28px;letter-spacing:-.5px}
.lead{text-align:center;color:var(--muted);font-size:14.5px;margin:6px 8px 22px;line-height:1.45}
.input-icon{display:flex;align-items:center;gap:10px;min-height:52px;border:1.5px solid var(--line);border-radius:14px;padding:0 14px;background:#fff;color:var(--muted);margin-bottom:12px}
.input-icon input{border:0;outline:0;flex:1;min-width:0;font-size:16px;font-weight:600;color:var(--ink);background:transparent;min-height:48px}
.input-icon:focus-within{border-color:var(--navy-3);box-shadow:0 0 0 4px rgba(59,45,174,.12)}
.signin .fine{margin-top:10px}
.signin .center{text-align:center}
.divider{display:flex;align-items:center;gap:10px;color:var(--faint);font-size:12px;font-weight:700;margin:16px 0}
.divider::before,.divider::after{content:'';flex:1;height:1px;background:var(--line)}
.tagline{text-align:center;font-size:12px;color:var(--faint);font-style:italic;padding:0 34px 32px;line-height:1.45}
.stay{text-align:center;margin-top:14px}
.sent-icon{width:76px;height:76px;border-radius:24px;margin:4px auto 18px;display:grid;place-items:center;background:var(--navy-50);color:var(--navy)}
.sent-icon svg.i{width:36px;height:36px}
.sent-text{color:var(--muted);font-size:14.5px;margin-top:8px;line-height:1.45;text-align:center}
.code-wrap{position:relative;margin:22px auto 0;width:max-content;max-width:100%}
.code-boxes{display:flex;gap:8px;justify-content:center}
.cbox{width:44px;height:54px;border-radius:12px;border:2px solid var(--line);background:#fff;display:grid;place-items:center;font-size:24px;font-weight:800;color:var(--navy)}
.cbox.on{border-color:var(--navy);animation:cpop .22s ease-out}
.cbox.caret{border-color:var(--navy-3);box-shadow:0 0 0 4px rgba(59,45,174,.12)}
@keyframes cpop{from{transform:scale(.86)}to{transform:none}}
@media (prefers-reduced-motion:reduce){.cbox.on{animation:none}}
/* The real input sits over the six boxes, invisible, so the phone's code autofill and paste still work. */
.code-real{position:absolute;inset:0;width:100%;height:100%;opacity:0;font-size:16px;letter-spacing:40px;caret-color:transparent;border:0;background:transparent;color:transparent}
.code-wait{display:flex;align-items:center;justify-content:center;gap:6px;color:var(--green);font-weight:700;font-size:13.5px;margin-top:12px;min-height:20px}
.code-wait.muted{color:var(--faint);font-weight:600}
.code-wait svg.i{width:16px;height:16px}
.devcode{font-size:13px;color:var(--amber);background:var(--amber-50);border-radius:10px;padding:8px 10px;font-weight:700;margin-top:16px;text-align:center}
.devcode .link{font-size:13px}
.signin-links{display:flex;justify-content:center;gap:18px;flex-wrap:wrap;margin-top:14px}

/* ---------- Home ---------- */
.hero{position:relative;padding:calc(env(safe-area-inset-top) + 16px) 20px 58px;color:#fff;border-radius:0 0 30px 30px;overflow:hidden;
  background:radial-gradient(420px 220px at 95% -10%,rgba(227,27,35,.55),transparent 60%),
    repeating-linear-gradient(135deg,rgba(255,255,255,.05) 0 2px,transparent 2px 16px),
    linear-gradient(160deg,#2B1E8F 0%,#1D1160 55%,#150B4A 100%)}
.hero-inner{max-width:688px;margin:0 auto;position:relative}
.hero-mark{position:absolute;right:-34px;bottom:-46px;width:200px;opacity:.09;filter:brightness(0) invert(1);pointer-events:none}
.hero-top{display:flex;align-items:center;justify-content:space-between;position:relative}
@media (min-width:760px){.hero-top{display:none}.hero .hello{margin-top:6px}}
.org{display:flex;align-items:center;gap:9px;font-weight:700;font-size:14px}
.hello{margin-top:18px;font-size:14px;color:rgba(255,255,255,.75);font-weight:600;position:relative}
.hero h1{color:#fff;font-size:28px;letter-spacing:-.5px;margin-top:2px;position:relative}
.hero-sub{font-size:13.5px;color:rgba(255,255,255,.72);margin-top:3px;position:relative}
.summary{margin:-40px auto 0;max-width:688px;position:relative;z-index:2;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));padding:14px 4px}
.summary > div{padding:0 10px;border-left:1px solid var(--line);min-width:0}
.summary > div:first-child{border-left:0}
.summary .k{display:block;font-size:11.5px;color:var(--muted);font-weight:650}
.summary b{display:block;font-size:14.5px;font-weight:800;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;letter-spacing:-.2px}
@media (max-width:380px){.summary b{font-size:13.5px}.summary > div{padding:0 8px}}
.summary b.ok{color:var(--green)}
.summary b.due{color:var(--red-700)}
.home-body{max-width:720px;margin:0 auto;padding:0 var(--gutter) 32px}
.prog{display:flex;align-items:center;gap:12px;padding:12px;margin-bottom:10px}
.prog-main{flex:1;min-width:0}
.prog-name{font-weight:750;font-size:15.5px}
.prog-meta{font-size:12px;color:var(--muted);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.prog-window{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:700;margin-top:6px;color:var(--green)}
.prog-window.soon{color:var(--amber)}
.prog-window svg.i{width:13px;height:13px}
.prog-cta{display:flex;flex-direction:column;align-items:flex-end;gap:6px;flex:none}
.prog-cta .from{font-size:11.5px;color:var(--muted);font-weight:650}
.plan-next{display:flex;align-items:center;gap:12px;padding:14px}
.plan-next b{display:block;font-size:15px;font-weight:800}
.plan-next small{display:block;font-size:12.3px;color:var(--muted);font-weight:600;line-height:1.35;margin-top:2px}
.due-ic{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;background:var(--navy-50);color:var(--navy);flex:none}
.reg-card{display:flex;align-items:center;gap:11px;padding:12px;margin-bottom:10px;text-decoration:none;color:inherit}
.reg-card .grow{flex:1;min-width:0}
.reg-card b{display:block;font-size:14.5px}
.reg-card small{display:block;font-size:12px;color:var(--muted);font-weight:600}
.reg-card > svg.i{color:var(--faint)}
a.reg-card:hover{border-color:var(--navy-200)}
.empty{padding:18px;border:1.5px dashed var(--line);border-radius:16px;color:var(--muted);text-align:center;background:#fff;font-weight:600}
.install{padding:14px}
.install .nt-top{display:flex;gap:12px;align-items:center;margin-bottom:10px}
.install b{display:block;font-size:14.5px}
.install small{display:block;font-size:12.5px;color:var(--muted);font-weight:600;line-height:1.35}
.install ol{margin:10px 0 0 18px;display:grid;gap:6px;font-size:13.5px;color:var(--ink-2)}
.ref-ic{width:40px;height:40px;border-radius:12px;background:var(--navy-50);color:var(--navy);display:grid;place-items:center;flex:none}

/* ---------- Family page ---------- */
.fl-one{display:flex;align-items:center;gap:12px;padding:13px 14px;margin-bottom:10px;width:100%;text-align:left;text-decoration:none;color:inherit}
.fl-one .grow{flex:1;min-width:0}
.fl-one b{display:block;font-size:14.5px}
.fl-one small{display:block;font-size:12.5px;color:var(--muted);font-weight:600}
.fl-one small.due{color:var(--red-700)}
.fl-one > svg.i{color:var(--faint)}
.fl-ic{width:38px;height:38px;border-radius:12px;background:var(--navy-50);color:var(--navy);display:grid;place-items:center;flex:none}
.ath-card{display:flex;align-items:center;gap:11px;padding:12px 14px;margin-bottom:10px;text-decoration:none;color:inherit}
.ath-card .grow{flex:1;min-width:0}
.ath-card b{display:block;font-size:14.5px}
.ath-card small{display:block;font-size:12.5px;color:var(--muted);font-weight:600}
.ath-card > svg.i{color:var(--faint)}
a.ath-card:hover{border-color:var(--navy-200)}
.kv{display:grid;gap:2px;font-size:13.5px;color:var(--ink-2);font-weight:600;padding:4px 0}
.kv b{color:var(--ink)}
.balance{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:16px}
.balance small{display:block;font-size:12.5px;color:var(--muted);font-weight:650}
.balance b{font-size:26px;font-weight:800;letter-spacing:-.5px}
.rcpt{margin-bottom:10px;overflow:hidden;padding:0}
.rcpt-top{width:100%;display:flex;align-items:center;gap:11px;padding:12px;text-align:left}
.rcpt-top > div{flex:1;min-width:0}
.rcpt-top b{display:block;font-size:14.5px}
.rcpt-top small{font-size:12px;color:var(--muted);font-weight:600}
.rcpt-top .amt{font-weight:800;font-size:15px}
.chev{color:var(--faint);transition:transform .2s}
.open > * > .chev,.open .rs-head .chev{transform:rotate(180deg)}
.rcpt-body{padding:10px 14px 14px;border-top:1px dashed var(--line)}
.rcpt-body .btn{margin-top:10px}
.rcpt-ref{display:flex;align-items:center;gap:6px;margin-top:10px}
/* The receipt page: laid out like the PDF it downloads as (server/src/receipts.js). */
.receipt{padding:18px}
.rc-head{display:flex;align-items:center;gap:12px;padding-bottom:12px}
.rc-head > div{flex:1;min-width:0}
.rc-head b{display:block;font-size:18px;color:var(--navy);font-weight:800}
.rc-head small{font-size:12px;color:var(--muted)}
.rc-head .rc-no{flex:none;text-align:right}
.rc-head h1{font-size:22px;margin:0}
.rc-test{background:var(--red-50);color:var(--red-700);font-weight:750;font-size:13px;text-align:center;border-radius:8px;padding:8px;margin:4px 0 10px}
.rc-meta{display:grid;grid-template-columns:1fr 1fr;gap:14px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:12px 0;font-size:13.5px}
.rc-meta small{display:block;font-size:11px;font-weight:750;letter-spacing:.4px;text-transform:uppercase;color:var(--muted)}
.rc-meta b,.rc-meta span{display:block;overflow-wrap:anywhere}
.rc-meta dl{display:grid;grid-template-columns:auto 1fr;gap:3px 10px;margin:0}
.rc-meta dt{color:var(--muted)}
.rc-meta dd{margin:0;font-weight:700;overflow-wrap:anywhere}
.rc-h{font-size:11.5px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;color:var(--muted);margin:16px 0 4px}
.receipt .trow small{display:block;font-size:12px;color:var(--muted);font-weight:500}
.receipt .trow.muted{color:var(--muted)}
.receipt .trow.refund{color:var(--red-700)}
.rc-foot{margin-top:16px}
.rc-actions{margin:14px 0 8px}
@media (max-width:520px){.rc-meta{grid-template-columns:1fr}}

/* ---------- Registration: the frame ---------- */
.fhead{position:sticky;top:0;z-index:20;background:#fff;border-bottom:1px solid var(--line);padding:calc(env(safe-area-inset-top) + 10px) var(--gutter) 12px}
.fhead-in{max-width:688px;margin:0 auto}
.fhead-row{display:flex;align-items:center;gap:10px}
.back-btn,.close-x{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;flex:none;text-decoration:none}
.back-btn{background:var(--navy-50);color:var(--navy)}
.close-x{margin-left:auto;color:var(--muted)}
.close-x:hover{background:var(--navy-50);color:var(--navy)}
.fhead-title{min-width:0}
.fhead-title h1,.fhead-title b{display:block;font-size:16px;font-weight:800;letter-spacing:0;line-height:1.3;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fhead-title small{font-size:12px;color:var(--muted);font-weight:650}
.bars{display:grid;grid-template-columns:repeat(5,1fr);gap:5px;margin-top:12px;list-style:none}
.bars li{display:grid}
.bar-step{display:grid;gap:6px;text-align:left;padding:0;font-size:10.5px;font-weight:700;letter-spacing:-.1px;color:var(--faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bar-step::before{content:'';height:4px;border-radius:3px;background:var(--line);transition:background .3s}
.bar-step.done,.bar-step.on{color:var(--navy)}
.bar-step.done::before,.bar-step.on::before{background:var(--navy)}
.bar-step[disabled]{cursor:default}
.bar-step:not([disabled]):not(.on):hover{color:var(--navy-3)}
.fbody{max-width:720px;margin:0 auto;padding:16px var(--gutter) 24px}
.step-intro{font-size:13.5px;color:var(--muted);font-weight:600;margin-bottom:12px}
.actionbar{position:sticky;bottom:0;z-index:15;display:flex;align-items:center;gap:12px;padding:12px var(--gutter) calc(14px + env(safe-area-inset-bottom));
  background:rgba(255,255,255,.97);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-top:1px solid var(--line);box-shadow:0 -8px 24px rgba(22,18,47,.06)}
.actionbar-in{max-width:688px;margin:0 auto;display:flex;align-items:center;gap:12px;width:100%}
.ab-sum{flex:1;min-width:0}
.ab-sum small{display:block;font-size:12px;color:var(--muted);font-weight:650}
.ab-sum b{font-size:21px;font-weight:800;letter-spacing:-.3px;font-variant-numeric:tabular-nums}
.ab-sum b.sm{font-size:15.5px}
.ab-sum .save{display:inline-block;margin-left:6px;font-size:11px;font-weight:750;color:var(--green);background:var(--green-50);padding:2px 7px;border-radius:999px;vertical-align:4px}
.actionbar .btn{min-width:142px}

/* Step 1: athletes and teams */
.ath{margin-bottom:10px;border:1.5px solid var(--line);border-radius:18px;background:#fff;transition:border-color .15s,box-shadow .15s}
.ath.sel{border-color:var(--navy);box-shadow:0 6px 18px rgba(29,17,96,.10)}
.ath.dis{opacity:.65}
.ath-top{width:100%;display:flex;align-items:center;gap:11px;padding:12px;text-align:left}
.ath-name{flex:1;min-width:0}
.ath-name b{display:block;font-size:15px}
.ath-name small{font-size:12px;color:var(--muted);font-weight:600}
.price{text-align:right;display:flex;flex-direction:column;align-items:flex-end;line-height:1.2;flex:none;font-variant-numeric:tabular-nums}
.price s{font-size:11.5px;color:var(--faint)}
.price b{font-size:15px;font-weight:800}
.price b.w{color:var(--amber)}
.price em{font-style:normal;font-size:11px;font-weight:700;color:var(--green)}
.price em.full{color:var(--muted)}
.price em.w{color:var(--amber)}
.ath-team{display:flex;align-items:center;gap:10px;padding:0 12px 12px 47px}
.ath-team select.input{min-height:40px;padding-top:6px;padding-bottom:6px;font-size:14px}
.ath-team .grow{min-width:0}
.ath-wait{margin:0 12px 12px 47px;padding:10px 12px;border-radius:12px;background:var(--amber-50);border:1px solid var(--amber-line);font-size:12.5px;color:#7A4A00;line-height:1.4;font-weight:600}
.ath-note{margin:-4px 12px 12px 47px;font-size:12px;color:var(--muted);font-weight:600}
.ath-note .btn{margin-top:8px}
.add-card{width:100%;border:1.5px dashed #CFCBE0;border-radius:16px;padding:14px;display:flex;align-items:center;justify-content:center;gap:8px;color:var(--navy-2);font-weight:700;font-size:14px;text-decoration:none;background:transparent}
.add-card:hover{background:#fff}
.rules{padding:14px;margin-top:14px}
.rules-title{display:flex;align-items:center;gap:8px;font-weight:800;font-size:14px;margin-bottom:6px}
.rules-title svg.i{color:var(--red)}
.rules-row{display:flex;justify-content:space-between;gap:10px;font-size:13px;padding:6px 0;border-top:1px dashed var(--line);color:var(--ink-2)}
.rules-row b{font-weight:750;color:var(--ink)}
.rules .fine{margin-top:6px}
.levels{list-style:none;display:grid;gap:1px;margin-top:4px}
.levels li{display:flex;justify-content:space-between;gap:12px}

/* Step 2: one athlete at a time */
.kid-chips{display:flex;gap:8px;overflow-x:auto;margin:0 calc(-1 * var(--gutter)) 10px;padding:0 var(--gutter) 2px;scrollbar-width:none}
.kid-chips::-webkit-scrollbar{display:none}
.kid-chip{display:inline-flex;align-items:center;gap:8px;min-height:42px;padding:0 12px 0 5px;border-radius:14px;border:1.5px solid var(--line);background:#fff;font-weight:750;font-size:13.5px;flex:none}
.kid-chip .av{width:30px;height:30px;border-radius:10px;font-size:11px}
.kid-chip.on{border-color:var(--navy);box-shadow:0 4px 12px rgba(29,17,96,.12)}
.kc-ok{width:18px;height:18px;border-radius:50%;background:var(--green);color:#fff;display:grid;place-items:center}
.kc-ok svg.i{width:12px;height:12px;stroke-width:3.2}
.rs-sec{margin-bottom:10px;overflow:hidden;transition:border-color .15s;padding:0}
.rs-sec.open{border-color:var(--navy-200);box-shadow:0 0 0 3px rgba(59,45,174,.07),var(--sh-1)}
.rs-head{width:100%;display:flex;align-items:center;gap:10px;padding:11px 12px;text-align:left}
.rs-ic{width:34px;height:34px;border-radius:11px;background:var(--navy-50);color:var(--navy);display:grid;place-items:center;flex:none}
.rs-ic svg.i{width:17px;height:17px}
.rs-sec.done .rs-ic{background:var(--green-50);color:var(--green)}
.rs-t{flex:1;min-width:0}
.rs-t b{display:block;font-size:14.5px}
.rs-t small{font-size:12px;color:var(--muted);font-weight:600;margin-top:1px;line-height:1.35;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.sec-ok{width:22px;height:22px;border-radius:50%;background:var(--green-50);color:var(--green);display:grid;place-items:center;flex:none}
.sec-ok svg.i{width:13px;height:13px;stroke-width:3}
.rs-body{padding:12px 12px 14px;border-top:1px dashed var(--line);display:grid;gap:12px}
.rs-body .btn.block{margin-top:2px}
.msg-ok{display:flex;gap:6px;align-items:flex-start;color:var(--green);font-size:12.5px;font-weight:700;line-height:1.4}
.msg-ok svg.i{width:15px;height:15px;stroke-width:2.6;margin-top:1px;flex:none}
.msg-info{display:flex;gap:6px;align-items:flex-start;color:var(--navy);font-size:12.5px;font-weight:650;line-height:1.4}
.msg-info svg.i{width:15px;height:15px;margin-top:1px;flex:none}
.msg-err{color:var(--red-700);font-size:12.5px;font-weight:650}
.who-line{display:flex;justify-content:space-between;align-items:center;gap:10px;font-size:13px;color:var(--ink-2);font-weight:600;background:var(--field);border-radius:12px;padding:9px 12px}
.who-line .link{flex:none;white-space:nowrap}
/* School: the education types and the mix */
.edu{display:grid;gap:6px}
.edu-row{display:flex;gap:10px;align-items:center;padding:8px 10px;border-radius:12px;border:1px solid transparent}
.edu-row.on{background:var(--navy-50);border-color:var(--navy-100)}
.edu-t{display:flex;gap:10px;align-items:flex-start;flex:1;min-width:0;cursor:pointer}
.edu-t input{position:absolute;opacity:0;pointer-events:none}
.edu-t b{display:block;font-size:13.5px}
.edu-t small{display:block;font-size:12px;color:var(--muted);font-weight:500}
.edu-t .box{width:20px;height:20px;border-radius:6px}
.edu-t .box svg.i{width:12px;height:12px}
.edu-row.on .box{background:var(--navy);border-color:var(--navy)}
.edu-row.on .box svg.i{opacity:1}
.edu-t:has(input:focus-visible) .box{outline:3px solid var(--red);outline-offset:2px}
select.input.pct{width:86px;flex:none;min-height:38px;padding:4px 26px 4px 10px;font-size:14px;background-position:right 6px center;background-size:16px}
select.input.pct:disabled{opacity:.35}
.edu-total{display:flex;align-items:center;gap:8px;padding:10px 12px;border-radius:12px;font-size:13.5px;font-weight:700;background:#F3F2F8;color:var(--muted)}
.edu-total b{font-size:16px;font-weight:800}
.edu-total small{margin-left:auto;font-size:12px}
.edu-total svg.i{margin-left:auto;width:18px;height:18px;stroke-width:2.8}
.edu-total.ok{background:var(--green-50);color:var(--green)}
.edu-total.bad{background:var(--amber-50);color:var(--amber)}

/* Step 3: the family */
.fam-p{padding:4px 0 12px;border-bottom:1px dashed var(--line);margin-bottom:8px;display:grid;gap:10px}
.fam-p:last-child{border-bottom:0;margin-bottom:0;padding-bottom:4px}
.fam-invite{font-size:12.5px}
.dcard .stack{gap:12px}
.edit-box{display:grid;gap:12px;padding-top:6px}
/* Folded away, but still in the form: a closed box or section keeps its answers when the step is saved. */
.edit-box.closed,.rs-body.closed{display:none}

/* Step 4: agreements, eligibility and the signature */
.agr-group{font-size:11.5px;font-weight:800;color:var(--faint);text-transform:uppercase;letter-spacing:.07em;margin:20px 0 8px;display:flex;justify-content:space-between;gap:10px}
.agr-group b{color:var(--muted);font-weight:750;text-transform:none;letter-spacing:0;font-size:12px}
.agr{border:1px solid var(--line);border-radius:16px;background:#fff;overflow:hidden;box-shadow:var(--sh-1)}
.agr + .agr{margin-top:10px}
.agr.on{border-color:var(--navy-200)}
.agr-h{padding:13px 14px 0;display:flex;justify-content:space-between;gap:12px;align-items:baseline}
.agr-h h3{font-size:14.5px}
/* The full text sits in the page, never in a box that scrolls on its own: on a phone the boxes covered most of the
   screen, so a swipe landed in one and the page wouldn't move (Dan, 26 Oct). */
.agr-body{margin:8px 12px 0;padding:4px 12px;border-radius:12px;background:var(--field);border:1px solid var(--line);
  color:var(--ink-2);font-size:13.5px;line-height:1.55}
.agr-body p{margin:8px 0}
/* Agreed cards fold to their title and tick; "Read again" (shown only on agreed cards) opens the text. */
.agr.on:not(.open) .agr-body{display:none}
.agr-h-r{display:flex;align-items:center;gap:10px;flex:none}
.agr-read{display:none}
.agr.on .agr-read{display:inline}
.agr .choice{margin:10px 12px 12px;border-radius:12px;padding:11px 12px}
.agr .choice .grow{font-size:13.5px;font-weight:650;line-height:1.4}
.edu-table{width:100%;border-collapse:collapse;font-size:12.5px;margin-top:8px}
.edu-table th,.edu-table td{border-bottom:1px solid var(--line);padding:7px 6px;text-align:left;vertical-align:top}
.edu-table th{font-size:11.5px;color:var(--muted);font-weight:750}
.eligibility-intro p{color:var(--ink-2);font-size:13.5px}
.eligibility-intro p:first-child{font-style:italic;color:var(--navy)}
.sig{padding:14px;margin-top:16px}
.sig-head{display:flex;justify-content:space-between;align-items:center;gap:10px}
.sig-head h2{font-size:14.5px}
.sig-pad{position:relative;height:140px;margin-top:10px;border-radius:14px;background:#FBFAFE;border:1.5px dashed #CFCBE0}
.sig-pad canvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none;cursor:crosshair;border-radius:14px}
.sig-pad .hint{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:6px;color:var(--faint);font-weight:650;font-size:13.5px;pointer-events:none}
.sig-pad.has-sig .hint{display:none}
.sig-pad .x-line{position:absolute;left:18px;right:18px;bottom:32px;border-bottom:1px solid #DCD9EA;pointer-events:none}
.sig-pad .typed{position:absolute;left:24px;right:18px;bottom:30px;font:600 40px/1 Caveat,'Segoe Script','Brush Script MT',cursive;color:var(--navy);white-space:nowrap;overflow:hidden;pointer-events:none}
.sig-foot{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:8px;font-size:12px;color:var(--muted);font-weight:650;flex-wrap:wrap}
.sig .field{margin-top:12px}
.sig .fine{margin-top:10px}

/* Step 5: review and pay */
.rv{padding:4px 14px 6px}
.rv-head{display:flex;align-items:center;gap:11px;padding:10px 0 12px;border-bottom:1px solid var(--line)}
.rv-head b{display:block;font-size:15px}
.rv-head small{font-size:12px;color:var(--muted);font-weight:600}
.rv-line{display:flex;align-items:center;gap:11px;padding:12px 0;border-bottom:1px dashed var(--line)}
.rv-line:last-child{border-bottom:0}
.rv-main{flex:1;min-width:0}
.rv-main b{display:block;font-size:14.5px}
.rv-main small{display:block;font-size:12px;color:var(--muted);font-weight:600}
.rv-price{text-align:right;flex:none;font-variant-numeric:tabular-nums}
.rv-price s{display:block;font-size:11.5px;color:var(--faint)}
.rv-price b{font-size:15px;font-weight:800}
.rv-price small{display:block;font-size:11px;color:var(--muted);font-weight:700;margin-top:4px}
.code{padding:14px;margin-top:12px}
.code label,.po-title{font-size:12.5px;font-weight:700;color:var(--muted)}
.code-row{display:flex;gap:8px;margin-top:8px}
.code-row .input{flex:1;min-width:0;min-height:42px;text-transform:uppercase;letter-spacing:.5px;font-weight:700}
.code-row .btn{min-height:42px}
.code .msg-ok,.code .msg-info,.code .msg-err,.code .fine{margin-top:8px}
.payopt{padding:14px;margin-top:12px}
.po{width:100%;display:flex;align-items:center;gap:11px;padding:11px 12px;border:1.5px solid var(--line);border-radius:14px;margin-top:8px;text-align:left;transition:border-color .15s;cursor:pointer;position:relative}
.po input{position:absolute;opacity:0;pointer-events:none}
.po.on{border-color:var(--navy);background:#FBFAFF}
.po:has(input:focus-visible){outline:3px solid var(--red);outline-offset:2px}
.po-t b{display:block;font-size:14.5px}
.po-t small{display:block;font-size:12.3px;color:var(--muted);font-weight:600;margin-top:1px;line-height:1.35}
.payopt .fine{display:flex;gap:6px;align-items:flex-start;margin-top:10px}
.totals{padding:14px;margin-top:12px}
.trow{display:flex;justify-content:space-between;gap:10px;font-size:14px;padding:5px 0;color:var(--ink-2)}
.trow.green{color:var(--green);font-weight:650}
.trow.total{border-top:1px solid var(--line);margin-top:6px;padding-top:12px;font-size:17px;font-weight:800;color:var(--ink)}
.trow.due{font-weight:800;color:var(--navy)}
.totals .fine{margin-top:8px}
.pay-notes{display:grid;gap:8px;margin-top:14px}

/* ---------- The confirmation ---------- */
.done-hero{text-align:center;padding:22px 16px 6px}
.done-check{width:84px;height:84px;border-radius:50%;margin:0 auto 16px;display:grid;place-items:center;background:var(--green);color:#fff;
  box-shadow:0 0 0 10px rgba(14,143,91,.12),0 14px 30px rgba(14,143,91,.35);animation:pop .5s cubic-bezier(.2,1.4,.4,1)}
.done-check svg.i{width:42px;height:42px;stroke-width:3}
.done-check.clearing,.done-check.wait{background:var(--amber);box-shadow:0 0 0 10px rgba(154,90,0,.10),0 14px 30px rgba(154,90,0,.25)}
@keyframes pop{from{transform:scale(.4);opacity:0}to{transform:none;opacity:1}}
.done-hero h1{font-size:27px}
.done-hero p{color:var(--muted);font-size:14px;margin-top:6px;font-weight:600}
.confetti{position:fixed;top:-16px;border-radius:2px;z-index:70;pointer-events:none;animation:fall linear forwards}
@keyframes fall{to{transform:translate(var(--dx),110vh) rotate(var(--rot));opacity:.85}}
@media (prefers-reduced-motion:reduce){.done-check{animation:none}.confetti{display:none}}
.dl{padding:4px 14px;margin-top:14px}
.dl-row{display:flex;align-items:center;gap:11px;padding:10px 0;border-bottom:1px solid var(--line)}
.dl-row:last-child{border-bottom:0}
.dl-row small{display:block}
.paid{margin-top:10px;padding:14px;display:flex;justify-content:space-between;align-items:center;gap:12px}
.paid small{display:block;font-size:12px;color:var(--muted);font-weight:650}
.paid b{font-size:22px;font-weight:800;font-variant-numeric:tabular-nums}
.paid .r{text-align:right}
.plan{margin-top:10px;padding:14px}
.plan-t{display:flex;align-items:center;gap:8px;margin-bottom:4px;color:var(--navy)}
.plan-t b{font-size:14.5px;color:var(--ink)}
.plan .trow{align-items:center;gap:8px}
.plan .trow .money{margin-left:auto}
.plan .fine{margin-top:6px}
.ref{margin-top:10px;padding:14px;display:flex;align-items:center;gap:12px}
.ref small{display:block;font-size:12px;color:var(--muted);font-weight:650}
.ref b{font-size:14.5px;font-weight:800;letter-spacing:.2px}
.next{margin-top:10px;padding:14px}
.next h2{font-size:14.5px;margin-bottom:6px}
.next ul{list-style:none}
.next li{display:flex;gap:10px;font-size:13.2px;color:var(--ink-2);padding:6px 0;line-height:1.4}
.next li svg.i{color:var(--navy-3);margin-top:1px;width:17px;height:17px}
.done-actions{padding:16px 0 8px;display:grid;gap:10px}

/* ---------- Sheets: the payment sheet and adding an athlete ----------
   A bottom sheet on phones, a centred dialog on wider screens. */
body.sheet-open{overflow:hidden}
.paysheet-wrap{position:fixed;inset:0;z-index:60;display:flex;align-items:flex-end;justify-content:center}
.paysheet-backdrop{position:absolute;inset:0;background:rgba(14,9,45,.45);opacity:0;transition:opacity .2s}
.paysheet{position:relative;width:100%;max-width:480px;max-height:92vh;overflow:auto;overscroll-behavior:contain;background:#fff;
  border-radius:26px 26px 0 0;padding:10px 18px calc(22px + env(safe-area-inset-bottom));box-shadow:0 -10px 40px rgba(0,0,0,.18);
  transform:translateY(100%);transition:transform .3s cubic-bezier(.2,.8,.2,1);display:grid;gap:12px;outline:0}
.paysheet-wrap.open .paysheet-backdrop{opacity:1}
.paysheet-wrap.open .paysheet{transform:none}
@media (min-width:600px){
  .paysheet-wrap{align-items:center}
  .paysheet{border-radius:24px;transform:translateY(24px);opacity:0;transition:transform .25s,opacity .2s;padding-bottom:22px}
  .paysheet-wrap.open .paysheet{opacity:1}
  .paysheet .grab{display:none}
}
@media (prefers-reduced-motion:reduce){.paysheet,.paysheet-backdrop{transition:none}}
.paysheet .grab{width:40px;height:5px;border-radius:3px;background:#DAD7E6;margin:0 auto 4px}
.sheet-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.sheet-head h2{font-size:19px}
.pay-head{display:flex;gap:12px;align-items:center}
.pay-head .org-badge{width:46px;height:46px;border-radius:14px;border:1px solid var(--line)}
.pay-head .org-badge img{width:34px;height:34px}
.pay-head small{display:block;font-size:12.5px;color:var(--muted);font-weight:650}
.pay-head b{font-size:27px;font-weight:800;letter-spacing:-.5px;color:var(--ink);font-variant-numeric:tabular-nums;min-height:32px;display:block}
.pay-sum{font-size:13px;color:var(--muted);font-weight:600}
.pay-plan{display:flex;gap:8px;align-items:flex-start;font-size:13px;color:var(--navy);background:var(--navy-50);border-radius:12px;padding:10px 12px;font-weight:650}
.pay-plan svg.i{margin-top:1px;width:16px;height:16px}
.express{min-height:48px}
.or{display:flex;align-items:center;gap:10px;color:var(--faint);font-size:12px;font-weight:700}
.or::before,.or::after{content:"";flex:1;height:1px;background:var(--line)}
.payment-el{min-height:120px}
.pay-loading{display:flex;gap:10px;align-items:center;justify-content:center;min-height:120px;color:var(--muted);font-weight:650;font-size:14px}
.paysheet [data-pay]{min-height:52px;font-size:16px}
.secure{display:flex;gap:6px;align-items:center;justify-content:center;font-size:12px;color:var(--muted);text-align:center;font-weight:600}
.secure svg.i{width:14px;height:14px}

/* ---------- Toast and update banner ---------- */
.toast{position:fixed;left:50%;bottom:calc(env(safe-area-inset-bottom) + 96px);transform:translateX(-50%);background:rgba(22,18,47,.94);color:#fff;padding:10px 16px;border-radius:14px;
  font-weight:650;font-size:13.5px;box-shadow:0 10px 30px rgba(0,0,0,.25);z-index:90;width:max-content;max-width:calc(100% - 32px);display:flex;gap:8px;align-items:center;line-height:1.35;animation:toastIn .25s}
.toast svg.i{width:16px;height:16px;color:#B9B2F2}
.toast.bad{background:var(--red-700)}
.toast.bad svg.i{color:#fff}
@keyframes toastIn{from{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%,0)}}
.update{position:fixed;left:50%;top:calc(env(safe-area-inset-top) + 14px);transform:translateX(-50%);background:#fff;border:1px solid var(--line);box-shadow:var(--sh-1);
  border-radius:14px;padding:10px 12px;z-index:40;display:flex;gap:10px;align-items:center;font-weight:650;font-size:13.5px;width:max-content;max-width:calc(100% - 32px)}
.version{font-size:11.5px;color:var(--faint);text-align:center;margin:8px 0 24px}
body.flow .version{display:none}

/* ---------- Shared bits ---------- */
.center{text-align:center;justify-items:center}
.row.center{justify-content:center}
.grow{flex:1;min-width:0}
.stack.tight{gap:8px}
.sub-h{margin-top:6px;font-size:13px;color:var(--muted);font-weight:750}
.back{display:inline-flex;align-items:center;gap:4px;color:var(--navy-2);font-weight:700;font-size:14px;text-decoration:none;margin-bottom:10px}
.back:hover{text-decoration:underline}
.loading{display:flex;gap:12px;align-items:center;justify-content:center;min-height:50vh;color:var(--muted);font-weight:650}
.spinner{width:22px;height:22px;border-radius:50%;border:3px solid var(--navy-100);border-top-color:var(--navy);animation:spin .8s linear infinite;display:inline-block}
.spinner.big{width:40px;height:40px;border-width:4px}
@keyframes spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.spinner{animation-duration:2.4s}}
.hero-plain{text-align:center;padding:12px 0 6px}
.sum{display:grid;gap:8px}
.sum .ln{display:flex;justify-content:space-between;gap:12px}
.sum .ln.total{font-weight:800;font-size:17px;color:var(--ink);border-top:1px solid var(--line);padding-top:10px;margin-top:4px}
.sum .ln.good{color:var(--green);font-weight:700}

/* ---------- Tables (admin) ---------- */
.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:14px;background:#fff}
table.data{border-collapse:collapse;width:100%;font-size:13px}
table.data th,table.data td{padding:9px 10px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}
table.data th{position:sticky;top:0;background:#FAF9FD;font-size:12px;color:var(--ink-2);font-weight:800;cursor:pointer;user-select:none}
table.data tr:hover td{background:#FCFBFF}
table.data td.num{text-align:right;font-variant-numeric:tabular-nums}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.kpi{background:#fff;border:1px solid var(--line);border-radius:14px;padding:12px 14px;box-shadow:var(--sh-1)}
.kpi-top{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:12.5px;color:var(--muted);font-weight:700}
.kpi-ic{width:30px;height:30px;border-radius:9px;background:var(--navy-50);color:var(--navy);display:grid;place-items:center;flex:none}
.kpi-ic svg.i{width:15px;height:15px}
.kpi b{display:block;font-size:22px;font-weight:800;color:var(--ink);font-variant-numeric:tabular-nums;margin-top:4px}
.kpi small{display:block;font-size:12px;color:var(--muted);font-weight:600}
.kpi span{font-size:12.5px;color:var(--muted);font-weight:650}
.filters{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.filters .search{flex:1 1 220px;width:auto;min-height:40px}
.filters select.input{width:auto;min-height:40px}
.filters .seg2{display:inline-grid}
/* The forms list: one row per form on wide screens, a card per form on phones. */
.ffilters{display:flex;flex-wrap:wrap;align-items:center;gap:12px 16px;margin:14px 0;color:var(--muted)}
.ffilters label{display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:700}
.ffilters select.input{min-height:36px;width:auto;font-size:14px;padding-top:4px;padding-bottom:4px}
.fseg{display:flex;background:#fff;border:1px solid var(--line);border-radius:11px;padding:3px;gap:2px}
.fseg button{min-height:28px;padding:0 11px;border-radius:8px;font-size:12.5px;font-weight:700;color:var(--muted)}
.fseg button.on{background:var(--navy);color:#fff}
.panel{background:#fff;border:1px solid var(--line);border-radius:16px;box-shadow:var(--sh-1);padding:16px}
.phead{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.phead h2,.phead h3{font-size:16px}
.tbl-scroll{overflow-x:auto}
table.ftable{border-collapse:collapse;width:100%;font-size:13px;min-width:860px}
table.ftable th{font-size:11px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);text-align:left;padding:0 10px 8px;border-bottom:1px solid var(--line)}
table.ftable td{padding:11px 10px;border-bottom:1px solid #F0EFF6;vertical-align:top}
table.ftable td.r,table.ftable th.r{text-align:right;font-variant-numeric:tabular-nums}
table.ftable td b{font-size:13.5px}
table.ftable small.block{display:block;font-size:11.5px;margin-top:2px;font-weight:600;color:var(--muted)}
table.ftable tr.tr-link{cursor:pointer}
table.ftable tr.tr-link:hover td{background:#FAF9FE}
table.ftable td.nowrap{white-space:nowrap}
.tprog{display:flex;align-items:center;gap:10px}
.tprog .prog-emoji{width:34px;height:34px;font-size:17px;border-radius:10px}
.refbox{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:12px;background:var(--field);border:1px dashed var(--navy-200)}
.refbox svg.i{color:var(--navy)}
.refbox small{display:block;font-size:11.5px;color:var(--muted);font-weight:700}
.refbox b{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:14px;color:var(--navy)}
@media (max-width:759px){
  .ftable-wrap{display:none}
}
@media (min-width:760px){
  .fcards{display:none}
}
.fcard{padding:14px;margin-bottom:10px;display:grid;gap:10px;text-decoration:none;color:inherit}
.fcard-top{display:flex;gap:11px;align-items:center}
.fcard-top .grow b{display:block;font-size:15px}
.fcard-top .grow small{display:block;font-size:12px;color:var(--muted);font-weight:600}
.fcard-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;font-size:12px;color:var(--muted);font-weight:650}
.fcard-stats b{display:block;font-size:15px;color:var(--ink);font-variant-numeric:tabular-nums}
/* The registrant report: every column, grouped, names pinned on the left, the header held while it scrolls. */
.rp-wrap{overflow:auto;max-height:70vh;border:1px solid var(--line);border-radius:12px;background:#fff}
table.rp{border-collapse:separate;border-spacing:0;font-size:12.5px;min-width:100%}
.rp th,.rp td{white-space:nowrap;padding:7px 10px;border-bottom:1px solid #F0EFF6;text-align:left;background:#fff}
.rp td.r{text-align:right;font-variant-numeric:tabular-nums}
.rp thead th{position:sticky;top:0;z-index:2;background:#F8F7FC}
.rp thead tr + tr th{top:29px;border-bottom:1px solid var(--line)}
.rp .rp-groups th{font-size:10.5px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--faint);border-left:1px solid var(--line);height:29px}
.rp thead button{font-size:11.5px;font-weight:800;color:var(--ink-2);display:inline-flex;align-items:center;gap:4px;padding:0}
.rp thead button svg.i{width:13px;height:13px;color:var(--red)}
.rp thead th.sorted{background:#EEEBFD}
.rp thead th.sorted button{color:var(--navy)}
.rp .st{position:sticky;z-index:1}
.rp thead .st{z-index:3}
.rp .st1{left:0;min-width:110px;max-width:110px;overflow:hidden;text-overflow:ellipsis}
.rp .st2{left:110px;min-width:120px;max-width:120px;overflow:hidden;text-overflow:ellipsis;border-right:1px solid var(--line)}
.rp tbody tr.r1 td{border-top:1px solid #E6E4F0}
.rp tbody tr:hover td{background:#FAF9FE}
.rp-tools{display:flex;align-items:center;gap:12px;flex-wrap:wrap}

/* ---------- Admin form editor ----------
   Wide screens: teams and codes on the left, settings in a rail on the right. Narrow screens: one column, ordered by
   what an admin reaches for first (the wrappers dissolve and each card's "order" decides). */
.ed-head{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.ed-head .ico.sport{width:48px;height:48px;font-size:26px}
.ed-bar{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-top:14px;padding:10px 12px 10px 16px;background:#fff;border:1px solid var(--line);border-radius:16px}
.ed-stats{display:flex;gap:18px;flex-wrap:wrap;color:var(--muted);font-size:13.5px;font-weight:650}
.ed-stats b{color:var(--navy);font-size:17px;font-weight:800;margin-right:5px;font-variant-numeric:tabular-nums}
.editor{display:grid;gap:16px;margin-top:16px;grid-template-columns:minmax(0,1fr)}
.ed-side,.ed-main{display:contents}
.ed-status{order:1}.ed-teams{order:2}.ed-codes{order:3}.ed-pay{order:4}.ed-details{order:5}.ed-contact{order:6}
@media (min-width:1180px){
  .editor{grid-template-columns:minmax(0,1fr) 340px;align-items:start}
  .ed-side,.ed-main{display:grid;gap:16px;align-content:start}
  .ed-main{grid-column:1;grid-row:1}
  .ed-side{grid-column:2;grid-row:1}
  .ed-side .tight-grid{grid-template-columns:minmax(0,1fr)}
}
.ed-card h2{font-size:16px}
.ed-card .card-h{margin-bottom:14px}
.ed-card .seg2{display:grid}
.tight-grid{gap:10px}
.sched-sum{font-size:13.5px;color:var(--ink-2);background:var(--navy-50);border-radius:12px;padding:10px 12px;line-height:1.45}
.sched-sum b{color:var(--navy)}
.switch-row{display:flex;gap:12px;align-items:center;cursor:pointer}
.switch-row b{display:block;font-size:14.5px}
.switch-row small{display:block;color:var(--muted);font-size:12.5px;font-weight:500;line-height:1.4}
.switch{position:relative;display:inline-flex;flex:none}
.switch input{position:absolute;inset:0;opacity:0;width:100%;height:100%;margin:0;cursor:pointer;z-index:1}
.switch .track{width:46px;height:28px;border-radius:999px;background:#D3D0E0;position:relative;transition:background .15s}
.switch .track::after{content:"";position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.25);transition:transform .15s}
.switch input:checked + .track{background:var(--green)}
.switch input:checked + .track::after{transform:translateX(18px)}
.switch input:focus-visible + .track{outline:3px solid var(--red);outline-offset:2px}
.ex{background:var(--green-50);color:var(--green);border-radius:10px;padding:8px 10px;font-weight:650;font-size:13px}
.sib{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.sib label{display:grid;gap:4px;font-size:12.5px;color:var(--muted);font-weight:650}
.affix{display:flex;align-items:center;border:1px solid var(--line);border-radius:12px;background:var(--field);overflow:hidden;min-width:0}
.affix:focus-within{border-color:var(--navy-3);background:#fff;box-shadow:0 0 0 4px rgba(59,45,174,.12)}
.affix > span{padding-left:11px;color:var(--muted);font-weight:700}
.affix.right > span{padding:0 11px 0 0;white-space:nowrap;font-size:13px}
.affix .input{border:0;box-shadow:none!important;padding-left:6px;min-width:0;background:transparent}
.affix.two .input:first-child{flex:1;padding-left:11px}
.affix.two select.input{width:auto;flex:none;border-left:1px solid #E6E3EF;border-radius:0;padding:0 26px 0 8px;background-color:#FAFAFD;font-size:13.5px}
.chips-input{display:flex;flex-wrap:wrap;gap:6px;align-items:center;min-height:46px;padding:6px;border:1px solid var(--line);border-radius:12px;background:var(--field);cursor:text}
.chips-input:focus-within{border-color:var(--navy-3);background:#fff;box-shadow:0 0 0 4px rgba(59,45,174,.12)}
.chip-tag{display:inline-flex;align-items:center;gap:2px;padding:4px 4px 4px 10px;border-radius:999px;background:var(--navy-50);color:var(--navy);font-size:13px;font-weight:700;max-width:100%;overflow-wrap:anywhere}
.chip-tag button{display:grid;place-items:center;width:22px;height:22px;border-radius:50%;flex:none}
.chip-tag button:hover{background:var(--navy-100)}
.chip-tag svg.i{width:13px;height:13px}
.chip-entry{flex:1 1 150px;min-width:0;border:0;outline:0;font-size:15px;padding:6px;background:transparent}
.add-row{margin-top:14px}
.ed-card .icon-btn{width:34px;height:34px;border-radius:10px}
.ed-card .icon-btn:hover{background:var(--red-50);color:var(--red-700)}
.del-locked{display:grid;place-items:center;width:34px;height:34px;color:var(--faint);cursor:help}
.del-locked svg.i{width:15px;height:15px}
.cell{display:grid;gap:4px;min-width:0}
.cell-label{display:none;font-size:12px;font-weight:750;color:var(--ink-2)}
.cell-hint{font-size:11.5px;color:var(--muted);font-weight:600;min-height:0}
.cell-hint:empty{display:none}
.input.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;text-transform:uppercase;letter-spacing:.04em}
/* Teams table: one header row on wide screens, a card per team on phones. */
.tt-head,.tt-row{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1.3fr) minmax(0,1fr) 92px 84px minmax(0,.9fr) 34px;gap:8px;align-items:center}
.tt-head{padding:0 6px 8px;font-size:11px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--line)}
.tt-row{padding:10px 6px;border-bottom:1px solid var(--line);align-items:start}
.tt-row > .cell{align-self:center}
.tt-row .input,.cd-row .input{min-height:40px;padding:8px 10px;font-size:14.5px}
.tt-row select.input,.cd-row select.input{padding-right:28px}
.tt-row .affix .input,.cd-row .affix .input{min-height:38px}
.tt-row.is-new{background:var(--navy-50);border-radius:12px;border-bottom-color:transparent;margin:6px 0}
.tt-row.is-changed{box-shadow:inset 3px 0 0 #E9A23B}
.tt-row.is-removed{display:flex;align-items:center;gap:12px;color:var(--muted);font-size:14px;background:#FAFAFD}
.c-spots{font-size:13px;color:var(--ink-2);gap:4px}
.spots-n{font-weight:750;font-variant-numeric:tabular-nums}
.held-n{color:var(--amber);font-weight:650}
.c-spots .pill{justify-self:start}
.meter{display:flex;height:6px;border-radius:999px;background:#ECEAF4;overflow:hidden;max-width:120px}
.meter .taken{background:var(--navy)}
.meter .held{background:#E9A23B}
.cd-head,.cd-row{display:grid;grid-template-columns:minmax(0,1fr) 168px minmax(0,1.5fr) 56px 34px;gap:8px;align-items:center}
.cd-head{padding:0 6px 8px;font-size:11px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--line)}
.cd-row{padding:10px 6px;border-bottom:1px solid var(--line)}
@media (max-width:760px){
  .tt-head,.cd-head{display:none}
  .cell-label{display:block}
  .tt-row{grid-template-columns:repeat(3,minmax(0,1fr)) 34px;grid-template-areas:"name name name del" "div div who who" "price price cap cap" "spots spots spots spots";gap:10px;padding:14px 4px}
  .tt-row > .cell{align-self:start}
  .tt-row .input,.cd-row .input,.ed-card .input,.chip-entry{font-size:16px}
  .tt-row .c-name{grid-area:name}.tt-row .c-div{grid-area:div}.tt-row .c-who{grid-area:who}.tt-row .c-price{grid-area:price}
  .tt-row .c-cap{grid-area:cap}.tt-row .c-spots{grid-area:spots}.tt-row .c-del{grid-area:del;align-self:end}
  .cd-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr) 34px;grid-template-areas:"code amt del" "label label active";gap:10px;padding:14px 4px}
  .cd-row .k-code{grid-area:code}.cd-row .k-amt{grid-area:amt}.cd-row .k-label{grid-area:label}.cd-row .k-active{grid-area:active;justify-items:center}.cd-row .k-del{grid-area:del;align-self:end}
}
/* The save bar shows only while something is unsaved. */
.savebar{position:sticky;bottom:0;z-index:15;display:flex;gap:10px;align-items:center;margin:20px calc(-1 * var(--gutter)) 0;
  padding:12px var(--gutter) calc(12px + env(safe-area-inset-bottom));background:rgba(255,255,255,.97);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  border-top:1px solid var(--line);box-shadow:0 -6px 20px rgba(22,18,47,.08);animation:enter .2s ease-out}
.savebar b{display:block;color:var(--amber)}
.savebar small{display:block;font-size:12.5px;color:var(--muted)}
@media (max-width:759px){body.has-tabs .savebar{bottom:calc(var(--tabbar) + env(safe-area-inset-bottom))}}
@media (min-width:760px){.savebar{border:1px solid var(--line);border-radius:18px 18px 0 0;margin-left:0;margin-right:0}}
.form-card h2{font-size:17px}
.form-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,360px),1fr));gap:14px}

/* Families (admin): the search box, and label and value pairs */
.ff-search{flex:1 1 240px;min-width:0}
.fam small.block{display:block;font-size:12.5px;margin-top:2px;color:var(--muted)}
.fam-reg{gap:12px;align-items:flex-start;padding:4px 0}
.kvl{display:grid;grid-template-columns:minmax(110px,36%) 1fr;gap:6px 14px;margin:0;font-size:14px}
.kvl dt{color:var(--ink-2);font-weight:600}
.kvl dd{margin:0;color:var(--ink);overflow-wrap:anywhere}

/* Progress (admin): a stacked bar per phase and a checklist per section */
.pg-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap}
.pg-count{font-size:14px;color:var(--ink-2);white-space:nowrap}
.pg-bar{display:flex;gap:2px;height:12px;border-radius:999px;overflow:hidden;background:#F0EFF5}
.pg-seg{display:block;height:100%}
.pg-seg.pg-done{background:var(--green)}.pg-seg.pg-testing{background:#3A7BD5}.pg-seg.pg-partial{background:#D99A2B}.pg-seg.pg-next{background:var(--navy-3)}.pg-seg.pg-planned{background:var(--navy-200)}
.pg-legend{display:flex;flex-wrap:wrap;gap:6px 16px;margin:2px 0 0;font-size:12.5px;color:var(--ink-2);font-weight:600}
.pg-legend span{display:inline-flex;align-items:center;gap:6px}
.pg-dot{display:inline-block;width:10px;height:10px;border-radius:3px}
.pg-dot.pg-done{background:var(--green)}.pg-dot.pg-testing{background:#3A7BD5}.pg-dot.pg-partial{background:#D99A2B}.pg-dot.pg-next{background:var(--navy-3)}.pg-dot.pg-planned{background:var(--navy-200)}
.pg-sec{border-top:1px solid var(--line);padding:6px 0}
.pg-sec summary{display:flex;justify-content:space-between;gap:12px;cursor:pointer;padding:8px 0;list-style-position:inside}
.pg-sec summary small{color:var(--muted);font-weight:600;white-space:nowrap}
.pg-item{display:flex;gap:12px;align-items:flex-start;padding:10px 0;border-top:1px solid var(--line)}
.pg-mark{flex:none;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:6px;border:2px solid var(--navy-200);margin-top:1px}
.pg-mark svg.i{width:14px;height:14px;stroke-width:3}
.pg-mark.pg-done{background:var(--green);border-color:var(--green);color:#fff}
.pg-mark.pg-testing{border-color:#3A7BD5;color:#3A7BD5}
.pg-mark.pg-partial{border-color:#D99A2B;color:var(--amber)}
.pg-mark.pg-next{border-color:var(--navy-3);color:var(--navy-3)}
.pg-text{margin:0;font-size:13.5px;color:var(--ink)}
.pg-text b{margin-right:4px;white-space:nowrap}
.pg-note{margin:4px 0 0;font-size:12.5px;color:var(--ink-2)}
.pg-tags{flex:none;display:flex;flex-direction:column;align-items:flex-end;gap:3px}
.pg-tags small{color:var(--muted);font-weight:600;font-size:11.5px}
@media (max-width:560px){.pg-item{flex-wrap:wrap}.pg-item > .grow{flex:1 1 calc(100% - 40px)}.pg-tags{flex-direction:row;align-items:center;margin-left:34px}}

/* Switches (admin) */
.switch-feat{display:flex;justify-content:space-between;align-items:center;gap:14px;flex-wrap:wrap;padding:10px 0;border-top:1px solid var(--line)}
.switch-feat:first-of-type{border-top:0}
.switch-feat > div:first-child{flex:1 1 260px}

/* Coming soon: what everyone sees before launch */
.soon .soon-head{text-align:center;margin-top:12px}
.soon .soon-head img{display:block;margin:0 auto 10px}
.soon-points{display:grid;gap:10px}
.soon-points .card{align-items:flex-start;gap:12px}
.soon-points svg.i{flex:none;width:22px;height:22px;color:var(--navy);margin-top:2px}
.soon-points p{margin:2px 0 0}
.soon > p{text-align:center}
