/* GENERATED by build_tokens.py from tokens.json + brand/brand.json. Do not edit; edit the sources and rebuild. */

@font-face {
  font-family: "Libre Caslon Text";
  src: url("../assets/fonts/LibreCaslonText-Regular.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Libre Caslon Text";
  src: url("../assets/fonts/LibreCaslonText-Italic.woff2") format("woff2");
  font-weight: 400;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: "Libre Caslon Text";
  src: url("../assets/fonts/LibreCaslonText-SemiBold.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Libre Caslon Text";
  src: url("../assets/fonts/LibreCaslonText-Bold.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

:root {

  /* Palette: brand (from brand/brand.json) */
  --palette-ink: #0b1a14;
  --palette-forest: #0e2a1f;
  --palette-gold: #ad8146;
  --palette-tan: #c2a073;
  --palette-paw: #bf9f74;
  --palette-fawn: #b9824f;
  --palette-coat-light: #ecd0a5;
  --palette-coat: #dfb27c;
  --palette-mist: #ddd0bb;
  --palette-cream: #fdf9ed;
  --palette-white: #ffffff;
  --palette-shade: #5e4a33;
  --palette-filament-cream: #efe3c6;

  /* Palette: web-only (tokens.json color.extra) */
  --palette-linen: #f4ecdc;
  --palette-paper: #fffdf7;
  --palette-ink-soft: #3a453f;
  --palette-muted-ink: #55605a;
  --palette-gold-text: #7a5a2c;
  --palette-line-strong: #7a7062;
  --palette-green-ok: #2e6b45;
  --palette-red-err: #a12d1c;
  --palette-red-err-bg: #fbece8;
  --palette-green-ok-bg: #e9f2ea;
  --palette-scrim: #06110c;

  /* Colour roles */
  --color-bg: var(--palette-cream);
  --color-bg-alt: var(--palette-linen);
  --color-surface: var(--palette-paper);
  --color-surface-inverse: var(--palette-forest);
  --color-ink: var(--palette-ink);
  --color-ink-soft: var(--palette-ink-soft);
  --color-muted: var(--palette-muted-ink);
  --color-on-inverse: var(--palette-cream);
  --color-on-inverse-muted: var(--palette-mist);
  --color-accent: var(--palette-gold);
  --color-accent-text: var(--palette-gold-text);
  --color-accent-on-inverse: var(--palette-tan);
  --color-line: var(--palette-gold);
  --color-line-soft: var(--palette-mist);
  --color-line-strong: var(--palette-line-strong);
  --color-focus: var(--palette-gold);
  --color-success: var(--palette-green-ok);
  --color-success-bg: var(--palette-green-ok-bg);
  --color-error: var(--palette-red-err);
  --color-error-bg: var(--palette-red-err-bg);
  --color-paw: var(--palette-paw);

  /* Type: families */
  --font-serif: "Libre Caslon Text", "Libre Caslon", Georgia, "Times New Roman", serif;
  --font-display: var(--font-serif);
  --font-body: var(--font-serif);

  /* Type: weights */
  --weight-regular: 400;
  --weight-semibold: 600;
  --weight-bold: 700;

  /* Type: line heights */
  --leading-tight: 1.08;
  --leading-snug: 1.25;
  --leading-normal: 1.55;
  --leading-loose: 1.7;

  /* Type: tracking */
  --tracking-tight: -0.01em;
  --tracking-normal: 0;
  --tracking-caps: 0.08em;
  --tracking-wide-caps: 0.18em;

  /* Type scale (fluid 360-1440px, ratio 1.2-1.28) */
  --text-xs: clamp(0.8854rem, 0.8713rem + 0.0627vw, 0.9277rem);
  --text-base: clamp(1.0625rem, 1.0208rem + 0.1852vw, 1.1875rem);
  --text-md: clamp(1.2750rem, 1.1933rem + 0.3630vw, 1.5200rem);
  --text-lg: clamp(1.5300rem, 1.3915rem + 0.6157vw, 1.9456rem);
  --text-xl: clamp(1.8360rem, 1.6179rem + 0.9694vw, 2.4904rem);
  --text-2xl: clamp(2.2032rem, 1.8750rem + 1.4585vw, 3.1877rem);
  --text-3xl: clamp(2.6438rem, 2.1650rem + 2.1280vw, 4.0802rem);
  --text-4xl: clamp(3.1726rem, 2.4893rem + 3.0371vw, 5.2227rem);

  /* Space */
  --space-0: 0;
  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --space-4: 1rem;
  --space-5: 1.5rem;
  --space-6: 2rem;
  --space-7: 3rem;
  --space-8: 4rem;
  --space-9: 6rem;
  --space-10: 8rem;
  --space-gutter: clamp(1rem, 4vw, 2.5rem);
  --space-section: clamp(3.5rem, 9vw, 7rem);

  /* Sizes */
  --size-content-max: 72rem;
  --size-prose-max: 38rem;
  --size-tap-min: 44px;
  --size-callbar-h: 64px;

  /* Radii */
  --radius-none: 0;
  --radius-sm: 2px;
  --radius-md: 4px;
  --radius-lg: 8px;
  --radius-pill: 999px;

  /* Shadows */
  --shadow-sm: 0 1px 2px rgba(11, 26, 20, 0.08);
  --shadow-md: 0 4px 14px -4px rgba(11, 26, 20, 0.18);
  --shadow-lg: 0 18px 40px -16px rgba(11, 26, 20, 0.35);
  --shadow-text-on-photo: 0 1px 2px rgba(6, 17, 12, 0.55), 0 0 24px rgba(6, 17, 12, 0.35);

  /* Borders and the double-rule frame */
  --border-hairline: 1px;
  --border-rule: 2px;
  --border-frame-outer: 6px;
  --border-frame-gap: 5px;
  --border-frame-inner: 1.5px;
  --border-frame-color: var(--palette-forest);
  --border-rule-color: var(--palette-gold);

  /* Breakpoints (reference only) */
  --bp-sm: 480px;
  --bp-md: 768px;
  --bp-lg: 1024px;
  --bp-xl: 1280px;

  /* Layers */
  --z-base: 0;
  --z-header: 10;
  --z-callbar: 50;
  --z-toast: 60;

  /* Motion */
  --duration-instant: 80ms;
  --duration-fast: 140ms;
  --duration-base: 220ms;
  --duration-slow: 380ms;
  --ease-standard: cubic-bezier(0.2, 0.7, 0.2, 1);
  --ease-enter: cubic-bezier(0.05, 0.7, 0.1, 1);
  --ease-exit: cubic-bezier(0.3, 0, 0.8, 0.15);

  /* Component: button */
  --button-height: 3.25rem;
  --button-padding-x: 1.75rem;
  --button-font-size: var(--text-base);
  --button-font-weight: var(--weight-semibold);
  --button-tracking: 0.02em;
  --button-radius: var(--radius-sm);
  --button-primary-bg: var(--palette-forest);
  --button-primary-fg: var(--palette-cream);
  --button-primary-bg-hover: var(--palette-ink);
  --button-inverse-bg: var(--palette-cream);
  --button-inverse-fg: var(--palette-forest);
  --button-inverse-bg-hover: var(--palette-white);
  --button-secondary-border: var(--palette-forest);
  --button-secondary-fg: var(--palette-forest);
  --button-secondary-bg-hover: var(--palette-linen);
  --button-ghost-fg: var(--palette-forest);
  --button-ghost-underline: var(--palette-gold);
  --button-disabled-opacity: 0.5;

  /* Component: input */
  --input-height: 3.25rem;
  --input-padding-x: 0.9rem;
  --input-font-size: var(--text-base);
  --input-radius: var(--radius-sm);
  --input-bg: var(--palette-paper);
  --input-fg: var(--palette-ink);
  --input-border: var(--palette-line-strong);
  --input-border-width: 1.5px;
  --input-border-focus: var(--palette-forest);
  --input-ring: var(--palette-gold);
  --input-ring-width: 3px;
  --input-border-error: var(--palette-red-err);
  --input-border-success: var(--palette-green-ok);
  --input-placeholder: var(--palette-muted-ink);

  /* Component: card */
  --card-bg: var(--palette-paper);
  --card-border: var(--palette-mist);
  --card-padding: var(--space-5);
  --card-radius: var(--radius-sm);
  --card-shadow: var(--shadow-sm);

  /* Component: badge */
  --badge-bg: var(--palette-linen);
  --badge-fg: var(--palette-forest);
  --badge-border: var(--palette-gold);
  --badge-padding-y: 0.2rem;
  --badge-padding-x: 0.6rem;
  --badge-font-size: var(--text-xs);
  --badge-tracking: var(--tracking-caps);
}

/* Reduced motion: every duration collapses to 0ms. */
@media (prefers-reduced-motion: reduce) {
  :root {
    --duration-instant: 0ms;
    --duration-fast: 0ms;
    --duration-base: 0ms;
    --duration-slow: 0ms;
  }
}
