/*
 * Control volume: site-wide theme.
 * Loaded last on every public page (generated academic pages through
 * scripts/build-academic.cjs, legacy endpoints through scripts/public-config.js).
 * It re-points the shared design tokens to the Control volume palette and restyles
 * the shared structures, so case studies, dossiers, tracks and papers all take the
 * theme without rewriting their content. Motion lives in styles/control-volume.css.
 */

/* ---------------------------------------------------------------- tokens */
html body.cv {
  --cv-ground: #070807; --cv-panel: #0d110e; --cv-panel-2: #121813; --cv-line: #2d3a31; --cv-line-2: #43544a;
  --cv-ink: #f2f0e7; --cv-ink-2: #c9cfc6; --cv-muted: #a9b3a8;
  --cv-teal: #65d6c9; --cv-green: #9bd69f; --cv-amber: #d7b46a; --cv-blue: #8fb7ff; --cv-hot: #f98e09;
  --cv-sans: Inter, 'Segoe UI', system-ui, sans-serif; --cv-mono: 'JetBrains Mono', ui-monospace, 'Cascadia Code', Consolas, monospace;

  --folio-page: var(--cv-ground); --folio-surface: var(--cv-panel); --folio-ink: var(--cv-ink);
  --folio-muted: var(--cv-muted); --folio-rule: var(--cv-line); --folio-accent: var(--cv-teal); --folio-tint: var(--cv-panel-2);
  --folio-display: var(--cv-sans); --folio-mono: var(--cv-mono);
  --page: var(--cv-ground); --surface: var(--cv-panel); --ink: var(--cv-ink); --muted: var(--cv-muted); --rule: var(--cv-line);
  --accent: var(--cv-teal); --accent-2: var(--cv-blue); --accent-3: var(--cv-amber); --accent-soft: rgba(101, 214, 201, .1);
  --hover: var(--cv-panel-2); --glass: rgba(7, 8, 7, .86); --surface-glass: rgba(13, 17, 14, .8);
  --shadow: 0 18px 60px rgba(0, 0, 0, .28); --shadow-strong: 0 28px 90px rgba(0, 0, 0, .38);
  --sans: var(--cv-sans); --serif: var(--cv-sans);
  --unified-page: var(--cv-ground); --unified-surface: var(--cv-panel); --unified-ink: var(--cv-ink); --unified-muted: var(--cv-muted);
  --unified-rule: var(--cv-line); --unified-accent: var(--cv-teal); --unified-accent-2: var(--cv-blue); --unified-accent-3: var(--cv-amber);
  --unified-accent-soft: rgba(101, 214, 201, .1); --unified-hover: var(--cv-panel-2); --unified-glass: rgba(7, 8, 7, .86);
  --unified-shadow: 0 18px 60px rgba(0, 0, 0, .28); --unified-shadow-strong: 0 28px 90px rgba(0, 0, 0, .38); --unified-sans: var(--cv-sans);
  --paper-page: var(--cv-ground); --paper-sheet: var(--cv-panel); --paper-panel: var(--cv-panel-2); --paper-panel-strong: #18201a;
  --paper-ink: var(--cv-ink); --paper-muted: var(--cv-muted); --paper-rule: var(--cv-line); --paper-accent: var(--cv-teal); --paper-accent-soft: rgba(101, 214, 201, .1);
  --bg: var(--cv-ground); --bg-soft: var(--cv-ground); --bg-2: var(--cv-ground); --panel: var(--cv-panel); --panel-strong: var(--cv-panel-2);
  --text: var(--cv-ink); --fg: var(--cv-ink); --line: var(--cv-line);
  --v4-panel: var(--cv-panel); --v4-panel-strong: var(--cv-panel-2); --v4-line: var(--cv-line); --v4-teal: var(--cv-teal); --v4-blue: var(--cv-blue);
  --v4-amber: var(--cv-amber); --v4-orange: var(--cv-hot);
  color-scheme: dark;
  background: var(--cv-ground) !important;
  color: var(--cv-ink);
  font-family: var(--cv-sans);
  -webkit-font-smoothing: antialiased;
}
html:has(body.cv) { background: #070807; color-scheme: dark; }
body.cv ::selection { background: #65d6c9; color: #071007; }

/* ---------------------------------------------------------------- type */
body.cv h1, body.cv h2, body.cv h3, body.cv h4 { font-family: var(--cv-sans); color: var(--cv-ink); }
body.cv h1 { font-weight: 620; letter-spacing: -.03em; line-height: 1.02; text-wrap: balance; }
body.cv h2 { font-weight: 580; letter-spacing: -.02em; line-height: 1.12; text-wrap: balance; }
body.cv h3 { font-weight: 580; letter-spacing: -.01em; }
body.cv h1 em, body.cv h2 em { font-style: normal; color: var(--cv-teal); }
body.cv p, body.cv li, body.cv dd { text-wrap: pretty; }
body.cv .lead, body.cv .hero-text, body.cv .section-intro { color: var(--cv-ink-2); }
body.cv :is(.eyebrow, .overline, .item-meta, .meta, .course-code, .course-credits, .course-meta, .project-browser-kicker,
  .project-browser-meta, .tools-line, .work-number, .track-number, .discipline-number, .entry-status, .radar-guide,
  .scope-caption, .dossier-counts, .tc-label, .course-grade, .stat-chip, .share-note, .breadcrumbs, .section-index) {
  font-family: var(--cv-mono); letter-spacing: .1em;
}
body.cv :is(.eyebrow, .overline) {
  color: var(--cv-amber) !important; text-transform: uppercase; font-size: 12px !important; font-weight: 500; letter-spacing: .14em !important;
}
body.cv :is(.eyebrow, .overline)::after { content: "_"; margin-left: 6px; animation: cv-caret 1.1s steps(1) infinite; }
body.cv :is(.item-meta, .meta, .tools-line, .project-browser-meta, .project-browser-kicker, .course-meta) {
  color: var(--cv-muted) !important; font-size: 12px; text-transform: uppercase;
}
body.cv .tools-line { text-transform: none; letter-spacing: .02em; color: var(--cv-ink-2) !important; }
body.cv a { color: inherit; text-underline-offset: 3px; }
body.cv :is(main, .paper-doc) :is(p, li, dd, td) a:not([class]) { color: #8fd8cf; text-decoration-color: rgba(101, 214, 201, .45); }
body.cv :is(main, .paper-doc) :is(p, li, dd, td) a:not([class]):hover { color: var(--cv-teal); text-decoration-color: currentColor; }
body.cv code, body.cv kbd, body.cv pre { font-family: var(--cv-mono); }
body.cv hr { border: 0; border-top: 1px solid var(--cv-line); }

/* ---------------------------------------------------------------- header + footer */
body.cv :is(.site-header, .academic-header) {
  position: sticky; top: 0; z-index: 30; overflow: hidden; background: rgba(7, 8, 7, .82) !important;
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px); border-bottom: 1px solid var(--cv-line) !important; box-shadow: none !important;
}
body.cv :is(.header-inner, .unified-header-inner) { background: transparent !important; border-bottom: 0 !important; min-height: 72px; }
body.cv :is(.wordmark, .unified-wordmark, .logo) {
  font-family: var(--cv-mono) !important; text-transform: uppercase; letter-spacing: .14em !important; font-size: 13px !important; font-weight: 500 !important; color: var(--cv-ink) !important;
}
body.cv :is(.wordmark, .unified-wordmark) span {
  display: block; margin-top: 4px; font-size: 10px; letter-spacing: .12em; color: var(--cv-muted); font-weight: 400;
}
body.cv :is(.main-nav, .unified-nav, .nav-links) a {
  font-family: var(--cv-mono) !important; text-transform: uppercase; letter-spacing: .12em !important; font-size: 12px !important;
  color: var(--cv-muted) !important; background: transparent !important; position: relative;
}
body.cv :is(.main-nav, .unified-nav, .nav-links) a::after {
  content: ""; position: absolute; left: 12px; right: 12px; bottom: 6px; height: 1.5px;
  background: repeating-linear-gradient(90deg, currentColor 0 5px, transparent 5px 9px); transform: scaleX(0); transform-origin: left;
  transition: transform .4s cubic-bezier(.22, 1, .36, 1);
}
body.cv :is(.main-nav, .unified-nav, .nav-links) a:hover { color: var(--cv-ink) !important; }
body.cv :is(.main-nav, .unified-nav, .nav-links) a:hover::after { transform: scaleX(1); animation: cv-flow .5s linear infinite; }
body.cv :is(.main-nav, .unified-nav, .nav-links) a[aria-current="page"] { color: var(--cv-teal) !important; }
body.cv :is(.main-nav, .unified-nav, .nav-links) a[aria-current="page"]::after { transform: scaleX(1); }
body.cv :is(.theme-switch, .unified-theme-switch, [data-academic-theme], [data-unified-theme], .fcmd-trigger, .scroll-progress) { display: none !important; }
body.cv :is(.footer, .academic-footer) { background: var(--cv-ground) !important; border-top: 1px solid var(--cv-line) !important; color: var(--cv-muted); }
body.cv :is(.footer, .academic-footer) :is(p, a) { font-family: var(--cv-mono); font-size: 12px; letter-spacing: .08em; }
body.cv :is(.footer, .academic-footer) a { color: var(--cv-ink-2) !important; }
body.cv :is(.footer, .academic-footer) a:hover { color: var(--cv-teal) !important; }
body.cv .skip-link { background: var(--cv-teal); color: #071007; font-family: var(--cv-mono); }

/* ---------------------------------------------------------------- panels and cards */
body.cv :is(.card, .page-panel, .case-panel, .entry-card, .course-card, .evidence-item, .result-metric-card, .compact-item, .timeline-item,
  .project-browser-item, .structural-figure-card, .case-role-card, .evidence-route-card, .scholar-card, .track-tool-card, .evidence-panel,
  .research-grid article, .timeline > article, .education-list article, .publication-note, .thesis-feature, .track-focus, .battery-plot-card,
  .chart-shell, .evidence-chart-shell, .project-evidence-dashboard, .matrix-panel, .dossier-nav) {
  background-color: var(--cv-panel) !important; border: 1px solid var(--cv-line) !important; border-radius: 14px !important; box-shadow: none;
  color: var(--cv-ink);
}
body.cv :is(.card, .page-panel, .entry-card, .course-card, .evidence-item, .result-metric-card, .compact-item, .project-browser-item,
  .evidence-route-card, .scholar-card, .track-tool-card, .research-grid article, .timeline > article, .education-list article, .work-row,
  .skill-directory a, .track-directory a, .work-entrypoints a) {
  transition: transform .45s cubic-bezier(.22, 1, .36, 1), border-color .45s, box-shadow .45s, background-size .7s cubic-bezier(.22, 1, .36, 1);
  background-image: linear-gradient(to right, rgba(249, 142, 9, 0) 1px, transparent 1px), linear-gradient(to bottom, rgba(249, 142, 9, 0) 1px, transparent 1px);
  background-size: 28px 28px;
}
body.cv :is(.card, .page-panel, .entry-card, .course-card, .evidence-item, .result-metric-card, .compact-item, .project-browser-item,
  .evidence-route-card, .scholar-card, .track-tool-card, .research-grid article, .timeline > article, .education-list article, .work-row,
  .skill-directory a, .track-directory a, .work-entrypoints a):hover {
  transform: translateY(-3px); border-color: rgba(249, 142, 9, .6) !important;
  box-shadow: 0 22px 60px rgba(188, 55, 84, .16), 0 0 0 1px rgba(249, 142, 9, .12);
  background-image: linear-gradient(to right, rgba(249, 142, 9, .13) 1px, transparent 1px), linear-gradient(to bottom, rgba(249, 142, 9, .13) 1px, transparent 1px);
  background-size: 10px 10px;
}
body.cv :is(.work-row) { border-bottom: 1px solid var(--cv-line) !important; border-radius: 14px; }
body.cv .work-media, body.cv .evidence-media { border-radius: 10px; overflow: hidden; border: 1px solid var(--cv-line); background: #060706; }
body.cv .work-media img, body.cv .evidence-media img { transition: transform .8s cubic-bezier(.22, 1, .36, 1), filter .8s; filter: saturate(.9) contrast(1.05); }
body.cv .work-media:hover img, body.cv .evidence-media:hover img { transform: scale(1.04); filter: saturate(1.1) contrast(1.1); }
body.cv :is(.work-media, .evidence-media) span { font-family: var(--cv-mono); letter-spacing: .12em; text-transform: uppercase; background: var(--cv-teal); color: #071007; }

/* ---------------------------------------------------------------- buttons, links, chips */
body.cv :is(.button, .primary-link, .button-row a, .hero-links a, .radar-actions a, .work-links a, .text-links a, .project-links a, .course-links a,
  .back-link, .paper-back, .contact-resources a, .resource-links a, .back-to-skills, .radar-skill-link) {
  font-family: var(--cv-mono) !important; letter-spacing: .1em; font-size: 12px !important; text-transform: uppercase; text-decoration: none !important;
}
body.cv :is(.button, .hero-links a, .radar-actions a) {
  display: inline-flex; align-items: center; min-height: 44px; padding: 0 18px; border-radius: 6px !important;
  border: 1px solid var(--cv-line) !important; background: transparent !important; color: var(--cv-ink) !important;
  transition: transform .3s cubic-bezier(.34, 1.56, .64, 1), box-shadow .3s, border-color .3s;
}
body.cv :is(.button.primary, .primary-link, .hero-links a.primary-link, .radar-actions a.primary-link) {
  background: var(--cv-teal) !important; border-color: var(--cv-teal) !important; color: #071007 !important; font-weight: 600 !important;
}
body.cv :is(.button, .hero-links a, .radar-actions a):hover { transform: translateY(-2px); box-shadow: 0 0 0 4px rgba(101, 214, 201, .16), 0 12px 30px rgba(0, 0, 0, .45); border-color: var(--cv-teal) !important; }
body.cv :is(.work-links a, .text-links a, .project-links a, .course-links a, .back-link, .paper-back, .contact-resources a, .resource-links a, .back-to-skills, .radar-skill-link, .title-link) { color: var(--cv-teal) !important; transition: letter-spacing .35s, text-shadow .35s; }
body.cv :is(.work-links a, .text-links a, .project-links a, .course-links a, .back-link, .contact-resources a, .resource-links a):hover { letter-spacing: .16em; text-shadow: 0 0 14px currentColor; }
body.cv :is(.tag-row span, .chip, .pill, .skill-pill, .stat-chip, .tag-hot, .audience-chip-row span) {
  font-family: var(--cv-mono); font-size: 11px; letter-spacing: .08em; border: 1px solid var(--cv-line) !important; border-radius: 999px !important;
  background: transparent !important; color: var(--cv-ink-2) !important; padding: 4px 10px;
}
body.cv .tag-hot { border-color: rgba(249, 142, 9, .55) !important; color: #fcc58a !important; }

/* ---------------------------------------------------------------- control surfaces (marching dashed boundaries) */
body.cv :is(.contact-section, .thesis-feature, .track-focus, .case-hero, .hero-slab, .page-hero, .dossier-hero, .academic-hero) {
  position: relative; border-radius: 14px;
  background-image:
    linear-gradient(90deg, var(--cv-boundary, #65d6c9) 55%, transparent 0), linear-gradient(90deg, var(--cv-boundary, #65d6c9) 55%, transparent 0),
    linear-gradient(0deg, var(--cv-boundary, #65d6c9) 55%, transparent 0), linear-gradient(0deg, var(--cv-boundary, #65d6c9) 55%, transparent 0) !important;
  background-size: 12px 1.5px, 12px 1.5px, 1.5px 12px, 1.5px 12px !important;
  background-position: 0 0, 0 100%, 0 0, 100% 0 !important;
  background-repeat: repeat-x, repeat-x, repeat-y, repeat-y !important;
  animation: cv-boundary 1.2s linear infinite;
}
body.cv :is(.case-hero, .hero-slab, .page-hero, .dossier-hero, .academic-hero) { padding: clamp(22px, 3.4vw, 44px) !important; margin-top: 20px; --cv-boundary: rgba(101, 214, 201, .55); }
body.cv :is(.contact-section, .thesis-feature, .track-focus) { padding: clamp(22px, 3vw, 36px) !important; background-color: var(--cv-panel) !important; }
body.cv :is(.contact-section, .thesis-feature, .track-focus, .case-hero, .hero-slab, .page-hero, .dossier-hero, .academic-hero):hover { --cv-boundary: #f98e09; animation-duration: .45s; }
@keyframes cv-boundary { to { background-position: 12px 0, -12px 100%, 0 -12px, 100% 12px; } }

/* ---------------------------------------------------------------- residual: scope and limitations */
body.cv :is(.scope-note, .case-limitations, .limitations, [data-residual]) {
  position: relative; border: 1px solid #6b5a2e !important; border-radius: 14px !important; padding: clamp(20px, 3vw, 32px) !important;
  background-color: rgba(215, 180, 106, .04) !important;
  background-image: repeating-linear-gradient(135deg, rgba(215, 180, 106, .13) 0 1px, transparent 1px 8px) !important;
  animation: cv-creep 5s linear infinite;
}
body.cv .scope-note > h2::before, body.cv [data-residual] > h2::before {
  content: "RESIDUAL · "; font-family: var(--cv-mono); font-size: 12px; letter-spacing: .14em; color: var(--cv-amber); vertical-align: middle;
}

/* ---------------------------------------------------------------- academic structures */
body.cv .hero-identity img { border-radius: 999px; border: 1.5px solid var(--cv-teal); box-shadow: 0 0 0 4px rgba(101, 214, 201, .12); }
body.cv .academic-hero h1 { font-size: clamp(56px, 9vw, 104px) !important; }
body.cv .hero-specialism { font-family: var(--cv-mono); text-transform: uppercase; letter-spacing: .12em; color: var(--cv-teal) !important; font-size: 13px !important; }
body.cv .work-entrypoints a { border: 1px solid var(--cv-line) !important; border-radius: 14px !important; background-color: var(--cv-panel) !important; }
body.cv .work-entrypoints a span { font-family: var(--cv-mono); letter-spacing: .12em; text-transform: uppercase; color: var(--cv-amber); font-size: 11px; }
body.cv .work-entrypoints a small { font-family: var(--cv-mono); color: var(--cv-muted); letter-spacing: .06em; }
body.cv .portfolio-credentials { border-block: 1px solid var(--cv-line) !important; font-family: var(--cv-mono); letter-spacing: .08em; font-size: 12px; color: var(--cv-muted); background: transparent !important; }
body.cv .portfolio-credentials strong { color: var(--cv-ink); }
body.cv .section-index { border-block: 1px solid var(--cv-line) !important; background: rgba(7, 8, 7, .86) !important; -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); }
body.cv .section-index a { font-family: var(--cv-mono); text-transform: uppercase; letter-spacing: .1em; font-size: 11px; color: var(--cv-muted) !important; }
body.cv .section-index a:hover { color: var(--cv-teal) !important; }
body.cv .breadcrumbs, body.cv .breadcrumbs a { font-family: var(--cv-mono); font-size: 11px; text-transform: uppercase; letter-spacing: .12em; color: var(--cv-muted) !important; }
body.cv .breadcrumbs [aria-current="page"] { color: var(--cv-teal); }
body.cv .section-heading { border-bottom: 0 !important; }
body.cv .section-heading > a, body.cv .section-heading div + a { font-family: var(--cv-mono); text-transform: uppercase; letter-spacing: .1em; font-size: 12px; color: var(--cv-teal) !important; }
body.cv :is(.skill-directory, .track-directory) a { border: 1px solid var(--cv-line) !important; border-radius: 14px !important; background-color: var(--cv-panel) !important; color: var(--cv-ink) !important; }
body.cv :is(.skill-directory, .track-directory) small, body.cv .track-detail { color: var(--cv-muted) !important; }
body.cv .track-open { font-family: var(--cv-mono); text-transform: uppercase; letter-spacing: .12em; font-size: 11px; color: var(--cv-teal) !important; }
body.cv .track-visual i, body.cv .track-visual b { background: var(--cv-teal) !important; }
body.cv .track-navigation a { font-family: var(--cv-mono); text-transform: uppercase; letter-spacing: .1em; font-size: 12px; }
body.cv .track-navigation a[aria-current="page"] { color: var(--cv-teal) !important; border-color: var(--cv-teal) !important; }
body.cv .course-list .course-code { color: var(--cv-teal) !important; }
body.cv .contact-email { font-family: var(--cv-mono) !important; color: var(--cv-teal) !important; letter-spacing: .02em; }
body.cv .share-url { font-family: var(--cv-mono); color: var(--cv-teal) !important; }
body.cv details > summary { cursor: pointer; }
body.cv details > summary::marker { color: var(--cv-teal); }
body.cv .discipline-number, body.cv .work-number, body.cv .track-number {
  display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px; border-radius: 999px;
  border: 1px solid var(--cv-teal); color: var(--cv-teal) !important; font-size: 13px !important;
}

/* radar: capability scale, Expert drawn and left unclaimed */
body.cv .matrix-tabs button { font-family: var(--cv-mono); border: 1px solid var(--cv-line) !important; border-radius: 8px !important; background: transparent !important; color: var(--cv-ink-2) !important; }
body.cv .matrix-tabs button strong { text-transform: uppercase; letter-spacing: .12em; font-weight: 500; }
body.cv .matrix-tabs button small { color: var(--cv-muted) !important; letter-spacing: .04em; }
body.cv .matrix-tabs button[aria-selected="true"] { background: var(--cv-teal) !important; border-color: var(--cv-teal) !important; color: #071007 !important; }
body.cv .matrix-tabs button[aria-selected="true"] small { color: #0f2b26 !important; }
body.cv .portfolio-radar-chart .radar-grid polygon, body.cv .portfolio-radar-chart .radar-grid line { stroke: var(--cv-line-2) !important; fill: none !important; }
body.cv .portfolio-radar-chart .radar-grid polygon:last-of-type { stroke: var(--cv-amber) !important; stroke-dasharray: 4 5; animation: cv-march 1.6s linear infinite; }
body.cv .portfolio-radar-chart .radar-coverage { fill: rgba(101, 214, 201, .18) !important; stroke: var(--cv-teal) !important; stroke-width: 2 !important; }
body.cv .portfolio-radar-chart .radar-node { fill: #fcffa4 !important; stroke: var(--cv-hot) !important; stroke-width: 2 !important; }
body.cv .portfolio-radar-chart text { fill: var(--cv-ink) !important; font-family: var(--cv-mono) !important; font-size: 11px !important; letter-spacing: .06em; text-transform: uppercase; }
body.cv .portfolio-radar-chart a:hover text { fill: var(--cv-teal) !important; }
body.cv .radar-explanation, body.cv .radar-track-detail { color: var(--cv-muted) !important; }

/* ---------------------------------------------------------------- legacy endpoint structures */
body.cv .section.subtle { background: var(--cv-panel-2) !important; }
body.cv .case-visual, body.cv .project-thumb { border-radius: 12px; border: 1px solid var(--cv-line); overflow: hidden; background: #060706; }
body.cv table, body.cv .case-data-table { border-collapse: collapse; font-variant-numeric: tabular-nums; }
body.cv :is(table, .case-data-table) :is(th) { font-family: var(--cv-mono); text-transform: uppercase; letter-spacing: .1em; font-size: 11px; color: var(--cv-amber); border-bottom: 1px solid var(--cv-line); }
body.cv :is(table, .case-data-table) :is(td) { border-bottom: 1px solid var(--cv-line); color: var(--cv-ink-2); }
body.cv .result-metric-card strong, body.cv .figure-kpi-row strong, body.cv .evidence-kpi-strip strong { font-family: var(--cv-mono); color: var(--cv-teal); }
body.cv .evidence-tab-button { font-family: var(--cv-mono); text-transform: uppercase; letter-spacing: .1em; font-size: 11px; border: 1px solid var(--cv-line) !important; background: transparent !important; color: var(--cv-ink-2) !important; border-radius: 6px !important; }
body.cv .evidence-tab-button:is(.is-active, [aria-selected="true"]) { background: var(--cv-teal) !important; color: #071007 !important; border-color: var(--cv-teal) !important; }
body.cv .method-flow span { background: var(--cv-panel-2) !important; border: 1px solid var(--cv-line) !important; color: var(--cv-ink) !important; font-family: var(--cv-mono); }
body.cv .course-grade { color: #071007 !important; background: var(--cv-teal) !important; border-radius: 4px; padding: 2px 8px; }
body.cv input, body.cv select, body.cv textarea { background: var(--cv-panel); color: var(--cv-ink); border: 1px solid var(--cv-line); border-radius: 6px; font-family: var(--cv-mono); }
body.cv input:focus, body.cv select:focus, body.cv textarea:focus { outline: 2px solid var(--cv-teal); outline-offset: 2px; }
body.cv :focus-visible { outline: 2px solid var(--cv-teal); outline-offset: 3px; }

/* research papers keep their document surface, in the dark-paper palette */
body.cv .paper-doc { border: 1px solid var(--cv-line); border-radius: 14px; }
body.cv .paper-bar { background: rgba(7, 8, 7, .9) !important; border-bottom: 1px solid var(--cv-line) !important; }

/* ---------------------------------------------------------------- shared page kit (rebuilt pages) */
body.cv .cv-page { width: min(1180px, calc(100% - 48px)); margin: 0 auto; padding: 72px 0 120px; display: flex; flex-direction: column; gap: clamp(64px, 9vw, 104px); }
body.cv .cv-head { display: flex; flex-direction: column; gap: 20px; max-width: 900px; }
body.cv .cv-head h1 { font-size: clamp(40px, 6.5vw, 64px); margin: 0; }
body.cv .cv-head .lead { font-size: clamp(17px, 2vw, 20px); line-height: 1.6; margin: 0; }
body.cv .cv-section { display: flex; flex-direction: column; gap: 28px; }
body.cv .cv-section > header { display: flex; flex-direction: column; gap: 12px; max-width: 760px; }
body.cv .cv-section > header h2 { font-size: clamp(28px, 4vw, 40px); margin: 0; }
body.cv .cv-section > header p { margin: 0; color: var(--cv-muted); font-size: 16px; line-height: 1.65; }
body.cv .cv-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(var(--cv-min, 280px), 100%), 1fr)); gap: 16px; }
body.cv .cd { border: 1px solid var(--cv-line); border-radius: 14px; background: var(--cv-panel); padding: 28px; }
body.cv .cd h3 { margin: 0; font-size: 20px; line-height: 1.3; }
body.cv .cd p { margin: 0; color: var(--cv-ink-2); font-size: 15px; line-height: 1.6; }
body.cv .cv-rows { display: flex; flex-direction: column; border-top: 1px solid var(--cv-line); }
body.cv .cv-row { display: flex; flex-wrap: wrap; gap: 8px 36px; padding: 22px 0; border-bottom: 1px solid var(--cv-line); align-items: baseline; transition: background .35s, padding .35s; }
body.cv .cv-row:hover { background: linear-gradient(90deg, rgba(101, 214, 201, .07), transparent 70%); padding-left: 12px; }
body.cv .cv-row > .k { flex: 0 0 170px; font-family: var(--cv-mono); font-size: 12px; letter-spacing: .12em; text-transform: uppercase; color: var(--cv-teal); }
body.cv .cv-row > .v { flex: 1 1 380px; color: var(--cv-ink-2); line-height: 1.6; }
body.cv .cv-row > .v strong { color: var(--cv-ink); }
body.cv .cv-label { font-family: var(--cv-mono); font-size: 12px; letter-spacing: .14em; text-transform: uppercase; color: var(--cv-teal); }
body.cv .cv-label.a { color: var(--cv-amber); } body.cv .cv-label.b { color: var(--cv-blue); } body.cv .cv-label.g { color: var(--cv-green); }
body.cv .cv-chips { display: flex; flex-wrap: wrap; gap: 8px; }
body.cv .cv-chip { min-height: 44px; padding: 0 16px; border-radius: 6px; border: 1px solid var(--cv-line); background: transparent; color: var(--cv-ink-2); font-family: var(--cv-mono); font-size: 12px; letter-spacing: .1em; text-transform: uppercase; cursor: pointer; }
body.cv .cv-chip[aria-pressed="true"], body.cv .cv-chip[aria-selected="true"] { background: var(--cv-teal); border-color: var(--cv-teal); color: #071007; font-weight: 600; }
body.cv .cv-state { display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px; border-radius: 999px; border: 1px solid var(--cv-teal); color: var(--cv-teal); font-family: var(--cv-mono); font-size: 13px; flex: none; }
body.cv .cv-state.on { background: var(--cv-teal); color: #071007; font-weight: 600; }
body.cv .cv-residual { padding: 14px 16px; border-radius: 6px; font-size: 14px; line-height: 1.55; color: var(--cv-ink);
  background-color: rgba(215, 180, 106, .04); background-image: repeating-linear-gradient(135deg, rgba(215, 180, 106, .14) 0 1px, transparent 1px 8px); animation: cv-creep 5s linear infinite; }
body.cv .cv-residual::before { content: "RESIDUAL · "; font-family: var(--cv-mono); font-size: 11px; letter-spacing: .14em; color: var(--cv-amber); }
body.cv .cv-mono { font-family: var(--cv-mono); }
body.cv .cv-muted { color: var(--cv-muted); }
body.cv .cv-big { font-family: var(--cv-mono); font-size: clamp(30px, 4vw, 44px); font-weight: 600; letter-spacing: -.01em; }
body.cv .cv-link { font-family: var(--cv-mono); font-size: 12px; letter-spacing: .12em; text-transform: uppercase; color: var(--cv-teal) !important; text-decoration: none; padding: 10px 0; display: inline-block; }
body.cv .cv-link:hover { letter-spacing: .18em; text-shadow: 0 0 14px currentColor; }
body.cv .cv-btn { display: inline-flex; align-items: center; gap: 10px; min-height: 44px; padding: 0 20px; border-radius: 6px; border: 1px solid var(--cv-line); background: transparent; color: var(--cv-ink); font-family: var(--cv-mono); font-size: 12px; letter-spacing: .12em; text-transform: uppercase; text-decoration: none; cursor: pointer; }
body.cv .cv-btn.primary { background: var(--cv-teal); border-color: var(--cv-teal); color: #071007; font-weight: 600; }
body.cv .cv-hatchbox { border: 1.5px dashed var(--cv-amber); border-radius: 14px; padding: clamp(22px, 3vw, 36px);
  background-color: var(--cv-panel); background-image: repeating-linear-gradient(135deg, rgba(215, 180, 106, .08) 0 1px, transparent 1px 9px); }
body.cv .cv-swim { overflow-x: auto; padding-bottom: 8px; }
body.cv .cv-swim > div { min-width: 820px; display: flex; flex-direction: column; gap: 12px; }
body.cv .cv-lane { display: grid; grid-template-columns: 130px repeat(10, minmax(0, 1fr)); column-gap: 4px; align-items: center; }
body.cv .cv-lane .yr { font-family: var(--cv-mono); font-size: 11px; color: var(--cv-muted); padding-bottom: 8px; border-bottom: 1px solid var(--cv-line); }
body.cv .cv-lane .ln { font-family: var(--cv-mono); font-size: 11px; letter-spacing: .12em; color: var(--cv-muted); grid-column: 1; grid-row: 1; }
body.cv .cv-lane .bar { grid-row: 1; height: 32px; border-radius: 4px; display: flex; align-items: center; padding: 0 10px; font-family: var(--cv-mono); font-size: 11px; letter-spacing: .08em; color: #071007; font-weight: 600; overflow: hidden; white-space: nowrap; }

@media (max-width: 760px) {
  body.cv .cv-page { width: calc(100% - 32px); padding-top: 48px; }
  body.cv .cv-row > .k { flex-basis: 100%; }
}
@media print {
  html body.cv { --cv-ground: #fff; --cv-panel: #fff; --cv-ink: #111; --cv-ink-2: #222; --cv-muted: #333; --cv-line: #aaa; background: #fff !important; color: #111; }
}
@media (prefers-reduced-motion: reduce) {
  body.cv *, body.cv *::before, body.cv *::after { animation: none !important; transition: none !important; }
}

/* ---------------------------------------------------------------- homepage (generated by build-academic.cjs) */
body.cv .cv-eyebrow { display: flex; align-items: center; gap: 12px; }
body.cv .cv-eyebrow .gl { width: 22px; height: 22px; color: var(--cv-amber); }
body.cv .academic-hero { grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr); align-items: center; margin-top: 28px; }
body.cv .academic-hero h1.cv-hero-title { font-family: var(--cv-sans) !important; font-weight: 620 !important; letter-spacing: -.035em !important; }
body.cv .academic-hero h1.cv-hero-title em { color: var(--cv-teal) !important; -webkit-text-fill-color: currentColor; }
body.cv .academic-hero h1.cv-hero-title em::after { background: var(--cv-hot); }
body.cv .academic-hero h1.cv-hero-title span, body.cv .academic-hero h1.cv-hero-title em { display: inline-block; transition: text-shadow .3s; }
body.cv .hero-summary .lead { font-size: 1rem !important; color: var(--cv-ink-2) !important; }
body.cv .hero-interest { color: var(--cv-muted); }
body.cv .cv-volume { grid-column: 1 / -1; display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
body.cv .cv-streams { display: flex; flex-direction: column; gap: 16px; font-family: var(--cv-mono); font-size: 13px; letter-spacing: .12em; color: var(--cv-ink); }
body.cv .cv-box { flex: 1 1 260px; min-height: 140px; border-radius: 8px; padding: 20px; display: flex; flex-direction: column; justify-content: space-between; gap: 14px; background: rgba(13, 17, 14, .6); }
body.cv .cv-box .cv-residual { align-self: flex-start; }
body.cv .cv-out { font-family: var(--cv-mono); font-size: 13px; letter-spacing: .12em; }
body.cv .cv-ticker { margin: 0 calc(50% - 50vw); border-block: 1px solid var(--cv-line); background: #050605; overflow: hidden; }
body.cv .cv-ticker .tick span { padding: 9px 28px; font-family: var(--cv-mono); font-size: 11px; letter-spacing: .14em; color: var(--cv-muted); white-space: nowrap; }
body.cv .cv-ticker .tick span:nth-child(3n+2) { color: var(--cv-teal); }
body.cv .cv-ticker .tick span:nth-child(3n) { color: var(--cv-amber); }
body.cv .cv-readout { font-family: var(--cv-mono); font-size: 13px; letter-spacing: .06em; padding: 12px 16px; border: 1px solid var(--cv-line); border-radius: 6px; background: var(--cv-panel); margin: 0; min-width: 260px; }
body.cv .cv-field { height: 380px; border: 1px solid var(--cv-line); border-radius: 14px; background-color: #060706; }
body.cv .cv-field-note { position: absolute; left: 16px; bottom: 12px; margin: 0; font-family: var(--cv-mono); font-size: 10px; letter-spacing: .1em; color: var(--cv-muted); pointer-events: none; }
body.cv .cv-mesh { margin-top: 32px; display: flex; flex-direction: column; gap: 22px; padding: 32px; }
body.cv .cv-toy-head { display: flex; flex-wrap: wrap; gap: 16px 32px; align-items: flex-end; justify-content: space-between; }
body.cv .cv-toy-head > div:first-child { display: flex; flex-direction: column; gap: 8px; max-width: 560px; }
body.cv .cv-toy-head h3 { font-size: 24px; margin: 0; }
body.cv .cv-mesh-svg, body.cv .cv-year-svg { width: 100%; height: auto; display: block; background: #060706; border: 1px solid var(--cv-line); border-radius: 8px; }
body.cv .cv-toy-out { display: flex; flex-wrap: wrap; gap: 12px 28px; align-items: baseline; }
body.cv .cv-toy-out [data-out="verdict"] { font-size: 12px; letter-spacing: .12em; }
body.cv .cv-year { display: flex; flex-wrap: wrap; gap: 32px 48px; align-items: center; padding: 32px; }
body.cv .cv-year-svg { flex: 1 1 380px; max-width: 560px; border: 0; background: transparent; }
body.cv .cv-year-read { flex: 1 1 260px; display: flex; flex-direction: column; gap: 14px; }
body.cv .cv-year-read p { color: var(--cv-muted); margin: 0; }
body.cv .cv-after-contact { margin-top: 18px; }
@media (max-width: 860px) { body.cv .academic-hero { grid-template-columns: 1fr; } }
body.cv .track-layer, body.cv .page-section { border-top-color: var(--cv-line) !important; }
body.cv .track-layer { background: var(--cv-panel-2) !important; border-radius: 18px; }
body.cv .hero-identity strong { color: var(--cv-ink) !important; display: block; }
body.cv .hero-identity span { color: var(--cv-muted) !important; }
body.cv .section-heading { border-top: 1px solid var(--cv-line) !important; }
body.cv .research-grid article { padding: 28px !important; }
body.cv .contact-section { border: 0 !important; }
body.cv .portfolio-radar .matrix-tabs button { border-top: 1px solid var(--cv-line) !important; }
body.cv .research-grid { display: grid !important; grid-template-columns: repeat(auto-fit, minmax(min(260px, 100%), 1fr)) !important; gap: 16px !important; border: 0 !important; }
body.cv .research-grid article { display: flex; flex-direction: column; gap: 12px; }
body.cv .research-grid article h3 { margin: 6px 0 0; }
body.cv .research-grid article p { margin: 0; color: var(--cv-ink-2); }
body.cv .research-grid article > a { margin-top: auto; font-family: var(--cv-mono); font-size: 12px; text-transform: uppercase; letter-spacing: .1em; color: var(--cv-teal) !important; text-decoration: none; }

/* paper pages: beat the explicit dark-paper palette in unified.css */
html[data-theme] body.cv.signal-rebuild:is([data-paper], [data-mode='paper']) {
  --paper-page: #070807; --paper-sheet: #0d110e; --paper-panel: #121813; --paper-panel-strong: #18201a;
  --paper-ink: #f2f0e7; --paper-muted: #a9b3a8; --paper-rule: #2d3a31; --paper-accent: #65d6c9; --paper-accent-soft: rgba(101, 214, 201, .1);
  background: #070807 !important;
}
/* no thick coloured left borders: the boundary is the frame, not a stripe */
body.cv :is(.card, .case-panel .card, .page-panel, .compact-item, .result-metric-card, .entry-card, .evidence-panel, .case-role-card) { border-left-width: 1px !important; }
/* generated project covers are light SVG drawings: render them in the dark ground */
body.cv :is(.work-media, .evidence-media, .project-thumb, .case-visual) img[src$=".svg"] { filter: invert(.92) hue-rotate(180deg) saturate(1.1) contrast(1.05); }
body.cv :is(.work-media, .evidence-media) span { filter: none; }
body.cv .dossier-hero::after, body.cv .dossier-hero::before { display: none !important; }

/* ---------------------------------------------------------------- rebuilt record page */
body.cv .cv-roles { display: flex; flex-direction: column; border-top: 1px solid var(--cv-line); }
body.cv .cv-role { display: grid; grid-template-columns: 190px minmax(0, 1fr) 240px; gap: 16px 40px; padding: 40px 0; border-bottom: 1px solid var(--cv-line); align-items: start; transition: background .35s; }
body.cv .cv-role:hover { background: linear-gradient(90deg, rgba(101, 214, 201, .05), transparent 70%); }
body.cv .cv-role-when { display: flex; flex-direction: column; gap: 6px; }
body.cv .cv-role-when .cv-mono { font-size: 11px; letter-spacing: .1em; text-transform: uppercase; }
body.cv .cv-role-body { display: flex; flex-direction: column; gap: 14px; }
body.cv .cv-role-body h3 { margin: 0; font-size: clamp(20px, 2.2vw, 26px); line-height: 1.25; }
body.cv .cv-role-body h3 a { color: var(--cv-ink) !important; text-decoration: none; text-transform: none; letter-spacing: -.01em; font-family: var(--cv-sans) !important; font-size: inherit !important; }
body.cv .cv-role-body h3 a:hover { color: var(--cv-teal) !important; }
body.cv .cv-role-body > p:not(.cv-residual) { margin: 0; color: var(--cv-ink-2); line-height: 1.65; }
body.cv .cv-role-art { width: 100%; height: auto; border-radius: 10px; border: 1px solid var(--cv-line); filter: invert(.92) hue-rotate(180deg) saturate(1.1); }
@media (max-width: 960px) { body.cv .cv-role { grid-template-columns: 1fr; } body.cv .cv-role-art { max-width: 420px; } }

/* ---------------------------------------------------------------- research: resistance bars + Biot toy */
body.cv .cv-bars { display: flex; flex-direction: column; gap: 30px; padding: 32px; }
body.cv .cv-barset { display: flex; flex-direction: column; gap: 10px; }
body.cv .cv-stack { display: flex; height: 40px; gap: 2px; border-radius: 4px; overflow: hidden; }
body.cv .cv-stack > span { display: block; }
body.cv .cv-unknown { border: 1px dashed var(--cv-amber); box-sizing: border-box; background-color: rgba(215, 180, 106, .04);
  background-image: repeating-linear-gradient(135deg, rgba(215, 180, 106, .25) 0 1px, transparent 1px 7px); animation: cv-creep 5s linear infinite; }
body.cv .cv-stack-key { display: flex; justify-content: space-between; gap: 8px; flex-wrap: wrap; margin: 0; font-family: var(--cv-mono); font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: var(--cv-muted); }
body.cv .cv-stack-key .cv-a { color: var(--cv-amber); }
body.cv .cv-small { font-size: 11px; letter-spacing: .08em; text-transform: uppercase; margin: 0; border-top: 1px solid var(--cv-line); padding-top: 14px; }
body.cv .cv-biot { display: flex; flex-direction: column; gap: 22px; padding: 32px; }
body.cv .cv-slider { display: flex; flex-direction: column; gap: 10px; }
body.cv .cv-slider span { font-family: var(--cv-mono); font-size: 12px; letter-spacing: .1em; text-transform: uppercase; color: var(--cv-muted); }
body.cv .cv-slider b { color: var(--cv-ink); font-weight: 500; }
body.cv input[type=range] { accent-color: #65d6c9; width: 100%; height: 32px; margin: 0; background: transparent; border: 0; }
body.cv .cv-needle-scale { position: relative; height: 8px; border-radius: 999px; background: linear-gradient(90deg, #65d6c9 0 60%, #f98e09 60% 80%, #bc3754 80%); }
body.cv .cv-needle-scale span { position: absolute; top: -6px; width: 3px; height: 20px; margin-left: -1.5px; background: var(--cv-ink); border-radius: 2px; transition: left .5s cubic-bezier(.22, 1, .36, 1); }

/* ---------------------------------------------------------------- page modules (about, interests, ideas, hobbies, tracks, 404) */
body.cv .cv-section.cv-lenses { margin: 28px 0 0; }
body.cv .cv-lens-row { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
@media (max-width: 560px) { body.cv .cv-lens-row { grid-template-columns: 1fr; } }
body.cv .cv-lens-row > li { display: flex; flex-direction: column; gap: 10px; padding: 22px; }
body.cv .cv-lens-row h3 { font-size: 18px; }
body.cv .cv-residual-card { border-style: dashed !important; border-color: var(--cv-blue) !important;
  background-image: repeating-linear-gradient(135deg, rgba(143, 183, 255, .08) 0 1px, transparent 1px 8px); animation: cv-creep 5s linear infinite; }

body.cv .cv-cycle, body.cv .cv-nest { display: flex; flex-wrap: wrap; align-items: center; gap: 28px 40px; margin: 28px 0 0; padding: clamp(22px, 3vw, 34px); }
body.cv .cv-cycle-copy, body.cv .cv-nest-copy { flex: 1 1 340px; min-width: 0; display: flex; flex-direction: column; gap: 16px; }
body.cv .cv-cycle-copy h2, body.cv .cv-nest-copy h2, body.cv .cv-gate h2, body.cv .cv-scale h2 { margin: 0; font-size: clamp(22px, 2.6vw, 30px); line-height: 1.2; letter-spacing: -.01em; }
body.cv .cv-cycle-copy .cv-mono-title { font-family: var(--cv-mono); letter-spacing: .04em; color: var(--cv-ink); }
body.cv .cv-cycle-text { margin: 0; min-height: 52px; color: var(--cv-ink-2); font-size: 16px; line-height: 1.6; }
body.cv .cv-cycle-svg, body.cv .cv-nest-svg { flex: 1 1 300px; max-width: 460px; width: 100%; height: auto; }
body.cv .cv-nest-svg .cv-nest-outer { animation: cv-march 2.4s linear infinite; }
body.cv .cv-nest-copy p { margin: 0; color: var(--cv-ink-2); line-height: 1.6; }
body.cv .cv-nest .cv-row { padding: 14px 0; gap: 6px 18px; }
body.cv .cv-nest .cv-row > .k { flex: 0 0 96px; }
body.cv .cv-nest .cv-row > .v { flex: 1 1 220px; font-size: 15px; }
body.cv .cv-lamp-btn { align-self: flex-start; border: 1px dashed #6b5a2e !important; color: var(--cv-amber) !important; border-radius: 999px !important; }
body.cv .cv-lamp-btn .gl { width: 18px; height: 18px; }
body.cv .cv-res-eyebrow { color: var(--cv-blue) !important; }

.night .night-inner { width: min(760px, 100%); display: flex; flex-direction: column; gap: 24px; align-items: center; text-align: center; }
.night .night-inner > svg { width: 100%; height: auto; display: block; }
.night .night-tag { margin: 0; font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 12px; letter-spacing: .2em; text-transform: uppercase; color: #d7b46a; }
.night .night-text { margin: 0; max-width: 560px; font-size: 18px; line-height: 1.7; color: #e0ded4; }
.night .cv-btn { border-color: #d7b46a !important; color: #d7b46a !important; border-radius: 999px !important; }

body.cv .cv-gate, body.cv .cv-scale { display: flex; flex-direction: column; gap: 20px; margin: 28px 0 0; padding: clamp(22px, 3vw, 34px); }
body.cv .cv-flow { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0; counter-reset: none; }
body.cv .cv-flow > li { position: relative; display: flex; flex-direction: column; gap: 8px; padding: 20px 26px 20px 20px; border: 1px solid var(--cv-line); background: var(--cv-panel-2); }
body.cv .cv-flow > li + li { border-left: 0; }
body.cv .cv-flow > li:first-child { border-radius: 10px 0 0 10px; }
body.cv .cv-flow > li:last-child { border-radius: 0 10px 10px 0; }
body.cv .cv-flow > li:not(:last-child)::after { content: "→"; position: absolute; right: -10px; top: 50%; transform: translateY(-50%); z-index: 1; width: 20px; height: 20px; display: grid; place-items: center;
  font-family: var(--cv-mono); font-size: 12px; color: var(--cv-teal); background: var(--cv-ground); border: 1px solid var(--cv-line); border-radius: 50%; }
body.cv .cv-flow > li.gate { border: 1.5px dashed var(--cv-amber); background: rgba(215, 180, 106, .05); }
body.cv .cv-flow strong { color: var(--cv-ink); font-size: 17px; font-weight: 600; }
body.cv .cv-flow > li > span:last-child { color: var(--cv-ink-2); font-size: 14px; line-height: 1.55; }
@media (max-width: 760px) {
  body.cv .cv-flow { grid-template-columns: 1fr; }
  body.cv .cv-flow > li + li { border-left: 1px solid var(--cv-line); border-top: 0; }
  body.cv .cv-flow > li:first-child { border-radius: 10px 10px 0 0; } body.cv .cv-flow > li:last-child { border-radius: 0 0 10px 10px; }
  body.cv .cv-flow > li:not(:last-child)::after { content: "↓"; right: auto; left: 20px; top: auto; bottom: -10px; transform: none; }
  body.cv .cv-flow > li.gate { border-top: 1.5px dashed var(--cv-amber); }
}

body.cv .cv-scale-row { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; align-items: end; }
@media (max-width: 420px) { body.cv .cv-scale-row { grid-template-columns: 1fr; } }
body.cv .cv-scale-row > li { display: flex; flex-direction: column; gap: 8px; padding: 18px; border: 1px solid var(--cv-line); border-radius: 10px; background: var(--cv-panel-2); }
body.cv .cv-scale-row > li > span:last-child { color: var(--cv-ink-2); font-size: 14px; line-height: 1.5; }
body.cv .cv-scale-box { display: block; border: 1.5px dashed var(--cv-teal); border-radius: 4px; margin-bottom: 6px; animation: cv-cs-n 3s ease-in-out infinite; }
body.cv .cv-scale-box.s1 { width: 18px; height: 18px; border-color: var(--cv-hot); }
body.cv .cv-scale-box.s2 { width: 30px; height: 30px; animation-delay: .4s; }
body.cv .cv-scale-box.s3 { width: 44px; height: 44px; border-color: var(--cv-green); animation-delay: .8s; }
body.cv .cv-scale-box.s4 { width: 60px; height: 60px; border-color: var(--cv-blue); animation-delay: 1.2s; }

body.cv .cv-evclass { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; margin-top: 4px; }
body.cv .cv-pill { display: inline-flex; align-items: center; min-height: 30px; padding: 0 12px; border-radius: 999px; border: 1px solid var(--cv-teal); color: var(--cv-teal);
  font-family: var(--cv-mono); font-size: 11px; letter-spacing: .12em; text-transform: uppercase; }
body.cv .cv-pill.a { border-color: var(--cv-amber); color: var(--cv-amber); border-style: dashed; }
body.cv .cv-pill.g { border-color: var(--cv-green); color: var(--cv-green); }
body.cv .cv-pill.b { border-color: var(--cv-blue); color: var(--cv-blue); border-style: dotted; }
body.cv .dossier-hero .cv-evclass { margin-top: 22px; }

body.cv .entry-status { display: inline-flex !important; align-items: center; gap: 8px; }
body.cv .entry-status .gl { width: 18px; height: 18px; color: var(--cv-amber); }
body.cv .cv-pluck { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 6px; }
body.cv .cv-pluck .cv-chip { min-width: 44px; padding: 0 12px; color: var(--cv-green); }
body.cv .cv-pluck .cv-chip.plucked, body.cv .cv-pluck .cv-chip:active { border-color: var(--cv-green); background: rgba(155, 214, 159, .12); }

body.cv .cv-bmer { list-style: none; margin: 22px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 0; }
body.cv .cv-bmer li { display: inline-flex; align-items: center; gap: 8px; min-height: 36px; padding: 0 16px 0 12px; border: 1px solid var(--cv-line); margin-left: -1px;
  font-family: var(--cv-mono); font-size: 12px; letter-spacing: .12em; text-transform: uppercase; color: var(--cv-ink); }
body.cv .cv-bmer li:first-child { border-radius: 6px 0 0 6px; margin-left: 0; }
body.cv .cv-bmer li:last-child { border-radius: 0 6px 6px 0; }
body.cv .cv-bmer li span { color: var(--cv-teal); }
body.cv .cv-bmer li.r { border-style: dashed; border-color: var(--cv-blue); color: var(--cv-blue); }
body.cv .cv-bmer li.r span { color: var(--cv-blue); }

/* 404: outside the control volume */
body.cv .cv-404 { min-height: calc(100svh - 160px); display: flex; flex-direction: column; justify-content: center; gap: 32px; width: min(1120px, calc(100% - 32px)); margin: 0 auto; padding: 48px 0; }
body.cv .cv-404-box { display: flex; flex-wrap: wrap; align-items: center; gap: 28px 48px; }
body.cv .cv-404-svg { flex: 1 1 320px; max-width: 520px; width: 100%; height: auto; }
body.cv .cv-404-svg .cv-march { animation: cv-march 1.2s linear infinite; }
body.cv .cv-404-pulse { transform-box: fill-box; transform-origin: center; animation: cv-pulse 2.2s ease-in-out infinite; }
body.cv .cv-404-copy { flex: 1 1 360px; display: flex; flex-direction: column; gap: 18px; }
body.cv .cv-404-copy h1 { margin: 0; font-size: clamp(32px, 4.6vw, 56px); line-height: 1.04; letter-spacing: -.02em; }
body.cv .cv-404-copy p { margin: 0; color: var(--cv-ink-2); font-size: 17px; line-height: 1.6; }
body.cv .cv-404-actions { display: flex; flex-wrap: wrap; gap: 10px; }
body.cv .cv-404-hint { font-size: 12px !important; letter-spacing: .08em; text-transform: uppercase; color: var(--cv-muted) !important; }
body.cv .cv-404-hint kbd { padding: 2px 6px; border: 1px solid var(--cv-line); border-radius: 4px; }
body.cv .cv-404-coffee { display: flex; align-items: center; gap: 18px; padding-top: 22px; border-top: 1px dashed var(--cv-line); }
body.cv .cv-404-coffee svg { width: 56px; height: auto; flex: none; }
body.cv .cv-404-coffee span { font-size: 12px; letter-spacing: .1em; text-transform: uppercase; color: var(--cv-muted); }
@media (prefers-reduced-motion: reduce) {
  body.cv .cv-residual-card, body.cv .cv-nest-svg .cv-nest-outer, body.cv .cv-scale-box, body.cv .cv-404-svg .cv-march, body.cv .cv-404-pulse { animation: none !important; }
}
body.cv .cv-chip.plucked { animation: cv-string .7s cubic-bezier(.2, .8, .3, 1); }
@keyframes cv-string { 0% { transform: translateX(0); } 15% { transform: translateX(-3px); } 30% { transform: translateX(3px); } 45% { transform: translateX(-2px); } 60% { transform: translateX(1.5px); } 100% { transform: none; } }
body.cv .snd.nudge { animation: cv-nudge .5s ease 3; }

/* collection pages (interests, ideas, hobbies): heads read as section heads, cards tile */
body.cv .collection-head { display: flex !important; flex-direction: column; align-items: flex-start !important; gap: 8px; border: 0 !important; background: none !important; box-shadow: none !important; padding: 0 !important; margin: 0 0 22px !important; border-radius: 0 !important; }
body.cv .collection-head::before, body.cv .collection-head::after { display: none !important; }
body.cv .collection-head h2 { margin: 0; font-size: clamp(24px, 2.8vw, 34px); line-height: 1.15; text-align: left; }
body.cv .collection-grid { display: grid !important; grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr)) !important; gap: 14px !important; }
body.cv .collection-grid > .entry-card { margin: 0 !important; display: flex; flex-direction: column; gap: 10px; align-items: flex-start; }
body.cv .collection-grid > .entry-card h3 { margin: 0; }
body.cv .collection-grid > .entry-card p { margin: 0; }
body.cv .cv-rows { list-style: none; margin: 0; padding: 0; }


/* Layout-safe annual-cycle responsive card; diagram and telemetry never overlap. */
body.cv .cv-year {
  display:grid;grid-template-columns:minmax(0,1fr) minmax(230px,.65fr);align-items:center;
  gap:clamp(20px,3vw,46px);max-width:100%;min-width:0;
}
body.cv .cv-year-svg {width:100%;max-width:100%;min-width:0;justify-self:center;overflow:visible}
body.cv .cv-year-read {width:100%;min-width:0;max-width:100%;overflow-wrap:anywhere}
body.cv .cv-year-read :is([data-out="day"],[data-out="pct"],[data-out="montext"]) {
  white-space:normal;max-width:100%;overflow-wrap:anywhere;word-break:normal;line-height:1.35;
}
@media(max-width:1050px) {
 body.cv .cv-year {grid-template-columns:minmax(0,1fr);gap:18px}
 body.cv .cv-year-svg{max-width:min(100%,620px)}
}
@media(max-width:560px){body.cv .cv-year{padding:clamp(12px,4vw,20px)}}


/* Fluid type for long research titles on narrow screens.
   Let headings wrap rather than enlarging the document and hiding the final word. */
@media(max-width:480px) {
 body.cv :is(.dossier-hero h1, .academic-hero.track-hero h1, .hero-intro h1) {
   font-size:clamp(1.78rem,8vw,2.4rem)!important;
   line-height:1.13!important;letter-spacing:-.032em!important;
   overflow-wrap:anywhere;word-break:normal;hyphens:auto;
   max-width:100%;min-width:0;
 }
 body.cv :is(.dossier-hero,.academic-hero.track-hero,.hero-intro) {min-width:0}
}
/* Text-heavy cards must size to the actual viewport, not a fixed desktop minimum. */
@media(max-width:560px) {
 body.cv :is(.course-card,.course-cards,.course-group,.course-card h3,.course-card p) {
   min-width:0;max-width:100%;
 }
 body.cv .course-cards {grid-template-columns:minmax(0,1fr)!important}
 body.cv .course-card {box-sizing:border-box;padding:clamp(14px,4vw,20px)!important}
 body.cv .course-card :is(p,h3,a) {overflow-wrap:anywhere}
}


/* Portfolio browsing: compact previews expand to fully legible descriptions. */
body.cv[data-page-key="projects"] .project-browser-item[open] .project-browser-summary-text p {
 display:block!important;-webkit-line-clamp:unset!important;line-clamp:unset!important;
 overflow:visible!important;max-height:none!important;
}
