/* Funding Game Plan — clean, scannable comparison table (light, ties to brand via forest/sienna). */
:root{
  --gp-bg:#f7f4ee; --gp-card:#fff; --gp-ink:#241f1a; --gp-dim:#6a6258; --gp-faint:#6b6057;   /* faint darkened #9a8f7a->#6b6057 for WCAG AA 4.5:1 (headers/count/subs were ~2.9:1) */
  --gp-forest:#1f5138; --gp-forest-d:#163d2a; --gp-sienna:#c4532b; --gp-sienna-d:#a3401f; --gp-gold:#9a6a1a;
  --gp-line:#e7ded0; --gp-line-d:#dcd2c1; --gp-ok-bg:#e6f1ea; --gp-ok-ink:#2c5e3f; --gp-mid-bg:#f3ecdb; --gp-mid-ink:#7a5a1a; --gp-low-bg:#f4ece9; --gp-low-ink:#8a5240;
}
.gp-page{margin:0;background:var(--gp-bg);color:var(--gp-ink);font-family:Inter,system-ui,-apple-system,sans-serif;line-height:1.55;-webkit-font-smoothing:antialiased}
/* top padding clears the fixed nav-v7 header (56px + safe-area) so the h1 isn't overlapped */
.gp-wrap{max-width:920px;margin:0 auto;padding:calc(56px + env(safe-area-inset-top, 0px) + 26px) 18px 80px}
.gp-h1{font-family:Fraunces,Georgia,serif;font-weight:700;font-size:clamp(24px,4vw,32px);line-height:1.12;margin:0 0 4px}
.gp-meta{font-size:13px;color:var(--gp-dim);margin:0 0 18px;text-transform:capitalize}
/* strategy synthesis */
.gp-strategy{background:var(--gp-card);border:1px solid var(--gp-line);border-left:4px solid var(--gp-forest);border-radius:0 12px 12px 0;padding:16px 20px;font-size:15px;line-height:1.5;margin:0 0 20px}
.gp-strategy strong{color:var(--gp-forest)} .gp-strategy .gp-amt{color:var(--gp-gold);font-weight:700;font-family:Fraunces,Georgia,serif}
/* demographic opt-in — unlock reserved programs when the ownership question was skipped (2026-06-30) */
.gp-optin{margin:14px 0 20px;padding:14px 18px;background:#fbf7ee;border:1px solid var(--gp-gold);border-radius:12px}
.gp-optin__h{font-size:14px;font-weight:700;color:var(--gp-ink);margin:0 0 3px}
.gp-optin__sub{font-size:12.5px;color:var(--gp-dim);margin:0 0 11px;line-height:1.45}
.gp-optin__chips{display:flex;flex-wrap:wrap;gap:8px}
.gp-optin__b{appearance:none;cursor:pointer;font:inherit;font-size:13px;font-weight:600;color:var(--gp-ink);background:var(--gp-card);border:1.5px solid var(--gp-line-d);border-radius:999px;padding:8px 15px;transition:all .15s;min-height:40px}
.gp-optin__b:hover{border-color:var(--gp-gold)}
.gp-optin__b.is-on{color:#fff;background:var(--gp-forest);border-color:var(--gp-forest)}
.gp-optin__n{font-weight:700;margin-left:2px;color:var(--gp-gold);font-variant-numeric:tabular-nums}
.gp-optin__b.is-on .gp-optin__n{color:#fff}
/* controls */
.gp-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 10px}
.gp-sortlabel{font-size:12.5px;font-weight:600;color:var(--gp-dim)}
.gp-sort{font-family:inherit;font-size:13.5px;font-weight:600;color:var(--gp-ink);background:var(--gp-card);border:1px solid var(--gp-line-d);border-radius:9px;padding:9px 30px 9px 12px;cursor:pointer;
  appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'><path d='M3 4.5l3 3 3-3' fill='none' stroke='%236a6258' stroke-width='1.6'/></svg>");background-repeat:no-repeat;background-position:right 10px center}
.gp-count{font-size:12.5px;color:var(--gp-faint);margin-left:auto}
/* table */
.gp-table{width:100%;border-collapse:collapse;background:var(--gp-card);border:1px solid var(--gp-line);border-radius:14px;overflow:hidden}
.gp-th{text-align:left;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--gp-faint);padding:12px 14px;border-bottom:1px solid var(--gp-line);white-space:nowrap;user-select:none}
.gp-th[data-sort]{cursor:pointer}   /* only sortable headers (Typical award / Your odds / Effort) get the hand cursor */
.gp-th[data-sort]:hover{color:var(--gp-forest)}
.gp-th.is-sorted{color:var(--gp-forest)}
.gp-th__arrow{opacity:0;font-size:9px;margin-left:3px} .gp-th.is-sorted .gp-th__arrow{opacity:1}
.gp-th--prog{width:38%} .gp-th--x{width:24px}
.gp-grp{border-bottom:1px solid var(--gp-line)}
.gp-grp:last-child{border-bottom:0}
.gp-row{cursor:pointer;transition:background .12s}
.gp-row:hover{background:#fbf9f4} .gp-grp.is-open .gp-row{background:#f6f2ea}
.gp-row:focus-visible{outline:2px solid var(--gp-forest);outline-offset:-2px}
.gp-prog{padding:13px 14px;vertical-align:top}
.gp-rank{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:#efe9dc;color:var(--gp-gold);font-size:11px;font-weight:700;margin-right:8px;vertical-align:1px}
.gp-prog__t{font-weight:600;font-size:14px;color:var(--gp-ink)}
.gp-prog__m{display:block;font-size:11.5px;color:var(--gp-faint);margin-top:2px;text-transform:capitalize;margin-left:28px}
.gp-c{padding:13px 14px;vertical-align:top;font-size:13px}
.gp-money{display:block;font-weight:700;color:var(--gp-forest);font-size:14.5px;font-family:Fraunces,Georgia,serif}
.gp-sub{display:block;font-size:10.5px;color:var(--gp-faint);text-transform:capitalize}
.gp-odds{display:inline-block;font-size:11px;font-weight:700;border-radius:5px;padding:3px 8px;line-height:1.3}
.gp-odds--good{background:var(--gp-ok-bg);color:var(--gp-ok-ink)} .gp-odds--mid{background:var(--gp-mid-bg);color:var(--gp-mid-ink)} .gp-odds--low{background:var(--gp-low-bg);color:var(--gp-low-ink)}
.gp-hrs{font-weight:600;color:var(--gp-dim)}
.gp-hrs--quick{display:inline-block;font-size:11px;font-weight:700;border-radius:5px;padding:3px 8px;line-height:1.3;background:var(--gp-ok-bg);color:var(--gp-ok-ink)}
.gp-won{font-size:12px;color:var(--gp-dim)} .gp-won strong{color:var(--gp-sienna);font-weight:700}
.gp-won-na{font-size:11px;color:var(--gp-faint)} /* "Not published" — quiet but WCAG-AA readable (not the decorative --gp-dim) */
.gp-dim{color:#c3b8a4}
.gp-c--x{text-align:center}
/* expand affordance: ▸ (collapsed) rotates 90° to ▾ (open); row hover tints it forest + nudges it (150ms) */
.gp-chev{color:var(--gp-dim);font-size:15px;line-height:1;transition:transform .15s,color .15s;display:inline-block;transform:rotate(0deg)}
.gp-row:hover .gp-chev{color:var(--gp-forest);transform:translateX(3px)}
.gp-grp.is-open .gp-chev{transform:rotate(90deg);color:var(--gp-forest)}
.gp-grp.is-open .gp-row:hover .gp-chev{transform:rotate(90deg) translateX(3px)}
@media (prefers-reduced-motion:reduce){.gp-chev,.gp-row{transition:none}}
/* detail row */
.gp-detail__in{padding:4px 16px 16px 42px;background:#f6f2ea}
.gp-d{display:flex;gap:12px;padding:6px 0;font-size:13px}
.gp-d__k{flex:0 0 92px;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--gp-faint);padding-top:2px}
.gp-d__v{flex:1 1 auto;color:#4a443c}
.gp-d--tip .gp-d__v{color:var(--gp-gold)} .gp-d--step .gp-d__v{color:var(--gp-forest);font-weight:500}
/* winner-panel slot: collapse while empty (winner-panel.js absent/blocked, or pre-paint) so the .gp-d
   padding never adds a phantom 12px row; the painted panel un-empties the div and renders normally */
.gp-d--winnerpanel:empty{display:none;padding:0}
.gp-d__act{margin-top:8px;padding-left:104px}
.gp-view{font-size:12.5px;font-weight:700;color:var(--gp-sienna);text-decoration:none} .gp-view:hover{color:var(--gp-sienna-d);text-decoration:underline}
/* ── Enriched expandable: free/premium groups + gate (2026-07-14, docs/FOUNDER-LENS.md rule 4) ── */
.gp-dgrp{margin:2px 0 4px}
.gp-dgrp__lab{display:flex;align-items:center;gap:8px;font-size:11px;font-weight:600;color:var(--gp-dim);margin:11px 0 3px}
.gp-dgrp__lab--prem{color:var(--gp-sienna-d)}
.gp-dgrp__pill{font-size:8.5px;letter-spacing:.05em;text-transform:uppercase;font-weight:700;padding:2px 7px;border-radius:5px;background:var(--gp-ok-bg);color:var(--gp-ok-ink)}
.gp-dgrp__pill--prem{background:#fbeee7;color:var(--gp-sienna-d);border:1px solid #e9cfc2}
.gp-d--not .gp-d__v{color:var(--gp-low-ink)}
.gp-dgate{position:relative;border:1px solid #e9cfc2;border-radius:10px;background:#fffdfa;overflow:hidden;margin-top:2px}
.gp-dgate__blur{filter:blur(4.5px);user-select:none;pointer-events:none;padding:8px 12px}
.gp-dgate__veil{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;text-align:center;padding:12px;background:linear-gradient(180deg,rgba(255,253,250,.5),rgba(255,253,250,.9) 55%)}
.gp-dgate__b{font-family:Fraunces,Georgia,serif;font-size:14px;font-weight:600;color:var(--gp-forest-d)}
.gp-dgate__s{font-size:11.5px;color:var(--gp-dim);max-width:38ch;line-height:1.4}
.gp-dgate__cta{appearance:none;border:0;cursor:pointer;font:inherit;font-size:12.5px;font-weight:700;color:#fff8f3;background:var(--gp-sienna);border-radius:9px;padding:9px 16px;min-height:40px;box-shadow:0 2px 8px -2px rgba(196,83,43,.4)}
.gp-dgate__cta:hover{background:var(--gp-sienna-d)}
.gp-dgate__cta:focus-visible{outline:2px solid var(--gp-forest);outline-offset:2px}
/* stacking + premium + cta */
.gp-stack{background:var(--gp-ok-bg);border:1px solid #cfe2d6;border-radius:11px;padding:13px 16px;margin:18px 0;font-size:13px;color:var(--gp-ok-ink)}
.gp-stack strong{color:var(--gp-forest)}
.gp-premium{background:linear-gradient(150deg,var(--gp-forest),var(--gp-forest-d));color:#fff;border-radius:14px;padding:22px 24px;margin:22px 0 0}
.gp-premium h3{font-family:Fraunces,Georgia,serif;font-size:20px;margin:0 0 6px;font-weight:600}
.gp-premium p{font-size:13.5px;color:rgba(255,255,255,.82);margin:0 0 14px;max-width:560px}
.gp-premium ul{margin:0 0 16px;padding:0;list-style:none;display:flex;flex-wrap:wrap;gap:8px 18px}
.gp-premium li{font-size:13px;color:#fff;display:flex;align-items:center;gap:7px} .gp-premium li::before{content:"✓";color:#8fd6ad;font-weight:700}
.gp-premium .gp-pcta{display:inline-block;background:var(--gp-sienna);color:#fff;text-decoration:none;font-weight:700;font-size:14px;padding:12px 22px;border-radius:10px} .gp-premium .gp-pcta:hover{background:var(--gp-sienna-d)}
.gp-premium .gp-pnote{display:block;margin-top:9px;font-size:11.5px;color:rgba(255,255,255,.6)}
/* dual-pillar pitch (Unlock the full list / Win them) — scoped > the generic .gp-premium ul/li above */
.gp-premium .gp-pillars{display:grid;grid-template-columns:1fr 1fr;gap:14px 22px;margin:4px 0 16px}
.gp-premium .gp-pillar__h{font-size:11px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:#8fd6ad;margin:0 0 7px}
.gp-premium .gp-pillar--win .gp-pillar__h{color:#f0c98a}
.gp-premium .gp-pillar ul{margin:0;padding:0;list-style:none;display:block}
.gp-premium .gp-pillar li{font-size:13px;color:#fff;margin:5px 0;display:flex;align-items:flex-start;gap:7px;line-height:1.35}
.gp-premium .gp-pillar li::before{content:"✓";color:#8fd6ad;font-weight:700;flex:0 0 auto}
@media(max-width:560px){.gp-premium .gp-pillars{grid-template-columns:1fr}}
/* the free-tier "unlock the full list with Premium" lead-in (light card just above the pitch) */
.gp-gate--prem{background:linear-gradient(180deg,#fff,#f3eee4);border-color:#e2d6c2;margin-bottom:10px}
.gp-gate--prem .gp-gate__lock{color:var(--gp-sienna)}
.gp-gate--prem::before{display:none}
/* Job 1 — free-tier gate: the ranked list visibly CONTINUES as blurred, inert rows (21–25) so the locked
   value is shown, not described. The "N more…" headline tucks up over the fade; the green pitch follows. */
.gp-lockrows{position:relative;margin:2px 0 10px}
.gp-lockrows__blur{position:relative;max-height:230px;overflow:hidden}
.gp-lockrows--blur{filter:blur(5px);-webkit-filter:blur(5px);user-select:none;-webkit-user-select:none;pointer-events:none}
.gp-lockrows__tbl{border-top-left-radius:0;border-top-right-radius:0}   /* reads as a continuation of the table above */
.gp-lockrows__blur::after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(247,244,238,0) 0%,rgba(247,244,238,.25) 40%,rgba(247,244,238,.88) 78%,var(--gp-bg) 100%)}
.gp-lockrows__over{position:relative;z-index:2;text-align:center;margin-top:-100px;padding:0 18px 2px}
.gp-lockrows__over .gp-gate__lock{color:var(--gp-sienna)}
/* post-checkout "Welcome to Premium" banner (one-time, on return from checkout) */
.gp-welcome{display:flex;align-items:center;gap:10px;background:linear-gradient(150deg,var(--gp-forest),var(--gp-forest-d));color:#fff;border-radius:12px;padding:13px 16px;margin:0 0 14px;font-size:14px}
.gp-welcome__icon{font-size:20px;flex:0 0 auto}
.gp-welcome__t{flex:1 1 auto;line-height:1.4}
.gp-welcome__t strong{color:#fff}
.gp-welcome__x{flex:0 0 auto;background:none;border:0;color:rgba(255,255,255,.7);font-size:20px;cursor:pointer;line-height:1;padding:2px 6px}
.gp-welcome__x:hover{color:#fff}
.gp-foot{display:flex;gap:18px;justify-content:center;flex-wrap:wrap;margin-top:18px}
.gp-foot a,.gp-foot button{font-family:inherit;font-size:13px;font-weight:600;color:var(--gp-dim);background:none;border:0;text-decoration:none;cursor:pointer}
.gp-foot a:hover,.gp-foot button:hover{color:var(--gp-ink)}
.gp-attr{font-size:11px;color:var(--gp-faint);text-align:center;margin-top:18px;font-style:italic}
.gp-err{text-align:center;padding:40px;color:var(--gp-dim)}
/* guest signup gate (the full plan is the free reward) */
.gp-gate{text-align:center;background:linear-gradient(180deg,#fff,#f6f2ea);border:1px solid var(--gp-line);border-radius:14px;padding:26px 24px 24px;margin:14px 0 0;position:relative}
.gp-gate::before{content:"";position:absolute;left:0;right:0;top:-44px;height:44px;background:linear-gradient(180deg,rgba(247,244,238,0),var(--gp-bg));pointer-events:none}
.gp-gate--resolving{background:none;border:0;padding:14px;text-align:center}
.gp-gate--resolving::before{display:none}
.gp-gate__lock{font-size:24px;margin-bottom:4px}
.gp-gate__h{font-family:Fraunces,Georgia,serif;font-size:20px;font-weight:600;color:var(--gp-ink);margin:0 0 6px}
.gp-gate__p{font-size:14px;color:var(--gp-dim);max-width:460px;margin:0 auto 16px;line-height:1.5}
.gp-gate__cta{font-family:inherit;font-size:15px;font-weight:700;color:#fff;background:var(--gp-sienna);border:0;border-radius:10px;padding:13px 26px;cursor:pointer;transition:background .15s}
.gp-gate__cta:hover{background:var(--gp-sienna-d)}
.gp-gate__note{display:block;margin-top:12px;font-size:11.5px;color:var(--gp-faint)}
/* shared in-page signup UI (gc-signup.js renderInline) */
.gcs{max-width:330px;margin:16px auto 0;text-align:left}
.gcs-google{width:100%;display:flex;align-items:center;justify-content:center;gap:10px;background:#fff;border:1px solid var(--gp-line-d);border-radius:10px;padding:12px 16px;font-family:inherit;font-size:14.5px;font-weight:600;color:var(--gp-ink);cursor:pointer;transition:background .12s,box-shadow .12s}
.gcs-google:hover{background:#fbf9f4;box-shadow:0 1px 5px rgba(0,0,0,.09)}
.gcs-google:disabled{opacity:.55;cursor:default}
.gcs-or{display:flex;align-items:center;gap:10px;margin:12px 0;color:var(--gp-faint);font-size:12px}
.gcs-or span{flex:0 0 auto}.gcs-or::before,.gcs-or::after{content:"";flex:1;height:1px;background:var(--gp-line)}
.gcs-form{display:flex;flex-direction:column;gap:8px}
.gcs-name,.gcs-email,.gcs-pw{width:100%;box-sizing:border-box;border:1px solid var(--gp-line-d);border-radius:9px;padding:11px 13px;font-family:inherit;font-size:14px;color:var(--gp-ink);background:#fff}
.gcs-name:focus,.gcs-email:focus,.gcs-pw:focus{outline:2px solid var(--gp-forest);outline-offset:-1px;border-color:var(--gp-forest)}
.gcs-email-btn{width:100%;background:var(--gp-forest);color:#fff;border:0;border-radius:9px;padding:12px;font-family:inherit;font-size:14.5px;font-weight:700;cursor:pointer;transition:background .12s}
.gcs-email-btn:hover{background:var(--gp-forest-d)}.gcs-email-btn:disabled{opacity:.55;cursor:default}
.gcs-err{min-height:15px;margin-top:9px;font-size:12.5px;color:var(--gp-sienna-d);text-align:center}
.gcs-toggle{margin-top:11px;font-size:12.5px;color:var(--gp-dim);text-align:center}
.gcs-signin-link{background:none;border:0;color:var(--gp-forest);font-family:inherit;font-size:12.5px;font-weight:600;cursor:pointer;text-decoration:underline;padding:0}
/* a11y: visually-hidden heading (keeps a valid h1->h2->h3 order) + styled keyboard focus (was browser-default blue) */
.gp-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}
.gp-sort:focus-visible,.gp-foot a:focus-visible,.gp-foot button:focus-visible,.gp-view:focus-visible,.gp-th[data-sort]:focus-visible,.gp-pcta:focus-visible,.gcs-google:focus-visible,.gcs-email-btn:focus-visible,.gcs-signin-link:focus-visible{outline:2px solid var(--gp-forest);outline-offset:2px;border-radius:6px}
/* ── F1-B: progressive-blur teaser (the next ranks shown, not described) + value-chip gate ── */
.gp-blur-wrap{position:relative;overflow:hidden;background:var(--gp-card);border:1px solid var(--gp-line);border-top:0;margin-top:-1px;pointer-events:none;user-select:none;-webkit-user-select:none}
.gp-blur__r{display:flex;gap:12px;align-items:center;padding:12px 14px;border-top:1px solid var(--gp-line);font-size:13px}
.gp-blur__r .gp-rank{margin-right:0}
.gp-blur__t{flex:1;min-width:0;font-weight:600;color:var(--gp-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gp-blur__amt{font-weight:700;color:var(--gp-forest);font-family:Fraunces,Georgia,serif;font-size:14px;flex:none}
.gp-blur__r--1{filter:blur(2px);opacity:.85}
.gp-blur__r--2{filter:blur(3.5px);opacity:.68}
.gp-blur__r--3{filter:blur(5px);opacity:.5}
.gp-blur__fade{position:absolute;inset:auto 0 0 0;height:82%;background:linear-gradient(180deg,rgba(247,244,238,0),rgba(247,244,238,.92) 58%,var(--gp-bg) 100%)}
/* the gate tucks up over the blur fade so it reads as one continuous "unlock the rest" moment */
.gp-gate--f1b{position:relative;z-index:2}
.gp-gate--f1b::before{display:none}
.gp-gate--tuck{margin-top:-52px}
.gp-gate__chips{display:flex;gap:6px;justify-content:center;flex-wrap:wrap;margin:0 0 14px}
.gp-gate__chip{background:#efe9dc;border-radius:14px;padding:6px 12px;font-size:12px;font-weight:600;color:var(--gp-ink);white-space:nowrap}
.gp-gate__prem{margin:11px 0 0;font-size:12px;color:var(--gp-faint)}
/* ── F5-A: timing column (Opens / Closes) + winner badge & hover/tap card ── */
.gp-th--timing{white-space:nowrap}
.gp-timing{font-size:12.5px;color:var(--gp-dim)}
.gp-timing--between{color:var(--gp-gold);font-weight:700}
.gp-timing--soon{color:var(--gp-forest);font-weight:600}
.gp-winbadge{appearance:none;cursor:pointer;position:relative;display:inline-flex;align-items:center;gap:4px;background:#fbf3df;border:1px solid #e5d3a1;color:var(--gp-gold);font-family:inherit;font-size:10.5px;font-weight:700;border-radius:10px;padding:3px 8px;margin-left:8px;white-space:nowrap;vertical-align:1px;line-height:1.2}
/* ≥44px effective tap target (the pill stays ~21px tall visually) — invisible centered hit box.
   Hit-testing resolves the ::after to its host button, so taps within 44px land on the badge. */
.gp-winbadge::after{content:"";position:absolute;left:0;right:0;top:50%;height:44px;transform:translateY(-50%)}
.gp-winbadge:hover{background:#f6ead0;border-color:#d9c088}
.gp-winbadge:focus-visible{outline:2px solid var(--gp-forest);outline-offset:2px}
/* lockrows preview variant: non-interactive span, no hit box, default cursor (region is pointer-events:none + aria-hidden) */
.gp-winbadge--static{cursor:default}
.gp-winbadge--static::after{content:none}
.gp-wincard{position:fixed;z-index:1000;max-width:270px;background:var(--gp-card);border:1px solid #e5d3a1;border-radius:12px;box-shadow:0 14px 40px -12px rgba(42,33,22,.35);padding:14px 16px;font-size:12.5px;line-height:1.45;color:var(--gp-ink)}
.gp-wincard[hidden]{display:none}
.gp-wincard__hd{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--gp-gold);margin-bottom:5px}
.gp-wincard__n{font-family:Fraunces,Georgia,serif;font-size:22px;color:var(--gp-forest);line-height:1.1}
.gp-wincard__desc{margin:4px 0 8px;color:#4a443c}
.gp-wincard__desc strong{color:var(--gp-forest);font-weight:700}
.gp-wincard__attr{font-size:11px;color:var(--gp-faint)}
.gp-d--won .gp-d__v strong{color:var(--gp-sienna)}
.gp-d__src{color:var(--gp-faint);font-size:11px}
/* ── F10: reserved-programs opt-in — explicit decline + privacy line + collapsed reversible state ── */
.gp-optin__foot{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-top:11px}
.gp-optin__decline{appearance:none;background:none;border:0;padding:8px 2px;min-height:40px;display:inline-flex;align-items:center;font:inherit;font-size:13px;color:var(--gp-forest);text-decoration:underline;cursor:pointer}
.gp-optin__decline:hover{color:var(--gp-forest-d)}
.gp-optin__decline:focus-visible{outline:2px solid var(--gp-forest);outline-offset:2px;border-radius:5px}
.gp-optin__priv{font-size:11.5px;color:var(--gp-faint)}
.gp-optin--mini{margin:14px 0 20px;padding:11px 15px;background:var(--gp-card);border:1px solid var(--gp-line);border-radius:10px;font-size:12.5px;color:var(--gp-faint);line-height:1.5}
.gp-optin__expand{appearance:none;background:none;border:0;padding:0;font:inherit;font-size:12.5px;color:var(--gp-forest);text-decoration:underline;cursor:pointer}
.gp-optin__expand:hover{color:var(--gp-forest-d)}
.gp-optin__expand:focus-visible{outline:2px solid var(--gp-forest);outline-offset:2px;border-radius:5px}
/* ── V2-A: "From the page you were reading" pinned source strip ── */
.gp-pin{background:#fbf7ee;border:1px solid #e2d6c2;border-radius:12px;padding:14px 16px;margin:0 0 16px}
.gp-pin__hd{font-size:11.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--gp-gold);margin:0 0 4px}
.gp-pin__sub{font-size:13px;color:#3d372e;margin:0 0 10px;line-height:1.5}
.gp-pin__sub strong{color:var(--gp-forest-d)}
/* ★ The collapsed-blocker card (2026-07-28). Replaces a column of identical "Not for you"
   rows: a barrier shared by N programs is one fact with a next step, not N rejections. */
.gp-pin__block{margin:10px 0 0;padding:14px 16px;background:#fdf8ee;border:1px solid #e8d9b8;border-radius:12px}
.gp-pin__blockH{font-size:15px;font-weight:600;line-height:1.35;color:#14261d;margin:0 0 5px}
.gp-pin__blockP{font-size:13.5px;line-height:1.55;color:#5b5347}
.gp-pin__blockP strong{color:#14261d}
.gp-pin__tail{margin:10px 0 0;font-size:12.5px;line-height:1.5;color:#7a7266}
@media(max-width:560px){.gp-pin__block{padding:12px 13px}.gp-pin__blockH{font-size:14.5px}}
.gp-pin__row{display:flex;gap:12px;align-items:flex-start;padding:11px 4px}
.gp-pin__row + .gp-pin__row{border-top:1px solid #ece0cc}   /* hairline only between rows, not before the first */
.gp-pin__row--fit{cursor:pointer;border-radius:8px}
.gp-pin__row--fit:hover{background:#fbf3e2}
.gp-pin__row--fit:focus-visible{outline:2px solid var(--gp-forest);outline-offset:-2px;border-radius:8px}
.gp-pin__main{flex:1;min-width:0}
.gp-pin__name{font-weight:700;font-size:13.5px;color:var(--gp-ink)}
.gp-pin__rank{font-size:11px;color:var(--gp-faint);margin-left:6px;font-weight:600;white-space:nowrap}
.gp-pin__meta{font-size:11px;color:var(--gp-faint);margin-top:2px;text-transform:capitalize}
.gp-pin__right{flex:none;text-align:right;min-width:104px}
.gp-pin__right:empty{display:none;min-width:0}
.gp-pin__right .gp-money{font-size:14px}
.gp-pin__odds{margin-top:5px}
.gp-pin__lock{margin-top:6px;font-size:11px;color:var(--gp-faint);background:#f3eee4;border-radius:5px;padding:3px 8px;display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
/* honest verdict chips (name/type/verdict; brand tokens only) */
.gp-vchip{display:inline-flex;align-items:center;gap:7px;border-radius:999px;padding:5px 11px;font-size:12px;font-weight:600;border:1.5px solid transparent;line-height:1.2;margin-top:8px}
.gp-vchip__ic{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;font-size:11px;font-weight:700;flex:0 0 auto;color:#fff}
.gp-vchip--fit{color:var(--gp-ok-ink);background:var(--gp-ok-bg);border-color:#cadfce} .gp-vchip--fit .gp-vchip__ic{background:var(--gp-forest)}
.gp-vchip--no{color:var(--gp-low-ink);background:var(--gp-low-bg);border-color:#e6d5cd} .gp-vchip--no .gp-vchip__ic{background:#b0553a}
.gp-vchip--reserved{color:var(--gp-mid-ink);background:#fbf5e7;border:1.5px dashed var(--gp-gold)} .gp-vchip--reserved .gp-vchip__ic{background:transparent;color:var(--gp-gold)}
/* ── V3-A: filter chip row (extends gp-controls; filters the full set pre-slice) ── */
.gpf-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 10px}
.gpf-lab{font-size:12.5px;font-weight:600;color:var(--gp-dim);margin-right:2px}
.gpf-chip{display:inline-flex;align-items:center;gap:6px;font-family:inherit;font-size:12.5px;font-weight:600;color:var(--gp-ink);background:var(--gp-card);border:1.5px solid var(--gp-line-d);border-radius:999px;padding:0 14px;min-height:44px;cursor:pointer;transition:background .15s,border-color .15s,color .15s}
.gpf-chip:hover{border-color:var(--gp-forest)}
.gpf-chip.is-on{color:#fff;background:var(--gp-forest);border-color:var(--gp-forest);box-shadow:0 2px 8px -3px rgba(31,81,56,.5)}
.gpf-chip.is-on:hover{border-color:var(--gp-forest-d)}
.gpf-x{opacity:.85;font-size:11px}
.gpf-chip:focus-within,.gpf-chip:focus-visible{outline:2px solid var(--gp-forest);outline-offset:2px}
.gpf-select-wrap{padding:0;overflow:hidden}
.gpf-select{appearance:none;font-family:inherit;font-size:12.5px;font-weight:600;color:inherit;background:transparent;border:0;padding:0 30px 0 14px;min-height:44px;cursor:pointer;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'><path d='M3 4.5l3 3 3-3' fill='none' stroke='%236a6258' stroke-width='1.6'/></svg>");background-repeat:no-repeat;background-position:right 10px center}
.gpf-select-wrap.is-on .gpf-select{color:#fff;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'><path d='M3 4.5l3 3 3-3' fill='none' stroke='%23ffffff' stroke-width='1.6'/></svg>")}
.gpf-select:focus-visible{outline:none}
.gpf-clear{appearance:none;background:none;border:0;font-family:inherit;font-size:12.5px;font-weight:600;color:var(--gp-sienna-d);cursor:pointer;text-decoration:underline;min-height:44px;padding:0 6px}
.gpf-clear:hover{color:var(--gp-sienna)}
.gpf-clear:focus-visible{outline:2px solid var(--gp-forest);outline-offset:2px;border-radius:6px}
/* honest zero-result empty state */
.gp-empty{text-align:center;padding:34px 20px}
.gp-empty__t{font-size:14px;color:var(--gp-dim);margin:0 0 12px}
.gp-empty__clear{appearance:none;font-family:inherit;font-size:13.5px;font-weight:700;color:#fff;background:var(--gp-forest);border:0;border-radius:9px;padding:11px 20px;cursor:pointer;min-height:44px}
.gp-empty__clear:hover{background:var(--gp-forest-d)}
.gp-empty__clear:focus-visible{outline:2px solid var(--gp-forest);outline-offset:2px}
/* responsive: a 5-column comparison table can't fit a phone — linearize each program into a stacked
   card (name + chevron on top; award/odds/effort as a labeled metric row). Keeps the sortable model. */
@media (max-width:700px){
  /* linearize tbody/rows; the cells become GRID ITEMS of .gp-row (don't force display:block on td —
     that would out-specify .gp-row's grid + the per-cell display:none). */
  .gp-table,.gp-table>thead,.gp-table>tbody{display:block}
  .gp-table{border:0;background:none;border-radius:0;overflow:visible}
  .gp-table>thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}   /* hide header row, a11y-safe */
  .gp-grp{border:1px solid var(--gp-line);border-radius:12px;background:var(--gp-card);margin-bottom:10px;overflow:hidden}
  .gp-row{display:grid;grid-template-columns:1fr 1fr 1fr auto;grid-template-areas:"prog prog prog chev" "award odds effort ." "timing timing timing timing";gap:11px 12px;align-items:start;padding:13px 14px}
  .gp-prog{grid-area:prog;padding:0;display:flex;align-items:baseline;gap:7px;flex-wrap:wrap}
  .gp-rank{display:inline-flex;margin:0}                    /* keep the rank badge — it shows current sort position */
  .gp-prog__t{font-size:14.5px;line-height:1.25} .gp-prog__m{margin-left:0;flex-basis:100%}
  .gp-winbadge{margin-left:0}
  .gp-c{padding:0;font-size:13px}
  .gp-c--award{grid-area:award} .gp-c--odds{grid-area:odds} .gp-c--effort{grid-area:effort}
  .gp-c--timing{grid-area:timing}                          /* F5-A: full-width timing row under the metrics */
  /* chevron = a discoverable ≥44px tap target, pinned top-right; negative margin keeps the card compact */
  .gp-c--x{grid-area:chev;align-self:start;justify-self:end;display:flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;margin:-11px -8px -11px 0}
  .gp-c--x .gp-chev{font-size:19px;color:var(--gp-forest)}
  .gp-c[data-label]::before{content:attr(data-label);display:block;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--gp-faint);margin-bottom:3px}
  .gp-money{font-size:14px} .gp-sub{font-size:10px} .gp-odds{font-size:10.5px;padding:3px 7px;white-space:normal;line-height:1.25}
  .gp-hrs{font-size:13px}
  .gp-detail:not([hidden]){display:block} .gp-detail>td{display:block}   /* :not([hidden]) so collapsed rows stay collapsed (the [hidden] gotcha) */
  .gp-detail__in{padding:2px 14px 14px}
  .gp-d{flex-direction:column;gap:2px} .gp-d__k{flex-basis:auto} .gp-d__act{padding-left:0}
}
/* Job 3 — focused phone polish (≤560px): tighten the stacked-card rhythm (~20% less wasted vertical
   space in the label/value groups) and keep the blurred lockrows continuation clean at 320/390. */
@media (max-width:560px){
  .gp-row{gap:9px 10px;padding:11px 13px}
  .gp-prog__t{font-size:14px;line-height:1.22} .gp-prog__m{margin-top:1px;font-size:11px}
  .gp-c[data-label]::before{margin-bottom:2px;line-height:1.15}
  .gp-money{font-size:13.5px;line-height:1.2} .gp-sub{font-size:9.5px;line-height:1.2}
  .gp-odds{font-size:10px;padding:2px 6px} .gp-hrs{font-size:12.5px}
  .gp-detail__in{padding:2px 13px 12px} .gp-d{gap:1px} .gp-d__k{font-size:10px}
  /* blurred continuation: shorter peek + a tighter headline tuck so nothing scrolls sideways on a phone */
  .gp-lockrows__blur{max-height:196px}
  .gp-lockrows__over{margin-top:-88px;padding:0 14px 2px}
  .gp-lockrows__over .gp-gate__h{font-size:17px}
  .gp-lockrows__over .gp-gate__p{font-size:13px}
}

/* ── GC Arts bridge (2026-07-03) — AB2 results lane + AB7 ping. Namespaced gc-artsb-*; block is
   IDENTICAL across eligibility-embed.css / eligibility-map.css / gameplan.css. Inline content only
   (never position:fixed). Light tint card is intentional on the dark map too (distinct GC Arts brand). */
.gc-artsb-ping,
.gc-artsb-lane {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
  background: #f7f3fb;
  border: 1px solid #ddd0ee;
  border-left: 3px solid #6C3FA5;
  border-radius: 9px;
  padding: 10px 12px;
  margin: 12px 0;
  font-size: .85rem;
  line-height: 1.4;
  color: #4a3b60;
  box-sizing: border-box;
}
.gc-artsb-lane { margin: 14px 0; }
.gc-artsb-ping-txt,
.gc-artsb-lane-txt { flex: 1 1 200px; min-width: 0; color: #4a3b60; }
.gc-artsb-ping-txt strong,
.gc-artsb-lane-txt strong { color: #3c2660; font-weight: 700; }
.gc-artsb-dot {
  flex: 0 0 auto;
  width: 18px; height: 18px;
  border-radius: 50%;
  background: conic-gradient(#6C3FA5 0 30%, #E8A838 30% 55%, #b98ae0 55% 80%, #f3d9a4 80% 100%);
  box-shadow: inset 0 0 0 3px #fff;   /* white inner ring */
}
/* Pin link colours across ALL states — embed/host pages carry a sitewide a:hover{color:var(--sienna)}
   that would otherwise recolour the CTA/link (0,0,2,0 beats a:hover's 0,0,1,1). */
.gc-artsb-cta,
.gc-artsb-cta:link,
.gc-artsb-cta:visited,
.gc-artsb-cta:hover,
.gc-artsb-cta:focus,
.gc-artsb-cta:active {
  flex: 0 0 auto;
  display: inline-block;
  background: #6C3FA5;
  color: #fff;
  font-weight: 700;
  text-decoration: none;
  border-radius: 8px;
  padding: 6px 12px;
  font-size: .82rem;
  white-space: nowrap;
}
.gc-artsb-cta:hover,
.gc-artsb-cta:focus { background: #5a3389; color: #fff; }
.gc-artsb-cta:focus-visible { outline: 2px solid #3c2660; outline-offset: 2px; }
.gc-artsb-x {
  flex: 0 0 auto;
  min-width: 40px; min-height: 40px;
  margin: -8px -6px -8px 0;
  padding: 0;
  background: transparent;
  border: 0;
  color: #7a6b93;
  font-size: 15px;
  line-height: 1;
  cursor: pointer;
  border-radius: 8px;
}
.gc-artsb-x:hover,
.gc-artsb-x:focus { color: #3c2660; background: rgba(108,63,165,.08); }

/* ═══════════════════════════════════════════════════════════════════════
   04 — Spotlight + Refine + Watch state (2026-07-12).
   Spec: docs/superpowers/specs/2026-07-12-postmap-incremental-track-design.md §04
   Mockup: dev-assets/postmap-incremental-mockups-2026-07-12/04-gameplan-spotlight.html
   ═══════════════════════════════════════════════════════════════════════ */
.gp-spot{margin:0 0 18px;background:var(--gp-card);border:1.5px solid #bfd8cc;border-radius:18px;overflow:hidden;
  box-shadow:0 2px 6px rgba(36,31,26,.05),0 20px 50px -22px rgba(31,81,56,.25)}
.gp-spot__top{padding:20px clamp(18px,3vw,28px) 18px;background:linear-gradient(180deg,#e8f1ec 0%,var(--gp-card) 130%);border-bottom:1px solid var(--gp-line)}
.gp-spot__kick{display:inline-flex;align-items:center;gap:7px;font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--gp-forest-d);font-weight:700;background:var(--gp-card);border:1px solid #bfd8cc;border-radius:999px;padding:5px 12px;margin:0 0 12px}
.gp-spot__kick::before{content:"★";color:var(--gp-gold)}
.gp-spot__kick--thin::before{content:"◔"}
.gp-spot__h{font-family:Fraunces,Georgia,serif;font-weight:600;font-size:clamp(20px,3vw,27px);line-height:1.16;letter-spacing:-.01em;margin:0;max-width:640px}
.gp-spot__amt{color:var(--gp-forest);font-weight:700;white-space:nowrap}
.gp-spot__prog{color:var(--gp-sienna)}
.gp-spot__sub{margin:10px 0 0;font-size:14px;color:var(--gp-dim);max-width:620px;line-height:1.5}
.gp-spot__sub b{color:var(--gp-ink)}
.gp-rcpts{margin-top:14px;display:flex;flex-wrap:wrap;gap:8px}
.gp-rcpt{font-size:12px;font-weight:600;display:inline-flex;align-items:center;gap:6px;background:#e6f1ea;border:1px solid #bfd8cc;color:var(--gp-forest-d);border-radius:999px;padding:5px 12px}
.gp-rcpt::before{content:"✓";font-size:10px}
.gp-rcpt--warn{background:#f3ecdb;border-color:#e5d5a8;color:var(--gp-mid-ink)}
.gp-rcpt--warn::before{content:"◔"}
/* ── Fundamentals strip (2026-07-14) — trust before prescription (docs/FOUNDER-LENS.md rule 3) ── */
.gp-fund{margin:14px 0 2px;border:1px solid #bfd8cc;border-radius:12px;overflow:hidden;background:var(--gp-card)}
.gp-fund__what{font-size:13.5px;line-height:1.5;color:var(--gp-ink);padding:12px 15px;background:#f4f9f6;border-bottom:1px solid var(--gp-line)}
.gp-facts{display:grid;border-bottom:1px solid var(--gp-line)}
.gp-facts--1{grid-template-columns:minmax(0,1fr)}
.gp-facts--2{grid-template-columns:repeat(2,minmax(0,1fr))}
.gp-facts--3{grid-template-columns:repeat(3,minmax(0,1fr))}
.gp-fact{padding:10px 14px;border-right:1px solid var(--gp-line)}
.gp-fact:last-child{border-right:0}
.gp-fact__k{font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--gp-faint);margin:0 0 3px;font-weight:700}
.gp-fact__v{font-family:Fraunces,Georgia,serif;font-size:17px;font-weight:600;color:var(--gp-forest-d);line-height:1.05}
.gp-fact__v small{font-family:inherit;font-size:11px;color:var(--gp-dim);font-weight:500}
.gp-fact--open .gp-fact__v{color:var(--gp-forest);display:inline-flex;align-items:center;gap:6px;font-size:15px}
.gp-fact--open .gp-fact__v::before{content:"";width:8px;height:8px;border-radius:50%;background:#3a9d5f;box-shadow:0 0 0 3px rgba(58,157,95,.18);flex:0 0 auto}
.gp-elig{padding:11px 15px;display:flex;flex-wrap:wrap;gap:7px}
.gp-elig__lab{width:100%;font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--gp-faint);font-weight:700;margin:0 0 2px}
.gp-tick{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;background:#e6f1ea;border:1px solid #bfd8cc;color:var(--gp-forest-d);display:inline-flex;align-items:center;gap:5px}
.gp-tick::before{content:"✓";font-size:10px}
.gp-tick--ask{background:#f3ecdb;border-color:#e5d5a8;color:var(--gp-mid-ink)}
.gp-tick--ask::before{content:"◔"}
.gp-fund__link{display:flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;color:var(--gp-sienna);text-decoration:none;padding:11px 15px;border-top:1px solid var(--gp-line);background:#fdfbf7;min-height:44px}
.gp-fund__link:hover{background:#fbf1ec;color:var(--gp-sienna-d)}
.gp-fund__arw{transition:transform .15s}
.gp-fund__link:hover .gp-fund__arw{transform:translateX(3px)}
.gp-spot__bridge{margin:0 0 10px;font-size:12.5px;line-height:1.45;color:var(--gp-forest-d);font-weight:500}
.gp-feattag{display:inline-block;font-size:9px;letter-spacing:.04em;text-transform:uppercase;font-weight:700;color:var(--gp-sienna);background:#fbeee7;border:1px solid #e9cfc2;border-radius:999px;padding:2px 7px;margin-left:8px;vertical-align:1px}
.gp-grp--feat>tr>.gp-prog__t,.gp-grp--feat .gp-prog__t{color:var(--gp-sienna-d)}
.gp-spot__path{padding:13px clamp(18px,3vw,28px) 4px}
.gp-spot__pathlabel{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin:0 0 9px;flex-wrap:wrap}
.gp-spot__pathlabel h3{font-family:Fraunces,Georgia,serif;font-size:16px;font-weight:600;margin:0}
.gp-spot__pathlabel span{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--gp-faint)}
.gp-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
@media (max-width:640px){.gp-steps{grid-template-columns:1fr}}
.gp-stp{border:1px solid var(--gp-line);border-radius:12px;padding:11px 14px;position:relative;display:flex;flex-direction:column;background:var(--gp-bg)}
.gp-stp__hd{display:flex;align-items:baseline;gap:8px;margin:0 0 4px}
.gp-stp__n{font-family:Fraunces,Georgia,serif;font-style:italic;font-size:18px;line-height:1;color:#bfd8cc;flex-shrink:0}
.gp-stp h4{font-family:Fraunces,Georgia,serif;font-size:14px;font-weight:600;line-height:1.22;margin:0}
.gp-stp p{font-size:12px;line-height:1.45;color:var(--gp-dim);flex:1;margin:0}
.gp-stp__meta{margin-top:7px;font-size:9.5px;letter-spacing:.05em;color:var(--gp-faint);border-top:1px dashed var(--gp-line);padding-top:5px;text-transform:uppercase}
.gp-stp--open{border-color:#bfd8cc;background:linear-gradient(180deg,var(--gp-card),#e8f1ec 170%)}
.gp-stp--open .gp-stp__n{color:var(--gp-forest)}
.gp-stp--open .gp-stp__meta{color:var(--gp-forest)}
/* blurred locked steps — real-shaped content, aria-hidden, never a *--locked class */
.gp-stp--blur{overflow:hidden}
.gp-stp__lock{position:relative;flex:1;margin-top:2px;border-radius:8px;overflow:hidden;min-height:52px}
.gp-stp__lr{filter:blur(4px);user-select:none;pointer-events:none;font-size:11.5px;line-height:1.4;color:var(--gp-dim);padding:2px 0}
.gp-stp__veil{position:absolute;inset:0;display:grid;place-items:end center;padding-bottom:2px;background:linear-gradient(180deg,transparent 8%,rgba(247,244,238,.92) 82%)}
.gp-stp__veil span{font-size:9px;letter-spacing:.1em;text-transform:uppercase;color:var(--gp-sienna);font-weight:700}
.gp-spot__cta{margin:2px clamp(18px,3vw,28px) 15px;padding:12px 0 0;border-top:1px solid var(--gp-line);display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap}
.gp-spot__ctatext{max-width:440px}
.gp-spot__ctatext b{font-family:Fraunces,Georgia,serif;font-size:14.5px;font-weight:600;display:block;line-height:1.3}
.gp-spot__ctatext small{font-size:12px;color:var(--gp-dim)}
.gp-spot__btns{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.gp-spot__cta-main,.gp-spot__cta-ghost{appearance:none;border:none;font:inherit;font-weight:700;font-size:13.5px;padding:12px 18px;border-radius:11px;cursor:pointer;white-space:nowrap;min-height:44px;transition:transform .15s,background .15s}
.gp-spot__cta-main{background:var(--gp-sienna);color:#fff8f3;box-shadow:0 2px 10px -2px rgba(196,83,43,.45)}
.gp-spot__cta-main:hover{background:var(--gp-sienna-d);transform:translateY(-1px)}
.gp-spot__cta-ghost{background:none;border:1.5px solid var(--gp-line-d);color:var(--gp-ink)}
.gp-spot__cta-ghost:hover{border-color:var(--gp-ink)}
.gp-spot__mbg{width:100%;margin-top:4px;font-size:11.5px;color:var(--gp-faint);display:flex;align-items:center;gap:7px}
.gp-spot__mbg::before{content:"✓";color:var(--gp-forest);font-weight:700}
/* State B — thin profile placement card */
.gp-spot--thin{padding:20px clamp(18px,3vw,28px) 18px;background:linear-gradient(180deg,#f3ecdb 0%,var(--gp-card) 140%)}
.gp-thinqs{margin-top:14px;display:grid;grid-template-columns:1fr 1fr;gap:10px;max-width:560px}
@media (max-width:560px){.gp-thinqs{grid-template-columns:1fr}}
.gp-tq{background:var(--gp-card);border:1px solid var(--gp-line);border-radius:11px;padding:12px 14px}
.gp-tq__k{font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--gp-faint);margin:0 0 7px;font-weight:700}
.gp-tq__chips{display:flex;gap:6px;flex-wrap:wrap}
.gp-qchip{appearance:none;cursor:pointer;font:inherit;background:var(--gp-bg);border:1.5px solid var(--gp-line-d);border-radius:999px;padding:7px 14px;font-size:12.5px;font-weight:600;color:var(--gp-ink);transition:.15s;min-height:38px}
.gp-qchip:hover{border-color:var(--gp-forest);background:#e6f1ea}
.gp-qchip--more{color:var(--gp-faint)}
/* refine module */
.gp-sharp{margin:0 0 18px;background:var(--gp-card);border:1px solid #e5d5a8;border-radius:14px;padding:14px 18px 13px;box-shadow:0 1px 2px rgba(36,31,26,.05)}
.gp-sharp__hd{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap;margin:0 0 4px}
.gp-sharp__hd h3{font-family:Fraunces,Georgia,serif;font-size:16px;font-weight:600;margin:0}
.gp-sharp__hd h3 em{font-style:italic;color:var(--gp-gold)}
.gp-sharp__prog{font-size:10px;letter-spacing:.07em;text-transform:uppercase;color:var(--gp-faint)}
.gp-sharp__done{font-size:12px;color:var(--gp-forest-d);background:#e6f1ea;border:1px solid #bfd8cc;border-radius:9px;padding:7px 12px;margin:6px 0 4px}
.gp-sharp__q{font-size:14px;font-weight:600;margin-top:6px}
.gp-sharp__why{font-size:11px;color:var(--gp-faint);margin-top:2px}
.gp-sharp__row{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;flex-wrap:wrap;margin-top:9px}
.gp-sharp__chips{display:flex;gap:7px;flex-wrap:wrap}
.gp-sharp__later{appearance:none;background:none;border:none;font:inherit;font-size:12px;color:var(--gp-faint);text-decoration:underline;text-underline-offset:3px;cursor:pointer;white-space:nowrap;padding:12px 6px;min-height:44px} /* >=40px touch target (live-QA 2026-07-13) */
.gp-sharp__later:hover{color:var(--gp-ink)}
/* live-recalibration highlight + moved tag */
.gp-grp--recal .gp-row{box-shadow:inset 3px 0 0 var(--gp-forest)}
.gp-movedtag{display:inline-flex;align-items:center;gap:4px;font-size:9px;letter-spacing:.07em;text-transform:uppercase;font-weight:700;color:var(--gp-forest-d);background:#e6f1ea;border:1px solid #bfd8cc;border-radius:999px;padding:2px 8px;margin-left:8px;vertical-align:2px;white-space:nowrap}
.gp-movedtag::before{content:"↑"}
/* watch state — intake-closed rows never masquerade as ranked picks */
.gp-grp--watch .gp-row{background:#faf7f0}
.gp-grp--watch .gp-prog__t{color:var(--gp-dim)}
.gp-rank--watch{color:var(--gp-faint);font-size:15px;font-style:normal}
.gp-watchbtn{appearance:none;display:block;margin-top:6px;background:none;border:1.5px solid var(--gp-line-d);color:var(--gp-dim);font:inherit;font-weight:600;font-size:11.5px;padding:6px 11px;border-radius:9px;cursor:pointer;white-space:nowrap}
.gp-watchbtn:hover{border-color:var(--gp-forest);color:var(--gp-forest)}
.gp-watchbtn.is-on{border-color:#bfd8cc;background:#e6f1ea;color:var(--gp-forest-d);cursor:default}
.gp-stp--blur{cursor:pointer}
.gp-stp--blur:hover{border-color:var(--gp-sienna)}
.gp-stp--blur:focus-visible{outline:2px solid var(--gp-forest);outline-offset:2px}

/* ══════════════════════════════════════════════════════════════════════════
   THE ELIGIBILITY COLUMN + ITS CARD (Phase 2b surface 2, 2026-07-29)

   The cell is a ratio — cleared over checkable — because a verdict word here
   would be a second, shorter opinion competing with the grant page's real one.
   Colour lives on the number alone; the card carries the detail.
   ══════════════════════════════════════════════════════════════════════════ */
.gp-fit{
  display:inline-flex;flex-direction:column;align-items:flex-start;gap:1px;
  background:none;border:1px solid transparent;border-radius:8px;
  padding:6px 8px;margin:-6px -8px;cursor:pointer;font:inherit;text-align:left;
  transition:background 120ms ease,border-color 120ms ease;
}
.gp-fit:hover{background:var(--gp-paper,#fff);border-color:var(--gp-line,#e7e5e4)}
.gp-fit:focus-visible{outline:2px solid var(--gp-forest,#2d6a4f);outline-offset:1px}
.gp-fit__n{font-size:15px;font-weight:700;line-height:1.1;font-variant-numeric:tabular-nums}
.gp-fit__of{font-size:12px;font-weight:500;opacity:.55}
.gp-fit__q{font-size:10.5px;font-weight:600;letter-spacing:.02em;color:var(--gp-amber,#b45309)}
.gp-fit--all .gp-fit__n{color:var(--gp-green,#15803d)}
.gp-fit--part .gp-fit__n{color:var(--gp-ink,#1c1917)}
.gp-fit--no .gp-fit__n{color:var(--gp-ink-3,#6b6560)}
/* the blurred teaser rows: same shape, no affordance at all */
.gp-fit--static{cursor:default;pointer-events:none;padding:0;margin:0;border:none}
@media (prefers-reduced-motion: reduce){ .gp-fit{transition:none} }

.gp-fitcard{
  position:fixed;z-index:9990;max-width:340px;width:max-content;
  background:var(--gp-paper,#fff);border:1px solid var(--gp-line,#e7e5e4);
  border-radius:12px;box-shadow:0 8px 28px rgba(28,25,23,.14);
  padding:14px 16px;font-family:var(--gp-body,'DM Sans',sans-serif);
}
.gp-fitcard[hidden]{display:none}   /* [hidden] loses to any display rule — state it */
.gp-fitcard__t{margin:0 0 10px;font-weight:700;font-size:13.5px;line-height:1.35;color:var(--gp-ink,#1c1917)}
.gp-fitcard__g+.gp-fitcard__g{margin-top:11px}
.gp-fitcard__lead{margin:0 0 4px;font-size:10.5px;font-weight:700;letter-spacing:.05em;
  text-transform:uppercase;color:var(--gp-faint,#8a8580)}
.gp-fitcard__g ul{list-style:none;margin:0;padding:0}
.gp-fitcard__g li{display:flex;gap:7px;align-items:flex-start;padding:2px 0;
  font-size:13px;line-height:1.45;color:var(--gp-ink-2,#57534e)}
.gp-fitcard__m{flex:0 0 auto;width:15px;height:15px;margin-top:2px;border-radius:50%;
  display:inline-flex;align-items:center;justify-content:center;font-size:10px;font-weight:700}
.gp-fitcard__g--met  .gp-fitcard__m{background:var(--gp-green-bg,#dcfce7);color:var(--gp-green,#15803d)}
.gp-fitcard__g--open .gp-fitcard__m{background:var(--gp-amber-bg,#fef3c7);color:var(--gp-amber,#b45309)}
.gp-fitcard__g--no   .gp-fitcard__m{background:var(--gp-red-bg,#fee2e2);color:var(--gp-red,#dc2626)}
/* long unbroken gate phrases must wrap, never widen the card */
.gp-fitcard__g li span:last-child{min-width:0;overflow-wrap:anywhere}
.gp-fitcard__foot{margin:11px 0 0;padding-top:9px;border-top:1px solid var(--gp-line,#e7e5e4);
  font-size:11.5px;line-height:1.4;color:var(--gp-faint,#8a8580)}

/* ⚠ Both of these were regressions the 7th column introduced — the table was
   clean at all 9 widths before it, so they are not pre-existing. Caught by
   ui-stress-test, not by looking at a desktop screenshot. */

/* 768px: seven columns is one more than the tablet band can carry, and the
   widest thing in the new cell is its "N to confirm" sub-label. Drop the label
   there (the amber count is still visible in the card) rather than dropping the
   column — hiding the data would be a worse trade than shortening it. */
@media (max-width: 879px){
  .gp-fit__q{display:none}
  /* ⚠ NOT nowrap. .gp-th sets white-space:nowrap globally, which gives every
     header a hard min-content floor — and a table cannot shrink below the sum of
     those floors, so max-width:100% and border-box both had no effect and the
     7th column overflowed by ~1px. Letting THIS header wrap ("You / clear")
     drops its floor from 95px to the width of "clear". */
  .gp-th--fit{white-space:normal}
}

/* Touch targets: in the stacked mobile layout each cell is its own block, so
   the button has room to clear 44px properly rather than being padded into
   overlapping its neighbours. */
@media (max-width: 767px){
  .gp-fit{min-height:44px;min-width:44px;justify-content:center;padding:6px 10px;margin:0}
  .gp-fit__q{display:block}
}

/* ⚠ The 768px overflow was ONE pixel: .gp-table is width:100% with a 1px border
   and no border-box, so the border sat outside the 100%. Six columns had enough
   slack to absorb it; seven did not. Fixing the box model is the honest repair —
   shaving a column would have hidden the cause and left the next column to
   rediscover it. The fit column also takes minimum width so the wider text
   columns keep their room. */
.gp-table{box-sizing:border-box;max-width:100%}
.gp-th--fit,.gp-c--fit{width:1%}

/* ══════════════════════════════════════════════════════════════════════════
   THE TABLE BREATHES (2026-07-29)

   `.gp-wrap` has capped this page at 920px since the Game Plan was built, when
   the table had five columns. It now has seven, and at 1440px the result was
   920px of table with ~250px of dead margin either side while TWO OF THREE
   program titles wrapped to a second line. The constraint was a leftover, not
   a decision.

   ⚠ The fix is NOT to widen `.gp-wrap`. Prose has an optimal measure — the
   headline, the strategy block, the footnote and the attribution all read worse
   at 1180px than at 920. Only the TABLE REGION bleeds wider: the founder is
   scanning columns there, not reading sentences. Prose stays exactly where it
   was, so this cannot regress readability anywhere.
   ══════════════════════════════════════════════════════════════════════════ */
/* ⚠⚠⚠ THIRD CUT 2026-07-29. Khalid, on seeing the second: "this somehow looks even more
   off — I think everything needs to be centre justified instead of left-justified."

   He is reading a real fault. Cut 1 centred two DIFFERENT widths independently, so the page
   had two left edges. Cut 2 left-aligned them to one edge — which fixed the left and left
   the RIGHT ragged: the table ran ~380px further right than the cards above it, so the
   cards read as truncated rather than measured.

   The resolution is that "centred vs left-aligned" is the wrong axis. Once every block is
   the SAME width the two are identical, and both edges line up. So: one width for
   everything. Readability is preserved where it actually matters — by capping the TEXT
   measure inside the full-width boxes (.gp-strategy__m), not by narrowing the boxes. A
   card whose box aligns with the table and whose sentence stops at ~86ch reads correctly
   and looks deliberate. */
@media (min-width: 1200px){
  .gp-wrap{ max-width:1196px; }                 /* 1160 content + 2 × 18px padding */
  /* Every block: same width, same both edges. Centred and left-aligned are now the same
     thing, which is exactly why this reads as intentional. */
  .gp-h1, .gp-meta, .gp-strategy, .gp-stack, .gp-foot, .gp-attr,
  #gp-sharp, .gp-sharp, #gp-spot, .gp-welcome, #gp-jump, #gp-controls, #gp-filters,
  #gp-app, #gp-app .gp-gate, #gp-app .gp-premium, #gp-app .gp-dgate{
    max-width:none;
    width:100%;
    margin-left:0;
    margin-right:0;
    box-sizing:border-box;   /* ⚠ without this, padding pushed .gp-strategy 45px past the table */
  }
  /* The measure lives on the TEXT, not the box — so every box keeps both edges while no
     sentence runs to 1196px. `.gp-stack` and `.gp-attr` have no inner element to cap, so
     they bound the measure with padding instead of by narrowing the box; capping their
     max-width here is what left them 502px short of the right edge on the first attempt. */
  .gp-strategy__m{ display:block; max-width:86ch; }
  .gp-stack, .gp-attr, .gp-foot{ padding-right:clamp(0px, calc(100% - 86ch), 40%); }
}

/* Timing values are two short tokens ("Open now · rolling") that were breaking
   across two lines and making rows ragged. They fit on one line at every width
   the table layout survives. */
.gp-c--timing{white-space:nowrap}
@media (max-width:767px){ .gp-c--timing{white-space:normal} }   /* stacked cards: let it wrap */

/* ══════════════════════════════════════════════════════════════════════════
   THE PLAN BECOMES NAVIGABLE (2026-07-29)

   A paying member's reward was 139 rows in one 12,474px table (37,244px on a
   phone): no pagination, no grouping, and a column header that had scrolled off
   by row 8 — so for ~131 rows the numbers carried no labels at all.
   ══════════════════════════════════════════════════════════════════════════ */

/* ── Sticky column headers ──────────────────────────────────────────────────
   ⚠ `overflow: hidden` OR `clip` on ANY ancestor silently kills position:sticky
   in Chromium — the element scrolls away and a screenshot looks perfect. Nothing
   between .gp-wrap and the table may clip. Asserted by scrolling in
   dev-tools/gameplan-plan-qa.js, never by grepping for the property. */
/* ⚠ top:57px, NOT 0. `#siteNav` is position:fixed, 57px tall, z-index 1300 — a header
   stuck at 0 renders UNDERNEATH it and is invisible for the whole scroll. It sticks
   perfectly and shows nothing, which is why the first version passed a test asserting
   "top is near the viewport top" (top was exactly 0) and still failed on screen. The
   assertion now requires the header to sit BELOW the nav's bottom edge. Same stacked-bar
   family as the Apr-25 nav+filter collision. */
.gp-table thead th.gp-th{
  position:sticky; top:57px; z-index:6;
  background:var(--gp-paper,#faf7f2);
  box-shadow:0 1px 0 var(--gp-line,#e8e0d4), 0 8px 16px -14px rgba(42,33,22,.4);
}
.gp-wrap, #gp-app, .gp-table{ overflow:visible; }

/* ── Band headers — landmarks in a long list ────────────────────────────── */
.gp-band{ background:var(--gp-paper,#faf7f2); }
.gp-band td{ padding:22px 20px 13px; border-top:2px solid var(--gp-line,#e8e0d4); }
.gp-band:first-of-type td{ border-top:none; padding-top:14px; }
.gp-band__t{
  font-family:Fraunces,Georgia,serif; font-size:17px; font-weight:600;
  color:var(--gp-ink,#2a2116); letter-spacing:-.01em;
}
.gp-band__n{
  display:inline-block; margin-left:9px; vertical-align:2px;
  font-family:Inter,system-ui,sans-serif; font-size:12px; font-weight:700;
  padding:2px 9px; border-radius:99px;
  background:var(--gp-forest-soft,#eaf2ec); color:var(--gp-forest,#1f5c3d);
}
.gp-band__s{ font-size:13.5px; color:var(--gp-muted,#6b6255); margin-top:4px; max-width:74ch; }
/* The consolidated ask. ONE button per band, not one amber prompt per row — the
   same few questions unlock most of the band, so asking once moves dozens of rows. */
.gp-band__cta{
  margin-top:11px; font:600 13px/1 Inter,system-ui,sans-serif;
  color:#fff; background:var(--gp-forest,#1f5c3d);
  border:none; border-radius:8px; padding:9px 15px; cursor:pointer;
  transition:background .16s cubic-bezier(.22,.61,.36,1);
}
.gp-band__cta:hover{ background:#17482f; }
.gp-band__cta:focus-visible{ outline:2px solid var(--gp-forest,#1f5c3d); outline-offset:2px; }

/* ── Jump bar ───────────────────────────────────────────────────────────────
   Sits ABOVE the table, so it never comes between a sticky header and the rows
   that header labels. */
.gp-jump{
  display:flex; gap:8px; align-items:center; flex-wrap:wrap;
  padding:0 0 13px;
}
.gp-jump__l{
  font:700 11px/1 Inter,system-ui,sans-serif; letter-spacing:.09em;
  text-transform:uppercase; color:var(--gp-muted,#6b6255); margin-right:2px;
}
.gp-jump__b{
  font:600 13px/1 Inter,system-ui,sans-serif; color:var(--gp-ink,#2a2116);
  background:#fff; border:1px solid var(--gp-line,#e8e0d4);
  border-radius:99px; padding:8px 14px; cursor:pointer;
  transition:border-color .16s, background .16s;
}
.gp-jump__b:hover{ border-color:var(--gp-forest,#1f5c3d); background:var(--gp-forest-soft,#eaf2ec); }
.gp-jump__b:focus-visible{ outline:2px solid var(--gp-forest,#1f5c3d); outline-offset:2px; }
.gp-jump__n{ color:var(--gp-muted,#6b6255); font-weight:700; margin-left:4px; }

/* The refine card flashes when a band CTA sends the founder to it, so the jump
   lands on something that visibly answers the button they just pressed. */
.gp-sharp--flash, #gp-sharp.gp-sharp--flash{
  animation:gpFlash 1.3s cubic-bezier(.22,.61,.36,1);
}
@keyframes gpFlash{
  0%,100%{ box-shadow:0 0 0 0 rgba(31,92,61,0); }
  18%{ box-shadow:0 0 0 4px rgba(31,92,61,.22); }
}
@media (prefers-reduced-motion: reduce){
  .gp-sharp--flash, #gp-sharp.gp-sharp--flash{ animation:none; outline:2px solid rgba(31,92,61,.5); outline-offset:3px; }
}

@media (max-width:767px){
  /* Stacked cards: the header row is display:none on mobile, so sticky is moot. */
  .gp-table thead th.gp-th{ position:static; box-shadow:none; }
  .gp-band td{ padding:18px 4px 10px; }
  /* The strip scrolls, but with the scrollbar hidden nothing SAID so — one full button was
     visible at 390px and the rest looked absent. A right-edge fade is the affordance. */
  .gp-jump{
    overflow-x:auto; flex-wrap:nowrap; -webkit-overflow-scrolling:touch; scrollbar-width:none;
    mask-image:linear-gradient(to right, #000 calc(100% - 26px), transparent 100%);
    -webkit-mask-image:linear-gradient(to right, #000 calc(100% - 26px), transparent 100%);
  }
  .gp-jump::-webkit-scrollbar{ display:none; }
  .gp-jump__b{ flex:0 0 auto; }
  .gp-jump__l{ flex:0 0 auto; }
}
