/**
 * Typography — heading + text scales, utility classes.
 *
 * Serif (Times / --slist-font-display) is reserved for the *primary*
 * page heading only — the page's H1. That's the editorial moment;
 * everything else is UI and uses Public Sans (--slist-font-body).
 *
 * Sizes stay fluid via clamp(). Sentence case default.
 */

/* Shared reset for all headings — color, margin, line-height */
h1, h2, h3, h4, h5, h6,
.slist-h1, .slist-h2, .slist-h3, .slist-h4, .slist-h5, .slist-h6 {
	color: var(--slist-text-primary);
	margin: 0 0 var(--slist-space-3);
	line-height: var(--slist-lh-snug);
	font-weight: var(--slist-weight-regular);
}

/* H1 — the one serif heading per page. Shared by the homepage
   wordmark, event hero titles, blog post titles, WC cart/checkout
   page headings. Explicit class selectors raise specificity so plugin
   stylesheets (WC blocks, Gutenberg) can't silently beat this rule. */
h1, .slist-h1, .slist-hero-title,
.slist-article__title, .slist-article--post .slist-article__title {
	font-family: var(--slist-font-display);
	font-size: var(--slist-text-display);
	letter-spacing: var(--slist-ls-tight);
	line-height: var(--slist-lh-tight);
}

/* H2–H6 — Public Sans (UI type). Sizes and spacing unchanged; only
   the font-family moves from serif to sans. */
h2, h3, h4, h5, h6,
.slist-h2, .slist-h3, .slist-h4, .slist-h5, .slist-h6 {
	font-family: var(--slist-font-body);
}

h2, .slist-h2 {
	font-size: var(--slist-text-title1);
	letter-spacing: var(--slist-ls-snug);
}

h3, .slist-h3 {
	font-size: var(--slist-text-title2);
}

h4, .slist-h4 {
	font-size: var(--slist-text-title3);
}

h5, .slist-h5,
h6, .slist-h6 {
	font-size: var(--slist-text-callout);
	font-weight: var(--slist-weight-semibold);
	letter-spacing: var(--slist-ls-wider);
	text-transform: uppercase;
}

/*
 * Higher-specificity rescue for H1 on surfaces that WooCommerce, the
 * block editor, or GeneratePress style with class-level selectors
 * that would beat a plain `h1` rule. Design audit caught Cart,
 * Checkout, and single blog posts losing our font to plugin defaults.
 *
 * Only H1 needs the !important rescue now — H2/H3 on these surfaces
 * should read as UI (Public Sans), which matches plugin-default sans
 * stacks closely enough that no override is needed.
 */
.woocommerce h1, .woocommerce-page h1,
.woocommerce h1.wp-block-heading,
body .entry-title,
body .wp-block-post-title,
body .slist-article__title {
	font-family: var(--slist-font-display) !important;
	font-weight: var(--slist-weight-regular) !important;
}

/* Hero title — size-only override for the homepage wordmark and
   event hero (bigger than the default display size). Family comes
   from the H1 rule above. */
.slist-hero-title {
	font-size: var(--slist-text-hero);
	margin: 0;
}

/* Eyebrow — small uppercase label above a heading */
.slist-eyebrow {
	font-family: var(--slist-font-body);
	font-size: var(--slist-text-eyebrow);
	font-weight: var(--slist-weight-semibold);
	letter-spacing: var(--slist-ls-wider);
	text-transform: uppercase;
	color: var(--slist-text-secondary);
	margin: 0 0 var(--slist-space-2);
	display: block;
}

/* Lead — intro paragraph with larger body text */
.slist-lead {
	font-size: var(--slist-text-title3);
	font-weight: var(--slist-weight-regular);
	line-height: var(--slist-lh-default);
	color: var(--slist-text-secondary);
	margin: 0 0 var(--slist-space-4);
}

/* Text color utilities */
.slist-text-secondary  { color: var(--slist-text-secondary); }
.slist-text-tertiary   { color: var(--slist-text-tertiary); }
.slist-text-quaternary { color: var(--slist-text-quaternary); }

/* Size utilities */
.slist-text-eyebrow { font-size: var(--slist-text-eyebrow); }
.slist-text-caption { font-size: var(--slist-text-caption); }
.slist-text-callout { font-size: var(--slist-text-callout); }
.slist-text-body    { font-size: var(--slist-text-body); }
.slist-text-title3  { font-size: var(--slist-text-title3); }
.slist-text-title2  { font-size: var(--slist-text-title2); }
.slist-text-title1  { font-size: var(--slist-text-title1); }
.slist-text-display { font-size: var(--slist-text-display); }
.slist-text-hero    { font-size: var(--slist-text-hero); }

/* Weight utilities */
.slist-weight-regular  { font-weight: var(--slist-weight-regular); }
.slist-weight-medium   { font-weight: var(--slist-weight-medium); }
.slist-weight-semibold { font-weight: var(--slist-weight-semibold); }
.slist-weight-bold     { font-weight: var(--slist-weight-bold); }

/* Align */
.slist-text-center { text-align: center; }
.slist-text-left   { text-align: left; }
.slist-text-right  { text-align: right; }

/* Case */
.slist-uppercase { text-transform: uppercase; letter-spacing: var(--slist-ls-wide); }
.slist-sentence  { text-transform: none; }

/* Mono */
.slist-mono { font-family: var(--slist-font-mono); }
