/* Ladenest brand theme -- GENERATED by bin/factory-theme.py (issue #63)
 * =============================================================================
 * Do not hand-edit: regenerate from the same two anchors and this file comes back
 * byte-identical. It carries no timestamp and no run id on purpose; `generated_at`
 * lives in factory state, where a per-run value belongs.
 *
 *   primary anchor    #1b7a4b   lightness offset dL = -0.015
 *   secondary anchor  #d97706   lightness offset dL = +0.000
 *
 * LOGICAL PATH IS THE BARE FILENAME -- "theme-ladenest.css", NOT
 * "blog_themes/theme-ladenest.css". Rails declares paths.add "lib/assets", glob: "*",
 * so lib/assets/blog_themes IS the Propshaft load-path root, not lib/assets.
 *
 * Linked by BlogThemingHelper#blog_theme_stylesheet_link_tag AFTER
 * stylesheet_link_tag :app, so this unlayered :root beats the bundle's unlayered
 * :root defaults on source order.
 *
 * WHY THE -950 STOP IS A COMPUTED oklch() LITERAL. The theme-file contract calls the
 * -950 "Tailwind v4's built-in, verbatim in oklch". Both shipped themes satisfied
 * that by choosing STOCK colour families -- but this ramp sits at an arbitrary hue,
 * where THERE IS NO TAILWIND BUILT-IN TO TAKE. The normative half of that clause is
 * the second one: an oklch() literal, never a hex approximation. That is what the two
 * -950 declarations below are, computed on the same ladder as every other stop.
 *
 * DELIBERATELY ABSENT, and each omission is load-bearing:
 *   - NO --interactive-*. The base derives all four from --brand-primary-* in BOTH
 *     modes (600/500 in :root, 400/500/300 in .dark). Declaring them here kills the
 *     dark-mode re-derivation silently.
 *   - NO .dark block. The base's neutral dark set applies unchanged.
 *   - NO --surface-*, --content-* or --border-*. Those are a TRAP: the base sets each
 *     TWICE, :root and .dark have EQUAL specificity, and this file loads last -- so a
 *     bare :root override here beats the bundle's .dark rule and ships LIGHT surfaces
 *     in dark mode, on every page, with no error and nothing in the console.
 *   - NO --font-*. The blog renders the base's three self-hosted faces.
 *
 * CONTRAST: every gated stop clears WCAG AA 4.5:1 against its mode's --surface-primary
 * -- light -600/-700 on #ffffff and dark -400/-500 on #1c1917 for the primary ramp,
 * light -700/-600 and dark -400 for the secondary. Re-check with:
 *     python3 bin/factory-theme.py check lib/assets/blog_themes/theme-ladenest.css
 * ============================================================================= */

:root {
  /* Primary brand ramp -- derived from the anchor's hue and chroma */
  --brand-primary-50: #dee7e1;
  --brand-primary-100: #cce2d3;
  --brand-primary-200: #afd9be;
  --brand-primary-300: #87cba1;
  --brand-primary-400: #62b986;
  --brand-primary-500: #44a36e;
  --brand-primary-600: #2b8556;
  --brand-primary-700: #196941;
  --brand-primary-800: #135433;
  --brand-primary-900: #0f4429;
  --brand-primary-950: oklch(22.6% 0.055 156.254);

  /* Secondary brand ramp -- derived from the anchor's hue and chroma */
  --brand-secondary-50: #f3e7de;
  --brand-secondary-100: #f7dac5;
  --brand-secondary-200: #fcc69d;
  --brand-secondary-300: #faa967;
  --brand-secondary-400: #f08c2d;
  --brand-secondary-500: #d67500;
  --brand-secondary-600: #af5f00;
  --brand-secondary-700: #8b4900;
  --brand-secondary-800: #703a00;
  --brand-secondary-900: #5d2f00;
  --brand-secondary-950: oklch(24.1% 0.058 58.318);
}
