/* GENERATED by packages/design-system/scripts/build-wp.mjs in lonestar-launchpad-com. Do not edit; regenerate. */
/* ---- tokens/colors.css ---- */
/* Color — Brand Guide v1.1.
   Navy is PRIMARY and carries the brand. Red and gold are accents,
   deployed SPARINGLY — never more than two colors in one composition.
   Backgrounds stay Limestone, Cream or White. */
:root {
  /* Base palette */
  --lslp-navy: #0B2A4A;        /* primary — carries the brand */
  --lslp-red: #B23A2E;         /* heritage accent — sparing */
  --lslp-gold: #DAA520;        /* warmth accent — sparing. FILLS AND LARGE TEXT ONLY. */
  --lslp-gold-text: #8B6914;   /* text-safe companion — see the pair below */
  --lslp-limestone: #F4EFE6;   /* neutral background */
  --lslp-cream: #FBF8F1;       /* alt light background */
  --lslp-white: #FFFFFF;       /* background */
  --lslp-ink: #111827;         /* body text */
  --lslp-slate: #4A5568;       /* muted text */
  --lslp-line: #E4DCCB;        /* hairline / border on light grounds */
  --lslp-navy-line: rgba(11,42,74,0.14); /* hairline on navy */

  /* Semantic aliases */
  --lslp-bg: var(--lslp-limestone);
  --lslp-bg-alt: var(--lslp-cream);
  --lslp-surface: var(--lslp-white);
  --lslp-surface-inverse: var(--lslp-navy);
  --lslp-text: var(--lslp-ink);
  --lslp-text-muted: var(--lslp-slate);
  --lslp-text-on-navy: var(--lslp-limestone);
  --lslp-text-on-navy-muted: rgba(244,239,230,0.72);
  --lslp-primary: var(--lslp-navy);
  --lslp-accent-heritage: var(--lslp-red);
  --lslp-accent-warmth: var(--lslp-gold);
  --lslp-border: var(--lslp-line);

  /* THE GOLD PAIR — the distinction is not cosmetic.
     --lslp-gold #DAA520 measures 2.24:1 on white and FAILS AA for text. It is a
     fill colour: gold buttons, gold rules, gold on navy (6.5:1), large display
     type. Never body or UI text on a light ground.
     --lslp-gold-text #8B6914 measures 5.09:1 on white and passes AA. Use it
     wherever gold has to be read on Limestone/Cream/White — the Services
     category accent is the live example.
     Ink on gold is 7.93:1 and is the sitewide dark-on-gold value. */
  --lslp-gold-fill: var(--lslp-gold);
  --lslp-on-gold: var(--lslp-ink);          /* 7.93:1 */
  --lslp-gold-on-light: var(--lslp-gold-text);

  /* Category accents — data-driven at the page layer, tokenised here.
     `featured` is a flag, not a content category; it still needs an accent. */
  --lslp-category-ecosystem: var(--lslp-red);        /* 5.94:1 on white */
  --lslp-category-readiness: var(--lslp-navy);       /* 14.54:1 */
  --lslp-category-content-courses: var(--lslp-slate);/* 7.53:1 */
  --lslp-category-services: var(--lslp-gold-text);   /* 5.09:1 — needs the text gold */
  --lslp-category-featured: var(--lslp-gold-text);

  /* Text on navy. The live site uses plain white alphas; the brand's
     limestone-tinted muted never appeared on the site. Both kept: the first is
     what the pages use, the second is what the brand guide specified. */
  --lslp-on-navy: var(--lslp-white);
  --lslp-on-navy-muted: rgba(255, 255, 255, 0.75);
  --lslp-on-navy-subtle: rgba(255, 255, 255, 0.5);
  --lslp-on-navy-line: rgba(255, 255, 255, 0.3);
  --lslp-on-navy-brand-muted: rgba(244, 239, 230, 0.72);  /* Brand Guide v1.1 */

  /* Navy alphas — inactive filter text, chip fills on light grounds. */
  --lslp-navy-50: rgba(11, 42, 74, 0.5);
  --lslp-navy-05: rgba(11, 42, 74, 0.05);

  /* Scrims — image overlays, measured off the live site. */
  --lslp-scrim-figure: linear-gradient(rgba(255,255,255,0) 53%, #0B2A4A 93%);
  --lslp-scrim-panel: linear-gradient(rgba(11,42,74,0) 0%, rgba(255,255,255,0.2) 80%, #0B2A4A 90%);
  --lslp-scrim-portrait: linear-gradient(rgba(255,255,255,0) 32%, rgba(255,255,255,0) 59%, #0B2A4A 79%);
}

/* ---- tokens/typography.css ---- */
/* Typography — LIVE SCALE (2026-09-28).
   The values below are lonestar-launchpad.com's rendered type, read off the live site at
   1440/768/390. They replace Type Scale v3 (Figma, July 2026), which was authored but never
   implemented or seen rendered; building to it is why the rebuild read wrong. v3 is
   SUPERSEDED — see guides/brand.md. Families are unchanged: they match live.
   Newsreader (serif): display + headlines. Manrope (sans): body, UI, nav.
   JetBrains Mono: code, numbers/metrics, filter chips. */
:root {
  /* Families */
  --lslp-font-serif: "Newsreader", "Source Serif 4", Georgia, serif;
  --lslp-font-sans: "Manrope", system-ui, -apple-system, sans-serif;
  --lslp-font-mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", monospace;

  /* Display — Newsreader 400 · 80/1.0 (tablet 60 · mobile 40) · homepage hero */
  --lslp-display-size: 80px;
  --lslp-display-line: 1.0;
  --lslp-display-tracking: 0;
  --lslp-display-weight: 400;

  /* H1 — Newsreader 700 · 45/1.3 (tablet 40 · mobile 35) · page titles */
  --lslp-h1-size: 45px;
  --lslp-h1-line: 1.3;
  --lslp-h1-tracking: 0;
  --lslp-h1-weight: 700;

  /* H2 — Newsreader 700 · 40/1.3 (tablet 35 · mobile 30) */
  --lslp-h2-size: 40px;
  --lslp-h2-line: 1.3;
  --lslp-h2-tracking: 0;
  --lslp-h2-weight: 700;

  /* H3 — Newsreader 700 · 30/1.3 (tablet 28 · mobile 26) */
  --lslp-h3-size: 30px;
  --lslp-h3-line: 1.3;
  --lslp-h3-tracking: 0;
  --lslp-h3-weight: 700;
  /* H3 Italic — Newsreader 500 italic · editorial emphasis, taglines, pull quotes */

  /* Eyebrow — Newsreader 400 italic · 17 · category eyebrows ("Ecosystem") */
  --lslp-eyebrow-size: 17px;
  --lslp-eyebrow-tracking: 0;
  --lslp-eyebrow-weight: 400;

  /* Button — Manrope 500 · 14.4 · +0.5px · UPPERCASE */
  --lslp-button-size: 14.4px;
  --lslp-button-tracking: 0.5px;
  --lslp-button-weight: 500;
  --lslp-button-line: 1.6;

  /* Nav — Manrope 400 · 25 · primary nav items, as live */
  --lslp-nav-family: var(--lslp-font-sans);
  --lslp-nav-size: 25px;
  --lslp-nav-line: 0.952;   /* 23.8px at 25px: live inherits the 17px body's 23.8 */
  --lslp-nav-tracking: 0;
  --lslp-nav-weight: 400;

  /* Label — Manrope 600 · 13 · form labels, badges */
  --lslp-label-size: 13px;
  --lslp-label-weight: 600;

  /* Body Large — Manrope 400 · 17/1.6 · article prose, lead paragraphs */
  --lslp-body-lg-size: 17px;
  --lslp-body-lg-line: 1.6;

  /* Body — Manrope 400 · 17/23.8px · default. The line is a fixed 23.8px, as live:
     smaller text (14.4 rows, 15 ledes, 10-11 labels) inherits 23.8, it does not scale. */
  --lslp-body-size: 17px;
  --lslp-body-line: 23.8px;

  /* Body Small — Manrope 400 · 13/155 · card descriptions */
  --lslp-body-sm-size: 13px;
  --lslp-body-sm-line: 1.55;

  /* Caption — Manrope 400 · 14.4 · footnotes, disclaimers (live footer) */
  --lslp-caption-size: 14.4px;

  /* Mono — JetBrains Mono 400 · 13 · stage numbers, code, key values */
  --lslp-mono-size: 13px;
  --lslp-mono-weight: 400;
  /* Mono Large — JetBrains Mono 400 · 17 · homepage tab numbers, mono eyebrows,
     partner roles. Live runs mono at two sizes: 17 here, 12-13 on chips and meta. */
  --lslp-mono-lg-size: 17px;

  /* --- Roles added Sep 2026: found in use across four page builds, no token --- */

  /* H4 — Newsreader 700 · 28/1.3 (tablet 26 · mobile 24) */
  --lslp-h4-size: 28px;
  --lslp-h4-line: 1.3;
  --lslp-h4-tracking: 0;
  --lslp-h4-weight: 700;

  /* H5 — Newsreader 400 italic · 24/1.3 · taglines ("Built for innovation. Powered by Texas.") */
  --lslp-h5-size: 24px;
  --lslp-h5-line: 1.3;
  --lslp-h5-weight: 400;

  /* Metric — Newsreader 600 · 30/1.3 (tablet 28 · mobile 26) · stat numbers */
  --lslp-metric-size: 30px;
  --lslp-metric-line: 1.3;
  --lslp-metric-weight: 600;

  /* Column heading — Manrope 500 · 17 · +2.5px UPPERCASE · footer columns (live) */
  --lslp-colhead-size: 17px;
  --lslp-colhead-weight: 500;
  --lslp-colhead-tracking: 2.5px;

  /* Tracking — the page builds carried these in px because the live site did.
     Expressed in em so they scale with the role, matching the rest of the scale. */
  --lslp-track-mono: 0.115em;   /* ≈1.5px at 13px — tab numbers, eyebrows */
  --lslp-track-label: 0.09em;   /* ≈1.2px at 13px — uppercase labels */
}

/* ===========================================================================
   RESPONSIVE STEPS — real tokens, not comments.

   These existed only as parenthetical notes in the role comments above until
   Sep 2026. Nothing consumed them, so the 84px display shipped unchanged to
   390px and overflowed the viewport. That failure is the reason this block
   exists: a step that is not a token is not a step.

   Redeclaring the same custom properties means every consumer of
   var(--lslp-display-size) gets the step for free, with no per-page media query.
   =========================================================================== */
@media (max-width: 1024px) {
  :root {
    --lslp-display-size: 60px;
    --lslp-h1-size: 40px;
    --lslp-h2-size: 35px;
    --lslp-h3-size: 28px;
    --lslp-h4-size: 26px;
    --lslp-metric-size: 28px;
    --lslp-caption-size: 13.3px;
  }
}
@media (max-width: 767px) {
  :root {
    --lslp-display-size: 40px;
    --lslp-h1-size: 35px;
    --lslp-h2-size: 30px;
    --lslp-h3-size: 26px;
    --lslp-h4-size: 24px;
    --lslp-metric-size: 26px;
    --lslp-caption-size: 12.8px;
  }
}

/* Below the smallest documented display step (44px) a long unbreakable string —
   "LoneStar&nbsp;LaunchPad." — still overflows under ~390px. The token stays the
   ceiling; consumers cap with min(). See the homepage hero. */

/* ---- tokens/spacing.css ---- */
/* Spacing — 4px base scale. */
:root {
  --lslp-space-1: 4px;
  --lslp-space-2: 8px;
  --lslp-space-3: 12px;
  --lslp-space-4: 16px;
  --lslp-space-5: 24px;
  --lslp-space-6: 32px;
  --lslp-space-7: 48px;
  --lslp-space-8: 64px;
  --lslp-space-80: 80px;   /* section padding — the most-used value on the site */
  --lslp-space-9: 96px;
}

/* NAMING NOTE: the scale is ordinal (1..9) but 80px lands between steps 8 and 9,
   so it is value-named. The honest fix is to rename the whole scale to values
   (space-4 … space-96); that is a mechanical rename across four page builds and
   is deliberately not done here. Recorded so the inconsistency is a decision. */

/* ---- tokens/radii.css ---- */
/* Corner radii. */
:root {
  /* RESOLVED — Brand Guide v1.2, Sep 2026: the system is SQUARE throughout.
     --lslp-radius-none is the value in service. The scale below stays defined
     and UNUSED: removing it would foreclose a future decision, keeping it does
     not reopen this one. v1.1 specified 16px cards and pill buttons; four page
     builds measured at three widths found zero radii on every rendered element,
     and that verified evidence won over an unimplemented spec. */
  --lslp-radius-none: 0;
  --lslp-radius-sm: 6px;
  --lslp-radius-md: 10px;
  --lslp-radius-lg: 16px;
  --lslp-radius-xl: 20px;
  --lslp-radius-pill: 999px;
}

/* ---- tokens/measures.css ---- */
/* Measures — typographic line-length decisions, not container widths.

   A measure is the width the TEXT occupies. The container that produces it is
   the measure plus two gutters, so containers are derived, never authored:

       max-width: calc(var(--lslp-measure-prose) + 2 * var(--lslp-gutter));

   Characters-per-line measured on the built pages at 1440 with the body sizes
   each measure actually carries. The 45–75 ideal is the target; `full` is a
   layout width for grids and cards, not a reading measure.
*/
:root {
  /* Layout width — grids, card rows, headers. Not for running text. */
  --lslp-measure-full: 1352px;

  /* Article body: resource pages. ~100 characters at Body Large. */
  --lslp-measure-content: 952px;

  /* Long-form prose: legal, policy. ~70–79 characters at Body Large.
     Privacy Policy is 8,956 words — the page this measure exists for. */
  --lslp-measure-prose: 632px;

  /* The gutter every container adds either side of its measure. */
  --lslp-gutter: 24px;
}
@media (max-width: 1024px) { :root { --lslp-gutter: 16px; } }
@media (max-width: 767px)  { :root { --lslp-gutter: 24px; } }   /* decided 2026-09-28 */

/* Aspect ratios — fixed-shape media boxes. Two in use across the page builds. */
:root {
  --lslp-ratio-hero: 16 / 5;   /* resource page hero image — Figma template; 2/1 below 768 */
  --lslp-ratio-card: 16 / 9;   /* archive card media */
}
@media (max-width: 767px) { :root { --lslp-ratio-hero: 2 / 1; } }
