:root {
  /* House of Verdure tokens v1.1, generated from tokens.json. Edit tokens.json, not this block. */
  --hov-forest-600: #1F3D2B; /* Verdure Forest. Primary brand green, dark grounds, secondary Evidence  */
  --hov-ink-900: #192A22; /* Botanical Ink. Near-black green for body copy and line drawings. */
  --hov-ink-700: #4A4A3A; /* Mid ink. Secondary text on light grounds (about 8:1 on ivory). */
  --hov-ink-500: #5E6358; /* Muted ink. Replaces the site's #8A8A7A, which failed AA; about 5.5:1 o */
  --hov-ivory-100: #F5F3EE; /* Museum Ivory. Default ground for plates and pages. */
  --hov-gallery-white-50: #F8F7F5; /* Gallery White. Product photography and diagram grounds. */
  --hov-parchment-200: #EEE3D0; /* Parchment. Warmer band and seed-plate ground. Taken from the site's ex */
  --hov-espresso-900: #2A211B; /* Espresso. Ink or ground (D5); used as a ground only when requested. PR */
  --hov-sage-300: #AAB6A2; /* Herbarium Sage. Fill only; never text or meaningful lines (about 2:1 o */
  --hov-brass-300: #D4BC8A; /* Light brass. Brass text on forest or espresso grounds; replaces the si */
  --hov-brass-500: #B89A63; /* Brass. Rules, frames, fills and print Evidence Line. Not for text on l */
  --hov-brass-700: #806527; /* Text brass. Brass-coloured text and screen Evidence Line on light grou */
  --hov-earth-500: #A7644C; /* Earth. Occasional biological emphasis. */
  --hov-burgundy-700: #632E35; /* Burgundy. Rare campaign accent. */
  --hov-rose-300: #D6899A; /* Rose tint. Illustration tint for pink-variegated cultivars only. PROPO */
  --hov-rule-200: #D8D2C4; /* Warm rule. Decorative dividers on light grounds; collapses six near-id */
  --hov-family-display: 'Cormorant Garamond', Georgia, serif; /* Titles, common names in caps, italic binomials (D4). Georgia is the em */
  --hov-family-sans: Inter, Arial, sans-serif; /* UI, body text and prices. Replaces Jost. */
  --hov-family-mono: 'IBM Plex Mono', 'Courier New', monospace; /* Specimen labels, Tab. and Fig. numbers, Evidence Line captions (D2). */
  --hov-weight-regular: 400; /* Body and italic binomials. */
  --hov-weight-medium: 500; /* Default for display caps and labels. */
  --hov-weight-semibold: 600; /* Emphasis only. */
  --hov-size-display-xl: clamp(32px, 5.5vw, 68px); /* Hero title, max size. */
  --hov-size-display-l: clamp(28px, 4vw, 48px); /* Section and plate titles, max size. Replaces seven separate clamps. */
  --hov-size-species: clamp(18px, 2.5vw, 26px); /* Italic binomials and species headings, max size. */
  --hov-size-body-m: 17px; /* Body copy. */
  --hov-size-caption-s: 14px; /* Captions and secondary UI. */
  --hov-size-mono: 12px; /* Tracked mono labels. Minimum size for any text on screen. */
  --hov-size-body-print: 18px; /* Print body size on a 1x canvas (about 11pt at final print size; 46px o */
  --hov-line-height-display: 1.1; /* Display titles. */
  --hov-line-height-heading: 1.3; /* Headings and species lines. */
  --hov-line-height-ui: 1.5; /* UI, captions, labels. */
  --hov-line-height-body: 1.7; /* Long-form body. */
  --hov-line-height-print: 1.5; /* Print body paragraphs in Cormorant Garamond. */
  --hov-letter-spacing-none: 0em; /* Body text. */
  --hov-letter-spacing-tight: 0.06em; /* Italic headings. */
  --hov-letter-spacing-label: 0.15em; /* Mono labels and small caps. */
  --hov-letter-spacing-display: 0.22em; /* Display caps. */
  --hov-space-1: 4px; /* Spacing step 1. */
  --hov-space-2: 8px; /* Spacing step 2. */
  --hov-space-3: 12px; /* Spacing step 3. */
  --hov-space-4: 16px; /* Spacing step 4. */
  --hov-space-5: 24px; /* Spacing step 5. */
  --hov-space-6: 32px; /* Spacing step 6. */
  --hov-space-7: 40px; /* Spacing step 7. */
  --hov-space-8: 60px; /* Spacing step 8. */
  --hov-space-9: 80px; /* Spacing step 9. */
  --hov-space-10: 120px; /* Spacing step 10. */
  --hov-radius-none: 0px; /* Default. Square corners suit the engraving language. */
  --hov-radius-round: 50%; /* Circles only: icons, the Portrait Field, social icons. */
  --hov-line-hairline: 1px; /* Rules, frames, dividers. */
  --hov-line-rule: 2px; /* Heavier section rules. */
  --hov-line-evidence-primary: 2px; /* Screen Evidence Line, primary tier (D18). Print: 0.6pt. */
  --hov-line-evidence-secondary: 1px; /* Screen Evidence Line, secondary tier; about half the primary (D18). Pr */
  --hov-motion-duration-fast: 200ms; /* Colour and border changes. */
  --hov-motion-duration-base: 300ms; /* Opacity and small transforms. */
  --hov-motion-duration-slow: 500ms; /* Large transforms, carousels. */
  --hov-motion-easing-standard: cubic-bezier(0.25, 0.1, 0.25, 1); /* The single easing curve (CSS ease). */
  --hov-breakpoint-sm: 580px; /* Phone layout below this. */
  --hov-breakpoint-md: 900px; /* Tablet layout below this. */
  --hov-surface-default: var(--hov-ivory-100); /* Default page and plate ground (VR-01). */
  --hov-surface-raised: var(--hov-gallery-white-50); /* Cards, product photography. */
  --hov-surface-band: var(--hov-parchment-200); /* Alternate section bands, e.g. the Dossier band. */
  --hov-surface-inverse: var(--hov-forest-600); /* Dark sections, header and footer bars. */
  --hov-surface-espresso: var(--hov-espresso-900); /* Espresso ground. Only when explicitly requested (D5). */
  --hov-text-primary: var(--hov-ink-900); /* Body and headings on light grounds. */
  --hov-text-secondary: var(--hov-ink-700); /* Supporting text on light grounds. */
  --hov-text-muted: var(--hov-ink-500); /* Captions and meta on light grounds; lowest-contrast text allowed. */
  --hov-text-accent: var(--hov-brass-700); /* Brass-coloured text on ivory or gallery white. On parchment it drops t */
  --hov-text-on-inverse: var(--hov-ivory-100); /* Text on forest or espresso. */
  --hov-text-accent-on-inverse: var(--hov-brass-300); /* Brass text on forest or espresso. */
  --hov-border-subtle: var(--hov-rule-200); /* Decorative dividers on light grounds. */
  --hov-border-accent: var(--hov-brass-500); /* Brass rules and frames; decorative, never the only carrier of meaning. */
  --hov-border-on-inverse: #F5F3EE24; /* Dividers on dark grounds (ivory at 14%). */
  --hov-fill-accent: var(--hov-brass-500); /* Brass fills: icon circles, stamps on dark. */
  --hov-fill-secondary: var(--hov-sage-300); /* Secondary fields and diagram fills. */
  --hov-overlay-scrim: #1F3D2BBF; /* Forest at 75% over imagery. Rarely needed now that imagery is plate-ba */
  --hov-specimen-record-text: var(--hov-text-primary); /* Footer text on light grounds. */
  --hov-specimen-record-rule: var(--hov-border-accent); /* Brass rules separating footer fields. */
  --hov-evidence-line-primary-print: var(--hov-brass-500); /* Primary tier in print: leaders to Fig. insets (D18). */
  --hov-evidence-line-primary-screen: var(--hov-brass-700); /* Primary tier on screen; darker brass keeps a meaningful line above 3:1 */
  --hov-evidence-line-secondary: var(--hov-forest-600); /* Secondary tier: numbered points on the hero. Never used without the pr */
  --hov-evidence-line-width-primary: var(--hov-line-evidence-primary); /* Primary stroke. */
  --hov-evidence-line-width-secondary: var(--hov-line-evidence-secondary); /* Secondary stroke. */
  --hov-hv-stamp-size-ratio: 0.06; /* Stamp width as a share of the canvas width. */
  --hov-portrait-field-stroke: var(--hov-brass-500); /* One hairline circle centred on the specimen axis (D19, Specimen plates */
  --hov-portrait-field-width: var(--hov-line-hairline); /* Circle and graduation marks. */
  --hov-social-safe-margin-ratio: 0.05; /* Safe margin on every side, as a share of the width (54px at 1080). */
  --hov-button-primary-bg: var(--hov-brass-500); /* Primary button fill: brass. Keeps the existing gold-button look. */
  --hov-button-primary-text: var(--hov-ink-900); /* Primary button label: Botanical Ink on brass (about 5.6:1). Never whit */
  --hov-button-secondary-border: var(--hov-brass-700); /* Outline button border. */
  --hov-button-secondary-text: var(--hov-text-accent); /* Outline button label. */
  --hov-shadow-overlay: -10px 0px 40px 0px rgba(0,0,0,0.3);
}

/* Type styles (web). body-print is for print outputs only and has no web class. */
.hov-display-xl { font-family: var(--hov-family-display); font-size: var(--hov-size-display-xl); font-weight: var(--hov-weight-medium); letter-spacing: var(--hov-letter-spacing-display); line-height: var(--hov-line-height-display); text-transform: uppercase; }
.hov-display-l { font-family: var(--hov-family-display); font-size: var(--hov-size-display-l); font-weight: var(--hov-weight-medium); letter-spacing: var(--hov-letter-spacing-display); line-height: var(--hov-line-height-display); text-transform: uppercase; }
.hov-species { font-family: var(--hov-family-display); font-size: var(--hov-size-species); font-weight: var(--hov-weight-regular); letter-spacing: var(--hov-letter-spacing-tight); line-height: var(--hov-line-height-heading); font-style: italic; }
.hov-body-m { font-family: var(--hov-family-sans); font-size: var(--hov-size-body-m); font-weight: var(--hov-weight-regular); letter-spacing: var(--hov-letter-spacing-none); line-height: var(--hov-line-height-body); }
.hov-caption-s { font-family: var(--hov-family-sans); font-size: var(--hov-size-caption-s); font-weight: var(--hov-weight-regular); letter-spacing: var(--hov-letter-spacing-none); line-height: var(--hov-line-height-ui); }
.hov-mono-label { font-family: var(--hov-family-mono); font-size: var(--hov-size-mono); font-weight: var(--hov-weight-medium); letter-spacing: var(--hov-letter-spacing-label); line-height: var(--hov-line-height-ui); text-transform: uppercase; }
