/* Design tokens carried over from the spreadsheet tool. The series palette in
   particular is not arbitrary: it was validated on a white surface for
   lightness band, chroma floor and CVD separation (worst adjacent dE 8.7
   protan), so it is reused verbatim rather than re-derived. */
:root{
  --primary:#00ac8a; --primary-dark:#008c70; --primary-strong:#115e59;
  --primary-light:#e9f2e1; --primary-soft:rgba(233,242,225,.5); --brand-ink:#101828;
  --zinc-50:#fafafa; --zinc-100:#f4f4f5; --zinc-200:#e4e4e7; --zinc-300:#d4d4d8;
  --zinc-400:#a1a1aa; --zinc-500:#71717a; --zinc-600:#52525b; --zinc-700:#3f3f46; --zinc-900:#18181b;
  --fg:var(--zinc-900); --fg-2:var(--zinc-600); --fg-3:var(--zinc-500); --fg-4:var(--zinc-400);
  --border:var(--zinc-200); --border-subtle:var(--zinc-100); --border-strong:var(--zinc-300);
  --font-sans:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif;
  --r-md:.375rem; --r-lg:.5rem; --r-xl:.75rem; --r-full:9999px;
  --ease:cubic-bezier(.4,0,.2,1);
  --s1:#00947a; --s2:#eb6834; --s3:#2a78d6; --s4:#eda100; --s5:#4a3aa7; --s6:#e87ba4; --s7:#008300;
  --good:#0ca30c; --warn:#fab219; --bad:#d03b3b;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{margin:0;padding:0}
body{font-family:var(--font-sans);background:#fff;color:var(--fg);font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased;padding-inline:env(safe-area-inset-left) env(safe-area-inset-right)}
.wrap{max-width:64rem;margin:0 auto;padding:0 1rem}
.wrap.narrow{max-width:40rem}
@media(min-width:1024px){.wrap{padding:0 2rem}}

/* Topbar */
.topbar{background:var(--primary-soft);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:40;backdrop-filter:blur(12px)}
.topbar-inner{display:flex;align-items:center;gap:.75rem;min-height:4rem;padding-block:.5rem}
.brand{display:flex;align-items:center;gap:.625rem;min-width:0;font-weight:700;color:var(--primary-strong);white-space:nowrap;text-decoration:none}
.brand span:last-child{overflow:hidden;text-overflow:ellipsis}
.brand-mark{width:1.5rem;height:1.5rem;border-radius:var(--r-md);background:var(--primary);position:relative;flex:none}
.brand-mark::after{content:"";position:absolute;inset:.375rem;border-radius:2px;background:#fff}
.spacer{flex:1 1 auto}
.navlink{font-size:.875rem;color:var(--fg-2);text-decoration:none;padding:.25rem .5rem;border-radius:var(--r-md)}
.navlink:hover{background:rgba(255,255,255,.6);color:var(--fg)}
.navlink.on{color:var(--primary-strong);font-weight:600}
.product-context{font-size:.875rem;color:var(--fg-3);white-space:nowrap}
.desktop-nav{display:flex;align-items:center;gap:.25rem}
.mobile-nav{display:none;position:relative}
.mobile-nav summary{list-style:none}
.mobile-nav summary::-webkit-details-marker{display:none}
.mobile-nav nav{position:absolute;inset-block-start:calc(100% + .5rem);inset-inline-end:0;min-width:13rem;padding:.5rem;background:#fff;border:1px solid var(--border);border-radius:var(--r-xl)}
.mobile-nav nav .navlink{display:block;padding:.625rem .75rem}
.mobile-nav nav form{padding:.375rem .75rem}

.pill{display:inline-flex;align-items:center;gap:.4rem;font-size:.75rem;font-weight:600;padding:.25rem .625rem;border-radius:var(--r-full);background:var(--zinc-100);color:var(--fg-2);white-space:nowrap}
.pill.live{background:#dcfce7;color:#166534}
.pill.snap{background:#fef9c3;color:#854d0e}
.pill.err{background:#fee2e2;color:#991b1b}
.dot{width:.5rem;height:.5rem;border-radius:var(--r-full);background:currentColor;flex:none}

/* Buttons */
.btn{display:inline-flex;align-items:center;gap:.4rem;font-family:inherit;font-size:.875rem;font-weight:500;padding:.5rem .875rem;border-radius:var(--r-lg);border:1px solid var(--border-strong);background:#fff;color:var(--fg);cursor:pointer;text-decoration:none;transition:background-color 150ms var(--ease),color 150ms var(--ease),border-color 150ms var(--ease)}
.btn:hover{background:var(--zinc-50)}
.btn:focus-visible{outline:none;box-shadow:0 0 0 2px rgba(0,172,138,.5);border-color:var(--primary)}
.btn.sm{font-size:.8125rem;padding:.375rem .75rem}
.btn.primary{background:var(--primary-strong);border-color:var(--primary-strong);color:#fff}
.btn.primary:hover{background:var(--primary-dark);border-color:var(--primary-dark)}
.btn.danger{color:#991b1b;border-color:#fecaca}
.btn.danger:hover{background:#fef2f2}
.btn[disabled]{opacity:.4;cursor:default}

/* Type */
.h1{font-size:1.875rem;font-weight:700;line-height:1.25;margin:0}
.h3{font-size:1.5rem;font-weight:700;line-height:1.3;margin:0}
.h4{font-size:1rem;font-weight:600;line-height:1.375;margin:0}
.meta{font-size:.875rem;color:var(--fg-3);margin:0}
.caption{font-size:.8125rem;color:var(--fg-3);margin:0}
.label-up{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--zinc-700)}
.num{font-variant-numeric:tabular-nums}
a.link{color:var(--primary-strong);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.15em}
a.link:hover{color:var(--primary-strong)}

.weekbar{display:flex;align-items:center;gap:.75rem;padding:1.5rem 0 1rem;flex-wrap:wrap}
.weeknav{display:flex;align-items:center;gap:.375rem}
.meeting-navigation,.meeting-commands{display:flex;align-items:center;gap:.375rem}
.meeting-summary{display:none}
.phase{font-size:.8125rem;font-weight:600;color:var(--primary-strong);margin:.2rem 0}

/* Table */
.tbl-wrap{border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden}
table.roster{border-collapse:collapse;width:100%}
table.roster th{text-align:left;font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--zinc-700);background:var(--zinc-50);padding:.75rem 1rem;border-bottom:1px solid var(--border);white-space:nowrap}
table.roster td{padding:.875rem 1rem;border-bottom:1px solid var(--border-subtle);vertical-align:middle}
table.roster tr:last-child td{border-bottom:0}
table.roster tbody tr{transition:background-color 150ms var(--ease)}
table.roster tbody tr:hover{background:var(--zinc-50)}
table.roster tbody tr.flagged{background:#fffbf5}
.who{display:flex;align-items:center;gap:.75rem;min-width:0}
.nm{font-weight:600;white-space:nowrap;color:inherit;text-decoration:none}
.nm:hover{color:var(--primary-strong)}
.k-name{font-size:.75rem;color:var(--fg-3);line-height:1.3}
.k-val{font-size:1.125rem;font-weight:600;line-height:1.25;font-variant-numeric:tabular-nums}
.k-prev{font-size:.8125rem;color:var(--fg-3);font-variant-numeric:tabular-nums;margin-top:.125rem}
.goal-cell{font-size:.875rem;color:var(--fg-2);max-width:22rem}

.avatar{width:2.25rem;height:2.25rem;border-radius:var(--r-full);flex:none;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:.8125rem;overflow:hidden}
.avatar.lg{width:3.5rem;height:3.5rem;font-size:1.25rem}
.avatar img{width:100%;height:100%;object-fit:cover;display:block}

.badge{display:inline-flex;align-items:center;gap:.375rem;font-size:.75rem;font-weight:600;padding:.1875rem .5rem;border-radius:var(--r-full);white-space:nowrap}
.badge.hit{background:#dcfce7;color:#166534}
.badge.missed{background:#fee2e2;color:#991b1b}
.badge.pending{background:#fef9c3;color:#854d0e}
.badge.skipped,.badge.none{background:var(--zinc-100);color:var(--zinc-600)}
.badge.on_track{background:#dcfce7;color:#166534}
.badge.at_risk{background:#fef9c3;color:#854d0e}
.badge.blocked{background:#fee2e2;color:#991b1b}
.badge.lead{background:#e0edff;color:#1e40af}
.badge.lag{background:var(--zinc-100);color:var(--zinc-600)}

.meter{height:.4375rem;border-radius:var(--r-full);background:var(--primary-light);overflow:hidden;min-width:5rem}
.meter > i{display:block;height:100%;border-radius:var(--r-full)}

/* Cards, rows, layout */
.card{background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);padding:1.5rem}
.card + .card{margin-top:1rem}
.grid{display:grid;gap:1rem}
.g-kpi{grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));gap:.5rem}
.g-2{grid-template-columns:repeat(auto-fit,minmax(16rem,1fr))}
.kpi{border:1px solid var(--border-subtle);border-radius:var(--r-lg);padding:.625rem .75rem}
.kpi.lead{border-color:var(--primary-light);background:rgba(233,242,225,.4)}
.kpi .k-label{font-size:.75rem;color:var(--fg-3);line-height:1.3;overflow-wrap:anywhere}
.kpi .k-value{font-size:1.5rem;font-weight:600;line-height:1.2;margin-top:.125rem;font-variant-numeric:tabular-nums}
.row{padding:.875rem 0;border-top:1px solid var(--border-subtle)}
.row:first-child{border-top:0;padding-top:0}
.row .label-up{display:block;margin-bottom:.375rem}
.row .body{font-size:.9375rem;color:var(--fg-2)}
ul.bul{margin:0;padding-left:1.05rem}
ul.bul li{margin:.1875rem 0}
.detail-head{display:flex;align-items:center;gap:1rem;padding:1.5rem 0 1.25rem;flex-wrap:wrap}
.weeks-list{display:flex;flex-direction:column;gap:.5rem}
.wk{display:flex;align-items:center;gap:.75rem;padding:.625rem .75rem;border:1px solid var(--border-subtle);border-radius:var(--r-lg)}
.wk .wk-date{font-size:.75rem;font-weight:600;color:var(--fg-3);width:4.5rem;flex:none}
.wk .wk-goal{font-size:.875rem;color:var(--fg-2);flex:1 1 auto;min-width:0}
.empty{border:1px dashed var(--border-strong);border-radius:var(--r-lg);padding:2rem;text-align:center;color:var(--fg-3);font-size:.875rem}
.stack{display:flex;flex-direction:column;gap:.5rem}
.inline{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}

.device-settings{padding:0;overflow:hidden}
.device-settings-head{padding:1.5rem;border-bottom:1px solid var(--border)}
.device-settings-head .meta{margin-top:.35rem;max-width:34rem}
.device-setting{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1rem;align-items:center;padding:1.1rem 1.5rem;border-top:1px solid var(--border-subtle)}
.device-settings-head + .device-setting{border-top:0}
.device-setting .meta{margin-top:.2rem;max-width:34rem}
.device-setting .hint{font-size:.8125rem;color:var(--fg-2);margin:.55rem 0 0;max-width:34rem}
.device-setting-actions{display:flex;gap:.5rem;align-items:center}

.setup-guide{display:grid;grid-template-columns:minmax(0,1fr) minmax(17rem,.8fr);gap:1.5rem;align-items:start;padding:1rem 1.25rem;margin-bottom:1rem;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--zinc-50)}
.setup-steps{list-style:none;margin:0;padding:0;display:grid;gap:.4rem}
.setup-steps li{display:grid;grid-template-columns:3.25rem 1fr;gap:.5rem;align-items:baseline;font-size:.875rem}
.setup-steps li.done{color:var(--fg-3)}
.setup-state{font-size:.6875rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--fg-3)}
.form-intro{margin:.5rem 0 0;font-size:.875rem;color:var(--fg-2)}
.draft-notice{padding:.75rem 1rem;margin-bottom:1rem;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--zinc-50);font-size:.875rem;color:var(--fg-2)}
.check-in-actions{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.autosave-status{font-size:.8125rem;color:var(--fg-3);margin-inline-start:auto}
.invite-help{margin:.5rem 0 1rem}
.commitment-to-judge{font-size:1.0625rem;margin:0 0 .75rem;overflow-wrap:anywhere}
.commitment-banner{padding:1rem 1.25rem;margin-bottom:1rem;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--primary-soft)}
.commitment-banner h2{margin:0}
.commitment-banner .commitment-to-judge{margin:.25rem 0}
.commitment-banner .meta{margin:0}

/* Forms */
.field{margin-bottom:1rem}
.field label{display:block;font-size:.8125rem;font-weight:600;color:var(--zinc-700);margin-bottom:.25rem}
.field .hint{font-size:.75rem;color:var(--fg-4);margin-top:.25rem}
input[type=text],input[type=email],input[type=password],input[type=number],input[type=date],input[type=time],input[type=datetime-local],select,textarea{
  width:100%;font-family:inherit;font-size:.9375rem;padding:.5rem .625rem;border:1px solid var(--border-strong);
  border-radius:var(--r-lg);background:#fff;color:var(--fg)}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 2px rgba(0,172,138,.25)}
textarea{min-height:5rem;resize:vertical}
.spark{width:100%;height:40px;display:block;margin-top:.5rem;overflow:visible}
.kind-hint{margin:.5rem 0 0;display:grid;grid-template-columns:auto 1fr;gap:.15rem .625rem}
.kind-hint dt{font-weight:600;color:var(--fg-2)}
.kind-hint dd{margin:0}
.radio-row{display:flex;gap:.5rem;flex-wrap:wrap}
.radio-row label{display:inline-flex;align-items:center;gap:.4rem;font-weight:500;font-size:.875rem;
  border:1px solid var(--border-strong);border-radius:var(--r-lg);padding:.4rem .7rem;cursor:pointer;margin:0}
.radio-row input{margin:0}
.radio-row label:has(input:checked){border-color:var(--primary);background:var(--primary-light)}
.choice-group{border:0;padding:0;margin-inline:0}
.choice-group legend{font-size:.8125rem;font-weight:600;color:var(--zinc-700);margin-bottom:.375rem;padding:0}

/* Check-in steps */
.step{border:1px solid var(--border);border-radius:var(--r-lg);padding:1.25rem 1.5rem;margin-bottom:1rem}
.step > header{display:flex;align-items:baseline;gap:.625rem;margin-bottom:1rem}
.step-n{width:1.5rem;height:1.5rem;border-radius:var(--r-full);background:var(--primary);color:#fff;
  font-size:.75rem;font-weight:700;display:inline-flex;align-items:center;justify-content:center;flex:none}
.step.verdict{border-color:var(--warn);background:#fffdf5}
.reading-row{display:grid;grid-template-columns:1fr 8rem;gap:.75rem;align-items:center;padding:.5rem 0;border-top:1px solid var(--border-subtle)}
.reading-row:first-of-type{border-top:0}
.reading-row .rl{font-size:.875rem}

/* Flash */
.flash{padding:.75rem 1rem;border-radius:var(--r-lg);font-size:.875rem;margin:1rem 0}
.flash.notice{background:#dcfce7;color:#166534}
.flash.alert{background:#fee2e2;color:#991b1b}
.errbox{border:1px solid #fecaca;background:#fef2f2;border-radius:var(--r-lg);padding:1rem;margin-bottom:1rem;color:#991b1b;font-size:.875rem}

footer{border-top:1px solid var(--border);padding:1.25rem 0 2.5rem;margin-top:2rem}
main{padding-bottom:1rem}
@media(max-width:760px){
  .wrap{padding-inline:1.25rem}
  .product-context,.desktop-nav{display:none}
  .mobile-nav{display:block}
  .topbar-inner{min-height:3.5rem;padding-inline:1rem}
  .brand{font-size:.9375rem;gap:.5rem}
  .btn,.btn.sm{min-height:2.75rem;padding:.55rem .8rem}
  .weekbar{align-items:flex-start;gap:1rem;padding:1.5rem 0 1.25rem}
  .weekbar > .spacer{display:none}
  .meeting-heading{width:100%}
  .meeting-meta-desktop{display:none}
  .meeting-summary{display:block;margin-top:.75rem}
  .meeting-date{margin:0;color:var(--fg-2);font-size:.9375rem}
  .meeting-facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem;margin:1rem 0 0;padding-top:1rem;border-top:1px solid var(--border-subtle)}
  .meeting-facts div{min-width:0}
  .meeting-facts dt{font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--fg-3)}
  .meeting-facts dd{margin:.15rem 0 0;font-size:.875rem;font-weight:600;color:var(--fg);overflow-wrap:anywhere}
  .weeknav.meeting-actions{display:flex;flex-direction:column;width:100%;gap:.75rem;align-items:stretch}
  .meeting-navigation{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem;order:2}
  .meeting-navigation .btn{justify-content:center;text-align:center}
  .meeting-navigation .btn:only-child{grid-column:1 / -1}
  .meeting-commands{display:grid;grid-template-columns:1fr;gap:.5rem;order:1}
  .meeting-commands .btn,.meeting-commands form{width:100%}
  .meeting-commands .btn{justify-content:center}
  .meeting-commands .btn.primary{order:-1}
  .setup-guide{grid-template-columns:1fr;gap:1rem;padding:1.25rem;margin-bottom:1.25rem}
  .g-2{grid-template-columns:1fr}
  .card{padding:1.25rem}
  .device-settings{padding:0}
  .device-settings-head{padding:1.25rem}
  .device-setting{grid-template-columns:1fr;padding:1.25rem}
  .device-setting-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%}
  .device-setting .btn{width:100%}
  .device-setting-actions .btn{justify-content:center}
  .tbl-wrap{border:0;overflow:visible}
  table.roster,table.roster tbody,table.roster tr,table.roster td{display:block;width:100%}
  table.roster thead{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
  table.roster tr{border:1px solid var(--border);border-radius:var(--r-lg);margin-bottom:1rem;padding:.375rem 1rem;background:#fff}
  table.roster tbody tr.flagged{background:#fffbf5;border-color:#e4cfa9}
  table.roster td{display:grid;grid-template-columns:7.5rem minmax(0,1fr);gap:.75rem;align-items:start;padding:.65rem 0;border-bottom:1px solid var(--border-subtle);overflow-wrap:anywhere}
  table.roster td::before{content:attr(data-label);font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--fg-3)}
  table.roster td:first-child{display:block;padding:.75rem 0}
  table.roster td:first-child::before{display:none}
  input[type=text],input[type=email],input[type=password],input[type=number],input[type=date],input[type=time],input[type=datetime-local],select,textarea{font-size:1rem;min-height:2.75rem}
  .reading-row{grid-template-columns:minmax(0,1fr) 7rem}
  .check-in-actions{display:grid;grid-template-columns:1fr 1fr}
  .check-in-actions .btn{justify-content:center}
  .check-in-actions .btn.primary{grid-column:1 / -1}
  .autosave-status{grid-column:1 / -1;grid-row:1;margin:0 0 .125rem;text-align:center}
}
@media(pointer:coarse){
  .navlink{min-height:2.75rem;display:inline-flex;align-items:center}
  .radio-row label{min-height:2.75rem;padding:.55rem .75rem}
}
@media(prefers-reduced-motion:reduce){
  .btn,table.roster tbody tr{transition:none}
}
