/* Typographic hierarchy, built entirely on the tokens in tokens.css. */

/* font-family/background/color need !important on the body rule below:
   Blocksy's own dynamic stylesheet sets all three on this exact "body"
   selector too (font-family via main.min.css's "body, h1, h2, ..." rule;
   background-color and color via its "ct-main-styles" dynamic CSS, whose
   values come from the colorPalette theme_mod - color7 for background,
   a separate "text color" setting for color - not any of our tokens).
   Equal specificity (both are a bare "body" selector) means whichever
   stylesheet prints LAST in the page's <head> wins - and that isn't a
   fixed, safe assumption: on the normal frontend Blocksy's dynamic CSS
   is a linked stylesheet (global.css) that happens to print early
   (before every child-theme stylesheet), so ours reliably wins there.
   But inside the WordPress Customizer's live-preview iframe, Blocksy
   prints that exact same CSS as an INLINE <style id="ct-main-styles-inline-css">
   block instead - and that block prints LATE, after typography.css -
   which flips the winner: the Customizer preview showed a white body
   background (Blocksy's color7 swatch) and reader could show the wrong
   text color, while the real frontend correctly showed the dark
   token-based background/text. Confirmed live via CDP: the two
   environments enqueue Blocksy's own dynamic CSS through genuinely
   different mechanisms (linked vs. inline) with different print
   ordering, not something this child theme's own enqueue order controls
   - !important is the correct, deliberate fix here (matching the
   font-family/heading-color precedent below), not a cascade-order patch
   that would only work in one of the two environments. size/weight/
   text-align are unaffected (Blocksy doesn't set those on `body`), so
   they're left as plain, override-free declarations. */
body {
  font-family: var(--hs-font-family-base) !important;
  font-size: var(--hs-font-size-body);
  font-weight: var(--hs-font-weight-regular);
  background: var(--hs-color-bg) !important;
  color: var(--hs-color-text) !important;
  text-align: start;
}

h1, h2, h3, h4, h5, h6,
.hs-h1, .hs-h2, .hs-h3, .hs-h4, .hs-h5, .hs-h6 {
  font-family: var(--hs-font-family-base) !important;
  font-weight: var(--hs-font-weight-bold);
  line-height: var(--hs-line-height-heading);
  color: var(--hs-color-text) !important;
}

/* Blocksy's own archive/page "hero-section" page-title band (shop
   archive, category archives, any regular page with the builder header
   enabled - not something this theme's own template-parts render) reads
   its background from the colorPalette theme_mod's color7/color8 slots
   (see the after_setup_theme hook in design-tokens.php), which are
   fixed light neutrals - not one of the --hs-* tokens, so it doesn't
   flip with the sitewide dark theme and was left as a stray light band
   above an otherwise all-dark page. */
.hero-section {
  background: var(--hs-color-surface) !important;
}

h1, .hs-h1 { font-size: var(--hs-font-size-h1); }
h2, .hs-h2 { font-size: var(--hs-font-size-h2); }
h3, .hs-h3 { font-size: var(--hs-font-size-h3); }
h4, .hs-h4 { font-size: var(--hs-font-size-h4); }
h5, .hs-h5 { font-size: var(--hs-font-size-h5); font-weight: var(--hs-font-weight-semibold); }
h6, .hs-h6 { font-size: var(--hs-font-size-h6); font-weight: var(--hs-font-weight-semibold); }

.hs-text-body-sm {
  font-size: var(--hs-font-size-body-sm);
}

.hs-text-caption {
  font-size: var(--hs-font-size-caption);
  line-height: var(--hs-line-height-tight);
  color: var(--hs-color-text-muted);
}

.hs-text-label {
  font-size: var(--hs-font-size-label);
  font-weight: var(--hs-font-weight-medium);
  text-transform: uppercase;
  letter-spacing: .03em;
  color: var(--hs-color-text-muted);
}

.hs-text-muted {
  color: var(--hs-color-text-muted);
}

a:not([class]) {
  color: var(--hs-color-primary-700);
  text-decoration: underline;
  text-underline-offset: .15em;
}

a:not([class]):hover {
  color: var(--hs-color-primary-800);
}
