/* ══════════════════════════════════════════════════════════════════════════════════════════════
   pn-round2-20260928.css — OVERNIGHT FIX ROUND 2 (pre-launch, real players next morning).
   Loaded just BEFORE pn-ink-sweep-20260927.css (the ink sweep stays last).
   Specificity: html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body … (three ID tiers).
   Design law: orange = actions only · cobalt/emerald take white ink · gold = warnings only with
   ink #140a04 · paper takes #140a04/#3d3226 · color AND -webkit-text-fill-color · buttons are
   rounded pills, ≥44px, UI type · no serif · WCAG AA.
   ══════════════════════════════════════════════════════════════════════════════════════════════ */

/* ── 1 · PHONE SCROLL (launch-blocking) ─────────────────────────────────────────────────────────
   Measured at 390×844 before this sheet: pn-shell-adopt locks html/body to overflow:hidden on
   every in-game view ("the device is exactly one viewport, and .content is the only thing that
   scrolls"), but pn-system-v4's ≤720px block sets .pad/.dev/.screen to height:auto. 100% of auto
   is the content, so .content grew to ~6,400px, never overflowed, and the body clipped it at 844:
   nothing could scroll and the bottom of every view was unreachable.
   Fix = restore the definite height chain on phones for exactly the page-locked views (the
   complement of pn-shell-adopt's five viewport-owning views), so .content is a real touch
   scroller. The phone dock is absolute to .screen, so it now sits on the viewport's bottom edge.
   ⛔ The full-bleed set-pieces (call live, review, result/verdict, VC shell, pre-room, boardroom —
   pn-final-20260820.css dissolves the wrappers to display:contents for them) are excluded: this
   sheet's three-ID specificity would otherwise re-box .pad and squash the verdict. */
@media (max-width:720px){
  html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body[data-view]:not([data-view="boot"]):not([data-view="create"]):not([data-view="meetteam"]):not([data-view="store"]):not([data-view="weeksummary"]):not(.pn-call-live):not(:has(.pn-review, .result-screen, #vc-shell, .pn-preroom, .boardroom-mode)) .pad{
    height:100% !important; min-height:0 !important; max-height:none !important;
    display:grid !important; grid-template-rows:minmax(0,1fr) !important;
  }
  html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body[data-view]:not([data-view="boot"]):not([data-view="create"]):not([data-view="meetteam"]):not([data-view="store"]):not([data-view="weeksummary"]):not(.pn-call-live):not(:has(.pn-review, .result-screen, #vc-shell, .pn-preroom, .boardroom-mode)) .pad > .dev{
    height:100% !important; min-height:0 !important; max-height:none !important;
  }
  html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body[data-view]:not([data-view="boot"]):not([data-view="create"]):not([data-view="meetteam"]):not([data-view="store"]):not([data-view="weeksummary"]):not(.pn-call-live):not(:has(.pn-review, .result-screen, #vc-shell, .pn-preroom, .boardroom-mode)) .pad > .dev > .screen{
    height:100% !important; min-height:0 !important; max-height:none !important;
    grid-template-rows:minmax(0,1fr) !important;
  }
  html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body[data-view]:not([data-view="boot"]):not([data-view="create"]):not([data-view="meetteam"]):not([data-view="store"]):not([data-view="weeksummary"]):not(.pn-call-live):not(:has(.pn-review, .result-screen, #vc-shell, .pn-preroom, .boardroom-mode)) .pad > .dev > .screen > .content{
    height:100% !important; min-height:0 !important; max-height:none !important;
    overflow-y:auto !important; overflow-x:hidden !important;
    -webkit-overflow-scrolling:touch; overscroll-behavior:contain;
    touch-action:pan-y pinch-zoom;
  }
}

/* ── 2 · TIPSY BLUR SPARES ITS OWN WARNING (audit #47) ──────────────────────────────────────────
   pn-tipsy-20260927.css blurs `body`, and pn-tipsy.js mounts #pn-tipsy-ui (the "Vision restoring"
   warning, the countdown pill and the toast) inside body — so the warning you must read and act on
   was itself blurred. The blur now sits on the APP (every body child except the tipsy UI and the
   pool table it opens), never on the warning. Reduced-motion keeps its no-blur law. */
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2).pn-tipsy-3.pn-tipsy-blur body{ filter:none !important; }
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2).pn-tipsy-3.pn-tipsy-blur:not(.pn-tipsy-reduced) body > :not(#pn-tipsy-ui):not(.pn-tipsy-game):not(script):not(style):not(link){
  filter:blur(2.5px) saturate(1.15);
}
@media (prefers-reduced-motion:reduce){
  html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2).pn-tipsy-3.pn-tipsy-blur body > *{ filter:none !important; }
}

/* ── 3 · ORANGE IS FOR ACTIONS ONLY — orange TEXT on non-buttons becomes white / ink ─────────────
   Audit #23 (war room), #26 (build loader), #31d (Floor hero), the Pitch-ready eyebrow/seal and the
   verdict screen. Emphasis is carried by weight or an underline, never by the action colour.
   Where the ground can be dark OR paper the text inherits its container's (already AA) ink. */
/* #31d · Floor hero accent word — white with an underline (the hero sits on the dark floor) */
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .perf-hero .mvc-hero-accent{
  color:#fff !important; -webkit-text-fill-color:#fff !important;
  text-decoration:underline !important; text-decoration-thickness:.07em !important; text-underline-offset:.12em !important;
}
/* Floor pipeline strip + radar note (same law, same screen) — the container's ink */
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .hud-meter .hm-verdict,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .rfi-mono,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .rfi-row .rfi-budget b,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pv-radarside b,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .hub-view .card.shard > .row > h2 > span{
  color:inherit !important; -webkit-text-fill-color:inherit !important;
}
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .hub-view .card.shard > .row > h2 > span{
  text-decoration:underline; text-decoration-thickness:.07em; text-underline-offset:.14em;
}
/* #23 · war room: masthead kind, job eyebrow brand, cost figure, angle key, response band */
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .wr-masthead .wr-mh-name .wr-mh-kind,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pnj .is-cost .pnj-v{
  color:#fff !important; -webkit-text-fill-color:#fff !important;
}
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pnj .pnj-eyebrow b,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .wr-resp .wr-angle--card .wr-angle-k,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .wr-resp-band-n{
  color:inherit !important; -webkit-text-fill-color:inherit !important; font-weight:800 !important;
}
/* #23 · the stage rail: future stages were rgba(234,241,251,.52) = 2.7:1 → ≥4.5:1 */
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body #pn-stagerail .pn-stgseg:not([data-state="now"]){
  color:rgba(234,241,251,.82) !important; -webkit-text-fill-color:rgba(234,241,251,.82) !important;
}
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body #pn-stagerail .pn-stgseg:not([data-state="now"]) > b{ border-color:rgba(234,241,251,.5) !important; }
/* #26 · the build/call loader ("The floor takes the brief.") — eyebrow, live role, client name */
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body #pn-walkin .wi2-k,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body #pn-walkin .wi2-row.is-live .wi2-who i,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body #pn-walkin .wi2-client{
  color:var(--wi-ink,#EEF2FA) !important; -webkit-text-fill-color:var(--wi-ink,#EEF2FA) !important;
}
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body #pn-walkin .wi2-row.is-live .wi2-who i{ font-weight:800 !important; }
/* Pitch ready: the case-file eyebrow and the stage seal — the screen's own ink */
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pn-ready .pnr-scr-k,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pn-ready .pn-stgseal-n,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pn-ready .pn-stgseal-t i{
  color:inherit !important; -webkit-text-fill-color:inherit !important;
}
/* the verdict: WON, the monogram, your score, the strongest/weakest discipline, the takeaway word,
   the PITCH NOTES eyebrow. The result screen is dark; the emerald "New client signed" is untouched. */
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .result-screen.result-win .pn-rz-word,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .result-screen .pn-rz-mark .pn-mono-mark,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .result-screen.result-win .pn-rz-score.is-yours .v,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .result-screen.result-win .pn-rz-row .rv:not(.neg):not(.pos) b,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .result-screen .rv-take-t b,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .result-screen .pnp2-vnotes:not(.lg-light) .pnp2-ey{
  color:#fff !important; -webkit-text-fill-color:#fff !important;
}
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .result-screen.result-win .pn-rz-word{ text-shadow:none !important; }
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .result-screen .rv-take-t b{
  text-decoration:underline; text-decoration-thickness:.08em; text-underline-offset:.14em;
}
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .result-screen .pnp2-vnotes.lg-light .pnp2-ey{
  color:#140a04 !important; -webkit-text-fill-color:#140a04 !important;
}

/* ── 4 · WAHWAHS ENTRY HINT ≥11px AT AA (audit #51) ─────────────────────────────────────────────
   .ww-why was 10px mono light grey on the cream module (1.75:1). The WahWahs room is portaled to
   <html>, not <body> (pn-wahwahs.js), so this selector does not go through body. */
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) .ww-why{
  font:600 13px/1.4 IS, Inter, ui-sans-serif, system-ui, sans-serif !important;
  letter-spacing:0 !important; text-transform:none !important;
  color:#3d3226 !important; -webkit-text-fill-color:#3d3226 !important;
}

/* ── 5 · "PUT A TEAM ON IT" PICKER ROWS (.pn-tp-row had no CSS anywhere) ─────────────────────────
   On the gold/paper confirm card: each person is one pill row — select dot · name (bold) over role
   (muted) · overall — with clear separation. Selected = paper fill + ink ring. Ink #140a04/#3d3226. */
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pn-tp-list{ display:flex; flex-direction:column; gap:8px; margin:4px 0 10px; }
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pn-tp-row{
  display:grid !important; grid-template-columns:24px minmax(0,1fr) auto; align-items:center; column-gap:12px;
  min-height:52px; padding:8px 16px 8px 12px; margin:0; box-sizing:border-box; width:100%;
  border:1.5px solid rgba(20,10,4,.38); border-radius:999px; background:rgba(243,239,230,.35);
  color:#140a04; -webkit-text-fill-color:#140a04; cursor:pointer; text-align:left;
  transition:background-color .15s ease, border-color .15s ease;
}
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pn-tp-row:hover{ background:rgba(243,239,230,.6); }
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pn-tp-row:has(input:checked){ background:#f3efe6; border-color:#140a04; border-width:2px; }
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pn-tp-row:has(input:focus-visible){ outline:3px solid #140a04; outline-offset:2px; }
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pn-tp-row > input[type="checkbox"]{
  -webkit-appearance:none; appearance:none; display:block; width:22px !important; height:22px !important; min-height:0 !important;
  margin:0 !important; padding:0 !important; border:2px solid #140a04; border-radius:50%; background:transparent; cursor:pointer;
}
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pn-tp-row > input[type="checkbox"]:checked{
  background:#140a04; box-shadow:inset 0 0 0 4px #f3efe6;
}
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pn-tp-row .pn-tp-who{ display:flex; flex-direction:column; gap:2px; min-width:0; }
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pn-tp-row .pn-tp-who b{
  font:800 15px/1.2 IS, Inter, ui-sans-serif, system-ui, sans-serif; color:#140a04; -webkit-text-fill-color:#140a04;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pn-tp-row .pn-tp-who i{
  font:500 13px/1.3 IS, Inter, ui-sans-serif, system-ui, sans-serif; font-style:normal !important; color:#3d3226 !important; -webkit-text-fill-color:#3d3226 !important;
}
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pn-tp-row .pn-tp-ovr{
  font:800 15px/1 IS, Inter, ui-sans-serif, system-ui, sans-serif; font-variant-numeric:tabular-nums;
  color:#140a04; -webkit-text-fill-color:#140a04; padding:6px 10px; border-radius:999px; border:1px solid rgba(20,10,4,.3);
}
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pn-tp-note{ color:#140a04; -webkit-text-fill-color:#140a04; margin:4px 0 0; }

/* ── 6 · THE DESK: monograms + the "the league" tag at ≥4.5:1 on the light desk ──────────────────
   The desk card ground is light (tearsheet popups). The tone colours were dark-theme brights
   (#4ad6a0 league green, #fbbf24 gold, orange brand) = 1.6–1.8:1. AA-dark variants, same meaning;
   orange is an action colour, so the brand tone takes ink. */
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pnfc-scrim .pnfc-card .pnfc-mono.tone-neutral,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pnfc-scrim .pnfc-card .pnfc-mono.tone-brand{ color:#140a04 !important; -webkit-text-fill-color:#140a04 !important; }
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pnfc-scrim .pnfc-card .pnfc-mono.tone-league,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pnfc-scrim .pnfc-card .pnfc-mono.tone-good,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pnfc-scrim .pnfc-card .pnfc-info{ color:#0b6b4a !important; -webkit-text-fill-color:#0b6b4a !important; opacity:1 !important; }
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pnfc-scrim .pnfc-card .pnfc-mono.tone-caution,
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pnfc-scrim .pnfc-card .pnfc-mono.tone-gold{ color:#8a5a00 !important; -webkit-text-fill-color:#8a5a00 !important; }
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pnfc-scrim .pnfc-card .pnfc-mono.tone-hazard{ color:#b42318 !important; -webkit-text-fill-color:#b42318 !important; }
/* the WahWahs row keeps its own gold medal (pn-desk §wahwah) */
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pnfc-scrim .pnfc-card.pnfc-card--wahwah .pnfc-info{ color:#5E574C !important; -webkit-text-fill-color:#5E574C !important; }

/* ── 7 · SEASON → THE PUBLIC BOARD: "Post my agency to LinkedIn" (audit #40) ─────────────────────
   Reuses pn-li-share.js's pnShareToLinkedIn(). A repo .pn-btn pill: ≥44px, UI type, glyph + label. */
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pnsp .pnsp-board-act .pnsp-li{
  display:inline-flex !important; align-items:center; justify-content:center; gap:8px;
  min-height:44px; border-radius:999px !important; text-transform:none !important; letter-spacing:0 !important;
}
html:not(#pn-ds-never):not(#pn-tbm-x1):not(#pn-tbm-x2) body .pnsp .pnsp-board-act .pnsp-li .pn-li-glyph{ flex:none; width:16px; height:16px; }
