/* Skin Blossom Pro — design tokens. House rule: no raw hex in component CSS, use these vars. */
:root {
	--sb-color-teal: #00a3b8;
	/* Same hue as --sb-color-teal, darkened for small/bold text set directly
	   on a light background — the base teal is ~3:1 against white/bg-soft
	   and fails WCAG AA at text sizes. */
	--sb-color-teal-text: #007a8a;
	/* Decorative fills/borders only (~2.2:1 on white) — use
	   --sb-color-purple-deep for any actual text in this hue, it's the
	   same accent at a contrast-passing shade. */
	--sb-color-lavender: #c8a3ce;
	--sb-color-lavender-alt: #c197c8;
	/* Contrast-safe text shade of the lavender accent — required for any
	   heading/eyebrow/link text set directly on a light background (GRO
	   design pass). Never use --sb-color-lavender for text. */
	--sb-color-purple-deep: #a88dbf;
	--sb-color-white: #ffffff;
	--sb-color-black: #000000;
	--sb-color-charcoal: #1e1e1e;
	--sb-color-body: #717171;
	--sb-color-placeholder: #b3b3b3;
	--sb-color-micro: #bbbbbb;

	--sb-color-bg-soft: #f8f8f8;
	--sb-color-bg-soft-alt: #f6f6f4;

	--sb-color-border: #ececec;
	--sb-color-border-strong: #c1c1c1;
	--sb-color-divider: #dddddd;
	--sb-color-divider-alt: #eaeaea;
	--sb-color-border-input: #e1e1e1;

	--sb-font-family: 'Lato', sans-serif;

	--sb-radius-tile: 3px;
	--sb-radius-sm: 4px;
	--sb-radius-md: 6px;
	--sb-radius-lg: 8px;
	--sb-radius-card: 16px;
	--sb-radius-pill: 100px;
	--sb-radius-input: 1px;

	--sb-shadow-soft: 0 2px 6px rgb(0 0 0 / 20%);
	--sb-shadow-card: 0 2px 10px rgb(0 0 0 / 10%);
	--sb-shadow-text: 1px 1px 3px rgb(0 0 0 / 15%);

	/* No hard content cap — .sb-container spans 100% and relies on
	   --sb-container-gutter (below) for its side margins instead. (A
	   1200px cap was tried and reverted per feedback — every normal
	   1280–1920px monitor showed a boxed-in 1200px column with dead page
	   background on both sides, which read as broken, not intentional.) */
	--sb-container-width: 100%;
	--sb-gutter: 28px;
	/* Flat 100px on desktop — the same left/right padding every block that
	   sets its own gutter already uses (About Panel, Hero Banner, Team
	   Grid, etc.), so full-width sections and blocks with hand-set padding
	   line up instead of drifting apart on wide monitors. Narrower
	   breakpoints (tablet/phone) are handled by each block/.sb-container's
	   own media queries, same as before. */
	--sb-container-gutter: 100px;

	/* Editorial landing-page family (long-form service guides: hero split,
	   info cards, chip list, callout box, linked cards, CTA band). */
	--sb-color-ink: #1f1b20;
	--sb-color-body-alt: #4f4851;
	--sb-color-mauve: #6a536d;
	--sb-color-border-soft: #e9ddea;
	--sb-color-bg-mauve: #f8f3f8;
	--sb-color-bg-mint: #eff5f2;

	/* Standard heading scale (GRO design pass) — every h2 in the theme uses
	   the same size (--sb-font-size-h2-display) and the same two-tone
	   weight split: the plain part sits at the shared body weight/color,
	   and only the bold accent word steps up to --sb-font-weight-heading-bold
	   + --sb-color-purple-deep (or white on a colored/dark block bg — see
	   each block's own strong/b rule). Font-size still shrinks per-block on
	   smaller breakpoints via clamp()/media queries same as before; only the
	   desktop value is shared here. --sb-font-size-h3-card remains its own,
	   smaller tier for card/column titles (h3) and compact labels. */
	--sb-font-family-heading: 'Lato', sans-serif;
	--sb-font-weight-heading: 400;
	--sb-font-weight-heading-bold: 700;
	--sb-font-size-h2-display: 48px;
	--sb-font-size-h3-card: 22px;
	/* Unitless so it scales correctly with the shared font-size above —
	   most h2 line-heights were fixed px values tuned for each block's old,
	   different font-size (some as tight as 36-44px against a 48px font,
	   visibly clipping/cramping the text once every h2 moved to one size). */
	--sb-line-height-heading: 1.15;
}

@media (prefers-reduced-motion: reduce) {
	[data-aos] {
		transition: none !important;
		animation: none !important;
		transform: none !important;
	}
}

/* AOS's fade-left/right/up-left/etc. scroll-reveal offsets (translate3d up
   to 100px) have been found sitting stuck in their pre-animation position
   below desktop width on more than one block (Intro Gallery, Carousel
   Content, Contact Section, About Panel, Team Grid) — usually where the
   block also reorders/resizes content for mobile or tablet, which seems
   to interfere with AOS's own reveal trigger. Rather than chase it block
   by block, just drop the slide offset everywhere below desktop and keep
   the plain opacity fade. Matches the site's tablet upper bound (960px)
   so the whole non-desktop range is covered, not just phone. */
@media (max-width: 960px) {
	[data-aos^="fade"] {
		transform: none !important;
	}
}
