/* Laerd FRONT-END palette - Lærd (master brand, laerd.com) - fe-1.0.0-pilot */
/* sibling of the content system; namespace --fe-*; deterministic build - see MANIFEST.sha256 */
/* boundary: content/reporting-island tokens are owned by the content cascade and never redefined here */
/* undertone: :root carries candidate A; body.fe-undertone-b switches the warm family to candidate B */

:root {
	--fe-page: #FFFFFF;
	--fe-on-cta: #FFFFFF;
	--fe-link: #005D8E;
	--fe-link-hover: #00466D;
	--fe-accent-brand: #338ECA;
	--fe-accent-display: #338ECA;
	--fe-focus-ring: #2F8AC6;
	--fe-deco-1: #F9E6C3;
	--fe-deco-2: #D3ECFF;
	--fe-deco-3: #F2E8C3;
	--fe-route-statistics: #7CC25C;
	--fe-route-dissertation: #B23A48;
	--fe-route-mathematics: #7B5BC9;
	--fe-route-charts_graphs: #2BB3A3;
	--fe-surface-warm-1: #FBF9F4;
	--fe-surface-warm-2: #F4F3EE;
	--fe-surface-warm-3: #E7E6E0;
	--fe-hairline-1: #E3E1DA;
	--fe-hairline-2: #D4D3CC;
	--fe-ink-display: #22211E;
	--fe-ink-body: #403F3C;
	--fe-ink-muted: #60605C;
	--fe-deep-surface: #2A2926;
	--fe-ink-on-deep: #FBF9F4;
	--fe-muted-on-deep: #92918D;
	--fe-hover-wash: #F4F3EE;
	--fe-cta-fill: #22211E;
	--fe-cta-hover: #373633;
}

body.fe-undertone-b {
	--fe-surface-warm-1: #FCF9F2;
	--fe-surface-warm-2: #F6F2EC;
	--fe-surface-warm-3: #E9E5DF;
	--fe-hairline-1: #E6E1D8;
	--fe-hairline-2: #D7D2C9;
	--fe-ink-display: #23211F;
	--fe-ink-body: #403F3C;
	--fe-ink-muted: #615F5C;
	--fe-deep-surface: #2B2926;
	--fe-ink-on-deep: #FCF9F2;
	--fe-muted-on-deep: #93918D;
	--fe-hover-wash: #F6F2EC;
	--fe-cta-fill: #23211F;
	--fe-cta-hover: #383633;
}

:root { --fe-grad-hero: linear-gradient(180deg, var(--fe-surface-warm-1), #FFFFFF); } /* decorative; vertical hero wash; decorative; no text unless gated vs worst-case stop */
/* ============================================================
   laerd.com TYPE LAYER — pv-2  (supersedes provisional pv-1)
   Ruled by owner 2026-07-17: Voice 3 × S2 from the type grid
   (laerd-com-type-grid.html). Recorded as D-004 in
   laerd-com-decision-record.md. Consumers take these properties
   as emitted; do not recompute or hand-copy values.

   Family: Montserrat, loaded as a VARIABLE font (wght 400..700)
   — required, because display weight 450 does not exist in the
   static cuts. Google Fonts request:
     family=Montserrat:wght@400..700
   Static/system fallbacks degrade 450 → 400/500; acceptable.

   Scale: perfect fourth (ratio 1.3333) display steps from the
   fixed live-site base 1.125rem. Body and meta sizes are fixed
   and do not scale. Steps computed at emission, four decimals:
     lede 1.5000 / h2 2.0000 / hero 3.5556 rem.
   Hero usage guidance: font-size:min(var(--pv2-size-hero), 9vw)
   for narrow-viewport safety.

   GUARD (do not "fix"): display weight 450 deliberately diverges
   from the brandkit's Montserrat-650 subtitle finding. 650 is
   logotype provenance only. The owner's ruling: the site voice
   sits slightly apart from the sub-brands — distinguishing the
   master brand and keeping it more neutral. See D-004.

   Orthogonality: undertone-independent; survives any option-2
   bundle swap (D-001/D-002) unless the owner reopens it.
   ============================================================ */
:root {
  /* family */
  --pv2-font: 'Montserrat', -apple-system, 'Segoe UI', sans-serif;

  /* sizes (rem) */
  --pv2-size-meta: 0.875rem;    /* fixed */
  --pv2-size-body: 1.125rem;    /* fixed; live-site base */
  --pv2-size-nav:  0.9375rem;   /* fixed; UI/nav */
  --pv2-size-lede: 1.5000rem;   /* base × 1.3333   */
  --pv2-size-h2:   2.0000rem;   /* base × 1.3333^2 */
  --pv2-size-hero: 3.5556rem;   /* base × 1.3333^4 */

  /* weights (variable axis) */
  --pv2-wt-body:    400;
  --pv2-wt-ui:      500;        /* nav links */
  --pv2-wt-cta:     600;        /* pill labels */
  --pv2-wt-sub:     550;        /* card/subhead names */
  --pv2-wt-display: 450;        /* h1/h2 — deliberate; see GUARD */

  /* tracking + leading */
  --pv2-track-display: -0.01em;
  --pv2-lh-display: 1.05;
  --pv2-lh-lede:    1.35;
  --pv2-lh-body:    1.55;
}

/* laerd.com site chrome v3 (production) — basis D-001..D-009.
   Self-hosted Montserrat variable (OFL; licence at /assets/fonts/OFL.txt).
   Candidate colour (flagged, computed): #FFFFFF utility surface, footer
   strip — gates vs ink-body 10.5303 / ink-muted 6.3642 / ink-display
   16.0453 / link 7.1034, all PASS 4.5 (frozen wcag.py).
   Compatibility floor: evergreen browsers ~2020+ (custom properties,
   grid, min(), variable fonts); older browsers degrade to system sans
   and full-size hero — content and layout remain usable. */
@font-face{font-family:'Montserrat';src:url('/assets/fonts/montserrat-var.woff2') format('woff2');font-weight:100 900;font-style:normal;font-display:swap}
@font-face{font-family:'Montserrat';src:url('/assets/fonts/montserrat-italic-var.woff2') format('woff2');font-weight:100 900;font-style:italic;font-display:swap}
*{box-sizing:border-box}
body{margin:0;font-family:var(--pv2-font);font-size:var(--pv2-size-body);font-weight:var(--pv2-wt-body);line-height:var(--pv2-lh-body);background:var(--fe-page);color:var(--fe-ink-body)}
.wrap{max-width:66rem;margin:0 auto;padding:0 2rem}
a:focus-visible{outline:2px solid var(--fe-focus-ring);outline-offset:2px}
.site-header{display:flex;align-items:center;justify-content:space-between;gap:1.5rem;padding:1.6rem 0 1.1rem;flex-wrap:wrap}
nav.primary{display:flex;align-items:center;gap:1.6rem;flex-wrap:wrap}
nav.primary a:not(.pill){color:var(--fe-ink-body);text-decoration:none;font-size:var(--pv2-size-nav);font-weight:var(--pv2-wt-ui)}
nav.primary a:not(.pill):hover{color:var(--fe-ink-display);text-decoration:underline}
nav.primary a:not(.pill)[aria-current=page]{color:var(--fe-ink-display)}
.pill,.pill:hover{background:var(--fe-cta-fill);color:var(--fe-on-cta);border-radius:999px;padding:.55rem 1.2rem;font-size:var(--pv2-size-nav);font-weight:var(--pv2-wt-cta);text-decoration:none}
.pill:hover{background:var(--fe-cta-hover)}
.hero{background:var(--fe-grad-hero);padding:4.2rem 0 4.6rem}
.hero-tight{background:var(--fe-grad-hero);padding:3rem 0 3.2rem}
h1{font-weight:var(--pv2-wt-display);letter-spacing:var(--pv2-track-display);line-height:var(--pv2-lh-display);font-size:min(var(--pv2-size-hero),9vw);color:var(--fe-ink-display);margin:0 0 1rem}
h1:last-child{margin-bottom:0}
.lede{font-size:var(--pv2-size-lede);line-height:var(--pv2-lh-lede);margin:0;max-width:36rem}
h2{font-weight:var(--pv2-wt-display);letter-spacing:var(--pv2-track-display);font-size:var(--pv2-size-h2);color:var(--fe-ink-display);margin:0 0 1.4rem}
main{padding:3.4rem 0}
.prose{max-width:44rem}
.prose p{margin:0 0 1.1rem}
.prose p:last-child{margin-bottom:0}
.prose em{font-style:italic}
a.text{color:var(--fe-link)}
.note{margin:2rem 0 0;font-size:var(--pv2-size-meta);color:var(--fe-ink-muted)}
.ident{width:.55rem;align-self:stretch;border-radius:999px;flex:none}
.route-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(19rem,100%),1fr));gap:1rem}
.route-card{display:flex;align-items:center;gap:1rem;text-decoration:none;background:var(--fe-surface-warm-1);border:1px solid var(--fe-hairline-2);border-radius:10px;padding:1.2rem 1.3rem;transition:background .12s ease}
.route-card:hover{background:var(--fe-hover-wash)}
.route-card>span{min-width:0}
.route-card.compact{padding:.95rem 1.1rem}
.stack{display:grid;gap:.8rem;max-width:36rem}
.route-name{display:block;font-weight:var(--pv2-wt-sub);color:var(--fe-ink-display);font-size:var(--pv2-size-body)}
.route-desc{display:block;color:var(--fe-ink-muted);font-size:var(--pv2-size-meta);margin-top:.15rem}
.route-arrow{margin-left:auto;color:var(--fe-link);font-size:1.2rem;flex:none}
.idx-row{display:flex;align-items:center;gap:1.2rem;text-decoration:none;padding:1.5rem .4rem;border-top:1px solid var(--fe-hairline-2);transition:background .12s ease}
.idx-row.last{border-bottom:1px solid var(--fe-hairline-2)}
.idx-row:hover{background:var(--fe-hover-wash)}
.idx-name{font-weight:var(--pv2-wt-display);letter-spacing:var(--pv2-track-display);font-size:var(--pv2-size-h2);color:var(--fe-ink-display);line-height:1.15}
.idx-row.half{padding:.75rem .4rem}
.idx-row.half .idx-name{font-size:var(--pv2-size-lede);font-weight:var(--pv2-wt-sub)}
.news-item{border-top:1px solid var(--fe-hairline-2);padding:1.4rem 0;max-width:44rem}
.news-item.last{border-bottom:1px solid var(--fe-hairline-2)}
.news-date{font-size:var(--pv2-size-meta);color:var(--fe-ink-muted)}
.news-title{font-weight:var(--pv2-wt-sub);color:var(--fe-ink-display);margin:.2rem 0 .3rem}
.contact-grid{display:grid;grid-template-columns:minmax(0,36rem) minmax(14rem,1fr);gap:3rem}
@media (max-width:52rem){.contact-grid{grid-template-columns:1fr}}
.mini-head{font-size:var(--pv2-size-body);font-weight:var(--pv2-wt-sub);color:var(--fe-ink-display);margin:0 0 .3rem}
.mini-block{margin:0 0 1.6rem}
.mini-block p{margin:0;font-size:var(--pv2-size-body);color:var(--fe-ink-muted)}
.jump{display:flex;gap:1.2rem;flex-wrap:wrap;margin:1.4rem 0 0;font-size:var(--pv2-size-meta)}
.jump a{color:var(--fe-link);text-decoration:none}
.jump a:hover{text-decoration:underline}
.asset-section{margin-top:2.6rem}
.asset-section h2{margin-bottom:.9rem}
.asset-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(17rem,100%),1fr));gap:1rem;margin-top:.6rem}
.asset{border:1px solid var(--fe-hairline-2);border-radius:10px;overflow:hidden;background:var(--fe-surface-warm-1)}
.asset .preview{display:flex;align-items:center;justify-content:center;padding:2rem;background:var(--fe-page);min-height:8.5rem}
.asset .preview.deep{background:var(--fe-deep-surface)}
.asset .meta{padding:.9rem 1.1rem;border-top:1px solid var(--fe-hairline-2)}
.asset .meta p{margin:0 0 .3rem;font-weight:var(--pv2-wt-sub);color:var(--fe-ink-display);font-size:var(--pv2-size-meta)}
.asset .meta a{color:var(--fe-link);font-size:var(--pv2-size-meta)}
.placeholder{border:1px dashed var(--fe-hairline-2);border-radius:10px;padding:1.4rem;font-size:var(--pv2-size-meta);color:var(--fe-ink-muted);margin-top:.6rem}
.strip{background:#FFFFFF;border-top:1px solid var(--fe-hairline-2);margin-top:3.4rem}
.strip .wrap{display:flex;align-items:baseline;gap:1.4rem;flex-wrap:wrap;padding-top:1.1rem;padding-bottom:1.1rem}
.strip a{color:var(--fe-ink-muted);text-decoration:none;font-size:var(--pv2-size-meta)}
.strip a:hover{color:var(--fe-ink-body);text-decoration:underline}
.strip .copyright{margin-left:auto;color:var(--fe-ink-muted);font-size:var(--pv2-size-meta)}
@media (prefers-reduced-motion:reduce){*{transition:none !important}}

/* legal/long-prose additions (D-015): h3 + list styles */
.prose h2{margin-top:2.4rem}
.prose h3{font-weight:var(--pv2-wt-sub);font-size:var(--pv2-size-lede);letter-spacing:var(--pv2-track-display);color:var(--fe-ink-display);margin:1.8rem 0 .6rem}
.prose ul{margin:0 0 1.1rem;padding-left:1.4rem}
.prose li{margin:.35rem 0}
