/* Project Moneyball — Performance Radar UI (dark mode, renewal-workshop look & feel).
   Tokens from BRAND-BOOK.md; gold (#FFBE17) = accent / running glow; green = met/exceeded. */
:root {
  --ink: #1e1e1e;
  --bg: #161616;            /* page */
  --panel: #232323;         /* cards */
  --panel-2: #2c2c2c;       /* inputs, raised */
  --header-bg: #111111;
  --border: rgba(255, 255, 255, 0.12);
  --border-strong: rgba(255, 255, 255, 0.22);
  --text: #e2e2e2;
  --muted: #9b9b9b;
  --heading: #ece9e1;       /* soft warm white — avoids the harsh pure-white "glow" */
  /* Canonical brand core — must equal STUDIO-BRAND-BOOK.md › "Brand tokens" (never fork). */
  --gold: #ffbe17;          /* signature accent */
  --cream: #faf9f6;         /* canonical off-white surface (= growth-engine CREAM) */
  --near-white: #f5f2ea;    /* canonical near-white (= growth-engine WHITE) */
  --deep-dark: #17140e;     /* canonical deepest near-black (= growth-engine DARK) */
  --gold-tint: #fff2d1;     /* legacy warm gold tint — accent backgrounds only (NOT brand-core) */
  --teal: #14646e;          /* landing sphere teal — the app's second brand accent */
  --teal-tint: #e6f0f1;
  --green: #34c46a;
  --green-deep: #2a9d57;
  --red: #e0584f;
  --font-display: 'Bebas Neue', system-ui, sans-serif;
  --font-body: 'Open Sans', system-ui, sans-serif;
  --fs-body: 0.75rem; /* LOCKED default body-copy size = 13.5px at the 18px root (see ui-design-guidelines) */
  --container: 1400px; /* legacy token (no longer caps width — the layout now runs full-bleed) */
  --gutter: 40px;
}
* { box-sizing: border-box; }
/* Larger base type for easier reading; most sizes are rem so they scale from here. */
/* Always reserve the scrollbar gutter so the fixed strip (and all content) keeps the same width on
   short pages (Cross-Skill) and long ones (Seller Skills), no few-pixel shift between lenses. */
html { font-size: 18px; scrollbar-gutter: stable; }
body {
  margin: 0;
  font-family: var(--font-body);
  font-size: var(--fs-body);
  color: var(--text);
  background: var(--bg);
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

/* Full-bleed container — header, toolbar, and content span the whole page width (a comfortable
   side gutter only), instead of being capped and centered. */
.container { max-width: none; margin: 0; padding: 0 var(--gutter); width: 100%; }
.band { width: 100%; }

/* ============================ App shell: left side-nav + main region ============================
   Lean, minimalist chrome. The side-nav is semi-black (#1a1a1a) with the same faint PCB texture as
   the page; items are light grey, the selected item is gold. The scorer and the roadmap placeholders
   are `.view` blocks toggled by ui/sidenav.ts (pure show/hide — the scorer DOM is never torn down). */
/* overflow-x: clip removes any unintended page-level horizontal scrollbar. A stray h-scrollbar makes
   100vh include its strip, so the sticky sidenav's calc(100vh - 62px) overshoots and the menu shifts
   up ~15px at the page bottom. `clip` (not `hidden`) clips without creating a scroll container, so the
   sticky top bar + sidenav keep working. */
.app-shell { display: flex; flex-direction: column; min-height: 100vh; overflow-x: clip; }

/* Full-width top header — brand lockup (always visible, survives collapse) on the left, utility nav
   on the right. Sticky + solid bg so it stays pinned across scroll and view changes. */
.app-header { position: sticky; top: 0; z-index: 30; display: flex; align-items: center; gap: 22px; height: 62px; padding: 0 var(--gutter) 0 24px; border-bottom: 1px solid var(--border); background: #2c2c2c; }
.app-brand { display: flex; align-items: center; gap: 12px; flex: none; }
.app-brand .brand-score { font-size: 2rem; }
.brand-logo { height: 34px; width: auto; display: block; }
/* The line is contextual — ui/tagline.ts swaps it per view and cross-fades via .is-fading. Nowrap
   keeps the longest pool lines on one row; the header hides it entirely once space runs short. */
.app-header-tagline { font-family: var(--font-display); font-size: 1.15rem; letter-spacing: .09em; text-transform: uppercase; color: var(--heading); opacity: .78; padding-left: 22px; border-left: 1px solid var(--border); white-space: nowrap; transition: opacity .2s ease; }
.app-header-tagline.is-fading { opacity: 0; }
@media (prefers-reduced-motion: reduce) { .app-header-tagline { transition: none; } }
@media (max-width: 1200px) { .app-header-tagline { display: none; } }

.app-body { display: flex; align-items: flex-start; flex: 1 1 auto; }

.sidenav {
  flex: 0 0 236px; width: 236px;
  position: sticky; top: 62px; height: calc(100vh - 62px);
  display: flex; flex-direction: column;
  background-color: #2c2c2c;
  border-right: 1px solid var(--border);
  overflow: hidden;
  z-index: 20;
}
.sidenav > * { position: relative; z-index: 1; }

/* Collapse control: a subtle chevron at the top of the rail (no heavy bar/border). It rotates to
   point the other way when collapsed, hinting expand. */
.sidenav-top { display: flex; align-items: center; justify-content: flex-end; padding: 10px 12px 4px; }
.sidenav-toggle { flex: none; display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border: none; border-radius: 7px; background: transparent; color: var(--muted); cursor: pointer; transition: background .12s, color .12s, transform .18s; }
.sidenav-toggle svg { width: 17px; height: 17px; }
.sidenav-toggle:hover { background: rgba(255, 255, 255, .06); color: var(--gold); }
.sidenav.is-collapsed .sidenav-toggle svg { transform: rotate(180deg); }

.sidenav-nav { display: flex; flex-direction: column; gap: 1px; padding: 8px 10px; flex: 1 1 auto; overflow-y: auto; overflow-x: hidden; scrollbar-width: none; -ms-overflow-style: none; }
.sidenav-nav::-webkit-scrollbar { width: 0; height: 0; display: none; }
.nav-item {
  position: relative;
  display: flex; align-items: center; gap: 11px; width: 100%; text-align: left;
  background: transparent; border: none; border-radius: 8px; padding: 7px 12px;
  font-family: var(--font-body); font-size: .75rem; font-weight: 600;
  color: var(--muted); cursor: pointer; transition: background .12s, color .12s;
}
.nav-item svg { flex: none; width: 20px; height: 20px; }
.nav-item:hover { background: rgba(255, 255, 255, .05); color: var(--text); }
/* Selected page: gold font only — no background fill. */
.nav-item.is-active { color: var(--gold); background: transparent; }
/* "New" indicator on the What's New nav item: a small gold dot, shown until the page is opened
   (toggled by ui/sidenav.ts against WHATS_NEW_VERSION). */
.nav-dot { flex: 0 0 auto; margin-left: auto; width: 7px; height: 7px; border-radius: 50%; background: var(--gold); display: none; }
.nav-dot.is-shown { display: block; }
/* Collapsed rail hides labels, so pin the dot to the icon's top-right corner instead. */
.sidenav.is-collapsed .nav-dot.is-shown { position: absolute; top: 6px; right: 9px; margin: 0; }

/* Contextual "go back" action (top of the rail): a gold-tinted pill, distinct from the destination nav
   items, shown only while reading Getting Started after an in-app CTA. Toggled from main.ts. */
.nav-back { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; background: rgba(255, 190, 23, .12); border: 1px solid rgba(255, 190, 23, .38); border-radius: 8px; padding: 7px 12px; margin-bottom: 8px; font-family: var(--font-body); font-size: .75rem; font-weight: 700; color: var(--gold); cursor: pointer; transition: background .12s, border-color .12s; }
.nav-back svg { flex: none; width: 18px; height: 18px; }
.nav-back:hover { background: rgba(255, 190, 23, .2); border-color: rgba(255, 190, 23, .58); }
.nav-back[hidden] { display: none; }
.sidenav.is-collapsed .nav-back { justify-content: center; padding: 8px 0; gap: 0; }
.sidenav.is-collapsed .nav-back .nav-back-txt { display: none; }

.sidenav-foot { height: 60px; display: flex; flex-direction: column; justify-content: center; padding: 0 10px; border-top: 1px solid var(--border); }
.nav-util { display: flex; align-items: center; gap: 11px; padding: 10px 12px; border-radius: 8px; color: var(--muted); font-size: .75rem; font-weight: 600; text-decoration: none; transition: background .12s, color .12s; }
.nav-util svg { flex: none; width: 18px; height: 18px; }
.nav-util:hover { background: rgba(255, 255, 255, .05); color: var(--text); }

/* Account chip (rail foot): avatar + first name + chevron, opening an upward popover with Account +
   Sign out. Replaces the old Sign out button. Collapsed rail shows the avatar only. */
.sidenav-foot { position: relative; }
.user-chip { display: flex; align-items: center; gap: 10px; width: 100%; padding: 8px 10px; border: 0; background: transparent; border-radius: 10px; color: var(--text); cursor: pointer; font: inherit; text-align: left; transition: background .12s; }
.user-chip:hover { background: rgba(255, 255, 255, .05); }
.user-chip[aria-expanded="true"] { background: rgba(255, 255, 255, .08); }
.user-avatar { flex: none; width: 30px; height: 30px; border-radius: 50%; display: grid; place-items: center; overflow: hidden; background: var(--panel-2); color: var(--gold); font-size: .72rem; font-weight: 700; text-transform: uppercase; box-shadow: inset 0 0 0 1.5px rgba(255, 190, 23, .5); }
.user-avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }
.user-chip-name { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: .78rem; font-weight: 600; }
.user-chevron { flex: none; width: 16px; height: 16px; color: var(--muted); transition: transform .15s; }
.user-chip[aria-expanded="true"] .user-chevron { transform: rotate(180deg); }

.user-menu { position: absolute; left: 10px; right: 10px; bottom: calc(100% - 4px); margin-bottom: 8px; background: var(--panel); border: 1px solid var(--border-strong); border-radius: 12px; padding: 6px; box-shadow: 0 12px 30px rgba(0, 0, 0, .45); display: flex; flex-direction: column; gap: 2px; z-index: 40; }
.user-menu[hidden] { display: none; }
.user-menu-item { display: flex; align-items: center; gap: 10px; width: 100%; padding: 9px 10px; border: 0; background: transparent; border-radius: 8px; color: var(--text); cursor: pointer; font: inherit; font-size: .78rem; font-weight: 600; text-align: left; transition: background .12s, color .12s; }
.user-menu-item svg { flex: none; width: 17px; height: 17px; color: var(--muted); }
.user-menu-item:hover { background: rgba(255, 255, 255, .06); }
.user-menu-item:hover svg { color: var(--text); }
#user-menu-signout:hover, #user-menu-signout:hover svg { color: #ff7a6b; }

.sidenav.is-collapsed .user-chip { justify-content: center; padding: 8px 0; gap: 0; }
.sidenav.is-collapsed .user-chip-name, .sidenav.is-collapsed .user-chevron { display: none; }
.sidenav.is-collapsed .user-menu { left: calc(100% + 8px); right: auto; bottom: 8px; width: 190px; }

/* Account view: profile card (avatar + name + email + a button into Clerk's profile/photo UI). */
.acct-profile { display: flex; align-items: center; gap: 14px; padding: 2px 0 4px; margin-bottom: 20px; background: transparent; border: 0; }
.acct-avatar { flex: none; width: 56px; height: 56px; border-radius: 50%; display: grid; place-items: center; overflow: hidden; background: var(--panel-2); color: var(--gold); font-size: 1.15rem; font-weight: 700; text-transform: uppercase; box-shadow: inset 0 0 0 2px rgba(255, 190, 23, .5); }
.acct-avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }
.acct-profile-text { flex: 0 1 auto; min-width: 0; } /* don't grow, so the Edit button sits next to the name */
.acct-profile-name { font-size: 1.05rem; font-weight: 800; color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.acct-profile-email { font-size: .8rem; color: #5a5a5a; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.acct-profile-actions { flex: none; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; margin-left: 40px; }
.acct-profile-actions .react-nav.acct-edit-trigger { flex: none; padding: 7px 20px; text-align: center; }
.acct-profile-namerow { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.acct-photo-actions { display: flex; align-items: center; gap: 14px; margin-top: 5px; }
.acct-photo-msg { font-size: .72rem; color: #6a6a6a; }
.acct-name-inp { min-width: 180px; }
.acct-microbtn { background: none; border: 0; padding: 0; color: #14646e; font: inherit; font-size: .72rem; font-weight: 600; cursor: pointer; text-decoration: underline; text-underline-offset: 2px; }
.acct-microbtn:hover { color: #0f4a52; }
.acct-microbtn[disabled] { opacity: .5; cursor: default; text-decoration: none; }
.acct-btn-outline { background: none; border: 1px solid #cfd4d3; border-radius: 8px; padding: 6px 16px; color: #14646e; font: inherit; font-size: .78rem; font-weight: 700; cursor: pointer; transition: border-color .12s, background .12s; }
.acct-btn-outline:hover { border-color: #14646e; background: rgba(20, 100, 110, .06); }
.acct-edit-photo { display: flex; align-items: center; gap: 16px; width: 100%; margin-bottom: 2px; }
.acct-avatar--lg { width: 64px; height: 64px; font-size: 1.35rem; box-shadow: inset 0 0 0 2px rgba(255, 190, 23, .5); }
.acct-sec-link { width: 100%; text-align: left; margin-top: 10px; color: #6a6a6a; font-weight: 600; }
.acct-sec-link:hover { color: #14646e; }
.acct-edit-panel { display: flex; flex-direction: column; }
.acct-edit-h { font-size: .72rem; font-weight: 700; text-transform: uppercase; letter-spacing: .1em; color: #8a8a8a; margin: 0 0 12px; }
/* Native sign-in & security block (rendered in our own look, no embedded Clerk widget). */
.acct-sec { margin-top: 22px; border-top: 1px solid rgba(0, 0, 0, .1); }
.acct-sec-loading { font-size: .78rem; color: #9a9a9a; padding-top: 14px; }
.acct-sec-row { display: flex; gap: 18px; padding: 14px 0; border-bottom: 1px solid rgba(0, 0, 0, .07); align-items: flex-start; }
.acct-sec-row:last-child { border-bottom: none; }
.acct-sec-k { flex: none; width: 130px; font-size: .68rem; font-weight: 700; text-transform: uppercase; letter-spacing: .07em; color: #8a8a8a; padding-top: 3px; }
.acct-sec-v { flex: 1 1 auto; min-width: 0; font-size: .82rem; color: #1e1e1e; }
.acct-sec-devices { display: flex; flex-direction: column; gap: 14px; }
.acct-sec-device { display: flex; align-items: flex-start; gap: 12px; }
.acct-sec-device-txt { flex: 1 1 auto; min-width: 0; }
.acct-sec-device-title { display: flex; align-items: center; gap: 8px; font-size: .82rem; font-weight: 600; color: #1e1e1e; }
.acct-sec-device-detail { font-size: .74rem; color: #7a7a7a; margin-top: 2px; }
.acct-sec-badge { font-size: .6rem; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: #14646e; background: rgba(20, 100, 110, .1); border-radius: 4px; padding: 1px 6px; }
.acct-sec-danger { color: #b3433b; }
.acct-sec-danger:hover { color: #922f28; }
.acct-edit-slot:not(:empty) { margin: 4px 0 20px; }
@media (max-width: 560px) {
  .acct-profile { flex-wrap: wrap; }
  .acct-profile-actions { flex-basis: 100%; flex-direction: row; align-items: center; gap: 18px; }
}

.app-region { flex: 1 1 auto; min-width: 0; min-height: calc(100vh - 62px); display: flex; flex-direction: column; }

/* ===================== Light working-canvas theme (off-white) =====================
   The content region becomes an off-white surface; the top header and left rail stay dark chrome.
   Framed elements (cards, buttons, the Message Center terminal, the runtime/lifecycle chips, weight
   dropdowns) keep their dark fills and read as intentional modules on the light canvas — only the
   FRAMELESS text and cell outlines are re-coloured dark for contrast. Contrast vs #E8E2DA: #1a1a1a
   13.5:1, #5a5a5a 5.4:1, score states ≥3.6:1 (all AA for their text size). */
.app-region { position: relative; background-color: #F1F2F3; }
.app-region > * { position: relative; z-index: 1; }

/* "Keep the momentum" banner: slides down from under the top frame after a call is scored. The overlay
   sits at the top of .app-region with a z-index BELOW the sticky header (z:30), so the banner slides up
   behind the opaque header to hide — no clipping needed. Only the banner itself is interactive; the rest
   of the overlay is click-through. */
/* Hidden by default via visibility, NOT just the transform below: the overlay sits at top:0 of the
   (header-offset) .app-region, so translateY(calc(-100% - 90px)) alone leaves the tall banner's lower
   edge on-screen — and pointer-events:auto made that gold strip clickable over Home. visibility:hidden
   guarantees it's gone until .is-open, regardless of layout. The delayed visibility transition lets the
   slide-UP finish on close before it disappears; on open it flips visible instantly (delay 0). */
.app-region > .momentum-overlay { position: absolute; top: 0; left: 0; right: 0; z-index: 25; display: flex; justify-content: flex-end; padding: 0 var(--gutter); pointer-events: none; visibility: hidden; transition: visibility 0s linear 1.5s; }
.momentum-overlay.is-open { visibility: visible; transition-delay: 0s; }
.momentum-banner { pointer-events: auto; margin-top: 7px; width: 100%; max-width: 452px; background: var(--gold); color: #1a1a1a; border-radius: 11px; padding: 9px 22px 8px; text-align: center; box-shadow: 0 16px 34px -10px rgba(0, 0, 0, .42), 0 -5px 20px -8px rgba(0, 0, 0, .34); transform: translateY(calc(-100% - 90px)); transition: transform 1.5s cubic-bezier(.22, .61, .36, 1); will-change: transform; }
.momentum-overlay.is-open .momentum-banner { transform: translateY(0); }
.momentum-h { font-family: var(--font-body); font-size: .95rem; font-weight: 700; line-height: 1.15; margin: 0 0 3px; color: #1a1a1a; }
.momentum-lead { font-size: .79rem; line-height: 1.25; margin: 0 0 3px; color: #1a1a1a; }
.momentum-links { font-size: .79rem; font-weight: 400; line-height: 1.25; margin: 0 0 6px; color: #2a2a2a; }
.momentum-link { background: none; border: none; font-family: inherit; font-size: inherit; font-weight: 700; color: #1a1a1a; text-decoration: none; cursor: pointer; padding: 0; }
.momentum-link:hover { text-decoration: underline; text-underline-offset: 2px; }
.momentum-foot { display: flex; align-items: center; justify-content: space-between; gap: 16px; border-top: 1px solid rgba(0, 0, 0, .18); padding-top: 6px; }
.momentum-dismiss { display: inline-flex; align-items: center; gap: 6px; font-size: .72rem; color: #2a2a2a; cursor: pointer; }
.momentum-dismiss input { cursor: pointer; }
.momentum-close { background: none; border: none; font-family: inherit; font-size: .78rem; font-weight: 700; color: #1a1a1a; cursor: pointer; padding: 2px 4px; }
.momentum-close:hover { text-decoration: underline; }
@media (prefers-reduced-motion: reduce) { .momentum-banner { transition: none; } }

/* Frameless headings + labels → dark. */
.app-region .section-h,
.app-region .col-h,
.app-region .pt-h,
.app-region .view-h { color: #1a1a1a; }
.app-region .pt-h.h-weight { color: #5a5a5a; }
.app-region .pt-label { color: #1f1f1f; }
.app-region .view-sub { color: #5a5a5a; }
.app-region [data-view="cross-skill"] .view-sub { color: #1a1a1a; }

/* Call Details (label muted, value was gold → dark). */
.app-region .cd-label { color: #5a5a5a; }
.app-region .cd-value { color: #1a1a1a; }

/* Final Score — meta labels/values + the big number (was gold; re-mapped to dark-enough semantics). */
.app-region .score-meaning-label,
.app-region .score-coverage-label { color: #5a5a5a; }
.app-region .score-meaning,
.app-region .score-coverage { color: #1a1a1a; }
.app-region .score-circle { color: #9a6a00; }
.app-region .score-circle.circle-good { color: #1d7a40; }
.app-region .score-circle.circle-mid { color: #9a6a00; }
/* Light region: --gold (#ffbe17) is unreadable as text on white, so the optional-skill bonus takes
   the same darker gold the mid-score circle already uses here. */
.app-region .score-bonus { color: #9a6a00; }
.app-region .score-circle.circle-bad { color: #b3433b; }

/* Empty scorecard cell outlines → dark so they read on light (filled Actual/Expected cells keep their
   green/gold fills, which set their own border colour). */
.app-region .seg-cell { border-color: rgba(0, 0, 0, .32); }

/* Lifecycle arrows + the gold dividers, tuned for the light canvas. */
.app-region .lc-arrow { color: #5a5a5a; opacity: .85; }
.app-region .divider { border-top-color: rgba(154, 106, 0, .5); }
.app-region .divider-strong { border-top-color: rgba(154, 106, 0, .9); }

/* Footer now sits on the light canvas. */
.app-region .site-footer { border-top-color: rgba(0, 0, 0, .14); }
.app-region .sf-brand,
.app-region .sf-contact,
.app-region .sf-social { color: #5a5a5a; }
.app-region .sf-contact a { color: #9a6a00; }
.app-region .sf-site { color: #9a6a00; }

/* ---- Header utility buttons (Quick Help, Getting Started, Support, …): frameless light-grey text
   that turns gold on hover. ---- */
.topbar-nav .btn,
.topbar-nav .btn:visited { background: transparent; border-color: transparent; color: #dcdcdc; }
.topbar-nav .btn:hover:not(:disabled) { background: transparent; border-color: transparent; color: var(--gold); }
/* "Advanced" enablement toggle: gold label so it reads as a state control, not a nav link. The state
   word is dim when OFF, gold when ON. */
.topbar-nav .adv-toggle { color: var(--gold); font-weight: 600; }
/* Fixed-width state box + 4px gap so "Advanced:" never shifts when the state flips ON/OFF (only the
   word inside changes; left-aligned in a box wide enough for the wider "OFF"). */
.adv-toggle .adv-state { display: inline-block; min-width: 28px; margin-left: 4px; text-align: left; color: #9a9a9a; font-weight: 700; letter-spacing: .03em; }
.topbar-nav .adv-toggle[aria-checked="true"] .adv-state { color: var(--gold); }

/* ---- Action buttons (toolbar Import/Run/Stop/…, template Reset/Open/Save, and the Copy buttons):
   frameless text — no fill, no border — dark label that turns gold with a soft warm tint on hover.
   A disabled button just fades. ---- */
.toolbar-inner .btn,
.sk-tools .btn,
.dc-tools .btn,
.template-actions .btn,
.perf-head .btn,
.app-region .copy-btn { background: transparent; border-color: transparent; color: #3a3a3a; }
.toolbar-inner .btn:hover:not(:disabled),
.sk-tools .btn:hover:not(:disabled),
.dc-tools .btn:hover:not(:disabled),
.template-actions .btn:hover:not(:disabled),
.perf-head .btn:hover:not(:disabled),
.app-region .copy-btn:hover { background: rgba(0, 0, 0, .06); border-color: transparent; color: #1a1a1a; }
.toolbar-inner .btn:disabled,
.sk-tools .btn:disabled,
.dc-tools .btn:disabled,
.template-actions .btn:disabled,
.perf-head .btn:disabled { background: transparent; border-color: transparent; color: rgba(0, 0, 0, .26); }
.app-region .copy-btn.copied { color: #1d7a40; border-color: transparent; background: transparent; }
/* First toolbar button aligns flush with the page content edge (drop its left padding). */
.toolbar-inner .btn:first-child { padding-left: 0; }
/* Last template button (Save Template) aligns flush with the weights column's right edge. */
.template-actions .btn:last-child { padding-right: 0; }

/* ---- Trust Center link cards: light to match the new theme (were dark panels). ---- */
.app-region .trust-link { background: #fff; border-color: rgba(0, 0, 0, .12); color: #1a1a1a; }
.app-region .trust-link:hover { background: #fff; border-color: rgba(154, 106, 0, .6); color: #1a1a1a; }

/* ---- Anonymize Transcript page: white cards + dark text (were dark panels). ---- */
.app-region .anon-note,
.app-region .anon-prompt { background: #fff; border-color: rgba(0, 0, 0, .12); }
.app-region .anon-note { border-left-color: #9a6a00; color: #1a1a1a; }
.app-region .anon-note strong { color: #1a1a1a; }
.app-region .anon-note a { color: #9a6a00; }
.app-region .anon-h { color: #1a1a1a; }
.app-region .anon-list { color: #1a1a1a; }
.app-region .anon-list strong { color: #1a1a1a; }
.app-region .anon-list code { color: #9a6a00; }
.app-region .anon-prompt { color: #1a1a1a; border-color: rgba(0, 0, 0, .15); }
.app-region .anon-prompt:focus { border-color: #9a6a00; }
/* Copy-prompt button: frameless like the other action buttons. The :not(:disabled) / :active / :focus
   qualifiers keep it flat in every state (the base .btn hover/active rules are declared later with equal
   specificity, so we out-specify them here). */
.app-region .anon-copy,
.app-region .anon-copy:hover:not(:disabled),
.app-region .anon-copy:focus,
.app-region .anon-copy:active { background: transparent; border-color: transparent; box-shadow: none; color: #3a3a3a; }
.app-region .anon-copy:hover:not(:disabled) { background: rgba(0, 0, 0, .06); color: #1a1a1a; }
.app-region .anon-copy.copied { background: transparent; border-color: transparent; color: #1d7a40; }

/* ---- Roadmap placeholder cards (Buyer-Side, CRO Dash, …): white to match. ---- */
.app-region .placeholder-card { background: #fff; border-color: rgba(0, 0, 0, .12); }
.app-region .placeholder-h { color: #1a1a1a; }
.app-region .placeholder-sub { color: #5a5a5a; }
.app-region .placeholder-icon { color: #9a6a00; }
.app-region .placeholder-badge { color: #9a6a00; border-color: rgba(154, 106, 0, .4); }
/* Run flicker: keep the gold glow animation, black label (no gold text on the light canvas). */
.toolbar-inner .btn.run-awaiting { color: #1a1a1a; border-color: transparent; }

/* ---- Message Center: a clean white panel with dark, readable text (newest darkest, older faded);
   keeps the ">" DOS prompt and gold accents. ---- */
.app-region .notif-box { background: #fff; border-color: rgba(0, 0, 0, .12); }
.app-region .notif-welcome { color: #1a1a1a; }
.app-region .notif-welcome a,
.app-region .notif-welcome a:visited { color: #9a6a00; }
.app-region .note { color: #555; }
.app-region .note-latest { color: #1a1a1a; }
.app-region .note-warn { color: #8a4400; font-weight: 500; }
.app-region .note-alert { color: #b3261e; font-weight: 600; }
.app-region .note-error { color: #b3433b; }
.app-region .ai-ack-label { color: #1a1a1a; }
.app-region .ai-disclosure-msg.is-old,
.app-region .ai-disclosure-msg.is-old .notif-welcome,
.app-region .ai-disclosure-msg.is-old .notif-welcome strong,
.app-region .ai-disclosure-msg.is-old .ai-ack-label { color: #777; }
.app-region .ai-disclosure-msg.is-old .notif-welcome a,
.app-region .ai-disclosure-msg.is-old .notif-welcome a:visited { color: #9a6a00; }

/* ---- Lifecycle boxes: white fill + dark text; the identified (active) stage keeps its gold look. ---- */
.app-region .lc-box:not(.lc-active) { background: #fff; color: #1a1a1a; border-color: rgba(0, 0, 0, .15); }

/* ---- Runtime Monitor skill boxes: white fill + dark text; running keeps gold, done/error stay
   distinguishable on the light canvas. ---- */
.app-region .cb-box { background: #fff; color: #1a1a1a; border-color: rgba(0, 0, 0, .15); }
.app-region .cb-done { background: #ececec; color: #4a4a4a; border-color: rgba(0, 0, 0, .12); }
.app-region .cb-running { background: var(--gold); color: var(--ink); border-color: var(--gold); }
.app-region .cb-error { background: rgba(224, 88, 79, .14); color: #a5342c; border-color: rgba(224, 88, 79, .55); }

/* ---- Weights: white fill, dark text, default (skill-label) font size. ---- */
.app-region .pm-weight,
.app-region .pt-weight select { background: #fff; color: #1a1a1a; border-color: rgba(0, 0, 0, .2); font-size: .75rem; }

/* ---- Score Analysis / Recommendations / MEDDPICC: white fill + dark text. ---- */
.app-region .scroll-box { background: #fff; color: #1a1a1a; border-color: rgba(0, 0, 0, .15); }
.app-region .scroll-box ul,
.app-region .scroll-box li { color: #1a1a1a; }
.app-region .analysis-title { color: #1a1a1a; }
.app-region .meddpicc-item { border-bottom-color: rgba(0, 0, 0, .12); }
.app-region .meddpicc-letter { background: #efece6; border-color: rgba(0, 0, 0, .15); color: #1a1a1a; }
.app-region .meddpicc-label { color: #1a1a1a; }
.app-region .meddpicc-note { color: #5a5a5a; }
.app-region .meddpicc-evidence { color: #333; border-left-color: rgba(0, 0, 0, .25); }
.app-region .meddpicc-status-strong { color: #1d7a40; }
.app-region .meddpicc-status-weak { color: #9a6a00; }
.app-region .meddpicc-status-missing { color: #b3433b; }
.app-region .meddpicc-unavailable { background: #f2efe9; border-color: rgba(0, 0, 0, .15); border-left-color: #9a6a00; color: #5a5a5a; }

/* ---- Cross-Skill Diagnostic empty state: no frame, a DOS-style ">" prompt before the message. ---- */
.app-region .cross-skill-box { background: transparent; border: none; padding: 0; color: #1f1f1f; }
.app-region .cross-skill-empty { position: relative; padding-left: 16px; color: #5a5a5a; font-style: normal; font-family: ui-monospace, 'Cascadia Code', 'Courier New', monospace; }
.app-region .cross-skill-empty::before { content: '>'; position: absolute; left: 0; top: 0; color: #9a6a00; font-weight: 700; }

/* Top utility bar (upper menu): page tagline left, help/account links right. Sticky + solid bg so it
   stays pinned at the top on scroll and across view changes; height matches .sidenav-top (62px). */
.topbar { position: sticky; top: 0; z-index: 15; display: flex; align-items: center; gap: 24px; height: 62px; padding: 0 var(--gutter); border-bottom: 1px solid var(--border); background: var(--bg); }
.topbar-title { font-family: var(--font-display); font-size: 1.2rem; letter-spacing: .09em; text-transform: uppercase; color: var(--heading); opacity: .82; }
.topbar-nav { display: flex; gap: 10px; margin-left: auto; flex-wrap: wrap; justify-content: flex-end; }

/* Views: only the active one shows. */
.view { display: none; }
.view.is-active { display: block; }
.view-placeholder.is-active { display: flex; align-items: center; justify-content: center; min-height: 62vh; padding: 40px var(--gutter); }
.placeholder-card { text-align: center; max-width: 460px; border: 1px solid var(--border); border-radius: 14px; background: var(--panel); padding: 40px 34px; }
.placeholder-icon { color: var(--gold); opacity: .85; margin-bottom: 14px; }
.placeholder-icon svg { width: 42px; height: 42px; }
.placeholder-h { font-family: var(--font-display); font-size: 1.7rem; font-weight: 400; letter-spacing: .05em; color: var(--heading); margin: 0 0 8px; }
.placeholder-sub { color: var(--muted); font-size: .92rem; line-height: 1.55; margin: 0 0 20px; }
.placeholder-badge { display: inline-block; font-size: .68rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--gold); border: 1px solid rgba(255, 190, 23, .4); border-radius: 999px; padding: 5px 12px; }

/* Integration "coming soon" wall: 96x96 logo tiles in wrapping rows. Logo-ready — drop an official
   96px logo at /assets/logos/integrations/<slug>.svg and swap the .intg-mono span for an <img>. */
.intg-grid { display: flex; flex-wrap: wrap; gap: 22px; margin: 6px 0 26px; }
.intg-tile { display: flex; flex-direction: column; align-items: center; gap: 10px; width: 96px; }
.intg-logo { width: 96px; height: 96px; border-radius: 20px; background: #fff; border: 1px solid rgba(0, 0, 0, .12); box-shadow: 0 2px 12px rgba(0, 0, 0, .06); display: flex; align-items: center; justify-content: center; overflow: hidden; padding: 10px; }
.intg-logo img { max-width: 100%; max-height: 76px; width: auto; height: auto; object-fit: contain; }
.intg-mono { font-family: var(--font-display); font-size: 2.6rem; font-weight: 400; letter-spacing: .02em; color: #8a8a8a; line-height: 1; }
.intg-name { width: 96px; text-align: center; font-size: .78rem; font-weight: 600; color: #3a3a3a; line-height: 1.2; }
.intg-badge { margin-top: 4px; }

/* Billing view — manual upgrade request (self-serve checkout comes later). White card, left-aligned
   content (explicit background so it doesn't inherit the dark --panel in the light app region). */
.bill-card { max-width: 560px; background: #fff; color: #4a4a4a; border: 1px solid rgba(0, 0, 0, .12); border-radius: 14px; padding: 30px 32px; }
.bill-card .placeholder-icon { margin-bottom: 10px; }
.bill-h { font-family: var(--font-display); font-size: 1.5rem; font-weight: 400; letter-spacing: .04em; color: #1e1e1e; margin: 0 0 10px; }
.bill-lead { color: #4a4a4a; font-size: .75rem; line-height: 1.6; margin: 0 0 16px; }
.bill-list { list-style: none; margin: 0 0 22px; padding: 0; display: flex; flex-direction: column; gap: 9px; }
.bill-list li { color: #4a4a4a; font-size: .75rem; line-height: 1.5; padding-left: 18px; position: relative; }
.bill-list li::before { content: ""; position: absolute; left: 2px; top: .5em; width: 6px; height: 6px; border-radius: 50%; background: #14646e; }
.bill-list strong { color: #1e1e1e; font-weight: 700; }
.bill-actions { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }
.bill-plans { display: flex; flex-direction: column; gap: 10px; margin: 18px 0 10px; }
.bill-plan { display: flex; align-items: center; justify-content: space-between; gap: 14px; border: 1px solid rgba(0, 0, 0, .1); border-radius: 10px; padding: 11px 14px; }
.bill-plan-tier { border-color: rgba(255, 190, 23, .55); background: #fffdf5; }
.bill-plan-name { font-weight: 700; color: #242320; font-size: 15px; }
.bill-plan-sub { font-size: 12.5px; color: #6b6862; margin-top: 2px; }
.bill-plan-buy { display: flex; align-items: center; gap: 12px; }
.bill-plan-price { font-weight: 700; color: #242320; font-size: 15px; white-space: nowrap; }
.bill-plan .bill-buy { padding: 7px 18px; }

/* Billing & Plans redesign (Stage 3): plan summary + landing-style cards + invoice history */
.bill2 { max-width: 900px; }
.b2-sec-h { font-family: var(--font-display); font-weight: 400; font-size: 1.05rem; letter-spacing: .04em; text-transform: uppercase; color: #1e1e1e; border-left: 4px solid var(--gold); padding-left: 11px; margin: 26px 0 14px; }
.bill2-summary { display: flex; flex-wrap: wrap; align-items: center; gap: 22px; background: #fff; border: 1px solid #e5e1d8; border-radius: 14px; padding: 18px 22px; }
.b2s-item { display: flex; flex-direction: column; gap: 3px; }
.b2s-label { font-family: var(--font-body); font-weight: 700; text-transform: uppercase; letter-spacing: .07em; font-size: .6rem; color: #6b6862; }
.b2s-val { font-family: var(--font-display); font-size: 1.15rem; color: #1e1e1e; line-height: 1; }
.b2s-val-sm { font-size: 1.15rem; }
.b2s-actions { margin-left: auto; display: flex; gap: 8px; flex-wrap: wrap; }
/* A class-level `display` beats the UA `[hidden]{display:none}`, so ghost links stay visible when JS hides
   them (e.g. Manage/Cancel with no portal). Re-assert hidden. */
.b2-ghost[hidden] { display: none !important; }

.b2-buy { font-family: var(--font-body); text-transform: uppercase; letter-spacing: .04em; font-weight: 700; font-size: .68rem; border: none; border-radius: 8px; padding: 6px 14px; cursor: pointer; background: linear-gradient(180deg, #ffcb3f, var(--gold) 55%, #f2ad0e); color: #1a1a1a; white-space: nowrap; }
.b2-buy:hover:not(:disabled) { background: #ffce50; }
.b2-buy:disabled { opacity: .6; cursor: default; }
.b2-buy-full { width: 100%; padding: 9px; font-size: .74rem; }
.b2-ghost { font-family: var(--font-body); text-transform: uppercase; letter-spacing: .04em; font-weight: 700; font-size: .68rem; border: 1px solid rgba(0, 0, 0, .22); border-radius: 8px; padding: 7px 14px; cursor: pointer; background: #fff; color: #242320; text-decoration: none; display: inline-block; white-space: nowrap; }
.b2-ghost:hover { border-color: var(--gold); color: #b26f0d; }

.b2-plans { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
.b2-card { position: relative; border: 1px solid #e5e1d8; border-radius: 14px; padding: 18px 16px; background: #fff; display: flex; flex-direction: column; gap: 6px; }
.b2-badge { align-self: flex-start; font-family: var(--font-body); text-transform: uppercase; letter-spacing: .08em; font-size: .6rem; font-weight: 700; padding: 3px 9px; border-radius: 12px; background: var(--ink); color: var(--gold-tint); }
.b2-name { font-family: var(--font-display); text-transform: uppercase; font-size: 1.2rem; letter-spacing: .02em; color: #b26f0d; margin-top: 2px; }
.b2-desc { font-size: .78rem; color: #6b6862; min-height: 28px; line-height: 1.4; }
.b2-pack { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 7px 0; border-top: 1px dashed #e5e1d8; font-size: .82rem; color: #242320; }
.b2-packbuy { display: flex; align-items: center; gap: 8px; white-space: nowrap; font-weight: 600; }
.b2-mut { color: #6b6862; font-size: .72rem; font-weight: 400; }
.b2-price { font-family: var(--font-display); font-size: 1.95rem; color: #1e1e1e; line-height: 1; margin-top: 2px; }
.b2-price small { font-size: .8rem; color: #6b6862; }
.b2-rate { font-family: var(--font-display); font-size: 1.75rem; color: #1e1e1e; line-height: 1; margin-top: 6px; }
.b2-rate small { font-size: .8rem; color: #6b6862; font-family: var(--font-body); }
.b2-rate-pre { display: block; font-family: var(--font-body); text-transform: uppercase; letter-spacing: .08em; font-size: .58rem; font-weight: 700; color: #b26f0d; margin-bottom: 3px; }
.b2-teal .b2-rate, .b2-ink .b2-rate { color: #fff; }
.b2-teal .b2-rate small { color: #cfe3e7; }
.b2-ink .b2-rate small { color: #a9a9a9; }
.b2-teal .b2-rate-pre, .b2-ink .b2-rate-pre { color: var(--gold); }
/* CRO Lens is unreleased (announced 2027): its copy ships hidden and is revealed for a platform admin
   only (ui/sidenav.ts). This guarantees the hide beats any element's own display rule; the admin reveal
   removes the [hidden] attribute so the element shows normally. */
.cro-only[hidden] { display: none !important; }
.b2-feat { list-style: none; margin: 8px 0 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.b2-feat li { position: relative; padding-left: 20px; font-size: .76rem; color: #6b6862; }
.b2-feat li::before { content: "\2713"; position: absolute; left: 0; color: #b26f0d; font-weight: 700; }
.b2-cta { margin-top: auto; padding-top: 10px; }
.b2-teal { background: radial-gradient(130% 120% at 50% 0%, #1f8697, #14646e 66%); border-color: rgba(255, 255, 255, .14); color: #fff; }
.b2-teal .b2-name { color: var(--gold); } .b2-teal .b2-desc, .b2-teal .b2-pack, .b2-teal .b2-mut { color: #d3e6ea; } .b2-teal .b2-pack { border-top-color: rgba(255, 255, 255, .2); } .b2-teal .b2-badge { background: rgba(255, 255, 255, .16); color: #fff; }
.b2-cream { background: var(--gold-tint); border-color: var(--gold); } .b2-cream .b2-badge { background: var(--gold); color: var(--ink); } .b2-cream .b2-feat li { color: #5a4a1e; }
.b2-ink { background: radial-gradient(130% 120% at 50% 0%, #343434, #191919 70%); border-color: rgba(255, 255, 255, .12); color: #fff; }
.b2-ink .b2-name { color: var(--gold); } .b2-ink .b2-desc { color: #c9c9c9; } .b2-ink .b2-price { color: #fff; } .b2-ink .b2-price small { color: #a9a9a9; } .b2-ink .b2-feat li { color: #d6d6d6; } .b2-ink .b2-feat li::before { color: var(--gold); } .b2-ink .b2-badge { background: rgba(255, 255, 255, .15); color: #fff; }

.b2-hist { background: #fff; border: 1px solid #e5e1d8; border-radius: 14px; padding: 2px; overflow-x: auto; }
.b2-table { border-collapse: collapse; width: 100%; font-size: .82rem; color: #242320; }
.b2-table th, .b2-table td { text-align: left; padding: 11px 18px; border-bottom: 1px solid #eee; }
.b2-table th { font-family: var(--font-body); text-transform: uppercase; letter-spacing: .05em; font-size: .64rem; color: #6b6862; font-weight: 700; }
.b2-table tbody tr:last-child td { border-bottom: none; }
.b2-amt { font-variant-numeric: tabular-nums; }
.b2-dl { color: #b26f0d; font-weight: 600; text-decoration: none; }
.b2-hist-empty { padding: 16px 18px; font-size: .82rem; color: #6b6862; margin: 0; }
.b2-portal-row { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; padding: 10px 18px 12px; }
.b2-portal-note { font-size: .74rem; color: #6b6862; }

.b2-foot { margin-top: 24px; border-top: 1px solid #e5e1d8; padding-top: 14px; display: flex; flex-direction: column; gap: 10px; }
.b2-foot-links { display: flex; flex-wrap: wrap; gap: 14px; font-size: .8rem; }
.b2-foot-links a { color: #b26f0d; font-weight: 600; text-decoration: none; border-bottom: 1px solid rgba(178, 111, 13, .35); }
.b2-foot-row { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; justify-content: space-between; }
.b2-foot-note { font-size: .78rem; color: #6b6862; }
.b2-msg { margin: 12px 0 0; }
@media (max-width: 760px) { .b2-plans { grid-template-columns: 1fr; } }
.bill-msg { margin: 16px 0 0; font-size: .75rem; font-weight: 600; color: #14646e; }

/* Access-session-expiry notice: a full-screen scrim shown for ~1.6s before the reload that
   re-triggers the Access login. Deliberately covers the app so the underlying (now-failed) view
   isn't left looking broken during the reload. */
.session-expired-overlay {
  position: fixed; inset: 0; z-index: 99999;
  display: flex; align-items: center; justify-content: center; text-align: center;
  padding: 24px; background: rgba(30, 30, 30, .92); color: #fff;
  font-family: var(--font-display, sans-serif); font-size: 1.15rem; letter-spacing: .02em;
}

/* ---------- Self-service Account overview (Phase 2) ---------- */
/* The Account view hides the page header, so give its content a deliberate top clearance (the account
   name would otherwise sit flush under the topbar). ~2x a normal page's page-head top clearance. */
.view[data-view="account"] .view-pad { padding-top: 44px; }
/* Explicit dark-on-white (the app content region's --heading resolves light on some grounds). */
.acct-overview { color: #4a4a4a; margin-bottom: 0; }
.acct-overview:empty { display: none; }
/* Two-column page: LEFT = identity/details + Preferences; RIGHT = usage tiles + note + users. Both
   top-aligned; the left column is width-capped so Preferences stays narrow and clear of the right
   column. Collapses to stacked on narrow widths (flex-wrap). */
.acct-page { display: flex; gap: 44px; align-items: flex-start; flex-wrap: wrap; }
.acct-col-left { flex: 1 1 340px; min-width: 280px; max-width: 560px; }
.acct-col-right { flex: 1 1 420px; min-width: 280px; }
.acct-overview-right:empty { display: none; }
/* Teams block sits between the usage tiles/note and Your Users in the right column. */
.acct-teams-block { margin-top: 4px; }
/* Grey rules above Edit account details and above Preferences. */
.acct-divider { border: none; border-top: 1px solid rgba(0, 0, 0, .12); margin: 22px 0; }
.acct-loading { color: #6a6a6a; font-size: .75rem; margin: 0; }
.acct-head { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin: 0 0 18px; }
/* Matches the "Your users" sub-heading (.acct-sub) so the account name reads as a section header. */
.acct-title { font-family: var(--font-display); font-weight: 400; font-size: 1.05rem; letter-spacing: .04em; color: #1e1e1e; margin: 0; }
.acct-status { font-size: .62rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; padding: 3px 9px; border-radius: 999px; border: 1px solid transparent; }
.acct-status--active { color: #1d6f3f; background: #e6f4ec; border-color: #b8e0c6; }
.acct-status--trialing { color: #8a5a00; background: #fff4d6; border-color: #ffe08a; }
.acct-status--pending { color: #8a5a00; background: #fff4d6; border-color: #ffe08a; }
.acct-status--past_due, .acct-status--canceled { color: #b3433b; background: #fbe9e7; border-color: #f2c4bd; }
.acct-status--paused { color: #5a5a5a; background: #eee; border-color: #ddd; }
.acct-grid { display: grid; grid-template-columns: auto auto; justify-content: start; column-gap: 48px; row-gap: 18px; margin: 0; }
@media (max-width: 420px) { .acct-grid { grid-template-columns: 1fr; } }
.acct-field-label { font-size: .58rem; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: #9a9a9a; margin-bottom: 3px; }
.acct-field-value { font-size: .8rem; color: #1e1e1e; }
.acct-usage { display: flex; flex-wrap: wrap; gap: 14px; margin: 0 0 14px; }
.acct-stat { min-width: 96px; background: #fff; border: 1px solid rgba(0,0,0,.1); border-radius: 12px; padding: 12px 16px; }
.acct-stat-n { font-family: var(--font-display); font-size: 1.4rem; font-weight: 400; color: #1e1e1e; font-variant-numeric: tabular-nums; }
.acct-stat-l { font-size: .62rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: #9a9a9a; margin-top: 2px; }
.acct-stat--low .acct-stat-n { color: #b3433b; }
.acct-note { font-size: .75rem; color: #4a4a4a; margin: 0; }
.acct-link { background: none; border: none; padding: 0; color: #14646e; font: inherit; font-weight: 600; cursor: pointer; text-decoration: underline; }
.acct-users { margin-top: 24px; }
/* The table now lives in the (narrower) right column — let IT scroll horizontally on tight widths so
   the page body never scrolls sideways. */
.acct-table-scroll { overflow-x: auto; }
.acct-users-head { display: flex; align-items: baseline; gap: 10px; margin: 0 0 10px; }
.acct-sub { font-family: var(--font-display); font-weight: 400; font-size: 1.05rem; letter-spacing: .04em; color: #1e1e1e; border-left: 4px solid var(--gold); padding-left: 11px; margin: 0; }
.acct-count { font-size: .68rem; color: #9a9a9a; }
.acct-table { width: 100%; min-width: 340px; border-collapse: collapse; font-size: .75rem; }
.acct-table th { text-align: left; font-size: .58rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: #9a9a9a; padding: 6px 12px 6px 0; border-bottom: 1px solid rgba(0,0,0,.12); }
.acct-table td { padding: 9px 12px 9px 0; border-bottom: 1px solid rgba(0,0,0,.07); color: #2a2a2a; vertical-align: top; }
.acct-table td.acct-num { font-variant-numeric: tabular-nums; }
.acct-user-name { color: #1e1e1e; font-weight: 600; }
.acct-user-email { color: #8a8a8a; font-size: .68rem; margin-top: 1px; }
.acct-users-note { font-size: .7rem; color: #8a8a8a; margin: 12px 0 0; }
.acct-prefs-h { font-family: var(--font-display); font-weight: 400; font-size: 1.05rem; letter-spacing: .04em; color: #1e1e1e; border-left: 4px solid var(--gold); padding-left: 11px; margin: 0 0 16px; }
/* Edit-details form (company name + billing email) */
.acct-edit-row { margin: 0; }
.acct-edit { display: flex; flex-wrap: wrap; gap: 16px 22px; align-items: flex-end; background: transparent; border: 0; border-top: 1px solid rgba(0,0,0,.1); border-radius: 0; padding: 16px 0 4px; max-width: 620px; }
.acct-inp { display: flex; flex-direction: column; gap: 5px; }
.acct-inp-label { font-size: .58rem; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: #9a9a9a; }
.acct-inp-field { font: inherit; font-size: .78rem; color: #1e1e1e; padding: 7px 10px; border: 1px solid #d8d6d0; border-radius: 7px; min-width: 240px; background: #fff; }
.acct-inp-field:focus { outline: 2px solid rgba(20,100,110,.35); outline-offset: 1px; border-color: #14646e; }
.acct-phone-row { display: flex; gap: 8px; }
.acct-cc-select { font: inherit; font-size: .78rem; color: #1e1e1e; padding: 7px 8px; border: 1px solid #d8d6d0; border-radius: 7px; background: #fff; max-width: 130px; }
.acct-cc-select:focus { outline: 2px solid rgba(20,100,110,.35); outline-offset: 1px; border-color: #14646e; }
.acct-phone-num { min-width: 150px; }
.acct-edit-actions { display: flex; gap: 20px; align-items: center; width: 100%; margin-top: 4px; }
/* Save / Cancel as plain default-sized text (no boxed buttons). */
.acct-textbtn { background: none; border: none; padding: 0; font-family: var(--font-body); font-size: 0.75rem; font-weight: 700; color: #14646e; cursor: pointer; }
.acct-textbtn:hover { text-decoration: underline; }
.acct-textbtn--muted { color: #6a6a6a; font-weight: 400; }
.acct-textbtn[disabled] { opacity: .5; cursor: default; text-decoration: none; }
/* Teams manager (Account page) */
.acct-teams-sub { font-size: .72rem; color: #6a6a6a; margin: -6px 0 12px; line-height: 1.5; max-width: 460px; }
.tm-loading { font-size: .72rem; color: #8a8a8a; margin: 0; }
.tm-list { display: flex; flex-direction: column; gap: 8px; }
.tm-row { display: flex; align-items: center; gap: 12px; }
.tm-name { font: inherit; font-size: .78rem; color: #1e1e1e; padding: 6px 10px; border: 1px solid #d8d6d0; border-radius: 7px; background: #fff; flex: 1 1 auto; min-width: 0; max-width: 280px; }
.tm-name:focus { outline: 2px solid rgba(20, 100, 110, .35); outline-offset: 1px; border-color: #14646e; }
.tm-name[disabled] { opacity: .55; }
.tm-count { font-size: .68rem; color: #9a9a9a; flex: none; white-space: nowrap; }
.acct-link.tm-del { color: #b3433b; flex: none; }
.tm-add { display: flex; align-items: center; gap: 12px; margin-top: 12px; }
.tm-max { font-size: .7rem; color: #8a8a8a; margin: 12px 0 0; }
.acct-edit-msg { width: 100%; margin: 8px 0 0; font-size: .72rem; color: #b3433b; font-weight: 600; }
/* Member row actions (role select + pause/resume) */
.acct-actions { white-space: nowrap; }
.acct-role-select { font: inherit; font-size: .72rem; padding: 4px 6px; border: 1px solid #d8d6d0; border-radius: 6px; background: #fff; color: #1e1e1e; margin-right: 8px; }
.acct-homepage-select { font: inherit; font-size: .72rem; padding: 4px 6px; border: 1px solid #d8d6d0; border-radius: 6px; background: #fff; color: #1e1e1e; max-width: 170px; }
.acct-homepage-select[disabled] { opacity: .5; cursor: default; }
.acct-remove-btn { color: #b0342b; border-color: #e3b7b2; }
.acct-remove-btn:hover:not([disabled]) { background: #fbeceb; }
/* Invite-a-teammate form under Your Users. */
.acct-invite { margin-top: 16px; padding-top: 14px; border-top: 1px solid rgba(0,0,0,.1); }
.acct-invite-h { margin: 0 0 8px; font-size: .82rem; color: #1a1a1a; }
.acct-invite-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.acct-invite-email { min-width: 220px; flex: 1 1 220px; }
.acct-invite-btn { flex: none; }
.acct-invite-msg { display: block; margin-top: 8px; font-size: .74rem; color: #4a4a4a; min-height: 1em; }
.acct-invite-msg.is-err { color: #b0342b; }
.acct-invite-note { margin: 8px 0 0; font-size: .72rem; color: #7a7a7a; line-height: 1.5; }
.acct-mini-btn { font: inherit; font-size: .72rem; font-weight: 600; padding: 4px 11px; border: 1px solid #1e1e1e; background: #fff; color: #1e1e1e; border-radius: 6px; cursor: pointer; }
.acct-mini-btn:hover { background: #1e1e1e; color: #fff; }
.acct-mini-btn[disabled], .acct-role-select[disabled] { opacity: .5; cursor: default; }
.acct-lock { font-size: .68rem; color: #9a9a9a; }

/* ---------- Team Trends (Phase 3) ---------- */
.tt-loading, .tt-empty { color: #5a5a5a; font-size: var(--fs-body); line-height: 1.55; max-width: 620px; margin: 10px 0 0; }
.tt-head { display: flex; align-items: baseline; gap: 10px; margin: 6px 0 12px; }
.tt-h { font-family: var(--font-display); font-weight: 400; font-size: 1.1rem; letter-spacing: .04em; color: #1e1e1e; margin: 0; }
.tt-count { font-size: .68rem; color: #9a9a9a; }
.tt-scroll { overflow-x: auto; }
.tt-table { width: 100%; min-width: 800px; border-collapse: collapse; font-size: .78rem; }
.tt-table th { text-align: left; font-size: .58rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: #1e1e1e; padding: 6px 14px 8px 0; border-bottom: 1px solid rgba(0, 0, 0, .12); }
/* Sortable header: a button that looks like the header, with an arrow on the active column. */
.tt-table th.tt-th-sort { padding: 0; }
.tt-sort-btn { display: inline-flex; align-items: center; gap: 4px; background: none; border: none; padding: 6px 14px 8px 0; font: inherit; font-size: .58rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: #1e1e1e; cursor: pointer; }
.tt-sort-btn:hover { color: #14646e; }
.tt-sort-arrow { color: #14646e; font-size: .8em; }
.tt-table td { padding: 11px 14px 11px 0; border-bottom: 1px solid rgba(0, 0, 0, .07); color: #2a2a2a; vertical-align: middle; }
.tt-table td.tt-num { font-variant-numeric: tabular-nums; }
.tt-table td.tt-avg { font-weight: 800; color: #14646e; } /* the headline Average metric — draws the eye */
.tt-rep-name { color: #1e1e1e; font-weight: 600; }
/* Gold "C" flag: this rep is in the active 2-rep Compare. Strong, intense gold so it reads at a glance. */
.tt-compare-flag { display: inline-block; margin-left: 7px; color: #d98411; font-weight: 800; font-size: .82rem; letter-spacing: .02em; }
.tt-rep-hint { color: #a08a4a; font-size: .62rem; margin-top: 1px; }
.tt-trend-cell { white-space: nowrap; }
.tt-delta { font-size: .72rem; font-weight: 700; font-variant-numeric: tabular-nums; }
.tt-delta--up { color: #1d7a40; }
.tt-delta--down { color: #b3433b; }
.tt-delta--flat { color: #8a8a8a; font-weight: 600; }
/* Compare page (Phase 4) */
/* Top bar aligned with the page title: "Compare" left; Clear (active only) + Window right — but only
   as far right as the intro text extends (max-width matches .view-sub), not the full-width screen edge. */
.cmp-topbar { display: flex; align-items: center; gap: 20px; margin: 16px 0 6px; max-width: 720px; }
.cmp-topbar .cmp-title { margin: 0; }
.cmp-topbar-right { margin-left: auto; display: inline-flex; align-items: center; gap: 24px; }
.cmp-link { background: none; border: 0; padding: 0; font: inherit; color: #9a6a00; text-decoration: underline; cursor: pointer; }
.cmp-link:hover { color: #7a5400; }
.cmp-window { display: inline-flex; align-items: center; gap: 7px; }
.cmp-window-label { font-size: .62rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: #1e1e1e; }
/* The Window control sits near the top of the page, so its tooltip opens DOWNWARD (not clipped above). */
/* The shared .meta-info dims to opacity .7 and inherits a muted colour — too faint on Compare's light
   header. Give the compare tooltips a solid grey (darkening on hover) and open them downward. */
.app-region [data-view="compare"] .meta-info { color: #5a5a5a; opacity: 1; }
.app-region [data-view="compare"] .meta-info:hover, .app-region [data-view="compare"] .meta-info:focus-visible { color: #1a1a1a; }
.app-region [data-view="compare"] .meta-info .sc-note-tip { top: calc(100% + 7px); bottom: auto; left: -10px; transform: translateY(-3px); }
.app-region [data-view="compare"] .meta-info:hover .sc-note-tip, .app-region [data-view="compare"] .meta-info:focus-visible .sc-note-tip { transform: translateY(0); }
.cmp-window-hint { color: #6a6a6a; font-size: .72rem; margin: 0 0 18px; }
.cmp-hint-line { display: block; }
.cmp-body { display: flex; gap: 80px; align-items: flex-start; flex-wrap: wrap; }
.cmp-insights { flex: 1 1 260px; min-width: 240px; max-width: 460px; }
.cmp-insights-h { font-family: var(--font-display); font-weight: 400; font-size: 1.05rem; letter-spacing: .04em; color: #1e1e1e; border-left: 4px solid var(--gold); padding-left: 11px; margin: 0 0 12px; }
.cmp-insights-headline { font-size: .9rem; font-weight: 700; color: #1e1e1e; margin: 0 0 10px; line-height: 1.35; }
.cmp-insights-list { margin: 0; padding-left: 18px; color: #3a3a3a; font-size: .82rem; line-height: 1.5; }
.cmp-insights-list li { margin-bottom: 6px; }
.cmp-insights-note { color: #6a6a6a; font-size: .82rem; }
/* Compact + left-aligned: width hugs content (no full-width stretch), tighter column clearance. */
.cmp-table { width: auto; border-collapse: collapse; font-size: .78rem; }
.cmp-table th { text-align: left; font-size: .58rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: #9a9a9a; padding: 6px 18px 8px 0; border-bottom: 1px solid rgba(0, 0, 0, .12); vertical-align: bottom; }
.cmp-table td { padding: 8px 18px 8px 0; border-bottom: 1px solid rgba(0, 0, 0, .07); color: #2a2a2a; }
.cmp-table th:last-child, .cmp-table td:last-child { padding-right: 0; }
.cmp-table td.tt-num { font-variant-numeric: tabular-nums; text-align: right; }
.cmp-table th:not(:first-child) { text-align: right; }
.cmp-table th:first-child, .cmp-table td.cmp-skill { text-align: left; }
.cmp-col .cmp-name { font-size: .82rem; font-weight: 700; letter-spacing: 0; text-transform: none; color: #1e1e1e; }
.cmp-col .cmp-sub { font-size: .6rem; font-weight: 400; letter-spacing: .04em; text-transform: none; color: #9a9a9a; margin-top: 1px; }
.cmp-skill { color: #1e1e1e; }
.cmp-final td { font-weight: 700; color: #1e1e1e; border-bottom: 2px solid rgba(0, 0, 0, .18); }
.cmp-gap { font-weight: 700; font-variant-numeric: tabular-nums; }
.cmp-gap--a { color: #14646e; }
.cmp-gap--b { color: #a56a12; }
.cmp-gap--flat { color: #9a9a9a; }
.cmp-empty { max-width: 860px; } /* wide enough for the picker's two groups + the 80px clearance on one row */
.cmp-empty > .cmp-empty-h:first-child { margin-top: 4px; }
.cmp-empty-note { font-size: .75rem; color: #6a6a6a; line-height: 1.55; margin: 0 0 6px; }
.cmp-empty-h { font-family: var(--font-display); font-weight: 400; font-size: 1.05rem; letter-spacing: .04em; color: #1e1e1e; margin: 20px 0 10px; }
.cmp-picker { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.cmp-go-row { margin-top: 16px; } /* Compare button sits on its own line below the cohort pickers */
/* Option 3 — upload two sets. Compact rows + hyperlink-style pickers (no big drop blocks). */
.cmp-upload { margin-top: 6px; }
.cmp-up-row { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
.cmp-up-label { font-size: .62rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: #6a6a6a; min-width: 58px; }
.cmp-up-file { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.cmp-up-status { font-size: .75rem; color: #6a6a6a; }
.cmp-progress { max-width: 720px; }
.cmp-progress-line { font-size: .9rem; font-weight: 700; color: #1e1e1e; margin: 8px 0 6px; }
.cmp-team-select { font: inherit; font-size: .78rem; color: #1e1e1e; padding: 6px 10px; border: 1px solid #d8d6d0; border-radius: 7px; background: #fff; }
.cmp-vs { font-size: .68rem; color: #9a9a9a; font-weight: 700; text-transform: uppercase; }
/* Selection toolbar + checkboxes + removed rows (Phase 3) */
.tt-toolbar { display: inline-flex; align-items: center; gap: 14px; margin-left: auto; flex-wrap: wrap; }
/* Rep search box (Team Trends toolbar + Teams assign column). */
.tt-search { font: inherit; font-size: .72rem; color: #1e1e1e; padding: 4px 10px; border: 1px solid #d8d6d0; border-radius: 6px; background: #fff; min-width: 160px; }
.tt-search:focus { outline: 2px solid rgba(20, 100, 110, .35); outline-offset: 1px; border-color: #14646e; }
.tms-search { display: block; margin: 0 0 12px; min-width: 220px; }
.tt-tool-btn { font: inherit; font-size: .72rem; font-weight: 700; padding: 5px 12px; border: 1px solid #1e1e1e; background: #fff; color: #1e1e1e; border-radius: 6px; cursor: pointer; }
.tt-tool-btn:hover:not([disabled]) { background: #1e1e1e; color: #fff; }
.tt-tool-btn[disabled] { opacity: .4; cursor: default; }
.tt-show-removed { display: inline-flex; align-items: center; gap: 6px; font-size: .72rem; color: #5a5a5a; cursor: pointer; }
.tt-check-cell { width: 34px; }
.tt-check { width: 15px; height: 15px; accent-color: #14646e; cursor: pointer; }
.tt-row-hidden { opacity: .5; }
/* Multi-select team filter (a <details> dropdown of checkboxes) */
.tt-filter { position: relative; display: inline-block; }
.tt-filter-summary { list-style: none; display: inline-flex; align-items: center; gap: 7px; cursor: pointer; font-size: .72rem; padding: 4px 10px; border: 1px solid #d8d6d0; border-radius: 6px; background: #fff; color: #1e1e1e; user-select: none; }
.tt-filter-summary::-webkit-details-marker { display: none; }
.tt-filter-summary::after { content: '▾'; color: #9a9a9a; font-size: .7rem; }
.tt-filter-label { font-size: .62rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: #9a9a9a; }
.tt-filter-caption { font-weight: 600; }
.tt-filter-menu { position: absolute; z-index: 40; top: calc(100% + 5px); right: 0; min-width: 190px; max-height: 300px; overflow-y: auto; display: flex; flex-direction: column; gap: 2px; padding: 8px; background: #fff; border: 1px solid #e2e0da; border-radius: 9px; box-shadow: 0 10px 28px rgba(0, 0, 0, .14); }
.tt-filter-opt { display: flex; align-items: center; gap: 8px; padding: 5px 6px; border-radius: 6px; font-size: .74rem; color: #2a2a2a; cursor: pointer; }
.tt-filter-opt:hover { background: #f4f2ec; }
.tt-filter-clear { align-self: flex-start; margin-top: 4px; background: none; border: none; padding: 4px 6px; font: inherit; font-size: .68rem; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: #14646e; cursor: pointer; }
/* Team Trends read-only team cell */
.tt-team-name { color: #2a2a2a; }
.tt-team-none { color: #b0aca2; }
/* Team assignment dropdown (Teams page) */
.tt-team-select { font: inherit; font-size: .72rem; color: #1e1e1e; padding: 4px 6px; border: 1px solid #d8d6d0; border-radius: 6px; background: #fff; max-width: 180px; }
.tt-team-select[disabled] { opacity: .5; }
.tt-empty-row { color: #8a8a8a; padding: 16px 0; text-align: center; }

/* ---------- Teams page (LEFT: rep grid 70% · RIGHT: intro + inline entity lists 30%) ---------- */
.tms-layout { display: grid; grid-template-columns: 7fr 3fr; gap: 48px; align-items: start; }
@media (max-width: 900px) { .tms-layout { grid-template-columns: 1fr; gap: 28px; } }
.tms-main { min-width: 0; }
.tms-sub { font-size: .72rem; color: #6a6a6a; line-height: 1.5; margin: 0; max-width: 640px; }
.tms-grid { width: 100%; border-collapse: collapse; font-size: .78rem; }
.tms-grid th { text-align: left; font-size: .58rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: #1f1f1f; padding: 6px 20px 8px 0; border-bottom: 1px solid rgba(0, 0, 0, .12); }
.tms-grid td { padding: 8px 20px 8px 0; border-bottom: 1px solid rgba(0, 0, 0, .07); vertical-align: middle; }
.tms-grid td:last-child, .tms-grid th:last-child { padding-right: 0; }
.tms-rep-input { width: 100%; min-width: 160px; }
/* Assign dropdowns: ~2x the old width so long values like "California" fit without truncation. */
.tms-assign-cell { width: 1%; } /* shrink-to-fit so the Rep column takes the slack */
.tms-select { width: 100%; min-width: 128px; max-width: none; }
.tms-col-class .tms-select { min-width: 88px; }  /* short values (Top Rep / No class) — keep the column narrow so the grid fits */

/* RIGHT column: moved intro text, then one inline-editable list per dimension (Email-Recipients model:
   type to rename, clear to delete, trailing blank to add, auto-saved — no popups, no "⋯"). */
.tms-lead { margin: 0 0 22px; font-size: .78rem; color: #5a5a5a; line-height: 1.55; }
.tms-entpanel { margin: 0 0 14px; }
.tms-entpanel-h { display: flex; align-items: center; gap: 8px; cursor: pointer; list-style: none; font-family: var(--font-display); font-weight: 400; font-size: .95rem; letter-spacing: .04em; color: #1e1e1e; border-left: 4px solid var(--gold); padding-left: 10px; margin: 0 0 8px; }
.tms-entpanel-h::-webkit-details-marker { display: none; }
.tms-entpanel-h:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }
.tms-entpanel-title { flex: 1 1 auto; }
.tms-entpanel-count { font-family: var(--font-body); font-size: .7rem; color: #9a9a9a; font-variant-numeric: tabular-nums; }
.tms-entpanel-h::after { content: '\203A'; font-size: 2rem; color: #1f1f1f; line-height: 1; transition: transform .15s ease; }
.tms-entpanel[open] .tms-entpanel-h::after { transform: rotate(90deg); }
.tms-entpanel:not([open]) .tms-entpanel-h { margin-bottom: 0; }
.tms-entlist { display: grid; gap: 6px; }
.tms-entinput { font: inherit; font-size: .74rem; padding: 6px 9px; border: 1px solid #d8d6d0; border-radius: 7px; color: #1e1e1e; background: #fff; width: 100%; box-sizing: border-box; }
.tms-entinput:focus { outline: none; border-color: var(--gold); }
.tms-entinput[disabled] { opacity: .5; }
.tms-entinput-rec { color: #9a9a9a; }  /* recommended default, untouched — greys out once renamed */
.tms-entmsg { display: inline-block; margin-top: 6px; font-size: .68rem; min-height: 1em; }
.tms-entmsg.ok { color: #1f8a4c; }
.tms-entmsg.err { color: #c0392b; }

/* Sidenav divider — thin light-grey rule splitting the menu into two halves (below The CRO Lens). */
.nav-sep { flex: 0 0 auto; height: 1px; background: rgba(255, 255, 255, .14); margin: 4px 14px; }

/* ---------- Scorecards page: author one manager scorecard per call type ----------
   Two columns: LEFT = call-type dropdown + Save (kept up top so it never scrolls out of reach);
   RIGHT = per-skill config, System Default minimum beside the editable Custom minimum. No card/frame
   — it sits directly on the workspace. */
.sc-layout { display: grid; grid-template-columns: 360px max-content; gap: 48px; align-items: start; }
.sc-side { display: flex; flex-direction: column; gap: 12px; }
.sc-pick-label { font-family: var(--font-display); font-size: .9rem; letter-spacing: .05em; text-transform: uppercase; color: #1a1a1a; }

/* Custom call-type picker: a button whose option panel opens to the RIGHT of the button (a native
   <select> can't be repositioned, so it's a bespoke listbox). Width ~50% wider than the old select. */
.sc-picker { position: relative; }
.sc-select { display: inline-flex; align-items: center; justify-content: space-between; gap: 10px; width: 345px; font-family: var(--font-body); font-size: 13.5px; font-weight: 400; color: #1a1a1a; background: #fff; border: 1px solid rgba(0, 0, 0, .25); border-radius: 8px; padding: 9px 12px; cursor: pointer; text-align: left; }
.sc-select:hover { border-color: rgba(154, 106, 0, .5); }
.sc-select-value { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sc-select-caret { flex: 0 0 auto; color: #8a8a8a; font-size: .7rem; }
.sc-picker-panel { position: absolute; top: 0; left: 100%; margin-left: 10px; z-index: 30; min-width: 320px; overflow-y: auto; background: #fff; border: 1px solid rgba(0, 0, 0, .18); border-radius: 10px; box-shadow: 0 12px 34px rgba(0, 0, 0, .2); padding: 6px; }
.sc-opt { display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%; text-align: left; background: transparent; border: none; border-radius: 6px; padding: 8px 10px; font-size: 13.5px; color: #1a1a1a; cursor: pointer; }
.sc-opt:hover { background: rgba(0, 0, 0, .05); }
.sc-opt.is-active { background: rgba(154, 106, 0, .12); color: #8a5a00; font-weight: 600; }
.sc-opt.is-highlighted { box-shadow: inset 0 0 0 2px rgba(154, 106, 0, .5); }
.sc-opt-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* CUSTOM tag: bold black text (legible) + a gold sparkle to draw attention. */
.sc-opt-custom { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 4px; font-size: .58rem; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: #1a1a1a; }
.sc-opt-spark { width: 12px; height: 12px; fill: #ffbe17; }

.sc-editor-sub { font-size: .8rem; line-height: 1.45; color: #5a5a5a; margin: 2px 0 0; max-width: 340px; }
.sc-actions { display: flex; align-items: center; gap: 16px; margin-top: 6px; }
.sc-save { font-family: var(--font-body); font-size: .8rem; font-weight: 600; border-radius: 6px; padding: 8px 22px; cursor: pointer; background: var(--gold); border: 1px solid var(--gold); color: #1a1a1a; }
.sc-save:hover:not(:disabled) { background: #e0a800; border-color: #e0a800; }
.sc-save:disabled { background: #e4dfd2; border-color: #e4dfd2; color: #9a9a9a; cursor: default; }
.sc-revert { background: transparent; border: none; color: #8a5a00; font-size: .78rem; cursor: pointer; text-decoration: underline; padding: 4px 2px; }
.sc-revert:hover { color: #6a4600; }
.sc-msg { font-size: .78rem; font-weight: 600; min-height: 1em; }
.sc-msg-ok { color: #1d7a40; }
.sc-msg-error { color: #b3433b; }

/* Config grid: two side-by-side sets — [label] · System Default (boxes + weight) · [divider] ·
   Custom (boxes + weight). FIXED column widths so the Custom set never shifts when a different call
   type (with wider default-weight text) is selected. Column 4 is the divider gutter. */
.sc-config-grid { display: grid; grid-template-columns: 195px 108px 78px 44px 108px 100px; align-items: center; row-gap: 5px; column-gap: 22px; }
.sc-ch { font-family: var(--font-display); font-size: .82rem; letter-spacing: .5px; color: #5a5a5a; padding-bottom: 9px; align-self: end; }
.sc-ch-custom { color: #1a1a1a; }
.sc-rowlabel { font-size: .8rem; color: #1a1a1a; padding: 3px 0; }
.sc-bar, .sc-bar-slot { display: inline-flex; gap: 4px; }
/* Read-only default markers read as a solid grey reference (higher contrast than the workspace);
   editable Custom markers use the gold accent. */
.sc-bar-default .seg-cell.seg-expected { background: #6b6b6b; border-color: #555; }
.sc-bar-edit .seg-cell { cursor: pointer; }
.sc-defweight { font-size: 13.5px; color: #8a8a8a; }
.sc-vdivider { width: 1px; justify-self: center; align-self: stretch; background: rgba(0, 0, 0, .14); }
.sc-weight { font-size: 13.5px; padding: 5px 8px; border: 1px solid rgba(0, 0, 0, .2); border-radius: 7px; background: #fff; color: #1a1a1a; cursor: pointer; }
.sc-weight:focus { outline: none; border-color: var(--gold); }

/* Collapsed rail: icon-only strip. Labels + brand text hide; icons centre; state persists (sidenav.ts). */
.sidenav.is-collapsed { flex-basis: 66px; width: 66px; }
.sidenav.is-collapsed .nav-item span,
.sidenav.is-collapsed .nav-util span { display: none; }
.sidenav.is-collapsed .sidenav-top { justify-content: center; padding: 10px 0 4px; }
.sidenav.is-collapsed .nav-item,
.sidenav.is-collapsed .nav-util { justify-content: center; padding: 11px 0; }

/* Page header: the active page's name at the top of the workspace, shared by every view (text set by
   ui/sidenav.ts). Sized a clear step above section headers (.section-h/.col-h/.view-h are 1rem) so the
   page name reads as the top of the hierarchy. Dark ink on the light workspace, like the other
   in-region headings. */
.page-head { padding: 22px var(--gutter) 12px; }

.page-title { font-family: var(--font-display); font-size: 1.6rem; font-weight: 400; letter-spacing: .04em; color: #1a1a1a; margin: 0; line-height: 1.1; }

/* Document-style views (Cross-Skill Diagnostic, Trust Center). Reduced top padding since the page
   title now lives in the shared .page-head above, not inside the view. */
.view-pad { padding: 6px var(--gutter) 44px; }
/* Doc-view (Cross-Skill, Trust Center) headings + body sized to match the Skill-Based page:
   heading = section-header size (1rem), sub/body = default skill-label size (.75rem). */
.view-h { font-family: var(--font-display); font-size: 1rem; font-weight: 400; letter-spacing: .04em; color: var(--heading); margin: 0 0 6px; }
.view-sub { color: var(--muted); font-size: .75rem; line-height: 1.5; margin: 0 0 22px; max-width: 720px; }
/* AI-use disclosure at the top of the Trust Center page (moved out of the Message Center). */
.trust-ai-note { max-width: 720px; margin: 0 0 20px; padding: 14px 16px; border: 1px solid #e4dcc6; border-left: 3px solid #c8951a; border-radius: 10px; background: #faf6ea; }
.trust-ai-note p { margin: 0; font-size: .8rem; line-height: 1.6; color: #1a1a1a; }
.trust-ai-note a, .trust-ai-note a:visited { color: #9a6a00; font-weight: 500; text-decoration: none; }
.trust-ai-note a:hover { text-decoration: underline; }
/* One shared content width for the Cross-Skill view: the divider, the chain diagram, and the
   "What this means" narrative all cap at this (responsive: shrinks below it on narrow screens). The
   divider width IS the summary's max line width. Change here to change all three together. */
.cross-skill-box { padding: 6px 0 0; font-size: var(--fs-body); line-height: 1.6; color: #1e1e1e; --cs-content-w: 1000px; }
.cross-skill-box .summary-para { margin: 0 0 12px; max-width: none; }
.cross-skill-box .summary-para:last-child { margin-bottom: 0; }
.cross-skill-empty { color: var(--muted); font-style: italic; margin: 0; }
/* Cross-Skill idle: two halves — explanatory text left, a decorative connected-skills web right. */
.cs-idle { display: grid; grid-template-columns: 1.05fr 1fr; gap: 52px; align-items: stretch; margin-top: 10px; }
@media (max-width: 880px) { .cs-idle { grid-template-columns: 1fr; gap: 24px; } }
.cs-idle-left { min-width: 0; display: flex; flex-direction: column; }
.cs-idle-lede { font-size: var(--fs-body); color: #1e1e1e; line-height: 1.6; margin: 0 0 12px; max-width: 520px; }
.cs-idle-hint { font-size: var(--fs-body); color: #1e1e1e; line-height: 1.55; margin: 0; max-width: 520px; }
.cs-idle-guide { margin-top: auto; padding-top: 24px; }
.cs-idle-right { display: flex; flex-direction: column; align-items: center; justify-content: center; }
.cs-demo-wrap { max-width: 440px; width: 100%; }
.cs-demo-svg { display: block; width: 100%; height: auto; }
.cs-demo-cap { margin-top: 4px; font-family: var(--font-display); font-size: .78rem; letter-spacing: .06em; text-transform: uppercase; color: #9a9a9a; }
/* Narrative gets its own header so it reads as a distinct section, not stray text after the diagram. */
.cs-text-h { font-family: var(--font-display); font-size: 1.25rem; font-weight: 400; letter-spacing: .02em; color: #1a1a1a; margin: 0 0 12px; }
/* The "What this means" narrative caps at the shared content width (== the divider width), responsive. */
.cs-text { max-width: var(--cs-content-w); }
/* More breathing room in the upper half: extra space under the intro and around the chain diagram. */
.app-region [data-view="cross-skill"] .view-sub { margin-bottom: 40px; line-height: 1.6; max-width: 780px; }
.app-region [data-view="cross-skill"] .cs-graph-title { margin-bottom: 16px; }
.app-region [data-view="cross-skill"] .cs-graph-block { margin-bottom: 26px; }
/* Cross-Skill Diagnostic = two stacked rows: the chain visual(s) over a divider over the narrative.
   All content is left-aligned to match the rest of the app; the visual is width-capped so short
   chains don't balloon on an ultrawide row, and the narrative's line length is capped for reading. */
.cs-visual { position: relative; max-width: var(--cs-content-w); margin: 0; }
.cs-visual .cs-graph-svg { display: block; margin: 0; max-width: 100%; height: auto; }
.cs-graph-block { margin: 0 0 14px; }
.cs-graph-title { font-family: var(--font-body); font-size: .7rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; margin: 0 0 4px; }
.cs-graph-title.cs-graph-lift { color: #1a1a1a; }
.cs-graph-title.cs-graph-drag { color: #1a1a1a; }
.cs-graph-title.cs-graph-muted { color: #1a1a1a; }
/* "How to read it" primer above the chains (heading reuses .cs-graph-title). */
.cs-howto { margin: 0 0 22px; max-width: 780px; }
.cs-howto-text { font-family: var(--font-body); font-size: var(--fs-body); color: #1e1e1e; line-height: 1.55; margin: 0; }
/* Scored, but not enough evidence to map the chains (distinct from the pre-run idle demo). */
.cs-noresult { max-width: 640px; margin-top: 6px; }
.cs-noresult-text { font-family: var(--font-body); font-size: var(--fs-body); color: #1e1e1e; line-height: 1.6; margin: 8px 0 0; }
/* Causal "nothing lifted" note that fills the What-worked slot (a connection insight, not a list). */
.cs-noliftnote { margin: 0 0 16px; max-width: 620px; }
.cs-nolift-text { margin: 2px 0 0; font-size: 12.5px; font-style: italic; color: #1a1a1a; line-height: 1.5; }
.cross-skill-box .divider { margin: 40px 0 22px; max-width: var(--cs-content-w); }
/* Shared legend below the chains (HTML, not SVG). */
.cs-legend { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 16px; margin: 18px 0 0; font-size: 11.5px; color: #1a1a1a; }
.cs-legend-item { display: inline-flex; align-items: center; gap: 5px; }
.cs-legend-dot { width: 9px; height: 9px; border-radius: 50%; display: inline-block; }
.cs-legend-hint { display: block; margin: 8px 0 0; font-size: 11.5px; font-style: italic; color: #1a1a1a; }

/* ============ Cross-Skill REDESIGN: chains row (legend on top, chips) + migrated Score Analysis / Recs ============ */
.cs-head { margin: 2px 0 18px; }
/* Lead spans the full content width (== the chains box below it), per the redesign. */
.cs-lead { color: #5a5a5a; font-size: var(--fs-body); line-height: 1.55; max-width: none; margin: 6px 0 0; }

/* Chains container: legend pinned at the top boundary, then two evidence-gated columns. */
.cs-chains-host { margin: 0; }
.cs-chains { border: 1px solid var(--border); border-radius: 12px; background: #fff; overflow: hidden; }
/* Header row: title on the left, the legend + hint on the right (own smaller style, clear of the title). */
.cs-topbar { display: flex; align-items: baseline; justify-content: flex-start; gap: 30px; flex-wrap: wrap; row-gap: 8px; }
.cs-topbar .cs-text-h { margin: 0; }
/* Legend + hint sit on ONE line right after the header (their own smaller style, not the header's). */
.cs-legend-top { border: none; background: transparent; margin: 0; padding: 0; border-radius: 0; justify-content: flex-start; flex-wrap: nowrap; white-space: nowrap; max-width: none; }
.cs-legend-hint-inline { color: #1a1a1a; font-style: italic; }
/* The legend is a band across the top of the frame, above both columns; it wraps on narrow widths. */
.cs-legend-band { margin: 0; padding: 14px 18px; border-bottom: 1px solid #ececec; }
/* Advanced OFF on Cross-Skill hides the whole 3-zone row (Message Center + diagram + Domino); the Score
   Analysis / Recommendations below stay visible. */
.view[data-view="cross-skill"].cs-adv-off .cs-zones,
.view[data-view="cross-skill"].cs-adv-off .cs-noresult { display: none; }

/* ===== Cross-Skill 3-zone row: Final Score | What moved the score (Ranked/Cards) | The Domino ===== */
.cs-zones { display: grid; grid-template-columns: 260px minmax(0, 1fr) 300px; gap: 26px; align-items: start; }
@media (max-width: 1240px) { .cs-zones { grid-template-columns: minmax(0,1fr) minmax(0,1fr); } .cs-zone-score { grid-column: 1 / -1; } }
@media (max-width: 760px) { .cs-zones { grid-template-columns: 1fr; } .cs-zone-score { grid-column: auto; } }
.cs-zone { min-width: 0; }
.cs-zone-h { font-family: var(--font-body); font-size: .72rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: #5a5a5a; margin: 0 0 12px; }
.cs-zone-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; flex-wrap: wrap; }
.cs-zone-head .cs-zone-h { margin: 0; }
/* Divider between the 3-zone row and the Score Analysis row below (clearance above + below). */
.cs-zone-divider { border: none; border-top: 1px solid rgba(0, 0, 0, .14); margin: 34px 0; }
.view[data-view="cross-skill"].cs-adv-off .cs-zone-divider { display: none; }
/* Ranked / Cards toggle */
.czt-toggle { display: inline-flex; border: 1px solid #d5d2c9; border-radius: 7px; overflow: hidden; flex: 0 0 auto; }
.czt-btn { font-family: var(--font-body); font-size: .7rem; line-height: 1; letter-spacing: .01em; padding: 5px 11px; background: transparent; border: none; color: #6a6a6a; cursor: pointer; transition: background .12s, color .12s; }
.czt-btn + .czt-btn { border-left: 1px solid #d5d2c9; }
.czt-btn:hover { color: #1f1f1f; }
.czt-btn.is-on { background: #1f1f1f; color: #f5f5f5; }
.czt-body { background: #fff; border: 1px solid #e3e0d8; border-radius: 12px; padding: 15px 17px; }
/* Ranked impact bars */
.czb-axis { display: grid; grid-template-columns: 148px minmax(0,1fr) 60px; gap: 10px; font-size: .62rem; color: #9a9a9a; margin-bottom: 8px; }
.czb-axis .mid { text-align: center; }
.czb-row { display: grid; grid-template-columns: 148px minmax(0,1fr) 60px; gap: 10px; align-items: center; height: 24px; }
.czb-lbl { display: flex; align-items: center; justify-content: flex-end; overflow: hidden; font-size: .72rem; color: #1f1f1f; }
.czb-nm { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.czb-row.na .czb-lbl { color: #a8a8a8; }
.czb-crit { flex: none; display: inline-block; margin-left: 5px; font-size: .58rem; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: #c0392b; border: 1px solid #e3b7b2; border-radius: 4px; padding: 0 4px; vertical-align: 1px; }
.czb-track { position: relative; height: 16px; }
.czb-track::before { content: ""; position: absolute; left: 50%; top: -3px; bottom: -3px; width: 1px; background: #c9c6bd; }
.czb-bar { position: absolute; top: 2px; height: 12px; border-radius: 3px; }
.czb-bar.red { right: 50%; background: #c0392b; }
.czb-bar.green { left: 50%; background: #1d7a40; }
.czb-met { position: absolute; left: 50%; top: 2px; width: 12px; height: 12px; margin-left: -6px; border-radius: 50%; background: #1d7a40; }
.czb-na-txt { position: absolute; left: calc(50% + 8px); top: 0; font-size: .66rem; font-style: italic; color: #a8a8a8; }
.czb-val { font-size: .72rem; color: #5a5a5a; font-variant-numeric: tabular-nums; white-space: nowrap; }
.czb-val b { color: #1a1a1a; }
.czb-val .down { color: #c0392b; font-weight: 700; }
.czb-val .up { color: #1d7a40; font-weight: 700; }
.czb-legend { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 14px; padding-top: 12px; border-top: 1px solid #ececec; font-size: .7rem; color: #6a6a6a; }
.czb-legend span { display: inline-flex; align-items: center; gap: 6px; }
.czb-legend .sw { width: 14px; height: 8px; border-radius: 2px; display: inline-block; }
/* Story cards (grouped chips) */
.czc-grp { display: grid; grid-template-columns: 84px minmax(0,1fr); gap: 10px; align-items: start; padding: 10px 0; }
.czc-grp + .czc-grp { border-top: 1px solid #ececec; }
.czc-lbl { font-size: .7rem; font-weight: 700; letter-spacing: .03em; text-transform: uppercase; display: flex; align-items: center; gap: 6px; padding-top: 3px; white-space: nowrap; }
/* flex:none so the dot is never shrunk to fit the label column — otherwise it renders as a half-circle. */
.czc-dot { flex: 0 0 9px; width: 9px; height: 9px; border-radius: 50%; display: inline-block; }
.czc-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.czc-chip { display: inline-flex; align-items: center; gap: 5px; font-size: .72rem; border-radius: 6px; padding: 3px 9px; white-space: nowrap; }
.czc-chip b { font-variant-numeric: tabular-nums; }
.czc-chip.red { background: #fdecea; border: 1px solid #e9c3bd; color: #8f2c22; }
.czc-chip.green { background: #e8f3ec; border: 1px solid #bcdcc7; color: #1a6b3a; }
.czc-crit { font-size: .54rem; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; border: 1px solid currentColor; border-radius: 3px; padding: 0 3px; opacity: .8; }
.czc-empty { font-size: .76rem; color: #9a9a9a; font-style: italic; }
.czc-foot { font-size: .72rem; color: #a0a0a0; font-style: italic; margin: 10px 0 0; }
/* The Domino zone */
.czd-frame { background: #fff8e6; border: 1px solid #f0e2b8; border-left: 4px solid var(--gold); border-radius: 10px; padding: 13px 15px; }
.czd-k { font-size: .62rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: #9a7b12; margin-bottom: 7px; }
.czd-body { margin: 0; font-size: .75rem; line-height: 1.5; color: #3a3a3a; }
.czd-body b { color: #1a1a1a; }
.cs-chains-grid { display: grid; grid-template-columns: 1fr 1fr; }
@media (max-width: 900px) { .cs-chains-grid { grid-template-columns: 1fr; } }
.cs-chain-col { padding: 16px 18px; min-width: 0; overflow: visible; }
.cs-chain-col + .cs-chain-col { border-left: 1px solid #ececec; }
@media (max-width: 900px) { .cs-chain-col + .cs-chain-col { border-left: none; border-top: 1px solid #ececec; } }
.cs-chain-t { font-family: var(--font-body); font-size: .72rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; margin: 0 0 12px; }
.cs-chain-t.cs-chain-good { color: #1d7a40; }
.cs-chain-t.cs-chain-bad { color: #b3433b; }
.cs-chain-empty { font-size: 12px; color: #9a9a9a; font-style: italic; margin: 4px 0 0; }

/* Standalone strengths / gaps that formed no chain — shown as chips (never forced onto the line). */
/* Chain + standalone boxes share ONE look: solid band-filled blocks with a soft glow (Runtime-Monitor
   style), joined by arrows only where the call shows a real skill-to-skill link. */
.cs-chips { display: flex; flex-wrap: wrap; gap: 10px 9px; margin-top: 14px; }
.cs-flow { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 3px; padding-top: 14px; }
.cs-node-wrap { position: relative; display: inline-flex; }
/* Fixed height so every block is the same size regardless of a 1- or 2-line name. */
.cs-node { position: relative; box-sizing: border-box; width: 132px; min-height: 64px; border-radius: 9px; padding: 8px 10px; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; border: 1px solid; color: #fff; }
.cs-node-nm { font-weight: 700; font-size: 11px; line-height: 1.15; }
.cs-node-sub { font-size: 10px; margin-top: 2px; opacity: .92; font-variant-numeric: tabular-nums; }
.cs-node-low { background: #d64a41; border-color: #c0392f; box-shadow: 0 0 12px rgba(214, 74, 65, .4); }
.cs-node-med { background: #d9971a; border-color: #bd8210; box-shadow: 0 0 12px rgba(217, 151, 26, .38); }
.cs-node-high { background: #2a9d57; border-color: #1f8548; box-shadow: 0 0 12px rgba(42, 157, 87, .38); }
.cs-node-unscored { background: #9a9a9a; border-color: #8a8a8a; }
.cs-node-badge { position: absolute; top: -13px; left: 0; right: 0; text-align: center; font-family: var(--font-body); font-size: 8px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: #7a7a7a; }
.cs-node-tag { position: absolute; top: -9px; right: -6px; font-size: 8.5px; font-weight: 700; color: #7a5a0e; background: #f6ecd2; border: 1px solid var(--gold); border-radius: 8px; padding: 1px 6px; white-space: nowrap; }
.cs-arrow { align-self: center; font-size: 17px; line-height: 1; padding: 0 2px; user-select: none; }
.cs-flow-drag .cs-arrow { color: #c0392f; }
.cs-flow-lift .cs-arrow { color: #1f8548; }

/* Score Analysis + Recommendations (migrated from Seller Skills), side by side under the chains.
   Flat 2-col grid with explicit placement so the two headers share row 1, the RACI key sits on row 2
   (left only), and the two white boxes share row 3 — that keeps the boxes top-aligned whether or not
   the RACI key is shown (an empty row-2 cell collapses to 0, and explicit placement means hiding the
   RACI never reflows the other cells). */
.cs-analysis-row { display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: auto auto 1fr; column-gap: 26px; row-gap: 0; margin-top: 30px; align-items: start; min-width: 0; }
.cs-ah-analysis { grid-column: 1; grid-row: 1; }
.cs-ah-recs { grid-column: 2; grid-row: 1; }
.cs-analysis-row > .cs-ah { min-width: 0; margin-bottom: 10px; }
.cs-analysis-row > .raci-legend { grid-column: 1; grid-row: 2; margin: 0 0 10px; }
.cs-analysis-row > #score-analysis { grid-column: 1; grid-row: 3; min-width: 0; }
.cs-analysis-row > #recommendations { grid-column: 2; grid-row: 3; min-width: 0; }
@media (max-width: 1000px) {
  /* Single column: let every cell flow in DOM order (header → RACI → box → header → box). */
  .cs-analysis-row { grid-template-columns: 1fr; grid-template-rows: none; row-gap: 0; }
  .cs-analysis-row > * { grid-column: 1 !important; grid-row: auto !important; }
  .cs-analysis-row > #score-analysis { margin-bottom: 20px; }
}
.cs-anal-box { background: #fff; border: 1px solid var(--border); border-radius: 12px; padding: 14px 16px; color: #1a1a1a; font-size: var(--fs-body); }
.cs-anal-box .rec-list { margin: 0; padding-left: 18px; }
.cs-anal-box .rec-list li { margin: 0 0 9px; line-height: 1.5; color: #1e1e1e; }

/* Folded per-skill items: name + score + role flag, the model summary, then the connected note. */
.cs-anal-box .analysis-section { margin-bottom: 16px; }
.cs-anal-box .analysis-section:last-child { margin-bottom: 0; }
/* Sub-titles share the chain-column label style (body font, uppercase), coloured green/red to match. */
.cs-anal-box .analysis-title { font-family: var(--font-body); font-size: .72rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; text-decoration: none; color: #1a1a1a; margin-bottom: 10px; }
/* Worked / Areas headers use the default dark tone (not green/red); the caret inherits it via currentColor. */
.cs-anal-box .analysis-title.cs-anal-h-good { color: #1a1a1a; }
.cs-anal-box .analysis-title.cs-anal-h-bad { color: #1a1a1a; }
.cs-anal-box .analysis-empty { color: #6a6a6a; font-style: italic; margin: 0; }

/* Collapsible section headers (What worked well / Areas / Who was scored / Recommendations). Default
   collapsed; clicking the header toggles the body and rotates the caret. State persists per device. */
.js-collapse-head { display: flex; align-items: center; cursor: pointer; user-select: none; }
.js-collapse-head::before { content: ''; flex: none; width: 0; height: 0; margin-right: 8px; border-left: 5px solid currentColor; border-top: 4px solid transparent; border-bottom: 4px solid transparent; transition: transform .15s ease; }
.js-collapse-head:not(.is-collapsed-head)::before { transform: rotate(90deg); }
.js-collapse-head:focus-visible { outline: 2px solid var(--gold); outline-offset: 3px; border-radius: 4px; }
@media (prefers-reduced-motion: reduce) { .js-collapse-head::before { transition: none; } }
.is-collapsed-body { display: none !important; }
/* Headers that already have their own flex `gap` (the coaching blocks) shouldn't double it on the caret.
   The coaching block title is muted grey, but the caret should read black like every other collapsible. */
.coach-block-head.js-collapse-head::before { margin-right: 0; border-left-color: #1a1a1a; }
.cs-anal-item { padding: 9px 0; border-bottom: 1px solid rgba(0, 0, 0, .07); }
.cs-anal-item:last-child { border-bottom: none; }
.cs-anal-row { display: flex; align-items: baseline; gap: 8px; }
/* Body text in the Score Analysis box: the skill name (bold), score, summary, and connected note all
   sit at the LOCKED default body size (--fs-body, 13.5px) with a single line-height, so the box has one
   consistent body size instead of the old 13 / 11.5 / 12.5 / 12 px mix. The status pill (.cs-anal-flag)
   is a tag, not body copy, so it keeps its small pill size. */
.cs-anal-nm { font-weight: 700; font-size: var(--fs-body); color: #1e1e1e; }
.cs-anal-sc { font-family: var(--font-body); font-size: var(--fs-body); color: #5a5a5a; font-variant-numeric: tabular-nums; }
.cs-anal-flag { margin-left: auto; font-family: var(--font-body); letter-spacing: .05em; font-size: 9.5px; font-weight: 700; padding: 1px 7px; border-radius: 5px; text-transform: uppercase; white-space: nowrap; }
.cs-anal-flag.meets { color: #1d7a40; background: #e7f2ea; }
.cs-anal-flag.gap { color: #b3433b; background: #f8e7e4; }
.cs-anal-why { font-size: var(--fs-body); color: #1e1e1e; line-height: 1.5; margin-top: 4px; }
.cs-anal-link { font-size: var(--fs-body); color: #6a5a1a; line-height: 1.5; margin-top: 5px; padding-left: 9px; border-left: 2px solid var(--gold); }
.cs-anal-link.cs-anal-standalone { color: #8a8a8a; border-left-color: #dcdcdc; font-style: italic; }
/* Hover/click detail tooltip (Phase 2). */
.cs-tip { position: absolute; z-index: 10; max-width: 320px; background: #1f1f1f; color: #f1f1f1; padding: 8px 11px; border-radius: 8px; font-size: 12px; line-height: 1.45; box-shadow: 0 6px 18px rgba(0, 0, 0, .28); pointer-events: none; }
/* SVG label typography (fills are set inline per element so they read on the light panel). */

/* Recent-trend overlay (skill profile vs expected minimum). Lean + frameless: no card, thin strokes;
   the SVG scales to the panel width but is capped so it doesn't sprawl on ultrawide. */
.trend-panel { position: relative; max-width: 100%; }
/* Small-multiple sparklines in the dark trend band: 11 mini per-skill time series in a responsive grid. */
.spark-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 18px 22px; }
.spark-cell { min-width: 0; }
.spark-name { font-size: .72rem; letter-spacing: .01em; color: #5a5a5a; margin: 0 0 3px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.spark-svg { width: 100%; height: auto; display: block; }
.spark-legend { display: flex; gap: 18px; flex-wrap: wrap; font-size: .72rem; color: #6a6a6a; margin-top: 18px; }
.spark-legend span { display: inline-flex; align-items: center; gap: 7px; }
.spark-legend .sw { width: 15px; height: 3px; border-radius: 2px; display: inline-block; }
.spark-legend .sw.dot { width: 8px; height: 8px; border-radius: 999px; }
.spark-legend .sw.dash { height: 2px; border-radius: 0; }
.spark-legend .sw.na { background: repeating-linear-gradient(45deg, #b5b5b5 0 2px, transparent 2px 4px); }
/* Trend header: title on the left, Per Skill / Heatmap segmented toggle on the right. */
.trend-head { display: flex; align-items: center; gap: 48px; margin-bottom: 14px; flex-wrap: wrap; }
.trend-head .col-h { margin: 0; }
.trend-toggle-wrap { position: relative; flex: 0 0 auto; }
.trend-toggle { display: inline-flex; border: 1px solid #d5d2c9; border-radius: 7px; overflow: hidden; }
.tt-btn { font-family: var(--font-body); font-size: .7rem; line-height: 1; letter-spacing: .01em; padding: 5px 11px; background: transparent; border: none; color: #6a6a6a; cursor: pointer; transition: background .12s, color .12s; }
.tt-btn + .tt-btn { border-left: 1px solid #d5d2c9; }
.tt-btn:hover { color: #1f1f1f; }
.tt-btn.is-on { background: #1f1f1f; color: #f5f5f5; }
/* Heatmap locked until enough calls: muted, and hovering/clicking reveals the note below the toggle. */
.tt-btn.is-locked { color: #bdb8ab; cursor: default; }
.tt-btn.is-locked:hover { color: #bdb8ab; }
.tt-btn.is-locked.is-on { background: transparent; color: #bdb8ab; }
.tt-tip { position: absolute; top: calc(100% + 6px); left: 0; z-index: 40; white-space: nowrap; background: #1f1f1f; color: #f1f1f1; border-radius: 7px; padding: 6px 10px; font-family: var(--font-body); font-size: .68rem; line-height: 1; box-shadow: 0 6px 18px rgba(0,0,0,.25); opacity: 0; visibility: hidden; transform: translateY(3px); transition: opacity .12s, transform .12s; pointer-events: none; }
.tt-tip.is-visible { opacity: 1; visibility: visible; transform: translateY(0); }
/* Heatmap: skills (rows) × recent calls (cols); cell colour = score vs the skill's expected minimum. */
/* Results row = three columns: Final Score + info labels | Performance Breakdown (+ gap) | Recent trend
   sparklines (grows to fill). Wraps on narrow screens. */
.results-trend-wrap { display: flex; align-items: flex-start; gap: 40px; flex-wrap: wrap; }
.results-trend-wrap > .trend-section { flex: 1 1 380px; min-width: 300px; max-width: 720px; }
/* Score-reaction panel (3rd column, where the Recent Trend used to sit). */
.results-trend-wrap > .col-react { flex: 1 1 340px; min-width: 300px; max-width: 560px; }

/* Coaching-tip banner — after a score with one or more below-target skills, a card slides in from the
   left, anchored just BELOW the Evidence Coverage line in the Final Score column (see coachingSignal.ts).
   It is TWO separate elements, only one visible at a time, so they never look glued together:
     • .cs-card — the message card (open state), a clean rounded card with two small icon controls inside
       its top-right corner; no protruding tab.
     • .cs-nub  — a small standalone handle (collapsed state) at the same spot below coverage.
   The container is a 0-size anchor point; each child slides on its own translateX. */
/* margin-top was 12px; +50 (2026-08-23, requested) drops the sliding banner clear of the score meta. */
.coach-signal { position: absolute; left: 0; top: 100%; margin-top: 62px; z-index: 7; }

/* Message card (open). Slides in from the left; hidden (off-screen) otherwise. */
.cs-card { position: absolute; left: 0; top: 0; width: 300px; background: linear-gradient(140deg, #ffd657 0%, #f6bd11 100%); color: #241c00; border-radius: 14px; padding: 15px 17px 16px; box-shadow: 0 18px 40px rgba(0, 0, 0, .26); transform: translateX(-140%); visibility: hidden; pointer-events: none; transition: transform .75s cubic-bezier(.22, .61, .36, 1), visibility 0s linear .75s; }
.coach-signal.is-open:not(.is-collapsed) .cs-card { transform: translateX(0); visibility: visible; pointer-events: auto; transition: transform .75s cubic-bezier(.22, .61, .36, 1); }
.cs-controls { position: absolute; top: 8px; right: 8px; display: flex; gap: 2px; }
.cs-ctl { width: 22px; height: 22px; display: grid; place-items: center; font-size: 1.05rem; line-height: 1; color: rgba(0, 0, 0, .5); background: transparent; border: none; border-radius: 6px; cursor: pointer; transition: color .14s, background .14s; }
.cs-ctl svg { width: 15px; height: 15px; }
.cs-ctl:hover { color: #1c1500; background: rgba(0, 0, 0, .1); }
.cs-title { font-family: var(--font-display); font-size: .98rem; font-weight: 400; line-height: 1.2; margin: 0 0 7px; color: #1c1500; padding-right: 44px; }
.cs-msg { font-size: .74rem; line-height: 1.5; margin: 0 0 12px; color: #2b2200; }
.cs-cta { font: inherit; font-size: .72rem; font-weight: 700; color: #1c1500; background: rgba(0, 0, 0, .09); border: 1px solid rgba(0, 0, 0, .2); border-radius: 8px; padding: 7px 11px; cursor: pointer; transition: background .14s, border-color .14s; }
.cs-cta:hover { background: rgba(0, 0, 0, .15); border-color: rgba(0, 0, 0, .32); }

/* Collapsed handle — a bold gold tab with a white arrow that emerges from BEHIND the dark side menu.
   Its left edge is tucked ~12px under the rail (negative left past the gutter); the sidenav (z:20) paints
   over that sliver since the banner lives in the lower-z app-region, giving the "peeking out" look. The
   drop shadow adds depth. padding-left offsets the arrow so it centres in the visible part. */
.cs-nub { position: absolute; left: calc(-1 * var(--gutter) - 12px); top: 6px; width: 70px; height: 88px; padding-left: 12px; display: grid; place-items: center; background: linear-gradient(135deg, #ffd35a, #f0b70e); border: none; border-radius: 16px; box-shadow: 5px 6px 18px rgba(0, 0, 0, .32); cursor: pointer; transform: translateX(-175%); visibility: hidden; transition: transform .45s ease, visibility 0s linear .45s; }
.coach-signal.is-open.is-collapsed .cs-nub { transform: translateX(0); visibility: visible; transition: transform .45s ease; }
.cs-nub:hover { background: linear-gradient(135deg, #ffdb6e, #dfa60a); }
.cs-nub svg { width: 30px; height: 30px; fill: #fff; }

@media (prefers-reduced-motion: reduce) { .cs-card, .cs-nub { transition: none; } }
@media (max-width: 720px) { .coach-signal { display: none; } }

/* The CRO Lens paid-plan gate — an upgrade message shown OVER a CRO page when a free-trial owner opens it
   (built in main.ts). Covers the app-region content only, so the top bar and side menu stay usable. */
.app-region > .cro-gate { position: absolute; inset: 0; z-index: 22; display: grid; place-items: center; padding: 40px var(--gutter); background: rgba(241, 242, 243, .82); -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px); }
.cro-gate[hidden] { display: none; }
.cro-gate-card { max-width: 470px; text-align: center; background: #fff; border: 1px solid rgba(0, 0, 0, .1); border-radius: 16px; padding: 30px 34px; box-shadow: 0 20px 50px rgba(0, 0, 0, .16); }
.cro-gate-badge { display: inline-block; font-family: var(--font-display); font-size: .64rem; letter-spacing: 1.6px; text-transform: uppercase; color: #9a6a00; background: rgba(255, 190, 23, .14); border: 1px solid rgba(255, 190, 23, .42); border-radius: 999px; padding: 4px 12px; margin-bottom: 14px; }
.cro-gate-h { font-family: var(--font-display); font-size: 1.5rem; font-weight: 400; color: #1a1a1a; margin: 0 0 10px; }
.cro-gate-p { font-size: var(--fs-body); line-height: 1.6; color: #4a4a4a; margin: 0 0 20px; }
.cro-gate-cta { font: inherit; font-size: .82rem; font-weight: 700; color: #1c1500; background: var(--gold); border: none; border-radius: 10px; padding: 11px 22px; cursor: pointer; transition: filter .14s; }
.cro-gate-cta:hover { filter: brightness(1.05); }
.react-intro { font-size: var(--fs-body); line-height: 1.5; color: #3a3a3a; margin: 8px 0 12px; }
.react-options { display: flex; flex-direction: column; gap: 8px; }
/* The 4 score-reaction options AND the 3 dive-deeper nav buttons all use the group-button design
   (cream gradient, gold-tinted border, bold). Restore keeps its own look (see below). */
.react-opt, .react-nav { font-family: var(--font-body); font-size: .72rem; font-weight: 700; letter-spacing: .02em; line-height: 1.25; color: #1a1a1a; background: linear-gradient(180deg, #fff, #f6f3ec); border: 1px solid #cbb06a; border-radius: 8px; cursor: pointer; transition: border-color .15s, background .15s, color .15s, box-shadow .15s; }
/* Hover: the button lights up gold with a soft gold glow, black text for the strongest contrast. */
.react-opt:hover, .react-nav:hover { border-color: #e0a90e; background: linear-gradient(180deg, #ffd45a, #ffbe17 60%, #f2ad0e); color: #1e1e1e; box-shadow: 0 0 12px 1px rgba(255, 190, 23, .55); }
.react-opt:focus-visible, .react-nav:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }
.react-opt { display: block; width: 100%; text-align: left; padding: 9px 13px; }
.react-nav { flex: 1 1 0; min-width: 0; text-align: center; padding: 9px 6px; }
/* Dive-deeper row: a label + three buttons that jump to the other group-lens pages. */
.react-deeper { margin-top: 16px; padding-top: 14px; border-top: 1px solid #d5d2c9; }
.react-deeper-h { font-family: var(--font-display); font-size: .95rem; font-weight: 400; letter-spacing: .02em; color: #1a1a1a; margin: 0 0 10px; }
.react-deeper-row { display: flex; gap: 8px; }
/* Reusable gold button — the same design as the score-reaction options (cream gradient, gold-tinted
   border, bold, gold-glow hover). Applied to Billing "Contact us", Scorecards Save, Compare Clear. */
.gold-btn { font-family: var(--font-body); font-size: .72rem; font-weight: 700; letter-spacing: .02em; line-height: 1.25; text-transform: none; color: #1a1a1a; background: linear-gradient(180deg, #fff, #f6f3ec); border: 1px solid #cbb06a; border-radius: 8px; padding: 9px 16px; cursor: pointer; transition: border-color .15s, background .15s, color .15s, box-shadow .15s; }
.gold-btn:hover:not(:disabled) { border-color: #e0a90e; background: linear-gradient(180deg, #ffd45a, #ffbe17 60%, #f2ad0e); color: #1e1e1e; box-shadow: 0 0 12px 1px rgba(255, 190, 23, .55); }
.gold-btn:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }
.gold-btn:disabled { opacity: .5; cursor: default; }
/* Recent Trends (relocated into the Coaching block): a collapsible title + the per-skill/heatmap toggle. */
/* Recent Trends sits in its own <section>, a sibling of #coaching-summary and #coaching-next. Its
   spacing is driven entirely by .coach-recent-head below so the five coaching headings keep one even
   rhythm across all three containers — see the pitch note on .coach-block. */
.coach-recent { margin-top: 0; }
/* Recent Trends' divider lived on this flex wrapper, not on the title (which already had
   `border: none`), which is why removing it needed a separate edit from the .coach-subhead one. */
/* 17px (not 20) because this row is taller than the other headings — the Per Skill / Heatmap toggle
   makes it 25px against a 19px text line, and the title is centred in it. 17 + that offset lands the
   title on the same 39px pitch as the rest. The bottom margin is 0; #trend-panel carries its own
   top margin, so the expanded spacing is unchanged. */
/* flex-start, NOT space-between: the Per Skill / Heatmap toggle belongs beside the "Recent Trends"
   label (the `gap` sets the 16px between them), not pushed out to the far right of the row where it
   read as unrelated to the section it controls. */
.coach-recent-head { display: flex; align-items: center; justify-content: flex-start; gap: 16px; flex-wrap: wrap; margin: 17px 0 0; }
#trend-panel { margin-top: 12px; } /* only applies when expanded — collapsed it is display:none */
/* Two classes, so it beats the plain .coach-subhead margins defined later in this file. With a single
   class it lost on source order and the title's own 20/10 margins inflated this row to 49px. */
.coach-subhead.coach-recent-title { margin: 0; padding: 0; border: none; }
/* No bottom margin on the header here — the flex .trend-head owns the spacing, and a margin on the h3
   throws off vertical centring of the Per Skill / Heatmap toggle beside it. */
.trend-section .col-h { margin-bottom: 0; }
.trend-svg { display: block; width: 100%; max-width: 100%; height: auto; font-family: var(--font-body); }
.trend-svg .trend-axis { font-size: calc(11px / var(--trend-scale, 1)); fill: #8a8a8a; }
/* First-word skill labels, one consistent colour (no per-skill greying). */
/* All SVG text renders at its intended px on screen: the SVG scales up to fill the stack, so main.ts
   publishes --trend-scale (renderedWidth / VW) and each font-size is divided by it to cancel the zoom. */
.trend-svg .trend-xlabel { font-size: calc(13.5px / var(--trend-scale, 1)); fill: #5a5a5a; }
.trend-svg .trend-legend-t { font-size: calc(13.5px / var(--trend-scale, 1)); fill: #4a4a4a; }
/* Current-call legend entry: bold + dark. */
.trend-svg .trend-leg-b .trend-legend-t { fill: #1a1a1a; font-weight: 700; }
/* A toggled-off call: dim + struck through in the legend (line itself is hidden). */
.trend-svg .trend-leg.is-off { opacity: .4; }
.trend-svg .trend-leg.is-off .trend-legend-t { text-decoration: line-through; }
/* "Click a line to toggle" hint under the header. */
.trend-hint { font-size: 12.5px; color: #6a6a6a; font-style: italic; margin: -2px 0 8px; }
/* Trend "off" disclaimer (shown until the Settings opt-in is enabled). */
.trend-disclaimer { font-size: .8rem; color: #5a5a5a; margin: 4px 0; font-style: italic; }
.trend-settings-link { color: #9a6a00; font-weight: 700; text-decoration: none; font-style: normal; }
.trend-settings-link:hover { text-decoration: underline; }

/* Settings page — frameless (no card background/border), just the control on the page. */
.settings-card { max-width: 640px; }
/* Each setting reads like a Getting-Started section: a gold-bar display header, then the control. */
.settings-item { margin-bottom: 40px; }
.settings-item:last-child { margin-bottom: 0; }
/* Show-Banner preference is an internal/admin-only control: hidden for every user, revealed ONLY once
   main.ts confirms a platform admin (ADMIN_EMAILS = avner) and adds .is-admin on <html>. Fail-safe —
   stays hidden until admin is proven, so a customer never sees it. This only removes the toggle from
   customer Preferences; it does not change banner behaviour (the device pref + global gate are untouched). */
html:not(.is-admin) #banner-pref-item { display: none; }
/* Feature headers under Preferences: compact bold body text (13.5px), de-emphasised below the
   "Preferences" section heading; keeps the gold accent line. */
.settings-item-h { font-family: var(--font-body); font-size: 0.75rem; font-weight: 700; letter-spacing: normal; color: #1e1e1e; border-left: 4px solid var(--gold); padding-left: 11px; margin: 0 0 12px; }
.settings-row { display: flex; align-items: flex-start; gap: 12px; cursor: pointer; margin: 0; }
.settings-row input[type="checkbox"] { margin-top: 2px; width: 16px; height: 16px; flex: none; accent-color: var(--gold); cursor: pointer; }
.settings-row-hint { font-size: var(--fs-body); color: #5a5a5a; line-height: 1.55; }
.settings-row-hint strong { color: #3a3a3a; }
.recipients-list { display: grid; gap: 6px; margin: 12px 0 0 28px; max-width: 320px; }
.recipient-input { font: inherit; font-size: var(--fs-body); padding: 7px 10px; border: 1px solid #d8d6d0; border-radius: 7px; color: #1e1e1e; }
.recipient-input:focus { outline: none; border-color: var(--gold); }
.recipient-input.invalid { border-color: #c0392b; background: #fdf3f2; }
.recipient-input[readonly] { background: #fff; cursor: text; }
.recipients-msg { display: inline-block; margin: 8px 0 0 28px; font-size: var(--fs-body); min-height: 1.1em; }
.recipients-msg.ok { color: #1f8a4c; }
.recipients-msg.err { color: #c0392b; }
.trust-links { display: flex; flex-direction: column; gap: 6px; max-width: 440px; }
.trust-link { display: flex; align-items: center; gap: 11px; padding: 10px 14px; border: 1px solid var(--border); border-radius: 9px; background: var(--panel); color: var(--text); text-decoration: none; font-size: .75rem; font-weight: 500; transition: border-color .12s, color .12s, background .12s; }
.trust-link:hover { border-color: var(--gold); color: var(--gold); }
.trust-ico { flex: none; width: 17px; height: 17px; color: #9a6a00; }

/* Anonymize Transcript page — self-serve privacy prompt. */
.anon-note { max-width: 980px; margin: 0 0 18px; padding: 15px 18px; border: 1px solid var(--border); border-left: 3px solid var(--gold); border-radius: 10px; background: var(--panel); font-size: var(--fs-body); line-height: 1.6; color: var(--text); }
.anon-note p { margin: 0 0 9px; }
.anon-note p:last-child { margin: 0; }
.anon-note strong { color: var(--heading); font-weight: 700; }
.anon-note a { color: var(--gold); text-decoration: none; }
.anon-note a:hover { text-decoration: underline; }
.anon-cols { display: grid; grid-template-columns: 1fr; gap: 18px; max-width: 980px; margin: 0 0 22px; }
/* Plain, unframed sections on the canvas — force transparent/no-frame so even a stale `card` class
   (e.g. a cached older page) can never render them as a dark card. */
.app-region .anon-block { background: transparent; border: none; box-shadow: none; }
.anon-block { padding: 0; }
.anon-h { font-family: var(--font-display); font-size: 1rem; font-weight: 400; letter-spacing: .04em; color: var(--heading); margin: 0 0 12px; }
.anon-list { margin: 0; padding-left: 18px; font-size: .75rem; line-height: 1.6; color: var(--text); }
.anon-list li { margin-bottom: 9px; }
.anon-list li:last-child { margin-bottom: 0; }
.anon-list strong { color: var(--heading); font-weight: 700; }
.anon-list code { font-family: ui-monospace, 'Cascadia Code', 'Courier New', monospace; font-size: .92em; color: var(--gold); }
.anon-prompt-wrap { max-width: 980px; }
.anon-prompt-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 0 0 10px; }
.anon-prompt-head .anon-h { margin: 0; }
.anon-copy.copied { border-color: var(--gold); color: var(--gold); }
.anon-prompt {
  width: 100%; box-sizing: border-box; min-height: 380px; resize: vertical;
  padding: 16px 18px; border: 1px solid var(--border); border-radius: 12px;
  background: var(--panel); color: var(--text);
  font-family: ui-monospace, 'Cascadia Code', 'Courier New', monospace; font-size: .75rem; line-height: 1.55;
  white-space: pre; overflow: auto;
}
.anon-prompt:focus { outline: none; border-color: var(--gold); }
@media (max-width: 1040px) { .anon-cols { grid-template-columns: 1fr; } }

/* Below the app breakpoint the rail becomes a horizontal top strip (scrolls if needed). */
@media (max-width: 1040px) {
  .app-body { flex-direction: column; align-items: stretch; }
  .sidenav { position: static; width: 100%; height: auto; flex: none; flex-direction: row; align-items: center; border-right: none; border-bottom: 1px solid var(--border); overflow-x: auto; }
  .sidenav-top { height: auto; border-bottom: none; border-right: 1px solid var(--border); padding: 8px 10px; }
  .sidenav-nav { flex-direction: row; flex-wrap: nowrap; padding: 8px; gap: 4px; overflow-y: visible; }
  .nav-item { white-space: nowrap; padding: 9px 11px; }
  .sidenav-foot { border-top: none; border-left: 1px solid var(--border); padding: 8px; flex: none; }
  .app-region { min-height: 0; }
}

/* Header band */
/* Background lives on the centered container, not the full-width band, so the dark header/toolbar
   frame is limited to the page design width (page bg shows on the sides). */
.band-header { background: transparent; }
/* Flex row: brand + tagline sit together on the left (a healthy gap between them so the gold Score
   mark and the quiet tagline don't cannibalize each other), and the nav is pushed to the far right
   with margin-left:auto. */
.header-inner { display: flex; align-items: center; gap: 28px; min-height: 68px; padding-top: 16px; background: var(--bg); }
.brand { display: flex; align-items: center; gap: 14px; }
.logo { height: 32px; width: auto; }
.header-nav { display: flex; gap: 12px; margin-left: auto; }

/* Hero tagline, left-aligned next to the brand. Deliberately NOT gold — the Score mark already owns
   the page's one accent (BRAND-BOOK.md: "gold does the work, everything else stays quiet"), so this
   stays a quiet, confident supporting line rather than competing with it. Hidden below 1420px, where
   it starts crowding the nav buttons into two-line wraps — well above the app's 1040px mobile
   breakpoint, so there's no dead zone where it clips or overlaps. */
.hero-title {
  font-family: var(--font-display);
  font-size: 1.3rem;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--heading);
  opacity: 0.82;
  white-space: nowrap;
}
@media (max-width: 1420px) {
  .hero-title { display: none; }
}

/* ---------- Score wordmark: stepped dark bevel + gold vertical gradient + soft gloss, in Bebas
   Neue. Reused as-is across the app header, PDF cover, Getting Started, and FAQ — only font-size
   and the .score-turbo skew ever change per placement. Layers stack on one grid cell so depth/face/
   gloss stay pixel-aligned at any size; shadow offsets are in em so the bevel scales with the mark
   instead of needing a hand-tuned override per context. */
.score-mark { display: inline-grid; font-family: 'Bebas Neue', var(--font-display), sans-serif; text-transform: uppercase; line-height: 1; }
.score-mark > * { grid-area: 1 / 1; }
.score-mark .depth {
  color: #8a5a12;
  text-shadow:
    .01em .01em 0 #7c4f0f, .02em .02em 0 #6e440d, .03em .03em 0 #603a0b,
    .04em .04em 0 #522f09, .05em .05em 0 #442507, .06em .06em 0 #361b05,
    .07em .07em 0 #281303, .08em .08em 0 #1a0b01,
    .09em .1em .03em rgba(0, 0, 0, .55), .12em .16em .2em rgba(0, 0, 0, .5);
}
.score-mark .face {
  color: transparent;
  background: linear-gradient(180deg, #fff8e0 0%, #ffe08a 14%, #ffc93c 32%, #f6a71f 55%, #d98411 76%, #b96a0a 100%);
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-stroke: .015em #2b1600;
  paint-order: stroke fill;
}
.score-mark .gloss {
  color: transparent;
  background: linear-gradient(180deg, rgba(255,255,255,.95) 0%, rgba(255,255,255,.5) 32%, rgba(255,255,255,0) 58%);
  -webkit-background-clip: text; background-clip: text;
  mix-blend-mode: screen;
}
.score-mark.score-turbo { transform: skewX(-9deg); letter-spacing: -0.01em; }
.brand-score { font-size: 2.2rem; }

/* "By Project Moneyball" endorsement: plain text only, no icon — "By" and "Project Moneyball" at
   the same size/weight/tone (var(--muted) grey), so it reads as one quiet secondary label next to
   the gold Score mark rather than competing with it. .78rem * 1.2. */
.brand-by { display: inline-flex; align-items: center; gap: 8px; }
.brand-by-label,
.brand-by-text { font-family: var(--font-display); font-size: .936rem; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.brand-by-text { white-space: nowrap; }

/* Toolbar band */
.band-toolbar { background: transparent; }
/* Top-align so the Import button sits on the same line as Run/Stop/…; the Anonymize row hangs
   directly beneath Import (in .import-stack) without shoving the Import button upward. */
.toolbar-inner { display: flex; gap: 12px; min-height: 64px; align-items: flex-start; padding-top: 12px; background: transparent; border: none; border-radius: 0; }
/* Brand block pushed to the right edge of the toolbar (logo lives in the header). */
.toolbar-brand { margin-left: auto; display: flex; align-items: center; gap: 14px; }
.toolbar-contact { font-size: .82rem; color: var(--muted); white-space: nowrap; }
.toolbar-email { font-size: .82rem; color: var(--gold); text-decoration: none; white-space: nowrap; }
.toolbar-email:hover { color: var(--text); text-decoration: underline; }

/* Buttons — renewal-lab style: dark fill (same grey as the notification/cards), gold text. */
.btn { font-family: var(--font-body); font-weight: 300; font-size: 0.75rem; border: 1px solid #3a3a3a; border-radius: 6px; padding: 6px 13px; cursor: pointer; background: var(--panel); color: var(--gold); text-decoration: none; display: inline-flex; align-items: center; transition: background .15s, border-color .15s, color .15s; }
.btn:hover:not(:disabled) { background: var(--panel-2); border-color: var(--gold); }
.btn:disabled { color: rgba(255, 190, 23, 0.34); border-color: #2c2c2c; cursor: not-allowed; }
/* Soft flicker on Run while the app waits for the user to score a freshly-imported call. */
.btn.run-awaiting { border-color: var(--gold); color: var(--gold); animation: run-flicker 1.6s ease-in-out infinite; }
@keyframes run-flicker {
  0%, 100% { box-shadow: 0 0 0 rgba(255, 190, 23, 0); opacity: 1; }
  50% { box-shadow: 0 0 22px rgba(255, 190, 23, 0.95); opacity: 0.5; }
}
@media (prefers-reduced-motion: reduce) { .btn.run-awaiting { animation: none; box-shadow: 0 0 10px rgba(255, 190, 23, 0.45); } }

.app-main { padding: 28px var(--gutter) 72px; }
/* AI-use disclosure — the Message Center box's initial content (not a separate banner), styled to
   match its terminal look (the disclosure text reuses .notif-welcome's gold styling). Ticking the
   checkbox behaves like any other new message arriving: this block demotes to the same plain grey an
   older log line falls back to (.is-old, mirroring .note's non-latest colour) rather than disappearing,
   and the normal welcome message is appended below it (see ui/aiConsent.ts + main.ts). */
.ai-ack-label { display: flex; align-items: center; gap: 7px; margin-top: 4px; font-family: var(--font-body); font-size: .82rem; font-weight: 300; color: var(--heading); cursor: pointer; }
.ai-ack-label input { accent-color: var(--gold); width: 15px; height: 15px; cursor: pointer; margin: 0; }
.ai-disclosure-msg.is-old,
.ai-disclosure-msg.is-old .notif-welcome,
.ai-disclosure-msg.is-old .notif-welcome strong,
.ai-disclosure-msg.is-old .ai-ack-label { color: #b9b9b9; }
.ai-disclosure-msg.is-old .notif-welcome a,
.ai-disclosure-msg.is-old .notif-welcome a:visited { color: #b9b9b9; font-weight: 300; text-decoration: none; }
.ai-disclosure-msg.is-old .ai-ack-label input:disabled { opacity: .6; cursor: default; }
.divider { border: none; border-top: 1px solid rgba(255, 190, 23, .6); margin: 14px 0; }
/* Stronger, fully-gold rule — used directly under Call Details. */
.divider-strong { border-top-color: var(--gold); }
/* All section/column labels are identical in size + style (matches the perf-table headers). */
/* All section/column headers are one uniform size (matches "Runtime Monitor"). */
.section-h, .col-h, .pt-h { font-family: var(--font-display); font-size: 1rem; font-weight: 400; letter-spacing: .5px; color: var(--heading); }
.section-h, .col-h { margin: 0 0 14px; }

/* Cards */
.card { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; }

/* Row 1: Message Center + Runtime Monitor — equal height (box matches the monitor's skill grid). */
.row-top { display: grid; grid-template-columns: 42% 1fr; gap: 28px; align-items: stretch; }
.notif-col, .monitor-col { display: flex; flex-direction: column; }
/* The message box is absolutely positioned inside a flex frame, so its (growing) message list never
   inflates the column. The frame stretches to the Runtime Monitor's height; the box fills it and
   SCROLLS — keeping the box's bottom aligned with where the skill grid ends, at any message count. */
/* Message Center is now a full-width band; the frame holds a fixed height and the box scrolls inside. */
.notif-frame { position: relative; height: 150px; }
.notif-box { position: absolute; inset: 0; padding: 16px 18px; overflow-y: auto; font-size: .75rem; }
.notif-box.drop-active { border-color: var(--gold); box-shadow: 0 0 0 2px var(--gold) inset; }
/* DOS / terminal feel: monospace box, each message prefixed with a gold ">" prompt. */
.notif-box { font-family: ui-monospace, 'Cascadia Code', 'Courier New', monospace; }
/* Message Center band = two implicit (border-less) columns: Message Center left, Call Details right.
   Balance is resolution-driven (fr-based, so each side fills its share): 50/50 up to a 1920 viewport,
   60/40 above it — an ultrawide screen gives the Message Center more room. Below 820 the two-up band
   cramps, so it stacks. */
/* Control band: Message Center on the LEFT at its compact width, action buttons as a rail to its right. */
.sk-top { display: flex; align-items: flex-start; gap: 44px; padding-top: 4px; }
.sk-msg { flex: 0 0 660px; min-width: 0; }
.sk-msg .section-h { margin-bottom: 12px; }
/* Buttons in TWO ROWS (column-flow grid): Import over Anonymize in column 1, Run over Stop in
   column 2, Download over Clear in column 3 — so Anonymize sits exactly beneath Import Transcript. */
/* margin-top drops the group so its first row aligns with the Message Center BOX (below the heading),
   not the heading — so the button group and the MC outline start at the same height. */
.sk-tools { display: grid; grid-auto-flow: column; grid-template-rows: auto auto; gap: 18px 34px; align-items: start; justify-items: start; flex: none; margin-top: 39px; }
.sk-tools .anon-row { margin: 0; }
/* One consistent look for every action control: same body font, size, weight, and ink colour; the
   "ready to run" gold flicker is dropped here so the buttons read as a uniform set. */
.sk-tools .btn { padding: 0; font-size: .82rem; font-weight: 400; color: #1e1e1e; }
.sk-tools .btn:disabled { color: rgba(0, 0, 0, .3); }
/* "Ready to Run" cue on the frameless Run button: a SLOW but high-contrast flicker — the label
   dwells dark, snaps to bright gold with a glow, holds, then snaps back. */
.sk-tools .btn.run-awaiting { border-color: transparent; box-shadow: none; font-weight: 700; animation: run-awaiting-text 2.4s steps(1, end) infinite; }
@keyframes run-awaiting-text {
  0%, 49% { color: #1e1e1e; text-shadow: none; }
  50%, 100% { color: var(--gold); text-shadow: 0 0 14px rgba(255, 190, 23, 0.95), 0 0 4px rgba(255, 190, 23, 0.9); }
}
@media (prefers-reduced-motion: reduce) { .sk-tools .btn.run-awaiting { animation: none; color: var(--gold); } }
@media (max-width: 900px) { .sk-top { flex-direction: column; gap: 18px; } .sk-msg { flex-basis: auto; width: 100%; } }
.cd-fields { display: none; }
/* Ultrawide (viewport > 1920): widen the Message Center to 60%, Call Details 40%. */
@media (min-width: 1921px) { .mc-grid { grid-template-columns: 3fr 2fr; } }
/* Narrow (viewport < 820): stack Message Center over Call Details. */
@media (max-width: 820px) { .mc-grid { grid-template-columns: 1fr; gap: 24px; } }
/* Light by default (never bold) — the sole exception is the "How we use AI" link, kept bold + gold
   (not the browser's default purple/visited link colour) so it stands out as the one action here. */
.notif-welcome { color: var(--gold); margin: 0 0 10px; font-weight: 300; }
.notif-welcome strong { font-weight: 300; }
.notif-welcome a, .notif-welcome a:visited { color: var(--gold); font-weight: 700; text-decoration: none; }
.notif-welcome a:hover { text-decoration: underline; }
/* Recency colour: the newest message is gold; older messages fade to light grey (the prompt follows
   the line colour via currentColor). Each new message demotes the previous one in JS. */
.note { position: relative; padding: 0 0 0 16px; margin-bottom: 2px; font-size: .75rem; white-space: pre-wrap; color: #b9b9b9; }
.note-latest { color: var(--gold); }
/* DOS prompt marks the start of each message; the line carries no box, border, or background. */
.note::before { content: '>'; position: absolute; left: 0; top: 0; color: inherit; font-weight: 700; }
/* Severity now rides on the text colour instead of a left border (declared after .note-latest so an
   error/warning stays coloured even when it's the newest line). */
.note-warn { color: var(--gold); }
.note-alert { color: #e0584f; font-weight: 600; }
.note-error { color: var(--red); }

/* Runtime Monitor — the skills laid out as a grid of up to 6 per row (so 11–12 skills read as two
   rows of six), equal-width cells. */
.control-board { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 8px; }
/* Runtime Monitor + Lifecycle boxes share one look: same size/weight/colour; light grey when inactive. */
.cb-box, .lc-box { flex: 1 1 0; min-width: 0; border: 1px solid var(--border); border-radius: 9px; background: var(--panel); padding: 10px 6px; min-height: 58px; display: flex; align-items: center; justify-content: center; text-align: center; font-size: .75rem; font-weight: 400; line-height: 1.2; color: #b9b9b9; overflow-wrap: anywhere; hyphens: auto; }
.cb-done { background: #1d1d1d; color: var(--muted); }
.cb-running { border-color: var(--gold); background: var(--gold); color: var(--ink); box-shadow: 0 0 16px rgba(255,190,23,.6); animation: cb-pulse 1.1s ease-in-out infinite; }
@keyframes cb-pulse { 0%,100% { box-shadow: 0 0 8px rgba(255,190,23,.45); } 50% { box-shadow: 0 0 20px rgba(255,190,23,.85); } }
.cb-error { border-color: var(--red); background: rgba(224,88,79,.18); color: var(--red); }
/* Terminal "couldn't score after auto-retries" — muted/dashed, deliberately NOT red (no manual Run prompt). */
.cb-unavailable { border-style: dashed; border-color: var(--border); background: #1d1d1d; color: var(--muted); opacity: .65; }

/* Row 2: Identified Lifecycle Stage journey — kept compact against the rows above and below. */
.row-context { margin: 0; }
.row-context .col-h { margin-bottom: 10px; }

/* Call Details — now beside the Message Center, laid out as two sub-columns of stacked
   "Label: value" fields. Each field is a flex row so the value truncates to the sub-column width. */
.mc-right .col-h { margin-bottom: 14px; }
.cd-cols { display: grid; grid-template-columns: minmax(0, max-content) minmax(0, max-content); column-gap: 44px; row-gap: 14px; align-content: start; }
.cd-col { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
/* Field text matches the app's default body size — .75rem (13.5px at the 18px root), same as the
   Message Center notes and Runtime Monitor labels. */
.cd-field { font-size: .75rem; line-height: 1.35; color: var(--text); display: flex; align-items: baseline; gap: 6px; min-width: 0; }
.cd-label { color: #b9b9b9; font-weight: 400; flex: 0 0 auto; white-space: nowrap; }
/* Identified value: gold + bold. Truncated with an ellipsis when long so fields never overlap; the
   full string shows on hover (title set in main.ts). */
.cd-value { color: var(--gold); font-weight: 700; flex: 1 1 auto; min-width: 0; max-width: 260px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* A Call Details row the classifier couldn't fill reliably (e.g. role with no evidence) is hidden. */
.cd-field.cd-hidden { display: none; }

/* Lifecycle Stage — left-to-right journey; boxes grow to fill the full row width. */
.lifecycle-journey { display: flex; flex-wrap: nowrap; align-items: stretch; gap: 6px; }
.lc-box { transition: all .2s; }
.lc-box.lc-active { border-color: var(--gold); background: var(--gold); color: var(--ink); opacity: 1; box-shadow: 0 0 16px rgba(255,190,23,.55); }
.lc-arrow { flex: 0 0 auto; align-self: center; color: var(--muted); opacity: .5; font-size: 1.1rem; }

/* Row 3: Call Details | Final Score | Performance table | Templates | Quick Help.
   AUTO-REFLOW: the five frames are flex items that flow into as many columns as actually fit at the
   current width (5 → 3+2 → 2 → 1). No fixed-width assumption, so it looks intentional whether the
   browser is 1366, 1536, 1920, or ultrawide — and nothing stretches or overflows. Final Score keeps a
   fixed width; the others grow to fill each wrapped line. */
.row-results { display: flex; flex-wrap: wrap; gap: 18px; align-items: stretch; }
.col-details { flex: 1 1 260px; min-width: 0; }
/* Content-sized (no grow): the scorecard column is just as wide as the table, so the trend below it
   lines up with the scorecard cells' right edge (the "Why this score?" panel is a separate column). */
.col-perf { flex: 0 0 auto; min-width: 0; position: relative; left: -10px; }
/* Content-width wrapper: keeps the table left-packed and the Reset/Save buttons aligned to the
   Weights column's right edge (not the far edge of a wide, grown column). */
.perf-inner { width: fit-content; max-width: 100%; }
/* Column header bar: "Performance Breakdown" title on the left, Reset flush right. */
.perf-head { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; margin: 0 0 12px; }
.perf-head .col-h { margin: 0; }
.perf-head .btn { padding: 4px 10px; font-size: .8rem; }
/* Info labels under the Final Score (Setting the scorecard / How this score was calculated), each with
   a hover/focus tooltip. Shown only after a call is scored (main.ts toggles [hidden] on #score-labels). */
.score-labels-divider { border: none; border-top: 1px solid #d5d2c9; width: 120px; margin: 18px 0 14px; }
.sc-note { position: relative; display: flex; align-items: center; gap: 8px; margin: 0 0 12px; padding: 0; background: none; border: none; text-align: left; font-family: inherit; color: inherit; cursor: help; }
.sc-note-btn { cursor: pointer; }
.sc-note-ico { flex: 0 0 auto; width: 14px; height: 14px; display: inline-flex; align-items: center; justify-content: center; font-size: .82rem; font-weight: 700; color: #1a1a1a; }
.sc-note-ico:empty::before { content: ""; width: 0; height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-bottom: 7px solid #1a1a1a; }
/* Both "?" notes use the base .sc-note-ico (body font, weight 700, centred in a 14px box) so they
   render identically. (Earlier the button's "?" used the display font baseline-aligned and read
   differently from the trend note's "?" one line below.) */
/* Match a Performance-Breakdown skill label (.pt-label): body font, .75rem, dark, sentence case. */
.sc-note-txt { font-family: var(--font-body); font-size: .75rem; color: #1f1f1f; line-height: 1.15; }
.sc-note:hover .sc-note-txt, .sc-note:focus-visible .sc-note-txt { color: #8a6a12; }
/* Opens UPWARD (bottom-anchored): these notes sit low in the score column, so a downward tooltip was
   clipped at the viewport bottom. */
.sc-note-tip { position: absolute; bottom: calc(100% + 7px); top: auto; left: -2px; z-index: 40; width: 300px; background: #1f1f1f; color: #f1f1f1; border-radius: 8px; padding: 10px 13px; font-family: var(--font-body); font-size: .72rem; font-weight: 400; letter-spacing: 0; text-transform: none; line-height: 1.5; box-shadow: 0 8px 24px rgba(0, 0, 0, .28); opacity: 0; visibility: hidden; transform: translateY(3px); transition: opacity .12s, transform .12s; pointer-events: none; }
.sc-note-tip strong { color: #fff; font-weight: 700; }
.sc-note:hover .sc-note-tip, .sc-note:focus-visible .sc-note-tip { opacity: 1; visibility: visible; transform: translateY(0); }
.col-details .cd-value { overflow-wrap: anywhere; }
/* Templates + Quick Help travel together: side-by-side on their own line when wrapped, and they only
   stack onto each other when even the pair is too narrow. */
.results-side { flex: 1 1 540px; display: flex; flex-wrap: wrap; gap: 18px; align-items: stretch; }

/* Final Score — no frame: a big colour-coded number, then Meaning + Evidence Coverage stacked below
   it (left-aligned, compact). Colour follows the score (green ≥100 / gold / red when low or capped). */
.col-score { flex: 0 0 222px; position: relative; } /* anchor for the coaching-signal banner (below the coverage line) */
.score-circle { font-family: var(--font-display); font-size: 6rem; line-height: 1; color: var(--gold); margin: 2px 0 18px; }
.score-circle.circle-good { color: var(--green); }
.score-circle.circle-mid { color: var(--gold); }
.score-circle.circle-bad { color: var(--red); }
.score-meta { font-size: .75rem; }
.score-meaning-label, .score-coverage-label { color: var(--muted); font-weight: 600; margin-top: 12px; margin-bottom: 3px; }
.score-meaning, .score-coverage { font-weight: 700; color: var(--heading); }
/* Optional-skill bonus: its own row under Evidence Coverage, gold so it reads as credit rather than
   as part of the coverage/confidence statement it used to be appended to. */
.score-bonus { color: var(--gold); }
.score-bonus-label[hidden], .score-bonus[hidden] { display: none; }
/* Compact inline (i) beside a meta label. Reuses the existing .sc-note-tip bubble for the popup, so
   the tooltip looks and behaves exactly like the ones on the scorecard notes. The bubble is pulled
   left of the icon and given its own width — anchored to a 13px icon in a 222px column it would
   otherwise sit half off the panel. */
.meta-info { position: relative; display: inline-flex; align-items: center; justify-content: center; width: 13px; height: 13px; margin-left: 5px; border: 1px solid currentColor; border-radius: 50%; font-family: var(--font-body); font-size: .56rem; font-weight: 700; font-style: normal; line-height: 1; letter-spacing: 0; text-transform: none; cursor: help; vertical-align: middle; opacity: .7; }
.meta-info:hover, .meta-info:focus-visible { opacity: 1; }
.meta-info:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }
.meta-info .sc-note-tip { left: -10px; width: 320px; }
.meta-info:hover .sc-note-tip, .meta-info:focus-visible .sc-note-tip { opacity: 1; visibility: visible; transform: translateY(0); }
/* Trends coverage (i): the note sits high on the page, so its bubble opens DOWNWARD to avoid
   clipping the filters/header above it (mirrors the MEDDPICC-why flip). */
.trends-coverage .meta-info .sc-note-tip { top: calc(100% + 7px); bottom: auto; left: -10px; transform: translateY(-3px); }
.trends-coverage .meta-info:hover .sc-note-tip, .trends-coverage .meta-info:focus-visible .sc-note-tip { transform: translateY(0); }

/* Performance table — ONE grid so Actual and Expected rows align exactly. Columns are content-width
   (no 1fr stretch) so the Actual and Desired zones sit close together instead of spreading apart. */
/* Labels take their natural width (one line per skill) when there's room, and only wrap if the frame
   is squeezed. justify-content: start keeps the columns content-sized — the Weights dropdown never
   stretches across leftover space when the frame is wider than the table. */
.perf-grid { display: grid; grid-template-columns: minmax(80px, max-content) auto 60px minmax(80px, max-content) auto 36px auto; justify-content: start; align-items: center; row-gap: 2px; column-gap: 12px; }
.pt-h { padding-bottom: 10px; align-self: end; }
.pt-h.h-act { grid-column: 1 / 3; }
.pt-h.h-gap { grid-column: 3; }
.pt-h.h-exp { grid-column: 4 / 6; line-height: 1.15; }
/* Lowered (smaller bottom padding) so the "Weights" label clears the longer "Scorecard (<template>)"
   header beside it, even when that label wraps to a second line. */
.pt-h.h-weight { grid-column: 7; font-size: .78rem; color: var(--muted); justify-self: end; padding-bottom: 2px; }
.pt-label { font-size: .75rem; color: var(--text); padding: 6px 0; }
/* The per-skill explainer (i) on the Performance Breakdown labels. The label rows are packed near the top
   of the grid, so drop the tip BELOW the icon (the default bubble sits above and would clip off-screen). */
.pt-info { color: var(--muted); }
.pt-info .sc-note-tip { top: calc(100% + 7px); bottom: auto; left: -10px; transform: translateY(-3px); width: 300px; }
.pt-info:hover .sc-note-tip, .pt-info:focus-visible .sc-note-tip { transform: translateY(0); }
/* "Explore all eleven skills" CTA under the breakdown grid. */
.perf-explain { margin: 10px 0 0; font-size: .78rem; color: var(--muted); line-height: 1.5; }
.perf-explain-i { display: inline-flex; align-items: center; justify-content: center; width: 13px; height: 13px; border: 1px solid currentColor; border-radius: 50%; font-size: .56rem; font-weight: 700; line-height: 1; vertical-align: middle; }
.perf-explain-link { color: #9a6a00; font-weight: 600; text-decoration: none; white-space: nowrap; }
.perf-explain-link:hover, .perf-explain-link:focus-visible { text-decoration: underline; }
.pt-cell { display: inline-flex; gap: 4px; }
.pt-gap { width: 22px; }
/* Weights sit in the last grid column (col 7), pushed off the scorecard cells by the spacer col 6. */
.pt-weight { grid-column: 7; }
.pt-weight select { width: 100%; }

/* Segment cells */
.seg-bar { display: inline-flex; gap: 4px; }
.seg-cell { width: 17px; height: 17px; border: 1px solid var(--border-strong); border-radius: 3px; background: transparent; padding: 0; }
button.seg-cell { cursor: pointer; }
.seg-editable button.seg-cell:hover { border-color: var(--gold); }
.seg-actual { background: var(--gold); border-color: var(--gold); }
.seg-expected { background: var(--gold); border-color: var(--gold); }
.pm-weight { font-size: .78rem; padding: 5px 7px; border: 1px solid var(--border); border-radius: 7px; background: var(--panel-2); color: var(--text); }
.perf-locked { opacity: .85; }
.template-actions { display: flex; gap: 10px; justify-content: flex-end; margin-top: 20px; }

/* Templates panel — a persistent list of the manager's OWN saved templates (per-user, never shared).
   Single-click selects, double-click opens; the Open template button opens the current selection. */
.col-templates { flex: 1 1 250px; display: flex; flex-direction: column; }
/* Open template lives in the header row, pushed to the right of the label. */
.templates-head { justify-content: space-between; gap: 12px; }
/* Size Open template to match the Copy button (compact) rather than the full toolbar button size. */
#import-template-btn { font-size: .72rem; letter-spacing: .3px; padding: 4px 9px; }
/* Give the Quick Help header the same height as the (button-bearing) Templates header, so the two
   frames below them start and end on the same line. */
.templates-head, .col-help > .col-h { min-height: 38px; }
.col-help > .col-h { display: flex; align-items: center; }
.help-box { flex: 1; border: 1px solid var(--border); border-radius: 10px; background: var(--panel); padding: 14px 16px; font-size: .82rem; line-height: 1.5; color: var(--muted); overflow-y: auto; }
.help-box p { margin: 0 0 12px; }
.help-h { font-family: var(--font-display); font-size: 1rem; font-weight: 400; letter-spacing: .4px; color: var(--gold); margin: 0 0 4px; }
.help-box strong { color: var(--heading); }
.help-box em { color: var(--text); font-style: normal; font-weight: 600; }
.help-note { color: var(--muted); font-style: italic; }
.help-note a { color: var(--gold); }

/* Quick Help modal — opened from the header button; replaces the former always-visible help panel. */
.modal-overlay { position: fixed; inset: 0; z-index: 80; display: flex; align-items: center; justify-content: center; padding: 24px; background: rgba(0, 0, 0, 0.6); }
.modal-overlay[hidden] { display: none; }
.modal { position: relative; width: min(560px, 100%); max-height: 85vh; overflow-y: auto; background: var(--panel-2); border: 1px solid var(--border-strong); border-radius: 12px; box-shadow: 0 16px 48px rgba(0, 0, 0, 0.5); padding: 22px 24px; }
.modal-h { font-family: var(--font-display); font-size: 1.4rem; font-weight: 400; letter-spacing: .5px; color: var(--heading); margin: 0 0 12px; }
.modal-x { position: absolute; top: 10px; right: 12px; background: transparent; border: none; color: var(--muted); font-size: 1.5rem; line-height: 1; cursor: pointer; padding: 4px 8px; border-radius: 6px; }
.modal-x:hover { color: var(--gold); }
.modal .help-box { border: none; background: transparent; padding: 0; overflow: visible; }
.modal-actions { display: flex; justify-content: flex-end; margin-top: 18px; }
.trial-modal-actions { gap: 10px; align-items: center; }

/* Row 4: Score Analysis, Recommendations, MEDDPICC — each stacked full page width. */
.row-analysis { display: grid; grid-template-columns: 1fr; gap: 26px; align-items: stretch; }
.col-head { display: flex; align-items: center; justify-content: flex-start; gap: 14px; margin-bottom: 14px; }
.col-head .col-h { margin: 0; }
.copy-btn { font-family: var(--font-body); font-weight: 300; font-size: .72rem; letter-spacing: .3px; display: inline-flex; align-items: center; gap: 5px; padding: 4px 9px; border: 1px solid var(--border); border-radius: 6px; background: var(--panel); color: var(--gold); cursor: pointer; transition: background .15s, border-color .15s, color .15s; }
.copy-btn:hover { background: var(--panel-2); border-color: var(--gold); }
.copy-btn.copied { color: #34c46a; border-color: #34c46a; }
.copy-btn svg { display: block; }
/* RACI key in the Score Analysis header (multi-rep calls). margin-left:auto pushes it to the far
   right of the header, well clear of the Copy button; wraps under on narrow widths. */
.raci-legend { margin-left: auto; font-size: .72rem; line-height: 1.4; color: #5a5a5a; font-weight: 400; letter-spacing: .2px; }
.raci-legend[hidden] { display: none; }
.scroll-box { padding: 16px 18px; height: 300px; overflow-y: auto; font-size: .75rem; }
.analysis-section { margin-bottom: 14px; }
.analysis-empty { list-style: none; margin-left: -1.1em; color: #6a6a6a; font-style: italic; }
.analysis-title { font-weight: 700; text-decoration: underline; margin-bottom: 5px; color: var(--heading); }
.scroll-box ul { margin: 0 0 4px; padding-left: 18px; color: var(--text); }
.scroll-box li { margin-bottom: 4px; }
.rec-list { margin: 0; padding-left: 18px; }

/* MEDDPICC qualification box (auxiliary, non-scoring) — lives in row 3 beside Score Analysis
   and Recommendations, sharing their .scroll-box shell. */
/* List reset is unscoped so the MEDDPICC list renders the same on its own page (.meddpicc-page,
   no card frame) as it did inside the Score Analysis .scroll-box. */
.meddpicc-list { list-style: none; margin: 0; padding: 0; }
.meddpicc-item { padding: 9px 0; border-bottom: 1px solid var(--border); margin: 0; }
/* MEDDPICC on its own page: frameless (no white card), just the list on the workspace background,
   width-capped so the short qualification lines stay readable on a wide screen. */
.meddpicc-page { max-width: 900px; margin-top: 4px; }

/* MEDDPICC page layout: two columns — the breakdown on the left, and a right-hand rail (.meddpicc-side)
   holding the "why it isn't scored" hover note with the Copy button stacked beneath it. The rail sits
   immediately to the RIGHT of the 900px breakdown (justify-content:start), so at >1920px it stays beside
   the breakdown instead of being flung to the far edge of the screen. */
.meddpicc-layout { display: grid; grid-template-columns: minmax(0, 900px) auto; gap: 28px; align-items: start; justify-content: start; }
.meddpicc-page { margin-top: 0; }
.meddpicc-side { display: flex; flex-direction: column; align-items: flex-start; gap: 12px; margin-top: 10px; }
.meddpicc-side .copy-btn { margin-left: -4px; }
.meddpicc-why { margin: 0; cursor: help; }
/* This tooltip opens DOWNWARD (the note sits at the top of the page, so an upward tooltip would clip)
   and is right-anchored + wider so the multi-paragraph text never overflows the right edge. */
.meddpicc-why .sc-note-tip { top: calc(100% + 7px); bottom: auto; left: auto; right: 0; width: 440px; max-width: min(440px, calc(100vw - 40px)); transform: translateY(-3px); }
.meddpicc-why:hover .sc-note-tip, .meddpicc-why:focus-visible .sc-note-tip { transform: translateY(0); }
/* Narrow screens: no room for a side rail — stack it under the breakdown. */
@media (max-width: 820px) {
  .meddpicc-layout { display: block; }
  .meddpicc-side { flex-direction: row; align-items: center; gap: 18px; margin-top: 16px; }
  .meddpicc-why .sc-note-tip { left: 0; right: auto; }
}
.meddpicc-item:last-child { border-bottom: none; }
.meddpicc-head { display: flex; align-items: center; gap: 8px; }
.meddpicc-letter { flex: 0 0 auto; width: 20px; height: 20px; border-radius: 5px; background: var(--panel-2); border: 1px solid var(--border); color: var(--heading); font-family: var(--font-display); font-size: .82rem; display: inline-flex; align-items: center; justify-content: center; }
.meddpicc-label { flex: 1; font-weight: 700; font-size: .82rem; color: var(--heading); }
.meddpicc-status { font-size: .66rem; font-weight: 700; text-transform: uppercase; letter-spacing: .3px; padding: 2px 8px; border-radius: 999px; white-space: nowrap; }
.meddpicc-status-strong { background: rgba(52, 196, 106, .18); color: var(--green); }
.meddpicc-status-weak { background: rgba(255, 190, 23, .18); color: var(--gold); }
.meddpicc-status-missing { background: rgba(224, 88, 79, .18); color: var(--red); }
.meddpicc-note { margin: 4px 0 0 28px; color: var(--muted); font-size: .8rem; }
.meddpicc-evidence { margin: 5px 0 0 28px; padding-left: 10px; border-left: 2px solid var(--border-strong); color: var(--text); font-size: .8rem; font-style: italic; }
.meddpicc-unavailable { margin: 0; padding: 10px 12px; border: 1px solid var(--border-strong); border-left: 3px solid var(--gold); border-radius: 7px; background: var(--panel-2); color: var(--muted); font-size: .82rem; line-height: 1.45; }

/* Brand socials (reused by the toolbar brand block). */
.socials { display: flex; gap: 12px; }
.social { width: 34px; height: 34px; border-radius: 7px; display: flex; align-items: center; justify-content: center; color: #fff; }
.social-li { background: #0a66c2; }
.social-yt { background: #ff0000; }

@media (max-width: 1040px) {
  .row-top, .row-results, .row-analysis { grid-template-columns: 1fr; }
  .control-board { grid-template-columns: repeat(2, 1fr); }
  /* Stage journey can't fit 9 boxes in one row on a phone — let it wrap. */
  .lifecycle-journey { flex-wrap: wrap; }
  .lc-box { flex: 1 1 28%; }
  .lc-arrow { display: none; }
  .perf-grid { grid-template-columns: minmax(90px, 1fr) auto 44px minmax(90px, 1fr) auto 20px auto; column-gap: 8px; }
  .toolbar-inner { flex-wrap: wrap; height: auto; padding: 10px 0; }
  .toolbar-brand { margin-left: 0; }
}
/* ---------- Print report (Download PDF): a sales-coach's working document ---------- */
/* Body-copy font-size tokens — the single source of truth for the report's running text. Defined on
   the #report container so BOTH the page and the sibling footer inherit them. Every body/paragraph/
   list/table-cell rule below pulls from --rep-body, so a new section (or an element that forgets to
   set a size and inherits the base) can never drift out of scale; --rep-fine is the one deliberate
   step down, reserved for captions/metadata (scores, coverage, glossary defs, footer). */
.report-sheet { display: none; --rep-body: 9.5pt; --rep-fine: 8.3pt; }
.rep-page {
  color: #111;
  font-family: var(--font-body);
  font-size: var(--rep-body);
  line-height: 1.42;
}

/* Masthead: dark branded band (matches the app's header/toolbar look), left-aligned, PCB texture. */
.rep-masthead {
  position: relative;
  overflow: hidden;
  background: var(--header-bg) url('/assets/pcb-bg.svg') center / cover no-repeat;
  border-radius: 8px;
  padding: 14px 18px;
  margin-bottom: 12px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
}
.rep-masthead::before {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(100deg, rgba(17, 17, 17, 0.95), rgba(17, 17, 17, 0.86));
}
.rep-masthead > * { position: relative; z-index: 1; }
.rep-mast-brand { display: flex; align-items: center; gap: 18px; text-align: left; }
.rep-mast-score-lockup { display: flex; align-items: center; gap: 8px; }
.rep-mast-score-lockup .score-mark { font-size: 22pt; }
.rep-mast-score-lockup .brand-by-label { font-size: 6.5pt; color: #cfcfcf; }
.rep-mast-logo { height: 26px; width: auto; }
.rep-mast-title { font-family: var(--font-display); font-size: 23pt; letter-spacing: 0.5px; color: #fdfaf3; line-height: 1.05; }
.rep-mast-right { text-align: right; color: #cfcfcf; }
.rep-mast-date { font-size: 9pt; }
.rep-mast-tag { font-size: 8pt; color: var(--gold); margin-top: 2px; }

/* Call details strip — mirrors the dashboard's Call Details panel. */
.rep-details { display: flex; flex-wrap: wrap; gap: 16px; border-bottom: 1px solid #ddd; padding-bottom: 9px; margin-bottom: 11px; }
.rep-details-field { min-width: 90px; }
.rep-details-label { font-size: 7.5pt; letter-spacing: 0.4px; text-transform: uppercase; color: #888; }
.rep-details-value { font-size: var(--rep-body); font-weight: 700; color: #111; }

.rep-section { margin-bottom: 11px; break-inside: avoid; }
.rep-section--flow { break-inside: auto; }
.rep-h { font-family: var(--font-display); font-size: 11.5pt; letter-spacing: .4px; color: #111; border-left: 3px solid var(--gold); padding-left: 7px; margin: 0 0 5px; }
.rep-quicktake { background: var(--gold-tint); border-radius: 6px; padding: 8px 10px; font-weight: 600; }
.rep-outcome { display: flex; gap: 18px; align-items: flex-start; }
.rep-scorecol { flex: 0 0 132px; text-align: center; border-radius: 8px; padding: 12px 8px; color: #fff; }
.rep-scorecol.rep-good { background: var(--green-deep); }
.rep-scorecol.rep-mid { background: #c79100; }
.rep-scorecol.rep-bad { background: #b3433b; }
.rep-score { font-family: var(--font-display); font-size: 34pt; line-height: 1; color: #fff; }
.rep-meaning { font-weight: 700; font-size: 9.5pt; margin-top: 4px; color: #fff; }
.rep-coverage { font-size: var(--rep-fine); color: rgba(255, 255, 255, 0.85); margin-top: 3px; }
.rep-skills { flex: 1; }
.rep-skill-row { display: grid; grid-template-columns: 1fr 50px 96px 16px; gap: 6px; padding: 2.5px 6px; border-bottom: 1px solid #eee; font-size: var(--rep-body); }
.rep-skill-head { font-weight: 700; background: var(--gold-tint); border-bottom: 1.5px solid #111; border-radius: 4px 4px 0 0; }
.rs-val, .rs-flag { text-align: center; }
.rs-meets { color: var(--green-deep); font-weight: 700; }
.rs-gap { color: #b3433b; font-weight: 700; }
.rep-list { margin: 2px 0 0; padding-left: 16px; font-size: var(--rep-body); }
.rep-list li { margin-bottom: 2.5px; }
.rep-blurb { margin: 0 0 5px; font-size: var(--rep-body); color: #222; }

/* Buyer's buying case in the report — the four-question quotes block (quotes only). */
.rep-why { margin-top: 7px; }
.rep-why-title { font-family: var(--font-display); font-size: 10pt; letter-spacing: .3px; color: #111; margin: 0 0 5px; }
.rep-why-q { break-inside: avoid; margin-bottom: 6px; }
.rep-why-qh { font-weight: 700; font-size: var(--rep-body); color: #111; margin-bottom: 1px; }
.rep-why-empty { margin: 1px 0 0; font-size: var(--rep-body); color: #888; font-style: italic; }

/* MEDDPICC qualification block in the report (non-scoring read). */
.rep-medd-item { break-inside: avoid; margin-bottom: 6px; }
.rep-medd-head { display: flex; align-items: baseline; gap: 6px; }
.rep-medd-letter { flex: 0 0 auto; width: 15px; height: 15px; border-radius: 3px; background: #efece6; border: 1px solid rgba(0, 0, 0, .2); font-weight: 700; font-size: 8pt; text-align: center; line-height: 15px; color: #111; }
.rep-medd-label { font-weight: 700; font-size: var(--rep-body); color: #111; }
.rep-medd-status { font-size: var(--rep-fine); font-weight: 700; text-transform: uppercase; letter-spacing: .3px; }
.rep-medd-status-strong { color: var(--green-deep); }
.rep-medd-status-weak { color: #9a6a00; }
.rep-medd-status-missing { color: #b3433b; }
.rep-medd-note { font-size: var(--rep-body); color: #333; margin: 1px 0 0 21px; }
.rep-medd-ev { font-size: var(--rep-body); color: #555; font-style: italic; margin: 1px 0 0 21px; }

/* Worked/gap coaching blocks — score line, summary, and a "Coach:"/"Reinforce:" action, so a
   manager can read this straight into a 1:1 instead of paraphrasing a bare bullet. */
.rep-gaplist { display: flex; flex-direction: column; gap: 6px; }
.rep-gap { break-inside: avoid; border-radius: 6px; padding: 6px 9px; border-left: 3px solid #ccc; background: #fafafa; }
.rep-gap.rep-gap-good { border-left-color: var(--green-deep); }
.rep-gap.rep-gap-bad { border-left-color: #b3433b; }
.rep-gap-row { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
.rep-gap-name { font-weight: 700; font-size: var(--rep-body); color: #111; }
.rep-gap-score { font-size: var(--rep-fine); color: #555; white-space: nowrap; }
.rep-gap-summary { font-size: var(--rep-body); color: #333; margin-top: 1px; }
.rep-gap-coach { font-size: var(--rep-body); color: #111; margin-top: 3px; }

/* Skill glossary — compact two-column reference so a manager can coach without memorizing 11 defs. */
.rep-glossary { columns: 2; column-gap: 18px; }
.rep-glossary-item { break-inside: avoid; margin-bottom: 7px; }
.rep-glossary-name { font-weight: 700; font-size: var(--rep-body); color: #111; }
.rep-glossary-def { font-size: var(--rep-fine); color: #444; }

/* Closing card: PM pitch + next-step CTAs + signature + QR, as ONE block. break-inside: avoid is
   the template guarantee that this signature can never split across a page again. */
.rep-close {
  break-inside: avoid;
  display: flex;
  gap: 20px;
  border: 1px solid #e3cf94;
  border-top: 3px solid var(--gold);
  background: var(--gold-tint);
  border-radius: 8px;
  padding: 14px 16px;
  margin-top: 12px;
}
.rep-close-main { flex: 1; }
.rep-cta-cards { display: flex; gap: 10px; margin-top: 8px; }
.rep-cta-card { flex: 1; background: #fff; border: 1px solid #e6dcc0; border-radius: 6px; padding: 7px 9px; }
.rep-cta-title { font-weight: 700; font-size: 8.8pt; color: #111; margin-bottom: 2px; }
.rep-cta-body { font-size: 8pt; color: #444; }
.rep-close-sign { flex: 0 0 150px; text-align: center; border-left: 1px solid #e3cf94; padding-left: 16px; }
.rep-signname { font-family: var(--font-display); font-size: 13pt; color: #111; }
.rep-signrole { font-size: 8.5pt; color: #444; margin-bottom: 3px; }
.rep-contact { font-size: 8.5pt; color: #111; text-decoration: none; display: block; margin-bottom: 8px; }
.rep-qrblock { text-align: center; }
.rep-qr { width: 74px; height: 74px; }
.rep-cta-caption { font-size: 7.3pt; color: #444; max-width: 140px; margin: 3px auto 0; }

/* Site footer: trust & legal links (dark theme, matches app chrome). */
/* Footer: content centered; height matches the rail's sign-out foot (60px) so their top borders line
   up along the bottom of the page. */
.site-footer { border-top: 1px solid var(--border); margin-top: auto; }
/* Height matched to the sidenav foot (60px incl. its top border) so both bottom rules align. */
.site-footer-inner { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; min-height: 59px; padding: 0 var(--gutter); text-align: center; }
.sf-line { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 4px 16px; line-height: 1.2; }
.sf-brand { font-size: 0.82rem; color: var(--muted); }
.sf-contact { font-size: 0.8rem; color: var(--muted); }
.sf-contact a { color: var(--gold); text-decoration: none; }
.sf-site { font-size: 0.82rem; font-weight: 500; letter-spacing: .02em; color: var(--gold); text-decoration: none; }
.sf-site:hover { text-decoration: underline; }
.sf-contact a:hover { text-decoration: underline; }
/* Social logos: light grey by default; each reveals its brand colour on hover. */
.sf-socials { display: flex; align-items: center; gap: 14px; }
.sf-social { display: inline-flex; color: var(--muted); transition: color .15s; }
.sf-li:hover { color: #0a66c2; }
.sf-yt:hover { color: #ff0000; }

/* Repeating page footer: a fixed element the print engine repaints on every page. It sits in the
   reserved bottom page-margin band (see @page below) via a negative offset, so it never overlaps the
   flowing report content. Hidden on screen; only laid out inside @media print. */
.rep-footer { display: none; }

@media print {
  /* Extra bottom margin reserves a band for the repeating footer so content never runs under it. */
  @page { size: A4; margin: 13mm 13mm 17mm; }
  html, body { background: #fff !important; }
  /* Allowlist, not denylist: hide the entire app shell and show only the report. This survives any
     future chrome refactor (previously listed stale selectors and let the app UI leak onto page 1). */
  .app-shell { display: none !important; }
  .report-sheet { display: block !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  .rep-footer {
    display: flex !important;
    position: fixed;
    left: 0;
    right: 0;
    bottom: -9mm; /* drop into the reserved 17mm bottom margin, clear of flowing content */
    height: 9mm;
    align-items: center;
    justify-content: center;
    gap: 8px;
    border-top: 1px solid #ddd;
    color: #666;
    font-size: var(--rep-fine);
  }
  .rep-footer-mark { font-family: var(--font-display); letter-spacing: 1px; color: #111; }
  .rep-footer-sep { color: #bbb; }
  .rep-footer-link { color: var(--gold); text-decoration: none; }
}

/* High-Level Summary — opening narrative paragraph(s) at the top of Score Analysis. */
.summary-para { margin: 6px 0 10px; line-height: 1.5; }

/* Reusable dark "glossy" panel (ink base + warm gold glare) — used by the Home detail panels and the
   Cohort Diagnostic cohort boxes. Single multi-layer background so absolutely-positioned children (badges)
   sit correctly without a ::before stacking fight. */
.glossy {
  position: relative; overflow: hidden; color: #efe7d6;
  background:
    radial-gradient(130% 62% at 12% -10%, rgba(255, 214, 120, .09), transparent 55%),
    #2c2c2c;
  border: 1px solid rgba(255, 190, 23, .28);
  box-shadow: 0 12px 30px -20px rgba(0, 0, 0, .5), inset 0 1px 0 rgba(255, 255, 255, .05);
}

/* ===================== Home (hero CTA + role picker), centred in the workspace ===================== */
/* Home leads with its own hero, so the generic "LET'S GET STARTED" page header is hidden here. */
.app-region:has(.view-home.is-active) .page-head { display: none; }
/* Centre the whole Home block vertically + horizontally in the workspace (no scrolling): the active
   Home view grows to fill the region and centres its single content column. */
.view-home.is-active { display: flex; flex-direction: column; justify-content: center; flex: 1 1 auto; position: relative; }
.view-home > .container { position: relative; z-index: 2; transform: translateY(-50px); } /* above the teaser + nudged up */
.view-home.lab-mode > .container { transform: none; } /* keep the scanner (lab-mode) centered as before */

/* Home teaser: a blurred, faded peek at a scored call under the import CTA — builds curiosity without
   stealing focus. Decorative only (aria-hidden, no pointer events); hidden while a call is scoring. */
/* Default (<= 1920px): the original look — teaser pinned to the bottom of the home area while the
   hero+import stay centred (nudged up 50px). */
.home-teaser { position: absolute; left: 0; right: 0; bottom: 0; z-index: 1; display: flex; justify-content: center; padding: 0 var(--gutter) 34px; pointer-events: none; filter: blur(1.8px); opacity: .5; -webkit-mask-image: linear-gradient(to bottom, transparent, #000 52%); mask-image: linear-gradient(to bottom, transparent, #000 52%); }
.view-home.lab-mode .home-teaser { display: none; }
/* > 1920px only: on very large monitors the absolute teaser marooned at the far bottom, so instead
   drop the -50px nudge and let the teaser join the centred flow directly under the CTA. */
@media (min-width: 1921px) {
  .view-home > .container { transform: none; }
  .home-teaser { position: static; margin: 42px auto 0; width: 100%; padding: 0 var(--gutter); -webkit-mask-image: linear-gradient(to bottom, transparent, #000 34%); mask-image: linear-gradient(to bottom, transparent, #000 34%); }
}
.ht-panel { display: flex; gap: 40px; align-items: center; width: 100%; max-width: 720px; background: #fff; border: 1px solid rgba(0, 0, 0, .08); border-radius: 16px; padding: 24px 32px; box-shadow: 0 12px 34px rgba(0, 0, 0, .07); }
.ht-score { flex: none; width: 130px; text-align: center; }
.ht-ring { width: 104px; height: 104px; margin: 0 auto; border-radius: 50%; display: grid; place-items: center; position: relative; background: conic-gradient(var(--gold) 0 72%, #e8e8e8 72% 100%); }
.ht-ring::after { content: ""; position: absolute; inset: 9px; border-radius: 50%; background: #fff; }
.ht-ring-n { position: relative; z-index: 1; font-family: var(--font-display); font-size: 2.1rem; font-weight: 400; color: #1a1a1a; }
.ht-ring-x { position: relative; z-index: 1; font-size: .68rem; color: #9a9a9a; }
.ht-score-cap { margin-top: 12px; font-weight: 700; font-size: .8rem; color: #1d6f3f; }
.ht-score-sub { font-size: .66rem; color: #9a9a9a; margin-top: 3px; }
.ht-skills { flex: 1 1 auto; display: flex; flex-direction: column; gap: 13px; }
.ht-skill { display: flex; align-items: center; gap: 12px; }
.ht-skill-l { flex: none; width: 160px; font-size: .74rem; color: #4a4a4a; text-align: right; white-space: nowrap; }
.ht-bar { flex: 1 1 auto; height: 8px; border-radius: 999px; background: #ececec; overflow: hidden; }
.ht-fill { display: block; height: 100%; border-radius: 999px; background: linear-gradient(90deg, #ffd45a, #ffbe17); }
.ht-fill.w1 { width: 88%; }
.ht-fill.w2 { width: 76%; }
.ht-fill.w3 { width: 64%; }
.ht-fill.w4 { width: 82%; }
.ht-fill.w5 { width: 72%; }
.ht-skill-v { flex: none; width: 24px; font-size: .74rem; font-weight: 700; color: #1a1a1a; text-align: right; }
@media (max-width: 720px) { .home-teaser { display: none; } }

/* Hero: a two-line call to action (what you do + the payoff). */
.home-hero { text-align: center; max-width: 720px; margin: 0 auto; }
.home-hero-h { font-family: var(--font-display); font-weight: 400; font-size: 2.1rem; line-height: 1.08; letter-spacing: .01em; color: #1a1a1a; margin: 0 0 10px; text-wrap: balance; }
.home-hero-sub { font-family: var(--font-body); font-size: .98rem; line-height: 1.6; color: #5a5a5a; margin: 0 auto; max-width: 680px; }

/* Divider between the hero and the role picker. */
.home-div { width: 100%; max-width: 460px; height: 1px; border: 0; background: rgba(0, 0, 0, .10); margin: 22px auto; }
@media (max-width: 720px) { .home-hero-h { font-size: 1.7rem; } }

.home-sub { color: #5a5a5a; font-size: var(--fs-body); line-height: 1.5; margin: 0 auto 14px; max-width: 640px; text-align: center; text-wrap: balance; }

/* ===== Diagnostic Scanner (Home runtime monitor) ===== */
/* Lab-mode strips Home to just the header (pushed to the top) + the scanner, so nothing scrolls off. */
.distill-lab { display: none; }
.view-home.lab-mode { justify-content: flex-start; padding-top: clamp(16px, 3.5vh, 40px); }
.view-home.lab-mode .home-hero { margin-bottom: 2px; max-width: 900px; }
/* Reserve two lines of header height in lab-mode so swapping the 2-line scanning header for the 1-line
   "Analysis complete" doesn't shrink the block and shift the whole apparatus up (the completion jump). */
.view-home.lab-mode .home-hero-h { min-height: 4.7rem; display: grid; place-items: center; white-space: pre-line; text-wrap: initial; }
.view-home.lab-mode .home-hero-sub,
.view-home.lab-mode .home-div,
.view-home.lab-mode .home-sub,
.view-home.lab-mode .home-roles,
.view-home.lab-mode .home-import { display: none; }
.view-home.lab-mode .distill-lab { display: block; width: 100%; max-width: 1000px; margin: 12px auto 0; }
/* The scanner sits directly on the light Home background: ink line-art, gold laser + gold-glow = active. */
.sl-stage { display: flex; align-items: center; justify-content: center; gap: clamp(10px, 3vw, 40px); flex-wrap: wrap; transition: opacity .9s ease, filter .9s ease; }
.sl-stage.sl-fading { opacity: 0; filter: blur(7px); }
.sl-stoprow { display: flex; justify-content: center; align-items: center; height: 40px; margin-bottom: 4px; }
.sl-canvas { max-width: min(640px, 100%); max-height: 56vh; display: block; margin: 0 auto; } /* cap so the "Now Analysing" panel fits beside it on wide/tall monitors instead of wrapping far below */
.sl-stop { font-family: 'Oswald', var(--font-body, sans-serif); text-transform: uppercase; letter-spacing: .1em; font-size: 12px; color: #7c8285; background: transparent; border: 1.5px solid rgba(28,28,28,.3); border-radius: 8px; padding: 7px 26px; cursor: pointer; transition: color .2s, border-color .2s, background .2s; }
.sl-stop:hover { color: #b26f0d; border-color: #b26f0d; background: rgba(255,190,23,.06); }
.sl-stop:focus-visible { outline: 2px solid #ffbe17; outline-offset: 2px; }
.sl-panel { min-width: 200px; }
.sl-h { font-family: 'Oswald', var(--font-body, sans-serif); text-transform: uppercase; letter-spacing: .1em; font-size: 12px; color: #5a5f61; margin: 0 0 12px; padding-bottom: 9px; border-bottom: 1px solid rgba(28,28,28,.14); }
.sl-row { display: flex; align-items: center; gap: 11px; padding: 5px 0; }
.sl-ind { width: 16px; height: 16px; border-radius: 50%; border: 1.6px solid rgba(28,28,28,.42); position: relative; flex: none; transition: border-color .3s, box-shadow .3s; }
.sl-ind::after { content: ''; position: absolute; inset: 3px; border-radius: 50%; background: #ffbe17; opacity: 0; transition: opacity .3s; }
.sl-row.scanning .sl-ind { border-color: #b26f0d; box-shadow: 0 0 8px 0 rgba(255,190,23,.5); }
.sl-row.done .sl-ind { border-color: #b26f0d; }
.sl-row.done .sl-ind::after { opacity: 1; }
.sl-nm { font-family: 'Oswald', var(--font-body, sans-serif); text-transform: uppercase; letter-spacing: .04em; font-size: 12.5px; color: #7c8285; display: inline-block; transform-origin: left center; transition: color .3s, transform .25s ease; }
/* Enlarge the running skill to highlight it — transform (not font-size) so the list doesn't reflow. */
.sl-row.scanning .sl-nm { color: #b26f0d; font-weight: 600; transform: scale(1.18); }
.sl-row.done .sl-nm { color: #2a2a2a; }
.sl-done { margin-top: 18px; padding-top: 13px; border-top: 1px solid rgba(28,28,28,.14); font-family: 'Oswald', var(--font-body, sans-serif); text-transform: uppercase; letter-spacing: .05em; font-size: 12.5px; line-height: 1.5; color: #b26f0d; max-width: 210px; opacity: 0; transform: translateY(5px); transition: opacity .55s ease, transform .55s ease; }
.sl-done.show { opacity: 1; transform: none; }
/* Import cross-fade: the whole Home view dips to transparent+blur, then fades back in showing the scanner. */
.view-home { transition: opacity .5s ease, filter .5s ease; }
.view-home.view-fading { opacity: 0; filter: blur(6px); }
/* Hand-off cross-fade: after the scanner fades out, the destination (Quick Snapshot) fades IN rather than
   hard-cutting, so completion doesn't feel like a page reload. */
@keyframes slFadeIn { from { opacity: 0; } to { opacity: 1; } }
.view.sl-fadein { animation: slFadeIn .5s ease; }
.home-picker { margin: 0 auto; }
.home-picker { display: grid; grid-template-columns: 264px minmax(0, 1fr); gap: 18px; align-items: start; max-width: 900px; }
@media (max-width: 760px) { .home-picker { grid-template-columns: 1fr; } }

.home-menu { display: flex; flex-direction: column; gap: 10px; }
.home-opt { position: relative; display: flex; align-items: center; gap: 12px; width: 100%; text-align: left; font: inherit; cursor: pointer; background: #fff; border: 1px solid rgba(0, 0, 0, .12); border-radius: 12px; padding: 13px 14px; transition: border-color .14s, box-shadow .14s, transform .12s, background .14s; }
.home-opt:hover { border-color: rgba(255, 190, 23, .7); transform: translateY(-1px); }
.home-opt:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }
.home-opt.is-active { background: #2c2c2c; border-color: #2c2c2c; box-shadow: 0 10px 24px -14px rgba(0, 0, 0, .45); }
.home-opt-ic { flex: none; width: 34px; height: 34px; border-radius: 9px; display: flex; align-items: center; justify-content: center; background: var(--gold); color: #1a1a1a; }
.home-opt-ic svg { width: 20px; height: 20px; }
.home-opt.is-active .home-opt-ic { background: rgba(255, 190, 23, .16); color: var(--gold); }
.home-opt-tx { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.home-opt-title { font-size: .86rem; font-weight: 700; color: #1a1a1a; }
.home-opt-sub { font-size: .7rem; color: #8a8478; }
.home-opt.is-active .home-opt-title { color: #fff; }
.home-opt.is-active .home-opt-sub { color: rgba(255, 242, 209, .7); }
.home-opt-badge { position: absolute; top: 9px; right: 10px; font-size: .56rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: #9a6a00; background: rgba(255, 190, 23, .16); border: 1px solid rgba(255, 190, 23, .5); border-radius: 999px; padding: 2px 7px; }
.home-opt.is-active .home-opt-badge { color: var(--ink); background: var(--gold); border-color: var(--gold); }

.home-detail { position: relative; min-height: 236px; }
.home-panel { display: none; flex-direction: column; align-items: flex-start; gap: 12px; border-radius: 16px; padding: 26px 26px 24px; }
.home-panel.is-active { display: flex; }
.home-panel-ic { color: var(--gold); }
.home-panel-ic svg { width: 40px; height: 40px; }
.home-panel-h { font-size: 1.3rem; font-weight: 700; color: #fff; margin: 2px 0 0; letter-spacing: .01em; }
.home-panel-desc { font-size: .86rem; line-height: 1.6; color: #d9cfbb; max-width: 52ch; margin: 0; }
.home-panel-cta { margin-top: 6px; font: inherit; font-size: .82rem; font-weight: 700; color: var(--ink); background: var(--gold); border: 1px solid var(--gold); border-radius: 9px; padding: 10px 20px; cursor: pointer; transition: background .12s, transform .12s; }
.home-panel-cta:hover { background: #ffca3d; transform: translateY(-1px); }
.home-panel-cta:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }
.home-panel-badge { position: absolute; top: 18px; right: 18px; font-size: .6rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--ink); background: var(--gold); border-radius: 999px; padding: 3px 9px; }

/* ===================== Home: the "where to start" picker =====================
   Centered under the page title + Duo: five lean, clickable tiles that each route to a view via
   data-nav-to. The whole page sits in one glance — no scrolling. */
/* Explicit 3-up grid: with six cards, flex-wrap left the sixth orphaned alone on a second row.
   Two balanced rows of three read as a deliberate menu instead of an afterthought. */
.home-cards { display: grid; grid-template-columns: repeat(3, minmax(0, 176px)); justify-content: center; gap: 14px; max-width: 900px; margin: 16px auto 0; }
@media (max-width: 620px) { .home-cards { grid-template-columns: repeat(2, minmax(0, 176px)); } }
/* Single column only on genuinely tiny screens — minmax(0,…) lets two cards shrink to fit a 375px
   phone, and 2-up there beats six full-width rows of scrolling. */
@media (max-width: 340px) { .home-cards { grid-template-columns: minmax(0, 1fr); } }
/* Home chooser: two compact horizontal cards (icon | text | arrow), equal height in a 2-up grid,
   so the picker + secondary links + skip all sit above the fold with no scrolling. */
.opt-card { display: flex; flex-direction: row; align-items: center; text-align: left; gap: 15px; font: inherit; cursor: pointer; background: #fff; border: 1px solid rgba(0, 0, 0, .12); border-radius: 14px; padding: 18px 18px; transition: border-color .14s, box-shadow .14s, transform .12s; }
.opt-card:hover { border-color: rgba(255, 190, 23, .8); transform: translateY(-2px); box-shadow: 0 12px 26px -14px rgba(255, 190, 23, .5); }
.opt-card:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }
.opt-ic { width: 46px; height: 46px; border-radius: 12px; flex: none; display: flex; align-items: center; justify-content: center; background: linear-gradient(180deg, #ffcf4b 0%, var(--gold) 60%, #f0ac10 100%); color: #1a1a1a; box-shadow: inset 0 1px 0 rgba(255, 255, 255, .45); }
.opt-ic svg { width: 24px; height: 24px; }
.opt-tx { display: flex; flex-direction: column; gap: 4px; min-width: 0; flex: 1; }
.opt-title { font-size: .95rem; font-weight: 700; color: #1a1a1a; line-height: 1.2; }
.opt-sub { font-size: var(--fs-body); color: #8a8478; line-height: 1.4; }
.opt-go { display: flex; align-items: center; font-size: 1.1rem; flex: none; color: #c9a94a; }
/* "skip this welcome" — understated, below the tiles */
.home-skip { display: flex; align-items: center; justify-content: center; gap: 9px; margin: 22px auto 0; color: #8a8478; font-size: .76rem; cursor: pointer; user-select: none; }
.home-skip input { width: 15px; height: 15px; accent-color: var(--gold); cursor: pointer; }
.home-skip:hover { color: #5a5a5a; }

/* ===================== Cohort Diagnostic ===================== */
.pb-lead { color: #5a5a5a; font-size: var(--fs-body); line-height: 1.55; margin: 0 0 18px; max-width: 62ch; }
.pb-lead strong { color: #1a1a1a; }
.pb-layout { display: grid; grid-template-columns: minmax(0, 1fr) 280px; gap: 22px; align-items: start; }
@media (max-width: 900px) { .pb-layout { grid-template-columns: 1fr; } }
.pb-main { min-width: 0; }

/* Step flow (steps 1 & 4 are light framed cards; steps 2 & 3 are the glossy cohort boxes) */
.pb-flow { display: flex; flex-direction: column; gap: 16px; }
.pb-step { background: #fff; border: 1px solid rgba(0, 0, 0, .12); border-radius: 14px; padding: 16px 18px 18px; }
/* Steps 1 (call type) and 4 (generate) are frameless — clean opener/closer, not boxed cards. */
.pb-step:first-of-type, .pb-step:last-of-type { background: transparent; border: none; padding: 0 0 4px; }
/* Step-4 instruction sits to the right of the label. */
.pb-step-note { font-size: var(--fs-body); color: #4a4a4a; font-weight: 400; text-transform: none; letter-spacing: 0; }
.pb-step-head { display: flex; align-items: center; gap: 9px; margin-bottom: 12px; }
.pb-step-n { flex: none; width: 20px; height: 20px; border-radius: 50%; background: var(--ink); color: var(--gold); font-size: .68rem; font-weight: 700; display: flex; align-items: center; justify-content: center; }
/* Step titles match the cross-skill section-label size/style ("What held the call back"). */
.pb-step-title { font-family: var(--font-body); font-size: var(--fs-body); font-weight: 700; letter-spacing: normal; text-transform: none; color: #1a1a1a; margin: 0; }

/* Step 1 — call type + scorecard (info sits BELOW the dropdown) */
.pb-select { font: inherit; font-size: var(--fs-body); color: #1a1a1a; background: #fff; border: 1px solid rgba(0, 0, 0, .2); border-radius: 8px; padding: 9px 12px; min-width: 260px; max-width: 100%; cursor: pointer; }
.pb-select option { font-size: var(--fs-body); }
.pb-select:focus { outline: none; border-color: var(--gold); box-shadow: 0 0 0 3px rgba(255, 190, 23, .18); }
.pb-select:disabled { color: #6a6a6a; background: #f4f2ec; cursor: default; }
.pb-sc-info { font-size: var(--fs-body); color: #4a4a4a; margin: 10px 0 0; line-height: 1.5; }
.pb-sc-info.is-muted { color: #8a8478; font-style: italic; }
.pb-sc-info strong { color: #1a1a1a; }
.pb-sc-edit { color: #9a6a00; font-weight: 600; margin-left: 6px; white-space: nowrap; }

/* Steps 2 & 3 — cohort uploaders on glossy dark boxes (.glossy provides bg/border/color) */
.pb-cohorts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }
@media (max-width: 560px) { .pb-cohorts { grid-template-columns: 1fr; } }
.pb-cohort { border-radius: 14px; padding: 13px 14px 12px; display: flex; flex-direction: column; }
.pb-cohort-head { display: flex; align-items: center; gap: 9px; }
.pb-step-n-sm { width: 21px; height: 21px; font-size: .7rem; background: rgba(255, 190, 23, .16); color: var(--gold); }
.pb-cohort-title { flex: 1 1 auto; font-size: .92rem; font-weight: 700; color: #fff; }
.pb-cohort-count { font-size: .74rem; font-weight: 700; color: #b8ad95; font-variant-numeric: tabular-nums; }
.pb-cohort-count.is-full { color: #7fd39f; }
.pb-cohort-hint { font-size: .72rem; line-height: 1.45; color: #c9beac; margin: 6px 0 9px; }
.pb-drop { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 4px; border: 1.5px dashed rgba(0, 0, 0, .22); border-radius: 12px; padding: 11px 14px; cursor: pointer; color: #5a5a5a; background: #fff; transition: border-color .14s, background .14s, color .14s; }
.pb-drop:hover, .pb-drop:focus-visible { border-color: var(--gold); background: #fffaef; color: #3a3a3a; outline: none; }
.pb-drop.drop-active { border-color: var(--gold); background: #fff5db; color: #1a1a1a; }
.pb-drop svg { width: 20px; height: 20px; color: #9a6a00; }
.pb-drop-text { font-size: .78rem; }
.pb-drop-text strong { color: #1a1a1a; }
.pb-drop-link { color: #9a6a00; font-weight: 600; text-decoration: underline; }
.pb-drop-sub { font-size: .7rem; color: #8a8478; }
.pb-files { list-style: none; margin: 12px 0 0; padding: 0; display: flex; flex-direction: column; gap: 5px; }
.pb-file { display: flex; align-items: center; gap: 8px; background: rgba(255, 255, 255, .07); border: 1px solid rgba(255, 255, 255, .1); border-radius: 7px; padding: 5px 6px 5px 10px; font-size: .76rem; }
.pb-file-name { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #e7ddc9; }
.pb-file-x { flex: none; border: none; background: transparent; color: #b8ad95; font-size: 1.05rem; line-height: 1; cursor: pointer; padding: 2px 5px; border-radius: 5px; }
.pb-file-x:hover { color: #ff8a7a; background: rgba(255, 138, 122, .12); }
.pb-cohort-msg { font-size: .73rem; line-height: 1.4; color: #9fd9b3; margin: 10px 0 0; min-height: 1em; }
.pb-cohort-msg.is-warn { color: #ffb4a2; }

/* Step 4 — generate */
.pb-actions { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
/* Generate is a clickable text control (no outline / no fill), like Import Transcript. */
/* Generate matches the "Edit scorecards" clickable text exactly: same size, weight, gold-brown
   colour, and the default link underline. Disabled = the same style, just dimmed. */
.pb-generate { font: inherit; font-size: var(--fs-body); font-weight: 600; color: #9a6a00; background: transparent; border: none; border-radius: 0; padding: 0; cursor: pointer; text-decoration: underline; transition: color .12s; }
.pb-generate:hover:not(:disabled) { color: #7a5400; background: transparent; text-decoration: underline; }
.pb-generate:disabled { background: transparent; border: none; color: #9a6a00; opacity: .5; cursor: default; text-decoration: underline; }
.pb-gen-hint { font-size: .78rem; color: #6a6a6a; }
.pb-status { margin-top: 16px; padding: 14px 16px; border: 1px solid #d9e4d3; border-left: 3px solid #2a9d57; border-radius: 10px; background: #f2f7ef; font-size: .82rem; line-height: 1.55; color: #2a2a2a; }
.pb-status strong { color: #1a1a1a; }

/* Right-side notes panel */
.pb-aside { display: flex; flex-direction: column; gap: 12px; position: sticky; top: 14px; }
@media (max-width: 900px) { .pb-aside { position: static; } }
.pb-side-note { display: flex; align-items: flex-start; gap: 11px; padding: 13px 15px; border-radius: 12px; border: 1px solid #e4dcc6; background: #faf6ea; }
.pb-side-note svg { flex: none; width: 19px; height: 19px; color: #9a6a00; margin-top: 1px; }
.pb-side-h { font-size: .82rem; font-weight: 700; color: #1a1a1a; margin: 0 0 3px; }
.pb-side-note p { margin: 0; font-size: .75rem; line-height: 1.5; color: #5a5a5a; }
.pb-side-note a { color: #9a6a00; font-weight: 600; }
.pb-side-privacy { border-color: #d9e4d3; background: #f2f7ef; }
.pb-side-privacy svg { color: #2a9d57; }

/* Run panel + circular time gauge (Phase C) */
.pb-run { background: #fff; border: 1px solid rgba(0, 0, 0, .12); border-radius: 16px; padding: 22px 24px 20px; text-align: center; max-width: 520px; }
.pb-run-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; text-align: left; }
.pb-run-h { font-size: 1rem; font-weight: 700; color: #1a1a1a; margin: 0; }
.pb-stop { font: inherit; font-size: .78rem; font-weight: 700; color: #a5342c; background: transparent; border: 1px solid rgba(165, 52, 44, .4); border-radius: 8px; padding: 7px 16px; cursor: pointer; }
.pb-stop:hover { background: rgba(165, 52, 44, .08); border-color: #a5342c; }
.pb-gauge { position: relative; width: 150px; height: 150px; margin: 18px auto 6px; }
.pb-gauge-svg { width: 100%; height: 100%; transform: rotate(-90deg); }
.pb-gauge-track { fill: none; stroke: #eceadf; stroke-width: 9; }
.pb-gauge-arc { fill: none; stroke: var(--gold); stroke-width: 9; stroke-linecap: round; transition: stroke-dashoffset .5s ease; }
.pb-gauge-center { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; }
.pb-eta-num { font-family: var(--font-display); font-size: 1.5rem; color: #1a1a1a; line-height: 1; }
.pb-eta-lbl { font-size: .7rem; letter-spacing: .1em; text-transform: uppercase; color: #8a8478; margin-top: 3px; }
.pb-count { font-size: .82rem; font-weight: 700; color: #1a1a1a; margin: 6px 0 2px; font-variant-numeric: tabular-nums; }
.pb-run-status { font-size: .78rem; color: #5a5a5a; margin: 0 0 10px; min-height: 1.1em; }
.pb-run-note { font-size: .72rem; color: #8a8478; line-height: 1.5; margin: 0; }

/* Completion — cohort comparison table */
/* Single-column result: comparison table, then the coaching playbook. `.pb-full` (set during a run)
   hides the notes aside so the result spans the whole workspace; restored on Start over. */
.pb-complete { max-width: 900px; }
.pb-complete .pb-cmp-scroll { max-width: 640px; }
.pb-layout.pb-full { grid-template-columns: 1fr; }
.pb-layout.pb-full .pb-aside { display: none; }
.pb-done-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.pb-restart { font: inherit; font-size: .78rem; font-weight: 600; color: #9a6a00; background: transparent; border: 1px solid rgba(154, 106, 0, .4); border-radius: 8px; padding: 7px 16px; cursor: pointer; }
.pb-restart:hover { background: rgba(154, 106, 0, .08); border-color: #9a6a00; }
.pb-done-banner { font-size: .82rem; color: #2a2a2a; margin: 12px 0 14px; padding: 10px 14px; border-radius: 10px; background: #f2f7ef; border: 1px solid #d9e4d3; }
.pb-done-banner.is-stopped { background: #faf3e8; border-color: #e4d6bd; }
.pb-cmp-scroll { overflow-x: auto; }
.pb-cmp { width: 100%; border-collapse: collapse; font-size: .82rem; }
.pb-cmp thead th { text-align: right; font-size: .7rem; letter-spacing: .06em; text-transform: uppercase; color: #7a7263; font-weight: 700; padding: 0 10px 8px; border-bottom: 1px solid rgba(0, 0, 0, .14); }
.pb-cmp th.pb-cmp-skill { text-align: left; }
.pb-cmp td { text-align: right; padding: 9px 10px; border-bottom: 1px solid rgba(0, 0, 0, .07); color: #2a2a2a; font-variant-numeric: tabular-nums; }
.pb-cmp td.pb-cmp-skill { text-align: left; color: #1a1a1a; font-weight: 600; }
.pb-cmp-gap { font-weight: 700; }
.pb-cmp-gap.gap-hi { color: #b3433b; }
.pb-cmp-gap.gap-mid { color: #9a6a00; }
.pb-cmp-gap.gap-lo { color: #5a7d3a; }
.pb-cmp-note { font-size: .74rem; color: #6a6a6a; line-height: 1.5; margin: 12px 0 0; }
.pb-cmp-note a { color: #9a6a00; font-weight: 600; }
.pb-cmp-empty { font-size: .82rem; color: #8a5a00; margin: 12px 0 0; }
.pb-next-note { margin-top: 16px; padding: 12px 15px; border-radius: 10px; background: #faf6ea; border: 1px solid #e4dcc6; font-size: .78rem; line-height: 1.5; color: #5a5a5a; }

/* Completion actions (Download PDF + Start over) */
.pb-done-actions { display: flex; gap: 10px; }
.pb-pdf { font: inherit; font-size: .78rem; font-weight: 700; color: #1a1a1a; background: var(--gold); border: 1px solid var(--gold); border-radius: 8px; padding: 7px 16px; cursor: pointer; }
.pb-pdf:hover { background: #e0a800; border-color: #e0a800; }

/* Coaching playbook — shared by the on-screen render (#pb-coaching) and the PDF (#report .pb-rep);
   both sit on a light background with dark text, so one set of styles serves both. */
.pb-coaching { margin-top: 26px; }
.pb-coaching-loading { font-size: .82rem; color: #8a5a00; font-style: italic; margin: 0; }
.pb-coaching-fail { font-size: .8rem; color: #8a5a00; line-height: 1.5; margin: 0; }
.pb-coaching-h { font-size: 1rem; font-weight: 700; color: #1a1a1a; margin: 0 0 6px; }
.pb-coaching-intro { font-size: .85rem; line-height: 1.6; color: #3a3a3a; margin: 0 0 14px; }
.pb-focus { border-top: 1px solid rgba(0, 0, 0, .1); padding: 14px 0; display: flex; gap: 26px; align-items: flex-start; break-inside: avoid; }
.pb-focus-main { flex: 1 1 auto; min-width: 0; }
.pb-focus-gauges { flex: 0 0 auto; display: flex; gap: 14px; padding-top: 2px; }
.pb-gauge-unit { text-align: center; width: 86px; }
.pb-gauge-mini { width: 86px; height: 48px; display: block; }
.pb-gauge-val { font-family: var(--font-display); font-size: 1.15rem; color: #1a1a1a; line-height: 1; margin-top: 2px; }
.pb-gauge-val span { font-family: var(--font-body); font-size: .6rem; color: #8a8478; }
.pb-gauge-lbl { font-size: .62rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: #6a6a6a; margin-top: 3px; }
@media (max-width: 640px) { .pb-focus { flex-direction: column; gap: 12px; } .pb-focus-gauges { align-self: flex-start; } }
.pb-focus-skill { font-size: .9rem; font-weight: 700; color: #1a1a1a; margin-bottom: 6px; }
.pb-focus-row { display: grid; grid-template-columns: 132px 1fr; gap: 10px; margin: 5px 0; }
.pb-focus-lbl { font-size: .66rem; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: #9a6a00; padding-top: 2px; }
.pb-focus-row p { margin: 0; font-size: .82rem; line-height: 1.5; color: #2a2a2a; }
.pb-focus-row ul { margin: 0; padding-left: 18px; }
.pb-focus-row li { font-size: .82rem; line-height: 1.5; color: #2a2a2a; margin: 2px 0; }
.pb-gaps { border-top: 1px solid rgba(0, 0, 0, .1); padding-top: 12px; margin-top: 4px; }
.pb-gaps-h { font-size: .82rem; font-weight: 700; color: #1a1a1a; margin: 0 0 6px; }
.pb-gaps ul { margin: 0; padding-left: 18px; }
.pb-gaps li { font-size: .82rem; line-height: 1.5; color: #2a2a2a; margin: 3px 0; }
@media (max-width: 520px) { .pb-focus-row { grid-template-columns: 1fr; gap: 2px; } }

/* Cohort Diagnostic PDF reuses the report masthead / closing card / footer plus the .pb-cmp table and
   .pb-coaching blocks; only the subtitle line under the masthead needs a small tweak. */
.pb-rep-sub { color: #555; font-weight: 600; margin: 8px 0 4px; }

/* ===================== Support Center (view-doc) =====================
   Answers on the left under a topic picker, contact rail on the right. Lives on the light
   working-canvas, so it uses the same white-card / dark-text idiom as the Trust and Anonymize
   pages rather than the dark base theme. Filtering is in ui/support.ts. */
.sup-grid { display: grid; grid-template-columns: minmax(0, 1fr) 360px; gap: 34px; align-items: start; max-width: 1180px; }

/* Topic picker. */
.sup-picker { background: #fff; border: 1px solid rgba(0, 0, 0, .12); border-radius: 12px; padding: 14px 16px 16px; }
.sup-picker-label { display: block; font-family: var(--font-display); font-size: .8rem; letter-spacing: .04em; color: #1a1a1a; margin-bottom: 7px; }
.sup-select-wrap { position: relative; }
.sup-select-wrap::after {
  content: ''; position: absolute; right: 14px; top: 50%; width: 8px; height: 8px; margin-top: -5px;
  border-right: 2px solid #1a1a1a; border-bottom: 2px solid #1a1a1a; transform: rotate(45deg); pointer-events: none;
}
#sup-cat {
  appearance: none; -webkit-appearance: none; -moz-appearance: none;
  width: 100%; padding: 10px 38px 10px 13px;
  font-family: var(--font-body); font-size: .78rem; font-weight: 600; color: #1a1a1a; line-height: 1.3;
  background: #fff; border: 1.5px solid #1a1a1a; border-radius: 7px; cursor: pointer;
}
#sup-cat:hover { background: #fffdf6; }
#sup-cat:focus-visible { outline: 2px solid var(--gold); outline-offset: 1px; }
.sup-count { font-size: .68rem; color: #5a5a5a; margin-top: 8px; }

.sup-res-h { font-family: var(--font-display); font-size: 1rem; font-weight: 400; letter-spacing: .04em; color: #1a1a1a; border-left: 3px solid var(--gold); padding-left: 9px; margin: 24px 0 10px; }

/* Answers. */
.sup-faq { background: #fff; border: 1px solid rgba(0, 0, 0, .12); border-radius: 10px; margin: 8px 0; overflow: hidden; }
.sup-faq > summary { cursor: pointer; list-style: none; padding: 11px 15px; font-size: .76rem; font-weight: 700; color: #1a1a1a; display: flex; justify-content: space-between; align-items: center; gap: 12px; }
.sup-faq > summary::-webkit-details-marker { display: none; }
.sup-faq > summary::after { content: '+'; font-family: var(--font-display); font-size: 1.15rem; color: #9a6a00; line-height: 1; }
.sup-faq[open] > summary::after { content: '\2013'; }
.sup-faq > summary:hover { background: #fffdf6; }
.sup-faq > summary:focus-visible { outline: 2px solid var(--gold); outline-offset: -2px; }
.sup-body { padding: 0 15px 13px; font-size: .74rem; line-height: 1.6; color: #1f1f1f; }
.sup-body p { margin: 7px 0; }
.sup-body ul { margin: 7px 0; padding-left: 18px; }
.sup-body li { margin: 3px 0; }
.sup-body strong { color: #000; font-weight: 700; }
.sup-body a, .sup-body a:visited { color: #9a6a00; text-decoration: none; border-bottom: 1px solid rgba(154, 106, 0, .45); }
.sup-body a:hover { background: var(--gold-tint); }

.sup-ref { width: 100%; border-collapse: collapse; margin: 8px 0 4px; font-size: .68rem; }
.sup-ref th, .sup-ref td { text-align: left; padding: 6px 8px; border-bottom: 1px solid rgba(0, 0, 0, .1); vertical-align: top; color: #1f1f1f; }
.sup-ref thead th { background: var(--gold-tint); border-bottom: 1.5px solid #1a1a1a; color: #1a1a1a; }
.sup-ref td:first-child, .sup-ref th:first-child { font-weight: 600; }

.sup-callout { background: #faf6ea; border: 1px solid #e4dcc6; border-left: 3px solid #c8951a; border-radius: 9px; padding: 10px 13px; margin: 9px 0; }
.sup-callout h4 { margin: 0 0 4px; font-size: .72rem; color: #1a1a1a; }
.sup-callout p { margin: 0; }

.sup-pill { display: inline-block; padding: 1px 7px; border-radius: 999px; font-size: .6rem; font-weight: 700; }
.sup-pill-green { background: #e3f5eb; color: #1c6b3c; }
.sup-pill-amber { background: #fdf0d2; color: #8a6400; }
.sup-pill-red { background: #f9e3e1; color: #8f322b; }

/* Contact rail. */
.sup-contact { position: sticky; top: 16px; background: #fff; border: 1.5px solid #1a1a1a; border-radius: 12px; overflow: hidden; }
/* Square (1:1) illustration box on a teal ground. The user asked for flat #14646e; measured contrast
   of the black cat on it is only ~2.9:1, so it's anchored in a gentle lighter-at-top gradient (same as
   the landing hero) which keeps the cat and the man's ink outlines legible. */
.sup-art { aspect-ratio: 1 / 1; background: radial-gradient(120% 95% at 50% 8%, #1c7c8b 0%, #14646e 66%); border-bottom: 1.5px solid #1a1a1a; display: flex; align-items: flex-end; justify-content: center; overflow: hidden; }
.sup-art svg { display: block; width: 100%; height: 100%; }
.sup-contact-body { padding: 15px 17px 17px; }
.sup-contact-h { font-family: var(--font-display); font-size: 1.05rem; font-weight: 400; letter-spacing: .04em; color: #1a1a1a; margin: 0 0 5px; }
.sup-contact-p { font-size: .72rem; line-height: 1.55; color: #333; margin: 0 0 12px; }
.sup-contact-list { list-style: none; margin: 0; padding: 0; }
.sup-contact-list li { display: flex; gap: 10px; align-items: flex-start; padding: 9px 0; border-top: 1px solid rgba(0, 0, 0, .1); font-size: .7rem; line-height: 1.5; color: #333; }
.sup-contact-list li:first-child { border-top: 0; padding-top: 0; }
.sup-ic { flex: 0 0 auto; width: 15px; height: 15px; margin-top: 2px; color: #1a1a1a; }
.sup-ic svg { width: 100%; height: 100%; display: block; }
.sup-k { display: block; font-weight: 700; color: #000; }
.sup-mail, .sup-mail:visited { font-weight: 700; color: #1a1a1a; text-decoration: none; border-bottom: 1.5px solid var(--gold); word-break: break-word; }
.sup-mail:hover { background: var(--gold-tint); }
.sup-cta, .sup-cta:visited { display: block; text-align: center; margin-top: 12px; padding: 9px 12px; background: var(--gold); color: #1a1a1a; font-weight: 700; font-size: .72rem; text-decoration: none; border: 1.5px solid #1a1a1a; border-radius: 7px; }
.sup-cta:hover { background: #ffd257; }
/* Confirmation state after the button copies the address to the clipboard. */
.sup-cta.copied, .sup-cta.copied:hover { background: #e3f5eb; color: #1c6b3c; border-color: #1c6b3c; }
.sup-note { font-size: .66rem; line-height: 1.5; color: #5a5a5a; margin: 12px 0 0; padding-top: 10px; border-top: 1px solid rgba(0, 0, 0, .1); }
.sup-note strong { color: #1a1a1a; }

@media (max-width: 1000px) {
  .sup-grid { grid-template-columns: 1fr; gap: 24px; }
  .sup-contact { position: static; max-width: 460px; }
}

/* ===================== Getting Started (in-app guide) =====================
   The former standalone guide.html, ported into a view. All styles scoped under .gs so the guide's
   generic class names (.sec, .ref, .callout, .pill, .steps, .who) can't collide with anything else,
   and re-coloured for the light working-canvas. */
.gs { max-width: 860px; }
.gs .lede { font-size: var(--fs-body); line-height: 1.6; color: #333; margin: 0 0 20px; max-width: 720px; }
.gs p { font-size: .8rem; line-height: 1.65; color: #1f1f1f; margin: 9px 0; }
.gs ul, .gs ol { font-size: .8rem; line-height: 1.6; color: #1f1f1f; margin: 9px 0; padding-left: 20px; }
.gs li { margin: 4px 0; }
.gs li::marker { color: #1a1a1a; }
.gs strong { color: #000; font-weight: 700; }
.gs em { font-style: italic; }
/* The Message Center owns a global, unscoped `.note` (a `>` marker, left padding, pre-wrap). The guide
   reuses the class name for plain footnotes, so neutralise that leak here — pre-wrap in particular was
   rendering the source-code indentation and misaligning wrapped lines. */
.gs .note { font-size: .74rem; color: #5a5a5a; padding-left: 0; white-space: normal; }
.gs .note::before { content: none; }
.gs a { color: #9a6a00; text-decoration: none; border-bottom: 1px solid rgba(154, 106, 0, .45); cursor: pointer; }
.gs a:hover { background: var(--gold-tint); }

/* Table of contents. */
.gs .toc { background: #fff; border: 1px solid rgba(0, 0, 0, .12); border-radius: 12px; padding: 14px 18px; margin: 0 0 26px; }
.gs .toc-h { font-family: var(--font-display); font-size: .85rem; letter-spacing: .04em; color: #1a1a1a; margin-bottom: 8px; }
.gs .toc ol { margin: 0; padding-left: 20px; columns: 2; column-gap: 30px; font-size: .74rem; }
.gs .toc li { margin: 3px 0; break-inside: avoid; }
.gs .toc li::marker { color: #1a1a1a; font-weight: 700; }
.gs .toc a { color: #1a1a1a; border-bottom-color: transparent; }
.gs .toc a:hover { background: transparent; border-bottom-color: var(--gold); }

/* Section + subsection headings. scroll-margin keeps TOC jumps clear of the sticky app header. */
.gs .sec { font-family: var(--font-display); font-size: 1.15rem; font-weight: 400; letter-spacing: .03em; color: #1a1a1a; border-left: 4px solid var(--gold); padding-left: 11px; margin: 34px 0 12px; scroll-margin-top: 80px; }
.gs .subsec { font-family: var(--font-display); font-size: .95rem; font-weight: 400; letter-spacing: .03em; color: #1a1a1a; margin: 22px 0 8px; }

/* Who-cards. */
.gs .who { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin: 12px 0; }
.gs .who-card { background: #fff; border: 1px solid rgba(0, 0, 0, .12); border-radius: 10px; padding: 13px 15px; }
.gs .who-card h4 { margin: 0 0 5px; font-size: .82rem; color: #1a1a1a; }
.gs .who-card p { margin: 0; font-size: .74rem; color: #4a4a4a; line-height: 1.55; }

/* Numbered step cards. */
.gs .steps { list-style: none; counter-reset: gs-step; padding: 0; margin: 12px 0; display: flex; flex-direction: column; gap: 12px; }
.gs .steps > li { position: relative; background: #fff; border: 1px solid rgba(0, 0, 0, .12); border-radius: 12px; padding: 14px 16px 14px 52px; counter-increment: gs-step; }
.gs .steps > li::before { content: counter(gs-step); position: absolute; left: 14px; top: 14px; width: 26px; height: 26px; border-radius: 50%; background: var(--ink); color: var(--gold); font-size: .8rem; font-weight: 700; display: flex; align-items: center; justify-content: center; }
.gs .steps h3 { margin: 0 0 6px; font-size: .84rem; color: #1a1a1a; font-weight: 700; }
.gs .steps p { margin: 6px 0 0; }
.gs .steps .note { color: #5a5a5a; }

/* Reference tables. */
.gs .ref { width: 100%; border-collapse: collapse; margin: 10px 0 4px; font-size: .72rem; }
.gs .ref th, .gs .ref td { text-align: left; padding: 7px 10px; border-bottom: 1px solid rgba(0, 0, 0, .1); vertical-align: top; color: #1f1f1f; }
.gs .ref thead th { background: var(--gold-tint); border-bottom: 1.5px solid #1a1a1a; color: #1a1a1a; }
.gs .ref td:first-child, .gs .ref th:first-child { font-weight: 600; }

/* Per-skill detail cards under "The eleven skills". */
.gs .gs-skills-detail { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin: 14px 0 4px; }
@media (max-width: 720px) { .gs .gs-skills-detail { grid-template-columns: 1fr; } }
.gs .gs-skill { background: #fff; border: 1px solid rgba(0, 0, 0, .12); border-left: 3px solid var(--gold); border-radius: 10px; padding: 13px 16px; }
.gs .gs-skill-h { margin: 0 0 8px; font-family: var(--font-display); font-size: .92rem; font-weight: 400; letter-spacing: .02em; color: #1a1a1a; }
.gs .gs-skill p { margin: 0 0 7px; font-size: .74rem; color: #3a3a3a; line-height: 1.55; }
.gs .gs-skill p:last-child { margin-bottom: 0; }
.gs .gs-skill-lbl { display: block; font-size: .62rem; font-weight: 700; text-transform: uppercase; letter-spacing: .06em; color: #9a6a00; margin-bottom: 1px; }

/* Callouts (multi-paragraph). */
.gs .callout { background: #faf6ea; border: 1px solid #e4dcc6; border-left: 3px solid #c8951a; border-radius: 10px; padding: 13px 17px; margin: 14px 0; }
.gs .callout h4 { margin: 0 0 7px; font-size: .8rem; color: #1a1a1a; }
.gs .callout p { margin: 0 0 8px; font-size: .76rem; }
.gs .callout p:last-child { margin-bottom: 0; }

/* Score pills. */
.gs .pill { display: inline-block; padding: 1px 8px; border-radius: 999px; font-size: .6rem; font-weight: 700; }
.gs .pill-green { background: #e3f5eb; color: #1c6b3c; }
.gs .pill-amber { background: #fdf0d2; color: #8a6400; }
.gs .pill-red { background: #f9e3e1; color: #8f322b; }

@media (max-width: 640px) {
  .gs .toc ol { columns: 1; }
  .gs .who { grid-template-columns: 1fr; }
}

/* ---------- Storage consent bar ----------
   Docked bottom-left, deliberately NOT a full-screen blocking overlay: the tab-scoped storage it
   describes is already active and strictly necessary, so there is nothing to block on. It sits below
   the Quick Help modal (z-index 80) so an open dialog is never obscured. */
.consent-bar {
  position: fixed;
  left: 20px;
  bottom: 20px;
  z-index: 70;
  width: min(420px, calc(100vw - 40px));
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 18px 20px;
  background: var(--panel);
  border: 1px solid var(--border-strong);
  border-radius: 10px;
  box-shadow: 0 12px 34px rgba(0, 0, 0, 0.5);
}
.consent-bar[hidden] { display: none; }
.consent-title {
  margin: 0 0 6px;
  font-family: var(--font-display);
  letter-spacing: .5px;
  font-size: 1.05rem;
  color: var(--heading);
}
.consent-desc {
  margin: 0;
  font-size: .78rem;
  line-height: 1.55;
  color: var(--muted);
}
.consent-desc a { color: var(--gold); }
.consent-actions { display: flex; justify-content: flex-end; gap: 10px; }
/* The accept button is emphasised but not the only escape: "Just this tab" is a real, equal choice
   (both are plain buttons, same size) so the banner isn't a dark pattern. */
.consent-primary { border-color: var(--gold); background: var(--panel-2); }

@media (max-width: 520px) {
  .consent-bar { left: 12px; right: 12px; bottom: 12px; width: auto; }
  .consent-actions { flex-direction: column-reverse; }
  .consent-actions .btn { justify-content: center; }
}

/* ---------------------------------------------------------------------------------------------
   Formerly inline style="" attributes (CSP: style-src no longer allows 'unsafe-inline'; a style
   attribute cannot be hashed). Same rendering, now covered by the policy.
   --------------------------------------------------------------------------------------------- */
/* Scoped to .gs so it outranks `.gs p { margin: 9px 0 }` — a bare `.note-gap` loses that cascade. */
.gs .note-gap { margin-top: 18px; }
.sf-yt svg { overflow: visible; }

/* ============================================================================================
   Buyer-Side Diagnostic (view + momentum radar). Content region is dark-on-light; the radar is a
   dark sci-fi face. Model text is rendered via textContent; meter/dial values are set via the CSSOM
   (element.style.*), never inline style="" — the CSP forbids inline styles.
   ============================================================================================ */
#buyer-app { max-width: 1120px; margin: 0; }
.bs-title { font-family: var(--font-display); font-weight: 700; font-size: 1.7rem; letter-spacing: .01em; color: #1a1a1a; margin: 0 0 6px; }
.bs-lede { color: #5a5a5a; font-size: var(--fs-body); max-width: 660px; margin: 0 0 18px; line-height: 1.5; }

/* Fresh-state intro — stacked blocks (what it is / how to read / where it helps / plan). */
.bs-intro { max-width: 820px; margin: 2px 0 22px; display: flex; flex-direction: column; gap: 16px; }
.bs-intro-h { font-family: var(--font-display); font-weight: 400; text-transform: uppercase; letter-spacing: .5px; font-size: 1rem; color: #1a1a1a; margin: 0 0 6px; }
.bs-intro-p { margin: 0; font-size: var(--fs-body); line-height: 1.55; color: #3a3a3a; }
.bs-intro-list { margin: 0; padding-left: 18px; }
.bs-intro-list li { margin: 5px 0; font-size: var(--fs-body); line-height: 1.5; color: #3a3a3a; }
.bs-intro-uses { margin: 0; font-size: var(--fs-body); line-height: 1.5; color: #3a3a3a; }
.bs-intro-strong { font-weight: 700; color: #1a1a1a; }
.bs-intro-plan { margin: 0; font-size: var(--fs-body); color: #6a6a6a; }
/* Readable link colour — the gold was too light on the grey page. */
.bs-intro-link { color: #14646e; font-weight: 600; text-decoration: none; }
.bs-intro-link:hover { text-decoration: underline; }

/* Idle state: two columns (intro text left, live demo radar right), no frame. */
.bs-idle { display: grid; grid-template-columns: 1.05fr 1fr; gap: 52px; align-items: start; }
@media (max-width: 880px) { .bs-idle { grid-template-columns: 1fr; } }
/* Lean idle copy: 2-line intro, a Getting Started pointer, the availability disclaimer, then the CTA. */
.bs-idle-guide { margin: 14px 0 0; font-size: var(--fs-body); color: #4a4a4a; line-height: 1.5; max-width: 520px; }
.bs-idle-disclaimer { margin: 8px 0 0; font-size: var(--fs-body); color: #6a6a6a; line-height: 1.5; max-width: 520px; }
.bs-idle-left { display: flex; flex-direction: column; }
.bs-idle-hint { margin: 16px 0 0; font-size: var(--fs-body); color: #4a4a4a; line-height: 1.55; max-width: 520px; }
.bs-idle-guide { margin-top: auto; padding-top: 20px; }
.bs-idle-cta { margin-top: 22px; }
.bs-idle-import { background: none; border: none; padding: 0; font-family: var(--font-display); font-weight: 400; font-size: 1rem; letter-spacing: .5px; text-transform: uppercase; color: #1a1a1a; cursor: pointer; }
.bs-idle-import:hover { text-decoration: underline; }
.bs-idle-import-sub { margin: 7px 0 0; font-size: var(--fs-body); color: #4a4a4a; line-height: 1.5; max-width: 460px; }
/* While a file classifies: same weight as the import CTA it replaces, pulsing like a slow heartbeat so
   the user sees it's a live process. Reduced-motion users get the message, steady (no pulse). */
.bs-idle-importing { margin: 0; font-family: var(--font-display); font-weight: 400; font-size: 1rem; letter-spacing: .5px; text-transform: uppercase; color: #1a1a1a; animation: bs-importing-beat 1.6s ease-in-out infinite; }
@keyframes bs-importing-beat { 0%, 100% { opacity: 1; } 50% { opacity: .28; } }
@media (prefers-reduced-motion: reduce) { .bs-idle-importing { animation: none; } }
.bs-idle-radar { max-width: 420px; margin: 6px auto 0; }
.bs-run-note { margin: 16px 0 0; font-size: var(--fs-body); color: #6a6a6a; line-height: 1.5; }
.bs-card { background: transparent; border: none; border-radius: 0; padding: 0; }
.bs-reuse { display: flex; gap: 12px; align-items: flex-start; background: var(--gold-tint); border: 1px solid #f0e6c8; border-radius: 10px; padding: 12px 14px; }
.bs-reuse-ic { font-size: 20px; line-height: 1.2; }
.bs-reuse-t { font-weight: 600; color: #1a1a1a; font-size: var(--fs-body); }
.bs-reuse-s { color: #7a6a3a; font-size: var(--fs-body); margin-top: 2px; }
.bs-actions { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; margin-top: 16px; }
.bs-empty { text-align: center; padding: 26px 10px; }
.bs-empty-t { font-weight: 600; color: #1a1a1a; margin: 0 0 4px; }
.bs-empty-s { color: #6a6a6a; font-size: var(--fs-body); margin: 0 0 16px; }
.bs-file { display: none; }
.bs-error { margin-top: 14px; color: #b3433b; font-size: var(--fs-body); }

/* Match the playbook's primary CTA (.pb-generate) so both primary actions look identical app-wide. */
#buyer-app .btn-primary { background: var(--gold); color: #1a1a1a; border: 1px solid var(--gold); border-radius: 8px; padding: 10px 24px; font: inherit; font-size: .85rem; font-weight: 700; cursor: pointer; transition: background .12s, border-color .12s; }
#buyer-app .btn-primary:hover { background: #e0a800; border-color: #e0a800; }
#buyer-app .btn-ghost { background: transparent; color: #1a1a1a; border: 1px solid #cfcabb; border-radius: 9px; padding: 10px 16px; font: inherit; font-weight: 600; cursor: pointer; }
#buyer-app .btn-ghost:hover { border-color: var(--gold); color: #8a6a12; }

/* Running — high-level phase strip (guideline 7). */
.bs-board { margin: 6px 0 18px; }
.bs-strip { display: flex; gap: 10px; flex-wrap: wrap; margin: 18px 0 20px; }
.bs-phase { display: inline-flex; align-items: center; gap: 8px; padding: 8px 14px; border-radius: 20px; background: #fff; border: 1px solid #e6e4df; color: #8a8a8a; font-size: .82rem; font-weight: 600; }
.bs-dot { width: 9px; height: 9px; border-radius: 50%; background: #cbc8bf; flex: none; }
.bs-phase.is-running { color: #1a1a1a; border-color: var(--gold); box-shadow: 0 0 0 3px rgba(255,190,23,.14); }
.bs-phase.is-running .bs-dot { background: var(--gold); box-shadow: 0 0 8px rgba(255,190,23,.9); }
.bs-phase.is-done { color: #2a7d52; border-color: #bfe3cd; }
.bs-phase.is-done .bs-dot { background: #2a9d57; }
.bs-stop { margin-top: 4px; }

/* Results — two columns: text left, visuals right. */
/* "New analysis" — a plain clickable label pushed to the right of the lens-tab row, i.e. up in the
   call-bar frame above its divider. Shown on Buyer Signals once the call is scored. */
/* Right-aligned actions in the lens-tab row (call-bar frame, above the divider): Download PDF + New
   Analysis. Shown on Buyer Signals once the call is scored. Black label like Import Transcript. */
.callbar-actions { margin-left: auto; align-self: center; display: inline-flex; align-items: center; gap: 20px; }
.callbar-action { background: none; border: none; padding: 0 2px; font-family: var(--font-body); font-size: var(--fs-body); color: #1e1e1e; cursor: pointer; letter-spacing: .01em; }
.callbar-action:hover { text-decoration: underline; }
.bs-results { display: grid; grid-template-columns: 1.05fr 1fr; gap: 52px; align-items: start; }
@media (max-width: 880px) { .bs-results { grid-template-columns: 1fr; } }
.bs-col { min-width: 0; }

/* TL;DR — plain (no frame, no tint): takeaway sentence on top, quadrant label + Copy below it. */
.bs-tldr { margin: 0 0 20px; }
.bs-tldr-tx { margin: 0; font-size: var(--fs-body); line-height: 1.55; color: #2a2a2a; }
/* Copy sits right next to the quadrant label (not pushed to the far edge). */
/* Quadrant header sits first (below the tabs + divider), summary beneath it. Sized to match the
   "What to do next" section header (col-h). */
.bs-tldr-quad { display: block; margin-bottom: 8px; font-family: var(--font-display); font-weight: 400; text-transform: uppercase; letter-spacing: .5px; font-size: 1rem; }
.bs-tldr-quad.q-advancing { color: #1f7a44; }
.bs-tldr-quad.q-warm_stalled { color: #a8720a; }
.bs-tldr-quad.q-false_positive { color: #b5610d; }
.bs-tldr-quad.q-at_risk { color: #c0392b; }

/* No frame behind the gauges — they sit directly on the page. */
.bs-bars { padding: 2px 0 0; }
.bs-meter { margin-bottom: 14px; }
.bs-meter-top { display: flex; justify-content: space-between; align-items: center; gap: 10px; margin-bottom: 6px; }
.bs-meter-l { font-weight: 700; color: #1a1a1a; font-size: var(--fs-body); display: inline-flex; align-items: center; }
.bs-meter-val { font-family: var(--font-display); font-weight: 700; font-size: 1rem; color: #1a1a1a; font-variant-numeric: tabular-nums; }
.bs-meter-max { color: #9a9a9a; font-size: var(--fs-body); font-weight: 400; }
/* Scale extremes above the track: min (left), max (right). */
.bs-meter-ends { display: flex; justify-content: space-between; gap: 12px; margin: 0 0 5px; }
.bs-end { font-size: var(--fs-body); color: #9a9a9a; line-height: 1.2; }
.bs-end:last-child { text-align: right; }
.bs-meter-track { height: 5px; background: #e6e3db; border-radius: 3px; overflow: hidden; }
.bs-meter-fill { height: 100%; border-radius: 3px; transition: width .5s ease; }

/* Hover/focus tooltip — the "how to read it" text, off-screen until wanted. */
.bs-tip { position: relative; display: inline-flex; align-items: center; justify-content: center; width: 15px; height: 15px; margin-left: 6px; border-radius: 50%; border: 1px solid #b9b9b9; color: #8a8a8a; font-size: .62rem; font-weight: 700; font-style: normal; cursor: help; user-select: none; }
.bs-tip::after { content: attr(data-tip); position: absolute; bottom: 150%; left: 0; width: 240px; background: #1e1e1e; color: #fff; font-size: .72rem; font-weight: 400; line-height: 1.4; letter-spacing: normal; text-transform: none; padding: 9px 11px; border-radius: 8px; box-shadow: 0 6px 20px rgba(0,0,0,.22); opacity: 0; visibility: hidden; transition: opacity .14s ease; z-index: 30; }
.bs-tip:hover::after, .bs-tip:focus::after, .bs-tip:focus-visible::after { opacity: 1; visibility: visible; }

/* Band colours — meter pills + fills. */
.b-none    { color: #7a7a7a; }  .bs-meter-band.b-none    { background: #eeece7; color: #7a7a7a; }  .bs-meter-fill.b-none    { background: #b3b0a8; }
.b-emerging{ color: #a8720a; }  .bs-meter-band.b-emerging{ background: #fbeecb; color: #a8720a; }  .bs-meter-fill.b-emerging{ background: #d99a10; }
.b-established { color: #17847a; } .bs-meter-band.b-established { background: #d3f1ec; color: #17847a; } .bs-meter-fill.b-established { background: #1f9f90; }
.b-strong  { color: #1f7a44; }  .bs-meter-band.b-strong  { background: #d6f0df; color: #1f7a44; }  .bs-meter-fill.b-strong  { background: #2a9d57; }
/* Buyer Signals gauges: brand-gold fill on every band (matches the active side-nav gold). The band
   text/pill colours above are unchanged; the numeric score + None→Strong endpoints still show level. */
.bs-meter-fill.b-none, .bs-meter-fill.b-emerging, .bs-meter-fill.b-established, .bs-meter-fill.b-strong { background: var(--gold); }

/* Attribution guarantee — one compact row under the bars. */
/* Result sections matched to the Score Analysis pattern: a col-head (title + Copy) above a card.
   Explicit white card (the shared .card is dark via --panel; see the note in buyerSide.ts). */
.bs-section { margin-top: 44px; }
.bs-card-pad { background: #fff; border: 1px solid #e8e5dd; border-radius: 12px; padding: 14px 16px; color: #2a2a2a; }

/* Next Steps — the emphasised block. */
.bs-nextsteps { background: #fff; border: 1px solid #e8e5dd; border-left: 4px solid var(--gold); border-radius: 10px; padding: 14px 16px; }
.bs-h3 { font-size: .78rem; text-transform: uppercase; letter-spacing: .05em; color: #8a8a8a; margin: 0 0 8px; }
.bs-quotes { margin-top: 24px; }
.bs-quote { border-left: 3px solid #e0dccf; padding: 4px 0 4px 12px; margin-bottom: 12px; }
.bs-quote-tx { font-style: italic; color: #2a2a2a; font-size: var(--fs-body); line-height: 1.45; }
.bs-quote-tag { font-size: .74rem; font-weight: 600; margin-top: 3px; }
.bs-quote-why { font-size: var(--fs-body); color: #4a4a4a; line-height: 1.45; margin-top: 4px; }
.bs-quote-tag.axis-intent { color: #17847a; }
.bs-quote-tag.axis-commitment { color: #a8720a; }
.bs-acts { margin: 0; padding-left: 18px; }
.bs-acts li { margin: 6px 0; color: #2a2a2a; font-size: var(--fs-body); line-height: 1.45; }

/* Buyer's buying case — the four-question quotes section. Full-width band spanning the whole content
   width (below the gauges + radar grid), pushed lower so it never crowds the radar. Four questions in
   a 2x2 grid on wide screens, stacked on narrow. Copy button reuses the app's .copy-btn. */
.bs-why { margin-top: 56px; }
.bs-why .col-head { margin-bottom: 6px; }
.bs-why-lede { margin: 0 0 14px; font-size: var(--fs-body); line-height: 1.5; color: #5a5a5a; }
.bs-why-card { display: grid; gap: 18px 44px; }
@media (min-width: 760px) { .bs-why-card { grid-template-columns: 1fr 1fr; } }
.bs-why-q { min-width: 0; }
.bs-why-qh { font-family: var(--font-display); font-size: .92rem; font-weight: 400; letter-spacing: .3px; color: #1a1a1a; margin: 0 0 8px; }
.bs-why-list { margin: 0; padding-left: 18px; }
.bs-why-quote { font-style: italic; color: #2a2a2a; font-size: var(--fs-body); line-height: 1.45; margin: 6px 0; }
.bs-why-empty { margin: 0; font-size: var(--fs-body); color: #9a9a9a; font-style: italic; }

/* Clean radar — no frame, sits on the page background, pushed to the right of its column. */
.bs-radar-wrap { max-width: 380px; margin: 0 0 0 auto; }
.br-radar { width: 100%; height: auto; display: block; }

/* ============================================================================================
   Shared Call context bar + lens tabs (ui/callBar.ts) — the "import once, no re-import" band that
   turns the three single-call diagnostics into lenses over one call. Dark ink bar on the light
   canvas; light lens tabs. STUDIO tokens; values set via CSSOM elsewhere, no inline styles.
   ============================================================================================ */
.nav-sub { font-size: 10.5px; letter-spacing: .12em; text-transform: uppercase; color: #7a7a7a; padding: 7px 16px 3px; }
.sidenav.is-collapsed .nav-sub { display: none; }

/* Collapsible "One-Off Diagnostic" group: the sub-label is a chevron toggle; its three lens children
   hide when collapsed. In the icon rail (whole menu collapsed) the lens icons always show. */
.nav-group { display: flex; flex-direction: column; gap: 1px; }
/* [hidden] must win over the class-level `display` above/on .nav-item — the same bug the .cro-only and
   .b2-ghost fixes address. Without this, a hidden nav group/item stays visible: the admin-only "The CRO
   Lens" group (#cro-group[hidden]) and any role-gated item were shown to every user. */
.nav-group[hidden], .nav-item[hidden] { display: none !important; }
/* The header looks exactly like an ordinary nav item (same font, size, weight, colour, padding,
   hover); the chevron takes the icon slot. */
.nav-group-toggle { display: flex; align-items: center; gap: 11px; width: 100%; text-align: left; background: transparent; border: none; border-radius: 8px; padding: 7px 12px; font-family: var(--font-body); font-size: .75rem; font-weight: 600; color: var(--muted); cursor: pointer; transition: color .12s, background .12s; }
.nav-group-toggle:hover { background: rgba(255, 255, 255, .05); color: var(--text); }
.nav-group-toggle:focus-visible { outline: 2px solid var(--gold); outline-offset: -2px; }
.nav-chevron { flex: none; width: 16px; height: 16px; transition: transform .16s ease; }
.nav-group.is-collapsed .nav-chevron { transform: rotate(-90deg); }
.sidenav.is-collapsed .nav-group-toggle { display: none; }
.nav-group-items { display: flex; flex-direction: column; gap: 1px; overflow: hidden; }
.nav-group.is-collapsed .nav-group-items { display: none; }
/* Extra indent nests the three lenses under the header (no tree elbows); one line, never wrapping,
   so the longest label ("Cross-Skill Diagnostic") still fits within the rail. Expanded rail only. */
.sidenav:not(.is-collapsed) .nav-group-items .nav-item { padding-left: 26px; }
.nav-group-items .nav-item span { white-space: nowrap; }

/* One-Off Diagnosis header: a chevron toggle (collapses the lenses) sitting beside a label that still
   navigates to the Home/import view. The chevron replaces the old house icon. */
.nav-oneoff-head { display: flex; align-items: center; }
.nav-oneoff-toggle { width: auto; flex: none; padding-right: 2px; }
.nav-oneoff-link { flex: 1 1 auto; }
.sidenav:not(.is-collapsed) .nav-oneoff-link { padding-left: 4px; }
/* The label carries its own chevron only in the icon rail, where the separate toggle button is hidden;
   in the expanded rail the toggle's chevron is the one shown, so hide this duplicate. */
.nav-oneoff-ico { display: none; }
.sidenav.is-collapsed .nav-oneoff-ico { display: block; flex: none; width: 20px; height: 20px; }
/* Collapsed group whose active lens is the current page: the header carries the gold "you are here". */
.nav-group.is-collapsed.has-active-child .nav-group-toggle { color: var(--gold); }
/* Icon rail: whole menu collapsed → show the lens icons regardless of the group's own collapsed state. */
.sidenav.is-collapsed .nav-group.is-collapsed .nav-group-items { display: flex; }

/* Two-part page: the strip + lens tabs form a WHITE upper band spanning the full content width,
   closed by a full-width divider (the band's own bottom border); the workspace below keeps the grey
   canvas. The strip has NO frame; Replace/Clear sit under the details as clickable text. */
/* Sticky: the white band (strip + tabs) stays pinned below the 62px topbar; only the workspace
   below the divider scrolls. z-index sits under the topbar (30) but over the scrolling content. */
/* The One-Off lenses now share the NEW compact toolbar (see #sk-toolbar). The strip is the sticky
   container; .cb-toolbar is the toolbar bar, .cb-msg the Advanced-gated Message Center. */
/* #call-bar is now just the toolbar (the Message Center is a sibling below it), so the strip stays
   pinned while the Message Center scrolls — matching Quick Snapshot. */
#call-bar:not([hidden]) { position: sticky; top: 62px; z-index: 20; background: #F1F2F3; }
.cb-toolbar { background: #2c2c2c; padding: 14px var(--gutter) 16px; border-bottom: 1px solid var(--border); }
.cb-msg { padding: 16px var(--gutter) 6px; }
.cb-msg .section-h { margin-bottom: 10px; }
.cb-msg .notif-frame { height: 132px; }
/* ---------- Shared DIAGNOSTIC CONTROLS strip (fixed above the three One-Off lens tabs) ---------- */
.dc-strip { padding: 0 var(--gutter); }
.dc-head { display: flex; align-items: center; justify-content: flex-start; gap: 8px; margin: 0 0 10px; }
.dc-head-label { font-family: var(--font-display); font-size: .95rem; font-weight: 400; letter-spacing: .5px; text-transform: uppercase; color: #1e1e1e; }
/* Collapse toggle (hide/show the whole strip + tabs). Instant, no slide. */
.dc-toggle { background: transparent; border: 1px solid #d8d6d0; border-radius: 6px; width: 26px; height: 22px; display: inline-flex; align-items: center; justify-content: center; color: #5a5a5a; cursor: pointer; padding: 0; }
.dc-toggle:hover { color: #1a1a1a; border-color: #b8b6b0; }
.dc-toggle-ic { width: 15px; height: 15px; }
#call-bar.is-collapsed .dc-toggle-ic { transform: rotate(180deg); }
#call-bar.is-collapsed .dc-head { margin-bottom: 0; }
#call-bar.is-collapsed .dc-grid, #call-bar.is-collapsed .dc-divider, #call-bar.is-collapsed .callbar-tabs { display: none; }
.dc-grid { display: grid; grid-template-columns: 1.1fr 1fr; gap: 32px; align-items: start; }
@media (max-width: 900px) { .dc-grid { grid-template-columns: 1fr; gap: 14px; } }
.dc-left { min-width: 0; }
.dc-left .notif-frame { height: 132px; }
.dc-right { display: flex; flex-direction: column; gap: 26px; min-width: 0; }
.dc-details-h { font-family: var(--font-display); font-size: .95rem; font-weight: 400; letter-spacing: .5px; text-transform: uppercase; color: #1e1e1e; margin: 0 0 6px; }
/* Font size matches the Message Center messages (.notif-box is .75rem, monospace). */
.dc-details-line { font-family: ui-monospace, 'Cascadia Code', 'Courier New', monospace; font-size: .75rem; color: #3a3a3a; line-height: 1.5; }
.dc-details-type { font-family: var(--font-body); font-weight: 700; color: #1a1a1a; }
.dc-tools { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 14px 26px; }
/* Import Transcript with Anonymize stacked directly beneath it. */
.dc-import { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; }
.dc-import .anon-row { margin: 0; }
.dc-tools .btn { padding: 0; font-size: .82rem; font-weight: 400; color: #1e1e1e; }
.dc-tools .btn:hover:not(:disabled) { color: #8a6a12; }
.dc-tools .btn:disabled { color: rgba(0, 0, 0, .3); }
.dc-tools .btn.run-awaiting { border-color: transparent; box-shadow: none; font-weight: 700; animation: run-awaiting-text 2.4s steps(1, end) infinite; }
@media (prefers-reduced-motion: reduce) { .dc-tools .btn.run-awaiting { animation: none; color: var(--gold); } }
.dc-divider { border: none; border-top: 1px solid #e2ded3; margin: 14px 0 0; }
.callbar-wrap { max-width: none; margin: 0; padding: 0 var(--gutter); }
/* The strip owns the gap to the tabs (margin-bottom), so the conceal can collapse that space and the
   tabs rise smoothly to the top instead of jumping when the strip is removed. */
.callbar-ctx { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; background: transparent; border: none; box-shadow: none; padding: 0; margin-bottom: 28px; max-width: none; }
/* The strip reveals by EXPANDING its own height (0 → full), so it PUSHES the lens tabs and the page
   content below it down as it grows — it never slides over/hides the top of the page. Conceal is the
   exact reverse (collapse height back to 0). Slow, eased, so it reads as an intentional reveal. */
@keyframes callbar-reveal {
  from { max-height: 0; margin-bottom: 0; opacity: 0; }
  60%  { opacity: 1; }
  to   { max-height: 120px; margin-bottom: 28px; opacity: 1; }
}
@keyframes callbar-conceal {
  from { opacity: 1; max-height: 120px; margin-bottom: 28px; }
  45%  { opacity: 0; }
  to   { opacity: 0; max-height: 0; margin-bottom: 0; }
}
/* overflow:hidden so the growing height clips its own content cleanly instead of spilling over. */
.callbar-ctx--reveal { overflow: hidden; animation: callbar-reveal 1.5s cubic-bezier(.33, .1, .25, 1) both; }
/* Collapses its own height/margin so the tabs slide up smoothly (no jump on removal); matched speed. */
.callbar-ctx--conceal { overflow: hidden; animation: callbar-conceal 1.5s cubic-bezier(.4, 0, .3, 1) both; }
@media (prefers-reduced-motion: reduce) {
  .callbar-ctx--reveal, .callbar-ctx--conceal { animation-duration: .01ms; }
}
.callbar-id { min-width: 0; }
.callbar-h { font-family: var(--font-body); font-size: .58rem; font-weight: 700; letter-spacing: .13em; text-transform: uppercase; color: #9a9a9a; margin-bottom: 4px; }
.callbar-type { font-weight: 700; font-size: 13px; color: #1a1a1a; }
.callbar-meta { font-family: ui-monospace, 'Cascadia Code', 'Courier New', monospace; color: #3a3a3a; font-size: 12px; margin-top: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* Replace / Clear: clickable text under the details, styled like the Import Transcript control. */
.callbar-acts { display: flex; gap: 22px; margin-top: 1px; }
.callbar-btn { background: transparent; border: none; color: #1e1e1e; padding: 0; font-family: var(--font-body); font-weight: 400; font-size: .75rem; cursor: pointer; transition: color .12s; }
.callbar-btn:hover:not(:disabled) { color: #8a6a12; }
.callbar-btn:disabled { opacity: .4; cursor: default; }
/* The lens tabs are the page header on a loaded page, so the redundant global page title is hidden
   while the strip shows (empty state keeps the title — no strip yet). */
.app-region:has(#call-bar:not([hidden])) .page-head { display: none; }
/* The Account view leads with its own header (the account name), so the redundant "ACCOUNT" page
   title is hidden here. */
.app-region:has(.view[data-view="account"].is-active) .page-head { display: none; }
/* Seller Skills leads with its own sticky toolbar, so the "SELLER SKILLS" page title is hidden (it
   would otherwise scroll away above the pinned toolbar, reading as the toolbar losing its top). */
.app-region:has(.view[data-view="diagnostic"].is-active) .page-head { display: none; }
/* Tabs sized/styled like the "Identified Lifecycle Stage" section header (Bebas ~1rem): selected in
   black, others grey. The selected tab's gold underline sits on the band's full-width divider. */
.callbar-tabs { display: flex; gap: 26px; border-bottom: none; margin: 0; padding: 12px var(--gutter) 0; flex-wrap: wrap; }
.callbar-tab { background: none; border: none; font-family: var(--font-display); font-size: 1rem; font-weight: 400; letter-spacing: .5px; color: #9a9a9a; padding: 4px 2px 4px; cursor: pointer; border-bottom: 3px solid transparent; margin-bottom: -1px; transition: color .12s; }
.callbar-tab:hover { color: #5a5a5a; }
.callbar-tab.on { color: #1e1e1e; border-bottom-color: var(--gold); }

/* ============================ SELLER SKILLS in-page toolbar ============================
   Seller Skills (diagnostic) carries its OWN toolbar + a collapsible Enablement section instead of
   the shared Diagnostic Controls strip. Three cells: Enablement + action buttons (left), live
   progress (centre), Call Details (right). */
/* Pinned + full-bleed: the toolbar (title + controls) sits FLUSH under the 62px top bar and stays
   there. Because it starts exactly at its pinned position (the diagnostic .app-main drops its top
   padding), there is NO transition between a resting and a pinned state as you scroll — it looks
   identical at every scroll position. The background spans the full workspace width (negative gutter
   margins, re-padded) so nothing bleeds through the sides. */
.view[data-view="diagnostic"] .app-main { padding-top: 0; }
/* Quick Snapshot toolbar is a DARK strip (matching the side rail + top header) — see the scoped
   `#sk-toolbar …` restyle block below. The One-Off #call-bar/.cb-toolbar shares the .sk-* sub-classes
   and stays light, so every shared-class override is scoped to #sk-toolbar. */
.sk-toolbar { position: sticky; top: 62px; z-index: 20; background: #2c2c2c; margin: 0 calc(-1 * var(--gutter)) 22px; padding: 14px var(--gutter) 16px; border-bottom: 1px solid var(--border); }
/* The "SELLER SKILLS" page title, now carried inside the pinned bar so it never scrolls away. */
.sk-page-title { font-family: var(--font-display); font-size: 1.5rem; font-weight: 400; letter-spacing: .04em; text-transform: uppercase; color: #1a1a1a; margin: 0 0 12px; line-height: 1.1; }
.sk-toolbar-row { display: flex; align-items: flex-start; }
@media (max-width: 900px) { .sk-toolbar-row { flex-wrap: wrap; gap: 16px 0; } }
.sk-tb-left { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
/* Enablement moved out of the toolbar to the header "Advanced" toggle (see .adv-toggle). Controls sit
   in two rows: Import + Anonymize (top), then Run / Stop / Clear / PDF (bottom). */
.sk-actions { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; }
.sk-btn-row { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
/* RUN / STOP / CLEAR / PDF share one outlined + filled button design, all at 13.5px. */
.sk-btn { cursor: pointer; font-family: var(--font-body); font-size: var(--fs-body); font-weight: 600; letter-spacing: .04em; color: #1e1e1e; background: #fcfbf8; border: 1px solid #c7c4bb; border-radius: 6px; padding: 5px 12px; line-height: 1.1; transition: color .12s, background .12s, border-color .12s; }
.sk-btn:hover:not(:disabled) { background: #fff; border-color: #8a6a12; color: #8a6a12; }
.sk-btn:disabled { color: rgba(0, 0, 0, .3); background: transparent; border-color: #dfdcd3; cursor: default; }
.sk-icon-btn { padding: 5px 11px; } /* ▶ / ■ symbols, same 13.5px */
.sk-run { color: var(--gold); }
.sk-run:disabled { color: rgba(0, 0, 0, .3); }
/* Run is a re-score control (adjust the scorecard, then Run) — enabled only after a score, greyed on
   import + while scoring. No attention animation. */
/* Centre: a single STATUS line, its value softly breathing. Same offset on every lens (Quick Snapshot
   and the One-Off call-bar) so Runtime Status / Call Details sit in the same place across pages. */
.sk-tb-mid { margin-left: 23px; }
.sk-status { font-size: var(--fs-body); color: #3a3a3a; white-space: nowrap; }
.sk-status-label { font-family: var(--font-display); font-size: .95rem; letter-spacing: .5px; color: #1e1e1e; }
.sk-status-val { color: #1a1a1a; font-weight: 600; animation: sk-breathe 2.6s ease-in-out infinite; }
/* Quick Snapshot Runtime Status notification in gold-amber. */
@keyframes sk-breathe { 0%, 100% { opacity: 1; } 50% { opacity: .42; } }
@media (prefers-reduced-motion: reduce) { .sk-status-val { animation: none; } }

/* ===================== One-Off Diagnostic group toolbars — refined dark restyle =====================
   The dark strip (side-rail #2c2c2c fill, thin 1px outlines, lean weights, uniform muted text matching
   the Runtime Status header, and a softly-glowing gold Runtime Status box) applies to BOTH the Quick
   Snapshot toolbar (#sk-toolbar) and the shared One-Off callbar (#call-bar) — every page in the group. */
#sk-toolbar .sk-page-title, #call-bar .sk-page-title { color: var(--muted); }
#sk-toolbar .sk-btn, #call-bar .sk-btn { font-weight: 500; color: var(--muted); background: transparent; border-color: var(--border); border-radius: 7px; }
#sk-toolbar .sk-btn:hover:not(:disabled), #call-bar .sk-btn:hover:not(:disabled) { background: rgba(255, 255, 255, .06); border-color: var(--gold); color: var(--gold); }
#sk-toolbar .sk-btn:disabled, #call-bar .sk-btn:disabled { color: rgba(255, 255, 255, .26); background: transparent; border-color: rgba(255, 255, 255, .08); }
#sk-toolbar .sk-run, #call-bar .sk-run { color: var(--gold); }
#sk-toolbar .sk-run:disabled, #call-bar .sk-run:disabled { color: rgba(255, 255, 255, .26); }
#sk-toolbar .anon-toggle, #call-bar .anon-toggle { color: var(--muted); }
#sk-toolbar .anon-help, #call-bar .anon-help { color: #8a8a8a; }
#sk-toolbar .anon-help:hover, #sk-toolbar .anon-help:focus-visible, #call-bar .anon-help:hover, #call-bar .anon-help:focus-visible { color: var(--gold); }
#sk-toolbar .sk-details-h, #call-bar .sk-details-h { color: var(--muted); }
#sk-toolbar .sk-call-details, #call-bar .sk-call-details { color: #b7b7b7; }
#sk-toolbar .sk-cd-type, #call-bar .sk-cd-type { color: var(--muted); }
#sk-toolbar .sk-cd-file, #call-bar .sk-cd-file { color: var(--muted); }
#sk-toolbar .sk-cd-file-label, #call-bar .sk-cd-file-label { color: var(--muted); }
/* Runtime Status: a lean label above a softly-glowing gold notification box (message set by phase). */
/* Stretch both the label and box to the container width (the label sets it) so the notification box is a
   FIXED width = the "Runtime Status:" header, not resizing as the message changes. Trimmed padding +
   centred text keep the longest message (READING / SCORING) inside the label width. */
#sk-toolbar .sk-status, #call-bar .sk-status { display: flex; flex-direction: column; align-items: stretch; gap: 8px; }
#sk-toolbar .sk-status-label, #call-bar .sk-status-label { color: var(--muted); }
#sk-progress .sk-status-val, #callbar-progress .sk-status-val { background: var(--gold); color: #1a1a1a; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; padding: 6px 8px; border-radius: 8px; text-align: center; animation: sk-glow 2.4s ease-in-out infinite; }
@keyframes sk-glow {
  0%, 100% { box-shadow: 0 0 7px 0 rgba(255, 190, 23, .28); opacity: 1; }
  50% { box-shadow: 0 0 18px 2px rgba(255, 190, 23, .58); opacity: .9; }
}
@media (prefers-reduced-motion: reduce) { #sk-progress .sk-status-val, #callbar-progress .sk-status-val { animation: none; } }
/* Reset ("Restore original"): styled like the EMAIL/PDF text buttons (.sk-btn). When ACTIVE (enabled) it
   gets a glowing gold fill to draw the eye — e.g. after a lower-bar re-run, to jump back to the original score. */
/* Restore-original: its own compact look (NOT the group-button style). Enabled → gold border + soft glow
   highlight; disabled → quiet grey. */
#reset-btn { font-family: var(--font-body); font-size: .62rem; font-weight: 600; line-height: 1.3; letter-spacing: 0; color: #1f1f1f; background: #fff; border: 1px solid #d5d2c9; border-radius: 6px; padding: 7px 10px; cursor: pointer; transition: border-color .15s, background .15s, box-shadow .15s; }
#reset-btn:disabled { color: rgba(0, 0, 0, .32); background: #fff; border-color: #e4e1d8; cursor: default; }
#reset-btn:not(:disabled) { border-color: #e0a90e; animation: sk-glow 2.4s ease-in-out infinite; }
#reset-btn:not(:disabled):hover { border-color: #d99f0b; background: rgba(255, 190, 23, .08); }
@media (prefers-reduced-motion: reduce) { #reset-btn:not(:disabled) { animation: none; box-shadow: 0 0 0 1px rgba(255, 190, 23, .45); } }
/* Progress bar under the Runtime Status box — a gold trickle over a subtle track (driven by
   runtimeProgress.ts). Shown only while a task is live (import → done); hidden when idle/cleared. */
.sk-pbar { height: 6px; border-radius: 3px; background: rgba(255, 255, 255, .15); overflow: hidden; opacity: 0; transition: opacity .25s; }
.sk-pbar.is-active { opacity: 1; }
.sk-pbar-fill { height: 100%; width: 0; background: var(--gold); border-radius: 3px; transition: width .18s linear; }
/* Right: Call Details, spaced well clear of STATUS. */
.sk-tb-right { margin-left: 88px; }
/* CLASS block on the Quick Snapshot strip — same row as Call Details (flex-start aligns the labels),
   with clearance to its left. Colours mirror .sk-call-details for the dark toolbar. */
.sk-tb-class { margin-left: 48px; }
.sk-class-val { font-family: ui-monospace, 'Cascadia Code', 'Courier New', monospace; font-size: .75rem; line-height: 1.5; color: #3a3a3a; }
.sk-class-name { font-weight: 400; }
.sk-class-link { color: var(--gold); text-decoration: none; }
.sk-class-link:hover { text-decoration: underline; }
#sk-toolbar .sk-class-val, #call-bar .sk-class-val { color: #b7b7b7; }
#sk-toolbar .sk-class-name, #call-bar .sk-class-name { color: #f0f0f0; }
.sk-details-h { font-family: var(--font-display); font-size: .95rem; letter-spacing: .5px; text-transform: uppercase; color: #1e1e1e; margin: 0 0 6px; }
.sk-call-details { font-family: ui-monospace, 'Cascadia Code', 'Courier New', monospace; font-size: .75rem; color: #3a3a3a; line-height: 1.5; }
.sk-call-details .sk-cd-type { font-family: var(--font-body); font-weight: 700; color: #1a1a1a; }
.sk-cd-file { color: #6a6a6a; margin-top: 3px; max-width: 340px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sk-cd-file-label { color: #3a3a3a; font-weight: 700; }
/* Collapsible Enablement section: message center + runtime monitor row, then the lifecycle stage. */
/* Advanced ON row: Message Center 60% (left) + score-reading labels 40% (right). */
.sk-enable-row { display: grid; grid-template-columns: 6fr 4fr; gap: 32px; align-items: start; }
@media (max-width: 1000px) { .sk-enable-row { grid-template-columns: 1fr; gap: 20px; } }
.sk-msg-col { min-width: 0; }
.sk-msg-col .section-h { margin-bottom: 12px; }
.sk-msg-col .notif-frame { height: 240px; }
.sk-labels-col { min-width: 0; }
.sk-labels-col .section-h { margin-bottom: 12px; }
.sk-labels-col .score-labels { display: flex; flex-direction: column; gap: 12px; }
.sk-labels-col .sc-note { margin: 0; }

/* Runtime monitor now lives on Home (the scanner); hide the old Runtime Status strip in the toolbar. */
.sk-tb-mid { display: none; }
/* Mode 1: Enablement off → hide the whole section (and its trailing divider, which lives inside it). */
.view.sk-collapsed #sk-enable-section { display: none; }
/* Seller Skills scorecard = the label + the Actual bar + a signed GAP vs the minimum; the desired
   minimum is a draggable diamond BENEATH each bar. Three columns: skill label, bar stack, gap. */
.view[data-view="diagnostic"] .perf-grid { grid-template-columns: max-content auto max-content; column-gap: 20px; row-gap: 12px; align-items: start; }
/* Condensed so all 11 skills fit at a glance without scrolling. */
.view[data-view="diagnostic"] .perf-grid { row-gap: 5px; }
.view[data-view="diagnostic"] .perf-grid .pt-h.h-act { grid-column: 1 / -1; margin-bottom: 4px; }
.view[data-view="diagnostic"] .pt-label { align-self: start; padding-top: 1px; }
/* ============================================================================================
   QUICK SNAPSHOT — Option B layout. The score row used to be three side-by-side columns
   (score | breakdown | reaction panel). It is now a full-width verdict BAND, the breakdown at
   full width beneath it, and the reaction panel as a FOOTER. Everything here is scoped to the
   diagnostic view so the shared pieces (.seg-cell on Scorecards, .react-opt, .score-meta) keep
   their existing sizes everywhere else.
   ============================================================================================ */
.results-b { display: flex; flex-direction: column; gap: 30px; }

/* The band is position:relative because it ANCHORS the coaching-tip banner (.coach-signal-host),
   which is absolutely positioned at top:100% — i.e. just below the score, as before. */
.verdict-band { position: relative; display: flex; align-items: center; gap: 24px; flex-wrap: wrap;
  background: #fff; border: 1px solid #e2e2e2; border-radius: 14px; padding: 14px 28px; }
/* center, NOT baseline: on a baseline the two-line Meaning block hangs below the score's
   baseline and made the ribbon ~28px taller than the score glyph itself. */
.vb-score { display: flex; align-items: center; gap: 22px; }
.view[data-view="diagnostic"] .score-circle { font-size: 6.2rem; line-height: .82; margin: 0; }
.vb-verdict { display: flex; flex-direction: column; gap: 2px; }
.vb-rule { align-self: stretch; width: 1px; background: #e2e2e2; }
/* .score-meta stacks label/value with big top margins in the old column; in the band each stat is
   its own tight block and they sit side by side. */
.vb-meta { display: flex; align-items: flex-start; gap: 28px; flex-wrap: wrap; }
.vb-stat { display: flex; flex-direction: column; gap: 3px; }
.verdict-band .score-meaning-label,
.verdict-band .score-coverage-label { margin: 0; font-size: .78rem; }
.verdict-band .score-meaning { font-size: 1.15rem; }
.verdict-band .score-coverage { font-size: .95rem; }
/* "Add this call to Benchmark" — a checkbox + label + (i), sitting as its own stat in the band. Top-
   aligned so the label lines up with the other stat labels (Evidence Coverage / Optional-skill bonus),
   and styled to match them: same muted colour, weight and size (not bold). */
.vb-benchmark { flex-direction: row; align-items: center; gap: 8px; align-self: flex-start; }
.vb-benchmark[hidden] { display: none; }
.bench-check { display: inline-flex; align-items: center; gap: 8px; cursor: pointer; }
.bench-check input { width: 15px; height: 15px; accent-color: var(--gold); cursor: pointer; margin: 0; flex: none; }
.bench-check-label { font-size: .78rem; font-weight: 600; color: var(--muted); }
.app-region .bench-check-label { color: #5a5a5a; }
.bench-info { color: #5a5a5a; }
.bench-info .sc-note-tip { top: calc(100% + 7px); bottom: auto; left: auto; right: 0; width: 340px; max-width: min(340px, calc(100vw - 40px)); transform: translateY(-3px); }
.bench-info:hover .sc-note-tip, .bench-info:focus-visible .sc-note-tip { transform: translateY(0); }

/* Breakdown: two skills per row (6 tracks). PerformanceTable appends label + bar-stack + gap per
   skill in order, so the pairs fill row-major, left to right. nth-child(6n+4) is the SECOND skill
   of each row — it gets the gutter that separates the two halves. */
.view[data-view="diagnostic"] .perf-grid { grid-template-columns: repeat(2, max-content max-content max-content);
  column-gap: 24px; row-gap: 18px; align-items: center; justify-content: start; }
.view[data-view="diagnostic"] .perf-grid > *:nth-child(6n+4) { margin-left: 64px; }
.view[data-view="diagnostic"] .pt-label { align-self: center; padding-top: 0; font-size: 1rem; }
.view[data-view="diagnostic"] .pt-gap { font-size: 1.05rem; min-width: 3ch; }
/* Bigger cells + marker. Scoped: .seg-cell is shared with the Scorecards page. */
.view[data-view="diagnostic"] .seg-cell { width: 26px; height: 26px; border-radius: 4px; }
.view[data-view="diagnostic"] .pt-cell,
.view[data-view="diagnostic"] .pt-diamond-track { gap: 5px; }
.view[data-view="diagnostic"] .pt-diamond-slot { width: 26px; height: 8px; }
.view[data-view="diagnostic"] .pt-diamond { border-left-width: 5px; border-right-width: 5px; border-bottom-width: 7px; }
.view[data-view="diagnostic"] .perf-inner { width: 100%; }

/* Footer: what used to be the right-hand column. The three options sit in one row across the page
   instead of stacking in a narrow column. */
.score-footer { border-top: 1px solid #d2d2d2; padding-top: 24px; }
.score-footer .react-options { flex-direction: row; gap: 14px; flex-wrap: wrap; }
.score-footer .react-opt { flex: 1 1 260px; width: auto; font-size: .8rem; padding: 14px 16px; }
/* The coaching-tip tab used to hang below the narrow Final Score column, over empty space. Below the
   full-width band is now the breakdown, so at its old offset the tab sat on the first skill label.
   Tuck it a further 30px left: it then spans the 40px page gutter only — still emerging from behind
   the dark rail as designed, but no longer covering a label. padding-left re-centres the arrow in
   the part that is actually visible. */
.view[data-view="diagnostic"] .cs-nub { left: calc(-1 * var(--gutter) - 32px); padding-left: 32px; }
/* Fit the whole page — band, breakdown AND footer — on one screen at a 900px-tall viewport, so the
   reaction options are reachable without scrolling. The ribbon gives up the most (its height was
   almost entirely the score glyph); the rest is a few px off each gap rather than one big cut. */
.results-b { gap: 16px; }
.view[data-view="diagnostic"] .perf-grid { row-gap: 11px; }
.view[data-view="diagnostic"] .perf-head { margin-bottom: 8px; }
.score-footer { padding-top: 16px; }
.score-footer .col-h { margin-bottom: 8px; }
.score-footer .react-intro { margin: 6px 0 10px; }
.score-footer .react-opt { padding: 11px 15px; }
/* Guarantee clearance under the footer buttons WITHOUT the page scrolling to find it. The page
   carried 72px of trailing padding below the last element: enough to push the document past a
   900px viewport, so the buttons sat 37px off the fold and the page scrolled for empty space.
   Trimming it (plus a few px off the gaps above) fits the whole page on screen and turns that
   padding into clearance you can actually see. */
.view[data-view="diagnostic"] .app-main { padding-bottom: 44px; }
.results-b { gap: 13px; }
.view[data-view="diagnostic"] .perf-grid { row-gap: 10px; }
.verdict-band { padding: 12px 28px; }
/* Left-align the two breakdown columns to the same edge as the "Performance Breakdown" heading, so the
   skill labels and cells start at that pixel rather than floating centred under the verdict ribbon. */
.view[data-view="diagnostic"] .perf-grid { justify-content: start; }
/* The intro paragraph was removed, so the options sit directly under the section heading. */
.score-footer .react-options { margin-top: 2px; }





/* GAP column: signed distance from the manager's minimum (rounded actual − expected). Aligns with the
   bar row; green above target, red below, muted when it exactly meets. */
.pt-gap { align-self: start; padding-top: 1px; min-width: 2.6ch; text-align: right; font-size: .8rem; font-weight: 700; font-variant-numeric: tabular-nums; letter-spacing: .01em; }
.pt-gap-pos { color: #1f8f4e; }
.pt-gap-neg { color: #c0392b; }
.pt-gap-zero { color: #9a9a9a; }
/* Bar + marker stacked: the 5-cell Actual bar on top, the desired-minimum marker track below it. The
   marker is a short upward TRIANGLE (about half the height of the old diamond), which shaves height off
   every row so the full skill list is visible at once. */
.pt-bar-stack { display: inline-flex; flex-direction: column; gap: 2px; align-items: flex-start; }
.pt-diamond-track { display: inline-flex; gap: 4px; cursor: pointer; touch-action: none; }
.pt-diamond-slot { width: 17px; height: 6px; display: flex; align-items: flex-start; justify-content: center; }
.pt-diamond { width: 0; height: 0; border-left: 4px solid transparent; border-right: 4px solid transparent; border-bottom: 5px solid #1a1a1a; visibility: hidden; }
.pt-diamond-slot.is-on .pt-diamond { visibility: visible; }
.pt-diamond-track:hover .pt-diamond-slot:not(.is-on) .pt-diamond { visibility: visible; border-bottom-color: #c9c6bd; } /* ghost target on hover */
.perf-locked .pt-diamond-track { cursor: default; opacity: .5; pointer-events: none; }

.bs-ready { color: #5a5a5a; font-size: var(--fs-body); margin: 0 0 12px; line-height: 1.55; max-width: 620px; }
.bs-note-replace { color: #6a6a6a; font-size: var(--fs-body); margin: 0; line-height: 1.5; max-width: 620px; }
/* Subscription upgrade gate (dormant while Buyer Signals is open to all). */
.bs-locked { max-width: 620px; }
.bs-lock-t { font-weight: 700; color: #1a1a1a; font-size: 1rem; margin: 0 0 6px; }
.bs-lock-s { color: #5a5a5a; font-size: var(--fs-body); margin: 0 0 16px; line-height: 1.55; }

/* Home import chooser (Move 2): two input-shape options + a secondary utility row. */
.home-choose { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; max-width: 820px; margin: 0 auto; }
@media (max-width: 720px) { .home-choose { grid-template-columns: 1fr; } }
.opt-primary .opt-title { font-size: .98rem; }
.home-secondary { display: flex; gap: 20px; flex-wrap: wrap; justify-content: center; margin: 22px auto 0; }
.home-secondary a { color: #6a6a6a; font-size: .85rem; text-decoration: none; border-bottom: 1px solid transparent; }
.home-secondary a:hover { color: #1a1a1a; border-bottom-color: var(--gold); }

/* "Anonymize on import" inline toggle in the diagnostic toolbar. */
/* Import + Anonymize stack — the toggle sits directly under Import so it can't be missed. */
.import-stack { display: inline-flex; flex-direction: column; align-items: flex-start; gap: 6px; }
.import-stack .btn { padding-left: 0; }
.anon-row { display: inline-flex; align-items: center; gap: 6px; padding-left: 0; }
.anon-toggle { display: inline-flex; align-items: center; gap: 6px; color: #3a3a3a; font-size: .68rem; cursor: pointer; white-space: nowrap; }
.anon-toggle input { cursor: pointer; accent-color: var(--gold); width: 14px; height: 14px; margin: 0; }
.anon-help { position: relative; display: inline-flex; align-items: center; justify-content: center; color: #a0a0a0; cursor: help; }
.anon-help svg { width: 15px; height: 15px; }
.anon-help:hover, .anon-help:focus-visible { color: #8a6a12; outline: none; }
/* Hidden = display:none so this out-of-flow popover reserves ZERO scroll footprint. A low-placed help
   icon (e.g. the home import row) otherwise reserves ~300px of phantom page-scroll while invisible.
   allow-discrete + @starting-style keep the fade despite toggling display. */
.anon-tip { position: absolute; top: calc(100% + 9px); left: -4px; z-index: 40; display: none; flex-direction: column; gap: 7px; width: 300px; background: #fff; color: #4a4a4a; border: 1px solid #e6e4df; border-left: 3px solid var(--gold); border-radius: 10px; padding: 12px 14px; font-size: .72rem; line-height: 1.5; box-shadow: 0 8px 24px rgba(0, 0, 0, .12); opacity: 0; visibility: hidden; transform: translateY(-4px); transition: opacity .12s, transform .12s, visibility 0s .12s, display 0s .12s; transition-behavior: allow-discrete; pointer-events: none; }
.anon-tip::before { content: ""; position: absolute; bottom: 100%; left: 10px; border: 6px solid transparent; border-bottom-color: #e6e4df; }
/* Home help icon sits low on the page — open its tip UPWARD so it's fully visible and never pushes
   page-scroll even on hover (there's ample room above; below the icon is the page edge). */
.home-anon-row .anon-tip { top: auto; bottom: calc(100% + 9px); }
.home-anon-row .anon-tip::before { top: 100%; bottom: auto; border-bottom-color: transparent; border-top-color: #e6e4df; }
.anon-tip-h { font-weight: 700; color: #1a1a1a; font-size: .74rem; }
.anon-tip strong { color: #1a1a1a; font-weight: 700; }
.anon-help:hover .anon-tip, .anon-help:focus-visible .anon-tip { display: flex; opacity: 1; visibility: visible; transform: translateY(0); }
@starting-style { .anon-help:hover .anon-tip, .anon-help:focus-visible .anon-tip { opacity: 0; transform: translateY(-4px); } }

/* Coaching Summary (Seller Skills page) — three always-present sub-sections (Score Analysis / Trends /
   Recommendations). NO card background: the content sits on the light .app-region canvas (#F1F2F3),
   so all text + borders are DARK-on-light (matching .col-h #1a1a1a / muted #5a5a5a on this canvas). */
.coach-section-wrap { margin-top: 4px; }
/* Copy sits to the RIGHT of the coaching text, above it — the strip title row is shared by every
   lens, so an action there is the wrong home for a page-specific one. */
.coach-copy-row { display: flex; justify-content: flex-end; max-width: 860px; margin-bottom: 4px; }
/* Doubled clearance between the "Coaching Summary" heading and the content that now leads it. Put the
   gap on the header ROW (not the h3) so the h3 keeps margin:0 and the Copy button stays vertically
   centered on the title instead of dropping below it. */
.coach-section-wrap .col-head { margin-bottom: 22px; }
.coaching-summary { background: transparent; border: 0; padding: 0; max-width: 860px; }

/* The sub-section headers (Trends / Recommendations) — always on screen. */
/* Section headings (Trends, Recent Trends, Where do we go from here?) carry spacing only — their
   type comes from the shared rule with .coach-block-title below, so every coaching heading matches.
   The underline that used to sit here was removed with the one on .coach-recent-head. */
.coach-subhead { margin: 20px 0 10px; }
/* Where do we go from here? follows the taller Recent Trends row, so it takes the same 17px
   compensation to stay on the shared 39px pitch. */
#coaching-next .coach-subhead { margin-top: 17px; }
.coach-sec-body { margin-bottom: 8px; }
/* Subordinate header nested under a section (the "Where do we go from here?" prompt inside Trends).
   Deliberately UNLIKE the section subheads: not uppercase, no divider, muted, with a small gold tick
   and a slight indent, so it reads as a follow-up within Trends, not a standalone final verdict. */
.coach-subsubhead { font-size: var(--fs-body); font-weight: 700; font-style: italic; color: #4a4a4a; margin: 16px 0 8px; padding-left: 12px; border-left: 2px solid var(--gold); }
.coach-hint { font-size: var(--fs-body); line-height: 1.5; color: #5a5a5a; margin: 0 0 6px; }

.coach-tldr { font-size: var(--fs-body); line-height: 1.55; color: #1f1f1f; margin: 0 0 14px; }

/* Inner blocks (What worked / Areas requiring improvement). `coach-block-gap` doubles the space above
   "Areas requiring improvement" so it's clearly separated from "What worked". */
/* Coaching heading pitch: What worked / Areas requiring improvement / Trends / Recent Trends /
   Where do we go from here? must sit on ONE even rhythm (39px top-to-top when collapsed), even though
   they live in three sibling containers with different wrappers. It was 43/39/59/49 — visibly uneven.
   The gaps come from collapsing margins, so these values are deliberately matched: every heading-to-
   heading edge resolves to 20px, except the taller Recent Trends row which compensates (see there). */
.coach-block { margin: 0 0 8px; }
.coach-block-gap { margin-top: 20px; }
.coach-block:last-child { margin-bottom: 0; }
.coach-block-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
/* ONE declaration for every coaching heading — the block titles (What worked, Areas requiring
   improvement) and the section subheads (Trends, Recent Trends, Where do we go from here?). They had
   drifted apart: the subheads were 0.8rem/#1a1a1a/0.05em with an underline, the block titles
   0.7rem/#5a5a5a/0.04em without one. Kept together so they cannot drift again. */
.coach-block-title,
.coach-subhead { font-size: 0.7rem; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; color: #5a5a5a; }
.coach-ico { width: 9px; height: 9px; border-radius: 50%; display: inline-block; flex: 0 0 auto; }
.coach-ico-ok { background: #2a9d57; }
.coach-ico-warn { background: #cf9a00; }
.coach-list { list-style: none; margin: 0; padding: 0; }
.coach-point { font-size: var(--fs-body); line-height: 1.5; margin: 0 0 8px; }
.coach-point:last-child { margin-bottom: 0; }
.coach-claim { color: #1f1f1f; font-weight: 600; }
.coach-why { color: #5a5a5a; }

/* Trends — numbers pulled close to the skill column (fixed name column, not the far edge). */
.coach-trend-list { list-style: none; margin: 6px 0 0; padding: 0; }
/* Fixed scores column so every direction label (IMPROVING / STEADY / DECLINING) starts at the same x. */
.coach-trend-row { display: grid; grid-template-columns: 210px 96px max-content; align-items: baseline; gap: 22px; font-size: var(--fs-body); padding: 5px 0; border-bottom: 1px solid rgba(0, 0, 0, 0.10); }
.coach-trend-row:last-child { border-bottom: 0; }
.coach-trend-name { color: #1f1f1f; }
/* Scores stay neutral; the direction is carried by the word to their right (no leading arrow). */
.coach-trend-move { color: #1f1f1f; font-variant-numeric: tabular-nums; font-weight: 600; white-space: nowrap; }
.coach-trend-label { font-size: 0.68rem; font-weight: 700; letter-spacing: 0.06em; white-space: nowrap; }
.coach-dir-improving .coach-trend-label { color: #1f8f4e; }
.coach-dir-declining .coach-trend-label { color: #c0392b; }
.coach-dir-flat .coach-trend-label { color: #8a8a8a; }

/* Top-performer callout: a gold-bordered opening so a proven star LEADS with recognition (study +
   replicate), never remediation. Deterministic, independent of the model prose. */
.coach-topperf { border-left: 3px solid var(--gold); background: rgba(255, 190, 23, 0.09); border-radius: 6px; padding: 10px 14px; margin: 0 0 14px; }
/* Confirmed tier (>=100, met/exceeded expectation): a touch more emphatic than the possible/watch tier. */
.coach-topperf-confirmed { border-left-width: 4px; background: rgba(255, 190, 23, 0.16); }
.coach-topperf-h { display: block; font-family: var(--font-display); font-size: 0.95rem; letter-spacing: 0.04em; text-transform: uppercase; color: #8a6d0f; margin-bottom: 3px; }
.coach-topperf-txt { display: block; font-size: var(--fs-body); line-height: 1.5; color: #1f1f1f; }
/* Sub-group label inside Trends when a top performer's skills are split into above-target vs below-target. */
.coach-trend-group { font-size: 0.72rem; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; color: #6a6a6a; margin: 12px 0 2px; }

/* Recommendations — the decision-tree action items. */
.coach-actions { list-style: none; margin: 6px 0 0; padding: 0; }
.coach-action { font-size: var(--fs-body); line-height: 1.5; color: #1f1f1f; padding: 8px 0; border-top: 1px solid rgba(0, 0, 0, 0.10); display: flex; flex-direction: column; align-items: flex-start; gap: 6px; }
.coach-action:first-child { border-top: 0; padding-top: 0; }
.coach-action-btn { align-self: flex-start; font: inherit; font-size: 0.72rem; font-weight: 600; color: #1a1a1a; background: transparent; border: 1px solid #b9babc; border-radius: 8px; padding: 4px 10px; cursor: pointer; }
.coach-action-btn:hover { border-color: #8a6d0f; color: #8a6d0f; }

/* Home redesign — role selection + import (LET'S GET STARTED). Role question reuses .home-sub. */
/* Role picker sits in ONE horizontal row (three buttons) so it stays compact and the Import button
   below never drops off-screen. Wraps to a column only on narrow phones. */
.home-roles { display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center; align-items: stretch; gap: 12px; margin: 0 auto; max-width: 720px; }
.home-roles .role-btn { width: auto; flex: 0 1 210px; min-width: 180px; font-size: 1rem; }
/* Leaner + softer Home buttons: Oswald Light (condensed, elegant), a thin soft border, and less bulk. */
.role-btn { width: 300px; max-width: 100%; font-family: 'Oswald', var(--font-body); font-size: 1.05rem; font-weight: 300; letter-spacing: 0.04em; color: #2c2c2c; background: #fff; border: 1px solid rgba(0, 0, 0, 0.16); border-radius: 8px; padding: 11px 20px; cursor: pointer; text-align: center; transition: border-color 0.14s, box-shadow 0.14s, color 0.14s, background 0.14s, opacity 0.14s; }
.role-btn:hover { border-color: var(--gold); color: #1a1a1a; }
.role-btn:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }
/* Selected → glowing gold. */
.role-btn.is-selected { border-color: var(--gold); color: #8a6a12; background: #fffdf6; box-shadow: 0 0 0 2px rgba(255, 190, 23, 0.20); }
/* The other button, when one is selected → greyed out. */
.role-btn.is-dimmed { opacity: 0.45; color: #9a9a9a; border-color: rgba(0, 0, 0, 0.16); box-shadow: none; }
.role-btn.is-dimmed:hover { border-color: rgba(0, 0, 0, 0.16); }
/* Import block sits a full button-height below the role pair (spec item 7). */
.home-import { display: flex; flex-direction: column; align-items: center; gap: 12px; margin-top: 24px; }
/* Import is the primary action: a soft heartbeat pulse from white fill to a glowing gold fill invites
   the click. Text stays dark (readable on both). Pauses/settles on hover; off for reduced-motion. */
.role-import { color: #1a1a1a; border-color: rgba(0, 0, 0, 0.28); animation: home-import-heartbeat 2.6s ease-in-out infinite; }
.role-import:hover { animation: none; border-color: var(--gold); background: var(--gold); color: #1a1a1a; box-shadow: 0 6px 18px -6px rgba(255, 190, 23, 0.6); }
@keyframes home-import-heartbeat {
  0%, 100% { background-color: #fff; border-color: rgba(0, 0, 0, 0.22); box-shadow: 0 0 0 0 rgba(255, 190, 23, 0); transform: scale(1); }
  50% { background-color: var(--gold); border-color: var(--gold); box-shadow: 0 0 26px 3px rgba(255, 190, 23, 0.5); transform: scale(1.02); }
}
@media (prefers-reduced-motion: reduce) { .role-import { animation: none; } }
.home-anon-row { justify-content: center; }

/* ---- What's New (customer-facing release log; newest first) ----
   The .app-region content area is a fixed light surface (#F1F2F3), so colors follow the same
   light-surface palette every other doc page uses: #1a1a1a headings, #333 body, #5a5a5a muted,
   #1d7a40 green; the NEW badge uses brand gold + black ink like the app's other gold controls.
   Layout: each bullet is a two-column grid (tag | text). The tag column is sized to the widest
   badge (min-content across all rows), so every bullet's text shares one left edge. Body copy is
   the locked 13.5px (.75rem, see ui-design-guidelines). */
.wn-log { display: flex; flex-direction: column; gap: 28px; max-width: 720px; margin-top: 8px; }
.wn-date { font-family: var(--font-body); font-size: .7rem; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; margin: 0 0 12px; padding-bottom: 7px; border-bottom: 1px solid rgba(0, 0, 0, .12); }
/* Grid on the LIST (not each row) with the rows as display:contents, so the tag column sizes to the
   widest badge across every bullet and all body text shares one left edge. */
.wn-items { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: max-content 1fr; column-gap: 12px; row-gap: 13px; align-items: start; font-size: .75rem; line-height: 1.5; }
.wn-items li { display: contents; }
.wn-tag { justify-self: start; white-space: nowrap; margin-top: 1px; font-size: .6rem; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; padding: 3px 9px; border-radius: 999px; }
.app-region .wn-date { color: #5a5a5a; }
.app-region .wn-items li { color: #333; }
.app-region .wn-items strong { color: #1a1a1a; font-weight: 700; }
.app-region .wn-new { background: var(--gold); color: #1a1a1a; }
.app-region .wn-improved { background: rgba(29, 122, 64, .13); color: #1d7a40; }
.app-region .wn-fixed { background: rgba(0, 0, 0, .07); color: #5a5a5a; }

/* ---------- Trends page (CRO Lens): filters + per-skill graphs + heatmap ---------- */
/* All Trends settings live in one compact strip that stays put on scroll — same behavior/design as
   the one-off diagnostic callbar: sticky under the app header, dark, full-bleed to the gutter. */
.trends-filters { position: sticky; top: 62px; z-index: 20; display: flex; flex-direction: column; gap: 7px;
  margin: -6px calc(-1 * var(--gutter)) 18px; padding: 8px var(--gutter) 9px; background: #2c2c2c; border-bottom: 1px solid var(--border); }
.trf-topline { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; }
.trf-controls { display: flex; flex-wrap: wrap; gap: 8px 16px; align-items: flex-start; }
.trf-window { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; }
.trf-controls-right { flex: 1 1 340px; min-width: 0; display: flex; flex-direction: column; align-items: flex-start; gap: 5px; margin-left: 25px; }
.trf-controls-row { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 8px 16px; }
/* The four org slices as a calm 2×2 grid: label columns share a min width so the selects line up. */
.trf-slices { display: grid; grid-template-columns: repeat(2, auto); gap: 5px 18px; align-items: center; }
.trf-slices .trf-label { min-width: 58px; }
.trf-slices .trf-select { min-width: 96px; }
.trf-custom { display: inline-flex; align-items: center; gap: 6px; }
.trf-custom-btn { font: inherit; font-size: .68rem; color: #d8d8d8; background: #3a3a3a; border: 1px solid #565656; border-radius: 7px; padding: 3px 9px; cursor: pointer; }
.trf-custom-btn.is-on { background: var(--gold); color: #1a1a1a; font-weight: 700; }
.trf-date { font: inherit; font-size: .66rem; color: #1e1e1e; background: #fff; border: 1px solid #565656; border-radius: 6px; padding: 2px 5px; }
.trf-sep { color: #a7a7a7; font-size: .7rem; }
/* Inline label + control keeps every filter on one short line, so the whole strip is a single compact row. */
.trf-group { display: inline-flex; flex-direction: row; align-items: center; gap: 7px; }
.trf-label { font-size: .54rem; font-weight: 700; letter-spacing: .09em; text-transform: uppercase; color: #a7a7a7; white-space: nowrap; }
.trf-seg { display: inline-flex; border: 1px solid #565656; border-radius: 7px; overflow: hidden; }
.trf-seg-btn { font: inherit; font-size: .68rem; color: #d8d8d8; background: #3a3a3a; border: 0; border-right: 1px solid #565656; padding: 3px 9px; cursor: pointer; }
.trf-seg-btn:last-child { border-right: 0; }
.trf-seg-btn.is-on { background: var(--gold); color: #1a1a1a; font-weight: 700; }
.trf-select { font: inherit; font-size: .7rem; color: #1e1e1e; background: #fff; border: 1px solid #565656; border-radius: 7px; padding: 3px 8px; min-width: 84px; max-width: 220px; }
/* One dark header: the page title lives in the strip and the standalone bright page-head is hidden on
   Trends (mirrors how the one-off callbar suppresses the page-head). */
.app-region:has(.view.is-active[data-view="trends"]) .page-head { display: none; }
/* Compare renders its own top bar (title + Clear + Window), so hide the shared page-head here too. */
.app-region:has(.view.is-active[data-view="compare"]) .page-head { display: none; }
.trf-title { font-family: var(--font-display); font-weight: 400; font-size: .95rem; letter-spacing: .06em; text-transform: uppercase; color: #f0f0f0; white-space: nowrap; }
.trf-sub { flex: 1 1 auto; min-width: 120px; font-family: var(--font-body); font-size: .72rem; line-height: 1.4; color: #a2a2a2; }
.trends-filters .trends-coverage { margin: 0; color: #b7b7b7; font-size: .72rem; white-space: nowrap; }
.trends-coverage { font-size: .72rem; color: #6a6a6a; margin: 0 0 20px; }
.trends-sec-h { font-family: var(--font-display); font-weight: 400; font-size: 1.05rem; letter-spacing: .04em; color: #1e1e1e; border-left: 4px solid var(--gold); padding-left: 11px; margin: 26px 0 14px; }
.trends-sec-note { margin-left: 12px; font-family: var(--font-body); font-size: .72rem; font-weight: 400; letter-spacing: normal; text-transform: none; color: #8a8a8a; }

/* small-multiple skill graphs */
.trends-graph-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 16px; }
.trends-card { background: #fff; border: 1px solid #e2e2e2; border-radius: 12px; padding: 12px 14px; }
.trends-card-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-bottom: 6px; }
.trends-card-name { font-size: .8rem; font-weight: 600; color: #1f1f1f; }
.trends-card-val { font-size: 1.05rem; font-weight: 700; color: #5a5a5a; font-variant-numeric: tabular-nums; }
.trends-card-val.is-above { color: #1f8f4e; }
.trends-card-val.is-near { color: #9a6a00; }
.trends-card-val.is-below { color: #c0392b; }
.trends-spark { display: block; width: 100%; height: auto; }
.trends-spark-line { fill: none; stroke: #1f1f1f; stroke-width: 1.4; stroke-linejoin: round; stroke-linecap: round; }
.trends-spark-bar { stroke: #b9b9b9; stroke-width: 1; stroke-dasharray: 3 3; }
.trends-spark-dot { fill: #9a6a00; }
.trends-spark-dot.is-above { fill: #1f8f4e; }
.trends-spark-dot.is-near { fill: #9a6a00; }
.trends-spark-dot.is-below { fill: #c0392b; }
/* Expand affordance on each trend card + the full-size modal chart it opens. */
.trends-card-right { display: flex; align-items: center; gap: 8px; }
.trends-card-expand { appearance: none; background: none; border: 0; margin: 0; padding: 2px; line-height: 0; color: #a2a2a2; cursor: pointer; border-radius: 6px; }
.trends-card-expand:hover, .trends-card-expand:focus-visible { color: #1f1f1f; background: #f0f0f0; }
.trends-card-expand:focus-visible { outline: 2px solid var(--gold); outline-offset: 1px; }
.trends-modal-overlay { position: fixed; inset: 0; z-index: 1000; display: flex; align-items: center; justify-content: center; padding: 24px; background: rgba(0,0,0,.5); }
.trends-modal { width: min(860px, 96vw); max-height: 92vh; overflow: auto; background: #fff; border-radius: 14px; padding: 20px 22px; box-shadow: 0 20px 60px rgba(0,0,0,.3); }
.trends-modal:focus { outline: none; }
.trends-modal-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 6px; }
.trends-modal-title { margin: 0; font-size: 1.15rem; font-weight: 700; color: #1f1f1f; }
.trends-modal-sub { margin: 3px 0 0; font-size: .72rem; letter-spacing: .05em; text-transform: uppercase; color: #8a8a8a; }
.trends-modal-x { appearance: none; border: 0; background: none; padding: 4px 6px; font-size: 1.05rem; line-height: 1; color: #8a8a8a; cursor: pointer; border-radius: 8px; }
.trends-modal-x:hover, .trends-modal-x:focus-visible { color: #1f1f1f; background: #f0f0f0; }
.trends-fchart { display: block; width: 100%; height: auto; margin: 8px 0; }
.trends-fc-grid { stroke: #ededed; stroke-width: 1; }
.trends-fc-ylbl { fill: #9a9a9a; font-size: 11px; text-anchor: end; font-family: var(--font-body); }
.trends-fc-xlbl { fill: #9a9a9a; font-size: 11px; text-anchor: middle; font-family: var(--font-body); }
.trends-fc-min { stroke: #b9b9b9; stroke-width: 1.5; stroke-dasharray: 4 4; }
.trends-fc-minlbl { fill: #7a7a7a; font-size: 11px; font-weight: 600; font-family: var(--font-body); }
.trends-fc-line { fill: none; stroke: #1f1f1f; stroke-width: 1.6; stroke-linejoin: round; stroke-linecap: round; }
.trends-fc-dot { fill: #9a6a00; }
.trends-fc-dot.is-above { fill: #1f8f4e; }
.trends-fc-dot.is-near { fill: #9a6a00; }
.trends-fc-dot.is-below { fill: #c0392b; }
.trends-modal-foot { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-top: 6px; flex-wrap: wrap; }
.trends-modal-cap { margin: 0; font-size: .78rem; color: #7a7a7a; }
.trends-modal-nav { display: flex; gap: 8px; }
.trends-modal-navbtn { appearance: none; border: 1px solid #dcdcdc; background: #fff; border-radius: 8px; padding: 5px 12px; font-size: .8rem; color: #3a3a3a; cursor: pointer; }
.trends-modal-navbtn:hover, .trends-modal-navbtn:focus-visible { border-color: #b9b9b9; background: #f7f7f7; }

/* heatmap */
/* Cells are glowing chips: saturated translucent fill + a soft colour halo. */

.trends-empty { max-width: 560px; background: #fff; border: 1px solid #e2e2e2; border-radius: 12px; padding: 22px 24px; }
.trends-empty-h { font-family: var(--font-display); font-weight: 400; font-size: 1.1rem; letter-spacing: .03em; color: #1a1a1a; margin: 0 0 8px; }
.trends-empty-p { font-size: .78rem; color: #5a5a5a; line-height: 1.55; margin: 0; }

/* Trends — critical-trends summary (headline) */
.trends-summary { margin: 0 0 26px; }
.trends-group-head { display: flex; align-items: center; margin: 0 0 12px; }
.trends-group-h { font-family: var(--font-display); font-weight: 400; font-size: 1.15rem; letter-spacing: .03em; color: #1e1e1e; }
.trends-summary-none { margin: 0; font-size: .8rem; color: #6a6a6a; line-height: 1.55; }
/* General insights — headline movement + movers — a full-width block above the two cards. */
.trends-insights { background: #fff; border: 1px solid #e2e2e2; border-radius: 12px; padding: 16px 20px; margin: 0 0 14px; }
.trends-insights > * + * { margin-top: 8px; }
.trends-headline { margin: 0; font-size: var(--fs-body); font-weight: 700; color: #1f1f1f; }
/* Two separate blocks: critical gaps | what good looks like. Monochrome — no red/green accents. */
.trends-summary-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
@media (max-width: 720px) { .trends-summary-cols { grid-template-columns: 1fr; } }
.trends-scard { background: #fff; border: 1px solid #e2e2e2; border-radius: 12px; padding: 16px 20px; }
.trends-scol-h { font-size: .72rem; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; color: #1f1f1f; margin: 0 0 12px; }
.trends-scol-empty { font-size: .76rem; color: #8a8a8a; margin: 0; }
.trends-stat-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 9px; }
.trends-stat { font-size: .8rem; line-height: 1.45; color: #2b2b2b; }
.trends-stat strong { color: #1f1f1f; }
.trends-stat-meta { color: #8a8a8a; font-size: .72rem; }
.trends-crit-badge { display: inline-block; font-size: .54rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: #1f1f1f; border: 1px solid #1f1f1f; border-radius: 3px; padding: 0 4px; margin-right: 6px; vertical-align: middle; }
.trends-mover { margin: 0; font-size: var(--fs-body); color: #2b2b2b; }
.trends-mover-h { font-weight: 700; color: #1f1f1f; }
/* Compare (up to 5): highlight the leading side per row. */
.cmp-lead { color: #12673a; font-weight: 700; }


/* ── Secret Sauce (automatic Top-vs-Core differentiator engine) ───────────── */
.ss-app { max-width: 880px; }
.ss-lead { font-size: 15px; line-height: 1.55; color: #333; margin: 0 0 26px; max-width: 720px; }
.ss-loading { color: #666; font-size: 14px; }
.ss-cluster { margin: 0 0 42px; }
.ss-cluster-head { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin: 0 0 12px; }
.ss-cluster-h { font-size: 18px; font-weight: 700; color: #1a1a1a; margin: 0; }
.ss-cluster-meta { font-size: 12.5px; color: #666; }
.ss-reveal-row { margin-top: 16px; }
.ss-state { max-width: 640px; padding: 8px 0; }
.ss-state-h { font-size: 18px; font-weight: 700; color: #1a1a1a; margin: 0 0 8px; }
.ss-state-p { font-size: 14.5px; line-height: 1.55; color: #444; margin: 0 0 18px; }
.ss-cta { margin-top: 4px; }

/* ── Secret Sauce: agenda + collapsible/copy/download coaching play ────────── */
.ss-agenda { background: #fff; border: 1px solid #e4e4e7; border-radius: 10px; padding: 14px 18px; margin: 0 0 32px; max-width: 720px; }
.ss-agenda-h { display: block; font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; color: #888; margin-bottom: 11px; }
.ss-agenda-list { list-style: disc; margin: 0; padding: 0 0 0 20px; }
.ss-agenda-list li { margin: 5px 0; }
.ss-agenda-link { display: inline; background: none; border: 0; padding: 0; font-size: 14px; font-weight: 500; color: #9a6a00; text-decoration: underline; cursor: pointer; }
.ss-agenda-link:hover { color: #7a5400; }
.ss-agenda-n { margin-left: 8px; font-size: 12.5px; color: #888; text-decoration: none; }
.ss-reveal-row { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 12px; margin-top: 16px; }
.ss-reveal-hint { font-size: 12.5px; color: #888; }
.ss-play-bar { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 10px; }
.ss-play-toggle { display: inline-flex; align-items: center; gap: 8px; background: none; border: 0; padding: 0; font-size: 16px; font-weight: 700; color: #1a1a1a; cursor: pointer; }
.ss-play-caret { font-size: 12px; color: #999; }
.ss-play-actions { display: inline-flex; gap: 8px; }
.ss-play-act { background: #fff; border: 1px solid #d8d8de; border-radius: 7px; padding: 5px 12px; font-size: 13px; font-weight: 500; color: #333; cursor: pointer; }
.ss-play-act:hover { background: #f4f5f7; border-color: #c4c4cc; }
.ss-play-act:disabled { opacity: 0.7; cursor: default; }
/* Always-on playbook: "Last updated" + stale hint + a Regenerate that highlights when stale. */
.ss-play-bar { flex-wrap: wrap; }
.ss-play-meta { display: inline-flex; align-items: center; gap: 10px; margin-left: auto; font-size: 12.5px; color: #777; }
.ss-play-updated { white-space: nowrap; }
.ss-play-stale { display: inline-flex; align-items: center; gap: 4px; color: #b26f0d; font-weight: 600; }
.ss-play-relink { background: none; border: 0; padding: 0; color: #9a6a00; font-weight: 700; text-decoration: underline; text-underline-offset: 2px; cursor: pointer; font-size: inherit; }
.ss-play-relink:hover { color: #7a5400; }
.ss-play-act.is-stale { border-color: var(--gold); background: var(--gold-tint); color: #7a5400; font-weight: 700; }
.ss-play-act.is-stale:hover { background: #ffe9ad; }
.ss-play-body[hidden] { display: none; }
.ss-loading-sub { color: #888; }

/* ── Secret Sauce: upside callout, coachable reps, PDF toolbar ─────────────── */
.ss-toolbar { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 12px; margin: 0 0 30px; }
.ss-pdf { font-weight: 600; }
.ss-upside { background: #f0f7f1; border: 1px solid #cfe6d4; border-radius: 8px; padding: 10px 14px; margin: 14px 0 0; font-size: 14px; line-height: 1.5; color: #244b30; }
.ss-upside-note { display: block; margin-top: 6px; }
.ss-upside-tag { display: inline-block; margin-right: 8px; padding: 1px 8px; border-radius: 4px; background: #2a9d57; color: #fff; font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; }
.ss-coach { margin: 14px 0 0; }
.ss-coach-h { display: block; font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; color: #888; margin-bottom: 6px; }
.ss-coach-list { list-style: none; margin: 0; padding: 0; }
.ss-coach-list li { padding: 3px 0; font-size: 14px; }
.ss-coach-name { font-weight: 600; color: #1a1a1a; }
.ss-coach-meta { margin-left: 8px; font-size: 12.5px; color: #777; }

/* ── Shared heatmap (ui/heatmap.ts) — Trends page + Coaching "Recent Trends" ── */
.hm-wrap { overflow-x: auto; padding: 6px 2px; }
.hm-scroll { overflow-x: auto; max-width: 100%; }
.hm-grid { display: grid; gap: 7px 6px; align-items: stretch; min-width: max-content; }
.hm-corner { }
.hm-colh { font-size: .58rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: #1f1f1f; text-align: center; align-self: end; padding-bottom: 3px; white-space: nowrap; }
.hm-colh.is-current { color: #111; }
.hm-rowh { font-size: .76rem; font-weight: 600; color: #1f1f1f; display: flex; align-items: center; padding-right: 14px; white-space: nowrap; }
.hm-cell { display: flex; align-items: center; justify-content: center; text-align: center; min-height: 22px; padding: 9px 12px; font-size: .76rem; font-weight: 600; font-variant-numeric: tabular-nums; border-radius: 8px; }
.hm-above { background: rgba(31,163,86,.30); color: #0c5c33; box-shadow: 0 0 12px rgba(31,163,86,.42); }
.hm-near { background: rgba(224,166,0,.32); color: #7a5300; box-shadow: 0 0 12px rgba(224,166,0,.40); }
.hm-below { background: rgba(224,58,42,.30); color: #9a271c; box-shadow: 0 0 12px rgba(224,58,42,.40); }
.hm-na { background: repeating-linear-gradient(45deg, rgba(0,0,0,.05) 0 3px, transparent 3px 6px); color: #b0b0b0; box-shadow: none; }
.hm-cell.is-current { box-shadow: inset 0 0 0 1.6px rgba(0,0,0,.34); }
.hm-legend { display: flex; flex-wrap: wrap; gap: 16px; margin-top: 14px; font-size: .68rem; color: #6a6a6a; }
.hm-legend-item { display: inline-flex; align-items: center; gap: 6px; }
.hm-sw { width: 12px; height: 12px; border-radius: 3px; display: inline-block; box-shadow: none; }
.hm-sw.hm-na { background: repeating-linear-gradient(45deg, rgba(0,0,0,.14) 0 3px, transparent 3px 6px); }
