/* Generated by tools/wp/build.mjs from the mockup (mockups/src/assets/css: tokens.css + base.css + components.css + site.css; preview tooling and @mockup-only parts left out). Edit the mockup, then rebuild. */

/* ===== tokens.css ===== */
/* ==================================================================
   In a Pinch Subs — design tokens
   Brand constants from the In a Pinch Subs Brand Kit (2026) plus the
   style tokens of direction 06 "Quiet Tint" (soft premium minimalism).

   Load order:  ../../assets/fonts/fonts.css → tokens.css → base.css → components.css
   Logo url()s below are relative to this file; adjust them if the kit's
   assets/ folder moves.
   ================================================================== */

:root {
  /* ============ L2 COLOUR — brand palette (kit board 04) ============
     Pairings that pass AA: white on plum · mint on plum · teal on white
     · deep plum on mint. Never mint text on white, never teal text on
     plum. Measured ratios are in STYLE-GUIDE.md §2.1. */
  --plum:        #4A2C82;   /* Plum · primary: logo, headings, buttons */
  --plum-deep:   #2E1A57;   /* Deep Plum · footers, dark sections; the heading ink in Quiet Tint */
  --teal:        #1F7A6E;   /* Teal · accent text on white; "Subs" in the wordmark */
  --mint:        #8ED8C8;   /* Mint · accent on plum, highlights; the pin's ground ellipse */
  --lavender:    #E9E2F5;   /* Lavender · soft backgrounds, cards */
  --wash:        #F6F3FA;   /* Soft White · page background */
  --ink:         #231B33;   /* Ink · body text */
  --muted:       #5E5470;   /* secondary text */
  --white:       #FFFFFF;

  /* derived tints/shades — same hues, different lightness (not in the kit; used for hover and tint surfaces) */
  --mint-tint:     #DDF3EE;   /* hero wash start; success tint */
  --mint-deep:     #5FBFAB;   /* only as a non-text accent (fails on white as text) */
  --teal-tint:     #D8ECE8;
  --teal-deep:     #155A51;   /* teal text on mint / mint-tint */
  --lavender-deep: #D7CBEA;   /* tint-button hover, selection */

  /* functional colours — outside the brand palette, for validation and status only, never decoration */
  --alert:         #A63D2F;   /* AA on white (6.3), wash (5.7), lavender (5.0) and on --alert-tint */
  --alert-tint:    #FBEAE7;
  --success:       var(--teal);
  --success-tint:  var(--mint-tint);
  --info:          var(--plum);
  --info-tint:     var(--lavender);

  /* surfaces — Quiet Tint separates by tint, never by borders */
  --surface-page:   var(--wash);
  --surface-raised: var(--white);
  --surface-tint:   var(--lavender);
  --surface-glass:  rgb(255 255 255 / .55);   /* stat tiles on lavender */
  --surface-chip:   rgb(255 255 255 / .7);    /* meta chips on the hero wash */
  --surface-dark:   var(--plum-deep);
  --hero-wash:      linear-gradient(135deg, #DDF3EE 0%, #F6F3FA 55%, #E9E2F5 100%);   /* the only gradient in the style */

  /* ============ L1 TYPE — Plus Jakarta Sans only (kit board 05) ============ */
  --font: 'Plus Jakarta Sans', system-ui, Arial, sans-serif;
  --text-display: clamp(44px, 5.2vw, 72px);   /* home hero h1 */
  --text-h1:      clamp(36px, 4vw, 56px);     /* inner-page title — the kit's "Display 56" */
  --text-h2:      clamp(28px, 3vw, 36px);     /* the kit's "Heading 2 36" */
  --text-h3:      24px;                       /* the kit's "Heading 3 24" */
  --text-h4:      21px;                       /* step titles */
  --text-lead:    19px;
  --text-body:    17px;                       /* the kit's "Body 17 / Medium" */
  --text-small:   15px;
  --text-caption: 14px;
  --text-micro:   13px;                       /* eyebrow, chips, button sm */
  --text-stat:    clamp(36px, 3.6vw, 52px);
  --text-quote:   clamp(22px, 2.2vw, 28px);
  --text-stepnum: 48px;
  --lh-display: 1.05;  --lh-heading: 1.08;  --lh-snug: 1.35;  --lh-body: 1.6;
  --track-display: -.02em;  --track-stat: -.035em;  --track-quote: -.015em;  --track-eyebrow: 3px;
  --measure: 46ch;                            /* lead/body max line length */

  /* ============ L3 SHAPE — one radius scale, orthogonal ============ */
  --r:       14px;   /* images, tiles, cards, panels */
  --r-btn:   10px;   /* buttons, fields, menu items */
  --r-chip:   8px;   /* chips, small tags */
  --r-inner:  6px;   /* checkboxes, tiny controls */

  /* ============ L4 SPACE ============ */
  --container: 1200px;
  --gutter:    24px;
  --section:   104px;   /* section padding-block, desktop */
  --section-sm: 64px;   /* ≤ 900px */
  --space-1: 4px;  --space-2: 8px;  --space-3: 12px;  --space-4: 16px;  --space-5: 20px;
  --space-6: 24px; --space-7: 28px; --space-8: 32px;  --space-10: 40px; --space-12: 48px;
  --space-14: 56px; --space-16: 64px; --space-20: 80px; --space-24: 96px;

  /* ============ L5 SURFACE — no borders, no hairlines; one soft shadow ============ */
  --shadow-hero:  0 24px 48px -24px rgb(74 44 130 / .25);                                   /* the hero photo */
  --shadow-float: 0 16px 40px -16px rgb(46 26 87 / .25), 0 2px 6px -2px rgb(46 26 87 / .08); /* floating layers only: menus, dialogs */

  /* ============ L9 MOTION ============ */
  --dur:  200ms;
  --ease: ease;
  --lift: -2px;   /* tiles on hover */

  /* focus (WCAG 2.2 2.4.11/2.4.13-friendly: 2px ring, offset, never hidden) */
  --focus-ring:      2px solid var(--teal);
  --focus-ring-dark: 2px solid var(--mint);
  --focus-offset:    3px;

  /* ============ LOGO ASSETS (relative to this stylesheet) ============ */
  --logo-horizontal:            url(../brand/logo-horizontal-color.svg);
  --logo-horizontal-descriptor: url(../brand/logo-horizontal-color-descriptor.svg);
  --logo-horizontal-white:      url(../brand/logo-horizontal-white.svg);
  --logo-horizontal-reversed:   url(../brand/logo-horizontal-reversed.svg);
  --logo-horizontal-plum:       url(../brand/logo-horizontal-plum.svg);
  --logo-stacked:               url(../brand/logo-stacked-color.svg);
  --logo-stacked-reversed:      url(../brand/logo-stacked-reversed.svg);
  --icon-pin:                   url(../brand/icon-pin.svg);
  --icon-app:                   url(../brand/icon-app.svg);
  --icon-badge:                 url(../brand/icon-iaps-badge.svg);
}

/* --- Reset (identical to the explorations' brand.css) --------------- */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body { margin: 0; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; }
img, svg, video { display: block; max-width: 100%; }
h1, h2, h3, h4, p, ul, ol, figure, blockquote { margin: 0; }
ul, ol { padding: 0; list-style: none; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; background: none; border: 0; padding: 0; cursor: pointer; }
.visually-hidden { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

/* --- Photo placeholder mechanism ------------------------------------
   <figure class="ph" style="--ph-a:#E9E2F5;--ph-b:#8ED8C8">
     <img src="photos/<slot>-1400.webp" alt="…" onerror="this.remove()">
     <span class="ph-label">caregiver reading to toddlers</span>
   </figure>
   The <img> covers the placeholder when it loads; if the file is missing
   the gradient + label shows instead, so layouts never collapse. */
.ph {
  position: relative;
  overflow: hidden;
  background:
    radial-gradient(120% 90% at 20% 15%, color-mix(in oklab, var(--ph-a, var(--lavender)) 75%, white) 0%, transparent 60%),
    radial-gradient(90% 80% at 85% 90%, var(--ph-b, var(--mint)) 0%, transparent 65%),
    var(--ph-a, var(--lavender));
  isolation: isolate;
}
.ph > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: var(--ph-pos, 50% 40%); z-index: 1; }
.ph > .ph-label {
  position: absolute; left: 12px; bottom: 10px; z-index: 0;
  font: 500 11px/1.3 var(--font);
  letter-spacing: .04em; text-transform: uppercase;
  color: var(--muted); opacity: .8;
}
.ph > .ph-label::before { content: 'photo · '; opacity: .6; }

/* ===== base.css ===== */
/* ==================================================================
   In a Pinch Subs — base styles (Quiet Tint)
   Element defaults, type roles, layout primitives, surfaces, focus.
   Everything here is used exactly as in the Quiet Tint mockup; the
   roles the mockup does not need (h2, h4, prose, page header) follow
   the brand kit's type board. Grouped by composition layer.
   ================================================================== */

/* ============ L1 TYPE ============ */
html { scroll-behavior: smooth; }
body { font: 500 var(--text-body)/var(--lh-body) var(--font); color: var(--ink); background: var(--surface-page); }
h1, h2, h3, h4 { color: var(--plum-deep); font-weight: 800; letter-spacing: var(--track-display); line-height: var(--lh-heading); text-wrap: balance; }
h1 { font-size: var(--text-h1); line-height: var(--lh-display); }
h2 { font-size: var(--text-h2); }
h3 { font-size: var(--text-h3); font-weight: 700; letter-spacing: -.01em; }
h4 { font-size: var(--text-h4); font-weight: 700; letter-spacing: -.01em; }
.display, .h1 { font-size: var(--text-display); line-height: var(--lh-display); }   /* home hero only */
.h2 { font-size: var(--text-h2); } .h3 { font-size: var(--text-h3); } .h4 { font-size: var(--text-h4); }
.lead { font-size: var(--text-lead); color: var(--muted); max-width: var(--measure); text-wrap: pretty; }
.small { font-size: var(--text-small); } .caption { font-size: var(--text-caption); color: var(--muted); }
strong, b { font-weight: 700; }
em { font-style: italic; }

/* eyebrow / index label — the kit's "Eyebrow 13 / Bold caps", used as "01 / Section name" index labels */
.eyebrow, .index { font: 800 var(--text-micro)/1.35 var(--font); letter-spacing: var(--track-eyebrow); text-transform: uppercase; color: var(--teal); }
.eyebrow b, .index b { color: var(--plum); font-weight: 800; }
.surface-tint .eyebrow, .surface-tint .index, .on-tint .eyebrow, .on-tint .index { color: var(--plum); }   /* teal on lavender is below AA; plum passes */
.surface-dark .eyebrow, .surface-dark .index, .on-dark .eyebrow, .on-dark .index { color: var(--mint); }
.surface-dark .eyebrow b, .on-dark .eyebrow b { color: var(--white); }

/* the one highlight device: a thick mint underline on the key phrase */
.ul { text-decoration: underline; text-decoration-color: var(--mint); text-decoration-thickness: .14em; text-underline-offset: .1em; text-decoration-skip-ink: none; }

/* links — teal, underlined, on white/wash only (on lavender or dark use .on-tint / .on-dark variants) */
.link { color: var(--teal); font-weight: 600; font-size: var(--text-small); text-decoration: underline; text-underline-offset: 4px; text-decoration-thickness: 1px; transition: text-decoration-thickness var(--dur); }
.link:hover { text-decoration-thickness: 2px; }
.on-tint .link, .surface-tint .link { color: var(--plum); }
.on-dark .link, .surface-dark .link { color: var(--mint); }
.link .icon { margin-left: 2px; vertical-align: -.2em; }

::selection { background: var(--lavender-deep); color: var(--plum-deep); }

/* ============ L4 SPACE ============ */
.container { width: min(var(--container), 100% - 48px); margin-inline: auto; }
.container.narrow { width: min(760px, 100% - 48px); }
.grid { display: grid; grid-template-columns: repeat(12, 1fr); gap: var(--gutter); }
.section { padding-block: var(--section); }
.section.tight { padding-block: var(--section-sm); }
.section-head { display: flex; justify-content: space-between; align-items: baseline; gap: var(--gutter); margin-bottom: 48px; }
.section-intro { display: grid; gap: 16px; max-width: 64ch; margin-bottom: 48px; }
.section-intro.center { margin-inline: auto; text-align: center; justify-items: center; }
.stack { display: grid; gap: var(--gutter); }
.cluster { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }

/* ============ L2/L5 SURFACES — separation by tint, never by line ============ */
.surface-white { background: var(--surface-raised); }
.surface-wash { background: var(--surface-page); }
.surface-tint { background: var(--surface-tint); }
.surface-mint { background: var(--mint-tint); }
.surface-dark { background: var(--surface-dark); color: var(--white); }
.surface-dark h1, .surface-dark h2, .surface-dark h3, .surface-dark h4 { color: var(--white); }
.surface-dark .lead, .surface-dark .caption, .surface-dark p { color: var(--lavender); }
.hero-wash { background: var(--hero-wash); }

/* ============ L6 IMAGERY ============ */
.ph, .media { border-radius: var(--r); }
.ratio-4-5 { aspect-ratio: 4 / 5; } .ratio-4-3 { aspect-ratio: 4 / 3; } .ratio-16-10 { aspect-ratio: 16 / 10; }
.ratio-16-9 { aspect-ratio: 16 / 9; } .ratio-1-1 { aspect-ratio: 1; } .ratio-3-2 { aspect-ratio: 3 / 2; }
figcaption, .figcaption { margin-top: 10px; font-size: var(--text-caption); color: var(--muted); }

/* ============ L7 ICONS — 24-grid, 1.75px rounded strokes, currentColor ============ */
.icon { width: 1em; height: 1em; flex: none; fill: none; stroke: currentColor; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; vertical-align: -.15em; }
.icon.lg { width: 24px; height: 24px; } .icon.sm { width: 16px; height: 16px; }
.icon-pin { height: 1.24em; width: auto; }   /* the brand pin as an inline motif */

/* ============ L8 — focus, skip link, prose ============ */
:focus-visible { outline: var(--focus-ring); outline-offset: var(--focus-offset); border-radius: 4px; }
.surface-dark :focus-visible, .on-dark :focus-visible { outline: var(--focus-ring-dark); }
.skip-link { position: absolute; left: 16px; top: -100px; z-index: 100; padding: 12px 16px; border-radius: var(--r-btn); background: var(--plum); color: var(--white); font-weight: 700; }
.skip-link:focus-visible { top: 16px; outline-color: var(--mint); }

/* long-form copy (about page, policies, blog) */
.prose { max-width: 68ch; }
.prose > * + * { margin-top: 1em; }
.prose h2 { margin-top: 2em; } .prose h3 { margin-top: 1.6em; } .prose h4 { margin-top: 1.4em; }
.prose p, .prose li { color: var(--ink); }
.prose a { color: var(--teal); font-weight: 600; text-decoration: underline; text-underline-offset: 4px; }
.prose a:hover { text-decoration-thickness: 2px; }
.prose ul { display: grid; gap: 8px; }
.prose ul li { position: relative; padding-left: 20px; }
.prose ul li::before { content: ''; position: absolute; left: 0; top: .62em; width: 8px; height: 8px; border-radius: 50%; background: var(--mint); }
.prose ol { counter-reset: item; display: grid; gap: 8px; }
.prose ol li { position: relative; padding-left: 32px; counter-increment: item; }
.prose ol li::before { content: counter(item); position: absolute; left: 0; top: 0; font-weight: 800; color: var(--teal); }
.prose blockquote { padding: 28px 32px; border-radius: var(--r); background: var(--surface-tint); font-size: var(--text-lead); color: var(--plum-deep); font-weight: 500; }
.prose figure { margin: 2em 0; }
.prose hr { border: 0; height: 48px; margin: 0; }   /* a pause, not a line */
.prose small { font-size: var(--text-caption); color: var(--muted); }

/* ============ L9 MOTION ============ */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { transition-duration: 0ms !important; animation-duration: 0ms !important; }
}

/* ============ RESPONSIVE ============ */
@media (max-width: 900px) {
  .section { padding-block: var(--section-sm); }
  .section-head { flex-wrap: wrap; gap: 8px; margin-bottom: 32px; }
}

/* ===== components.css ===== */
/* ==================================================================
   In a Pinch Subs — components (Quiet Tint)
   Everything in the Quiet Tint mockup, plus the components a full
   site needs, built from the same tokens and rules: tinted surfaces
   instead of borders, radius 14 / 10 / 8, Deep Plum headings, teal
   links on white, mint only as a dot, an underline or a tint.
   Grouped by composition layer, then by component.
   ================================================================== */

/* ============ L8 COMPONENTS — buttons ============ */
.btn { display: inline-flex; align-items: center; justify-content: center; gap: 10px; height: 50px; padding: 0 24px; border-radius: var(--r-btn); font: 700 16px/1 var(--font); white-space: nowrap; cursor: pointer; text-decoration: none; transition: background var(--dur) var(--ease), color var(--dur) var(--ease), transform var(--dur) var(--ease); }
.btn.solid { background: var(--plum); color: var(--white); }
.btn.solid:hover { background: var(--plum-deep); }
.btn.tint { background: var(--lavender); color: var(--plum-deep); }
.btn.tint:hover { background: var(--lavender-deep); }
.btn.ghost { background: transparent; color: var(--plum-deep); }
.btn.ghost:hover { background: var(--lavender); }
.btn.inverse { background: var(--white); color: var(--plum-deep); }          /* on plum / deep plum */
.btn.inverse:hover { background: var(--lavender); }
.btn.glass { background: rgb(255 255 255 / .14); color: var(--white); }       /* secondary on dark */
.btn.glass:hover { background: rgb(255 255 255 / .22); }
.btn:active { transform: translateY(1px); }
.btn.sm { height: 40px; padding: 0 16px; font-size: var(--text-small); }
.btn.lg { height: 56px; padding: 0 28px; font-size: var(--text-body); }
.btn.icon-only { width: 50px; padding: 0; } .btn.icon-only.sm { width: 40px; }
.btn.block { width: 100%; }
.btn .icon { width: 18px; height: 18px; }
.btn[disabled], .btn.is-disabled, .btn[aria-disabled="true"] { opacity: .45; pointer-events: none; }
.btn.is-loading { color: transparent !important; position: relative; pointer-events: none; }
.btn.is-loading::after { content: ''; position: absolute; width: 18px; height: 18px; border-radius: 50%; border: 2px solid rgb(255 255 255 / .35); border-top-color: var(--white); animation: iaps-spin .8s linear infinite; }
.btn.tint.is-loading::after, .btn.ghost.is-loading::after, .btn.inverse.is-loading::after { border-color: rgb(74 44 130 / .25); border-top-color: var(--plum); }
@keyframes iaps-spin { to { transform: rotate(360deg); } }
.actions { display: flex; gap: 12px; flex-wrap: wrap; align-items: center; }

/* ============ L8 — navigation ============ */
.nav { background: var(--surface-raised); position: relative; z-index: 20; }
.nav.is-sticky { position: sticky; top: 0; }
.nav .container { display: flex; align-items: center; height: 76px; gap: 40px; }
.nav .logo img { height: 36px; width: auto; }
.nav-links { display: flex; align-items: center; gap: 28px; font: 500 15px/1 var(--font); }
.nav-links > li > a, .nav-links summary { display: inline-flex; align-items: center; gap: 6px; padding: 6px 0; color: var(--ink); white-space: nowrap; transition: color var(--dur); }
.nav-links > li > a:hover, .nav-links summary:hover { color: var(--plum); }
.nav-links a[aria-current="page"] { color: var(--plum-deep); font-weight: 600; text-decoration: underline; text-decoration-color: var(--mint); text-decoration-thickness: 3px; text-underline-offset: 8px; text-decoration-skip-ink: none; }
.nav .cta { margin-left: auto; height: 44px; }
.nav .tel { font-weight: 600; color: var(--plum-deep); }
/* dropdown (no JS): <details class="nav-item"><summary>Services</summary><div class="nav-menu">…</div></details> */
.nav-item { position: relative; }
.nav-item summary { list-style: none; cursor: pointer; }
.nav-item summary::-webkit-details-marker { display: none; }
.nav-item summary .icon { transition: transform var(--dur); }
.nav-item[open] summary .icon { transform: rotate(180deg); }
.nav-menu { position: absolute; left: -16px; top: calc(100% + 12px); min-width: 300px; padding: 10px; display: grid; gap: 2px; background: var(--surface-raised); border-radius: var(--r); box-shadow: var(--shadow-float); }
.nav-menu a { display: block; padding: 12px 14px; border-radius: var(--r-btn); transition: background var(--dur); }
.nav-menu a:hover { background: var(--lavender); }
.nav-menu a b { display: block; color: var(--plum-deep); }
.nav-menu a span { display: block; font-size: var(--text-caption); color: var(--muted); margin-top: 2px; }
/* mobile sheet (no JS): <details class="nav-mobile"><summary class="btn tint icon-only sm">☰</summary><nav class="nav-sheet">…</nav></details> */
.nav-mobile { display: none; margin-left: auto; }
.nav-mobile summary { list-style: none; }
.nav-mobile summary::-webkit-details-marker { display: none; }
.nav-mobile .icon-close { display: none; }
.nav-mobile[open] .icon-close { display: block; } .nav-mobile[open] .icon-menu { display: none; }
.nav-sheet { position: fixed; inset: 76px 0 0 0; z-index: 30; overflow: auto; padding: 24px; display: grid; align-content: start; gap: 6px; background: var(--surface-tint); }
.nav-sheet a:not(.btn) { display: block; padding: 16px 18px; border-radius: var(--r-btn); font: 700 20px/1.2 var(--font); color: var(--plum-deep); transition: background var(--dur); }
.nav-sheet a:not(.btn):hover, .nav-sheet a[aria-current="page"] { background: var(--surface-raised); }
.nav-sheet .group { margin: 10px 0 4px 18px; }
.nav-sheet .btn { margin-top: 18px; }
.nav-sheet .btn + .btn { margin-top: 0; }
@media (max-width: 900px) {
  .nav .container { height: 64px; gap: 16px; }
  .nav .logo img { height: 32px; }
  .nav-links, .nav .cta, .nav .tel { display: none; }
  .nav-mobile { display: block; }
  .nav-sheet { inset: 64px 0 0 0; }
}

/* breadcrumb (inner pages) */
.breadcrumb { display: flex; flex-wrap: wrap; gap: 8px; font: 600 var(--text-micro)/1.35 var(--font); color: var(--muted); }
.breadcrumb a:hover { color: var(--plum); }
.breadcrumb li + li::before { content: '/'; margin-right: 8px; color: var(--lavender-deep); }
.breadcrumb [aria-current] { color: var(--plum-deep); }

/* ============ L8 — chips, badges, status ============ */
.chips { display: flex; flex-wrap: wrap; gap: 10px; }
.chip { display: inline-flex; align-items: center; gap: 8px; padding: 8px 14px; border-radius: var(--r-chip); background: var(--surface-chip); color: var(--plum-deep); font: 600 var(--text-micro)/1 var(--font); }
.chip.tint { background: var(--lavender); }
.chip.white { background: var(--white); }
.chip.mint { background: var(--mint-tint); color: var(--teal-deep); }
.chip.dark { background: var(--plum-deep); color: var(--white); }
.chip .icon { width: 14px; height: 14px; }
.status::before { content: ''; width: 8px; height: 8px; border-radius: 50%; background: var(--mint); }
.status.busy::before { background: var(--lavender-deep); }
.status.alert::before { background: var(--alert); }
.tag { display: inline-block; padding: 4px 10px; border-radius: var(--r-inner); background: var(--lavender); color: var(--plum-deep); font: 700 12px/1.3 var(--font); letter-spacing: .04em; text-transform: uppercase; }

/* sub-brand lockup (brand kit board 02): logo · 2px mint rule · tracked teal label */
.lockup { display: inline-flex; align-items: center; gap: 18px; }
.lockup img { height: 40px; width: auto; }
.lockup .rule { width: 2px; height: 46px; background: var(--mint); }
.lockup .label { font: 800 15px/1 var(--font); letter-spacing: 3px; text-transform: uppercase; color: var(--teal); white-space: nowrap; }

/* ============ L5/L8 — tiles and cards ============ */
.tile { background: var(--surface-raised); border-radius: var(--r); padding: 28px; transition: transform var(--dur) var(--ease); }
.tile.pad-lg { padding: 40px; } .tile.pad-sm { padding: 20px; }
.tile.glass { background: var(--surface-glass); }
.tile.tint { background: var(--surface-tint); }
.tile.mint { background: var(--mint-tint); }
.tile.dark { background: var(--surface-dark); color: var(--white); }
.tile.dark h2, .tile.dark h3, .tile.dark h4 { color: var(--white); }
.tile.dark p { color: var(--lavender); }
a.tile, .tile.is-interactive { display: block; color: inherit; }
a.tile:hover, .tile.is-interactive:hover { transform: translateY(var(--lift)); }

/* service duo (mockup .svc): photo 5 cols, text 7 */
.card-service { display: grid; grid-template-columns: 5fr 7fr; gap: var(--gutter); }
.card-service .ph { aspect-ratio: 4 / 5; }
.card-service .text { display: flex; flex-direction: column; gap: 14px; }
.card-service .text p { color: var(--muted); font-size: 16px; }
.card-service .link { margin-top: auto; align-self: flex-start; }

/* feature card: icon badge + title + copy */
.card-feature { display: grid; gap: 14px; align-content: start; }
.icon-badge { width: 48px; height: 48px; border-radius: var(--r-btn); display: grid; place-items: center; background: var(--lavender); color: var(--plum); }
.icon-badge .icon { width: 24px; height: 24px; }
.icon-badge.mint { background: var(--mint-tint); color: var(--teal); }
.icon-badge.dark { background: var(--plum); color: var(--white); }
.card-feature p { color: var(--muted); font-size: 16px; }

/* person card (team, caregivers): 4/5 portrait, radius 14 — no circles in Quiet Tint */
.card-person .ph { aspect-ratio: 4 / 5; }
.card-person h3 { margin-top: 18px; font-size: var(--text-h4); }
.card-person .role { margin-top: 4px; font: 600 var(--text-caption)/1.4 var(--font); color: var(--teal); }
.card-person p { margin-top: 10px; color: var(--muted); font-size: var(--text-small); }

/* link card (tile that is a link, arrow at the end) */
.card-link { display: grid; gap: 10px; }
.card-link .arrow { margin-top: auto; display: inline-flex; align-items: center; gap: 6px; font: 700 var(--text-small)/1 var(--font); color: var(--teal); }
.card-link:hover .arrow .icon { transform: translateX(3px); }
.card-link .arrow .icon { transition: transform var(--dur); }

/* photo card: image on top, copy below (blog, events, venues) */
.card-photo { overflow: hidden; padding: 0; }
.card-photo .ph { aspect-ratio: 16 / 10; border-radius: 0; }
.card-photo .body { padding: 24px 28px 28px; display: grid; gap: 10px; }
.card-photo .body p { color: var(--muted); font-size: var(--text-small); }

/* ============ L8 — lists ============ */
.list-dot, .list-check, .list-num { display: grid; gap: 8px; font-size: var(--text-small); }
.list-dot li { display: flex; gap: 10px; align-items: center; }
.list-dot li::before { content: ''; width: 8px; height: 8px; border-radius: 50%; background: var(--mint); flex: none; }
.list-check li { display: flex; gap: 12px; align-items: flex-start; }
.list-check li::before { content: ''; flex: none; width: 22px; height: 22px; margin-top: 1px; border-radius: var(--r-inner); background: var(--mint-tint) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231F7A6E' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 12l4 4 8-8'/%3E%3C/svg%3E") center / 14px no-repeat; }
.list-num { counter-reset: n; }
.list-num li { display: flex; gap: 14px; counter-increment: n; }
.list-num li::before { content: counter(n); flex: none; width: 28px; font: 800 18px/1.3 var(--font); color: var(--teal); }
.list-icon li { display: flex; gap: 12px; align-items: flex-start; }
.list-icon li .icon { width: 22px; height: 22px; color: var(--teal); margin-top: 1px; }
.list-cols { columns: 2; column-gap: var(--gutter); }

/* ============ L8 — steps, stats, quotes (mockup) ============ */
.steps { display: grid; grid-template-columns: repeat(12, 1fr); gap: var(--gutter); }
.step { grid-column: span 4; background: var(--surface-raised); border-radius: var(--r); padding: 28px 28px 32px; transition: transform var(--dur) var(--ease); }
.step .n { font: 800 var(--text-stepnum)/1 var(--font); letter-spacing: -.03em; color: var(--teal); }
.step h3 { margin-top: 20px; font-size: var(--text-h4); }
.step p { margin-top: 10px; color: var(--muted); font-size: var(--text-small); }
.stats { display: grid; grid-template-columns: repeat(12, 1fr); gap: var(--gutter); }
.stat { grid-column: span 3; background: var(--surface-glass); border-radius: var(--r); padding: 24px; }
.surface-white .stat, .surface-wash .stat, .stats.on-light .stat { background: var(--surface-tint); }
.stat .v { font: 800 var(--text-stat)/1 var(--font); letter-spacing: var(--track-stat); color: var(--plum-deep); }
.stat .k { margin-top: 8px; font-size: var(--text-caption); color: var(--muted); }
.quote { background: var(--surface-raised); border-radius: var(--r); padding: 40px; display: grid; grid-template-columns: repeat(12, 1fr); gap: var(--gutter); }
.quote .eyebrow, .quote .index { grid-column: 1 / span 3; }
.quote blockquote { grid-column: 4 / span 8; font: 500 var(--text-quote)/var(--lh-snug) var(--font); letter-spacing: var(--track-quote); color: var(--plum-deep); }
.quote cite, .testimonial cite { display: block; margin-top: 14px; font: 500 var(--text-caption)/1.4 var(--font); font-style: normal; color: var(--muted); }
/* testimonial grid */
.testimonials { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--gutter); }
.testimonial { display: grid; align-content: start; gap: 14px; }
.testimonial blockquote { font: 500 18px/1.5 var(--font); color: var(--plum-deep); letter-spacing: -.01em; }
.testimonial .who { display: flex; align-items: center; gap: 12px; margin-top: auto; }
.testimonial .who .ph { width: 48px; height: 48px; border-radius: var(--r-btn); flex: none; }
.testimonial .who b { display: block; font-size: var(--text-small); color: var(--ink); }
.testimonial .who span { font-size: var(--text-micro); color: var(--muted); }
.testimonial cite { margin-top: 0; }

/* ============ L8 — hero and page header ============ */
.hero { background: var(--hero-wash); padding: 96px 0; }
.hero .copy { grid-column: 1 / span 7; display: flex; flex-direction: column; align-items: flex-start; gap: 28px; }
.hero .visual { grid-column: 9 / span 4; }
.hero .visual .ph { aspect-ratio: 4 / 5; box-shadow: var(--shadow-hero); }
.hero .meta { grid-column: 1 / -1; margin-top: 48px; }
.page-hero { background: var(--hero-wash); padding: 72px 0; }
.page-hero .copy { grid-column: 1 / span 8; display: grid; gap: 20px; justify-items: start; }
.page-hero .visual { grid-column: 9 / span 4; }
.page-hero .visual .ph { aspect-ratio: 4 / 3; }
.page-hero.center .copy { grid-column: 3 / span 8; justify-items: center; text-align: center; }

/* ============ L8 — CTA band, logo strip, contact block ============ */
.cta-band { background: var(--surface-dark); color: var(--white); border-radius: var(--r); padding: 56px 64px; display: flex; align-items: center; justify-content: space-between; gap: 32px; flex-wrap: wrap; }
.cta-band h2 { color: var(--white); max-width: 22ch; }
.cta-band p { color: var(--lavender); max-width: 44ch; }
.cta-band .actions { flex: 0 1 auto; }
.cta-band.tint { background: var(--surface-tint); color: var(--ink); }
.cta-band.tint h2 { color: var(--plum-deep); } .cta-band.tint p { color: var(--muted); }
.logo-strip { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 24px 48px; }
.logo-strip img { height: 32px; width: auto; opacity: .8; }
.contact-block { display: grid; gap: 20px; }
.contact-block .row { display: flex; gap: 14px; align-items: flex-start; }
.contact-block .row .icon-badge { width: 44px; height: 44px; flex: none; }
.contact-block .row b { display: block; color: var(--plum-deep); }
.contact-block .row a { font-weight: 600; color: var(--teal); text-decoration: underline; text-underline-offset: 3px; }
.contact-block .row span { display: block; font-size: var(--text-small); color: var(--muted); }

/* ============ L8 — forms ============ */
.form { display: grid; gap: 20px; }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px var(--gutter); }
.field { display: grid; gap: 8px; }
.field > label, .fieldset > legend, .legend { font: 600 var(--text-caption)/1.35 var(--font); color: var(--plum-deep); }
.field .req { color: var(--teal); margin-left: 2px; }
.field .hint { font-size: var(--text-micro); color: var(--muted); }
.input, .select, .textarea { width: 100%; height: 50px; padding: 0 16px; border: 0; border-radius: var(--r-btn); background: var(--surface-page); color: var(--ink); font: 500 16px/1.4 var(--font); transition: background var(--dur), box-shadow var(--dur); }
.surface-wash .input, .surface-wash .select, .surface-wash .textarea, .surface-tint .input, .surface-tint .select, .surface-tint .textarea, .tile .input, .tile .select, .tile .textarea { background-color: var(--surface-raised); }   /* background-color, so .select keeps its chevron */
.input::placeholder, .textarea::placeholder { color: var(--muted); opacity: .75; }
.input:hover, .select:hover, .textarea:hover { box-shadow: inset 0 0 0 2px var(--lavender-deep); }
.select { background-color: var(--surface-page); }
.input:focus-visible, .select:focus-visible, .textarea:focus-visible { outline: var(--focus-ring); outline-offset: 2px; box-shadow: none; }
.textarea { height: auto; min-height: 140px; padding: 14px 16px; resize: vertical; }
.select { appearance: none; padding-right: 44px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231F7A6E' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 14px center; background-size: 20px; }
.input[disabled], .select[disabled], .textarea[disabled] { opacity: .5; cursor: not-allowed; }
.field.is-invalid .input, .field.is-invalid .select, .field.is-invalid .textarea { box-shadow: inset 0 0 0 2px var(--alert); }
.field .error { display: flex; gap: 6px; align-items: flex-start; font: 600 var(--text-micro)/1.4 var(--font); color: var(--alert); }
.field .error .icon { width: 16px; height: 16px; margin-top: 1px; }
.input-group { display: flex; gap: 8px; }
.input-group .input { flex: 1; }
/* checkbox and radio: tinted boxes, plum when checked */
.check { display: flex; gap: 12px; align-items: flex-start; font: 500 var(--text-small)/1.5 var(--font); cursor: pointer; }
.check input { appearance: none; flex: none; width: 22px; height: 22px; margin: 1px 0 0; border-radius: var(--r-inner); background: var(--lavender); display: grid; place-items: center; transition: background var(--dur); cursor: pointer; }
.check input[type="radio"] { border-radius: 50%; }
.check input:hover { background: var(--lavender-deep); }
.check input:checked { background: var(--plum); }
.check input[type="checkbox"]:checked::after { content: ''; width: 12px; height: 12px; background: var(--white); mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12l5 5L20 7'/%3E%3C/svg%3E") center / contain no-repeat; }
.check input[type="radio"]:checked::after { content: ''; width: 8px; height: 8px; border-radius: 50%; background: var(--white); }
.check input:focus-visible { outline: var(--focus-ring); outline-offset: 2px; }
.check span small { display: block; font-size: var(--text-micro); color: var(--muted); }
.choices { display: grid; gap: 10px; }
.choices.row { display: flex; flex-wrap: wrap; gap: 10px 24px; }
/* segmented choice (e.g. "Center" / "Event") */
.seg { display: inline-flex; padding: 4px; gap: 4px; border-radius: var(--r-btn); background: var(--lavender); }
.seg label { position: relative; }
.seg input { position: absolute; inset: 0; opacity: 0; cursor: pointer; }
.seg span { display: inline-flex; align-items: center; height: 40px; padding: 0 16px; border-radius: var(--r-chip); font: 700 var(--text-small)/1 var(--font); color: var(--plum-deep); transition: background var(--dur); }
.seg input:checked + span { background: var(--white); }
.seg input:focus-visible + span { outline: var(--focus-ring); outline-offset: 2px; }
.form-actions { display: flex; flex-wrap: wrap; gap: 12px 20px; align-items: center; }
.form-actions .note { font-size: var(--text-micro); color: var(--muted); }
/* multi-step indicator */
.stepper { display: flex; gap: 8px; counter-reset: s; }
.stepper li { flex: 1; display: flex; align-items: center; gap: 10px; padding: 10px 14px; border-radius: var(--r-btn); background: var(--lavender); color: var(--plum-deep); font: 600 var(--text-caption)/1.3 var(--font); counter-increment: s; }
.stepper li::before { content: counter(s); flex: none; width: 26px; height: 26px; border-radius: var(--r-inner); display: grid; place-items: center; background: var(--white); color: var(--plum); font-weight: 800; font-size: 13px; }
.stepper li[aria-current="step"] { background: var(--plum); color: var(--white); }
.stepper li[aria-current="step"]::before { background: var(--white); color: var(--plum-deep); }
.stepper li.done { background: var(--mint-tint); color: var(--teal-deep); }
.stepper li.done::before { content: '✓'; background: var(--teal); color: var(--white); }

/* ============ L8 — tables ============ */
.table-wrap { background: var(--surface-raised); border-radius: var(--r); overflow: auto; }
.table { width: 100%; border-collapse: collapse; font-size: var(--text-small); }
.table th { text-align: left; padding: 14px 20px; background: var(--lavender); color: var(--plum-deep); font: 700 12px/1.3 var(--font); letter-spacing: .06em; text-transform: uppercase; }
.table td { padding: 14px 20px; vertical-align: top; }
.table tbody tr:nth-child(even) td { background: var(--wash); }
.table td.num, .table th.num { text-align: right; font-variant-numeric: tabular-nums; }
.table td b { color: var(--plum-deep); }

/* ============ L8 — accordion (FAQ) ============ */
.faq { display: grid; gap: 8px; }
.faq details { background: var(--surface-raised); border-radius: var(--r); }
.surface-white .faq details { background: var(--surface-tint); }
.faq summary { list-style: none; cursor: pointer; padding: 20px 24px; display: flex; justify-content: space-between; align-items: center; gap: 16px; font: 700 17px/1.4 var(--font); color: var(--plum-deep); border-radius: var(--r); }
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after { content: ''; flex: none; width: 24px; height: 24px; background: var(--teal); mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M12 5v14M5 12h14'/%3E%3C/svg%3E") center / 20px no-repeat; transition: transform var(--dur); }
.faq details[open] summary::after { mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M5 12h14'/%3E%3C/svg%3E"); }
.faq .answer { padding: 0 24px 24px; color: var(--muted); font-size: 16px; max-width: 70ch; }
.faq .answer > * + * { margin-top: 10px; }

/* ============ L8 — notices, dialog ============ */
.notice { display: flex; gap: 12px; align-items: flex-start; padding: 16px 18px; border-radius: var(--r-btn); background: var(--info-tint); color: var(--plum-deep); font-size: var(--text-small); }
.notice .icon { flex: none; width: 22px; height: 22px; margin-top: 1px; }
.notice b { display: block; }
.notice.success { background: var(--success-tint); color: var(--teal-deep); }
.notice.alert { background: var(--alert-tint); color: var(--alert); }
.notice.alert b, .notice.alert p { color: var(--alert); }
.notice .close { margin-left: auto; }
dialog.modal { border: 0; padding: 40px; width: min(560px, calc(100% - 32px)); border-radius: var(--r); background: var(--surface-raised); color: var(--ink); box-shadow: var(--shadow-float); }
dialog.modal::backdrop { background: rgb(46 26 87 / .45); }
dialog.modal h2 { font-size: var(--text-h3); }
dialog.modal .actions { margin-top: 24px; }

/* ============ L8 — pricing ============ */
.pricing { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--gutter); }
.price-tile { display: grid; gap: 14px; align-content: start; }
.price-tile .price { font: 800 var(--text-stat)/1 var(--font); letter-spacing: var(--track-stat); color: var(--plum-deep); }
.price-tile .price small { font: 500 var(--text-small)/1 var(--font); letter-spacing: 0; color: var(--muted); margin-left: 4px; }
.price-tile .btn { margin-top: 10px; justify-self: start; }
.price-tile.featured { background: var(--surface-dark); color: var(--white); }
.price-tile.featured h3, .price-tile.featured .price { color: var(--white); }
.price-tile.featured p, .price-tile.featured .price small, .price-tile.featured li { color: var(--lavender); }
.price-tile.featured .list-dot li::before { background: var(--mint); }

/* ============ L8 — footer ============ */
.footer { background: var(--surface-raised); padding: 72px 0 40px; }
.footer-grid { display: grid; grid-template-columns: 2fr 1fr 1fr 1.2fr; gap: 40px var(--gutter); }
.footer h4 { font: 800 var(--text-micro)/1.35 var(--font); letter-spacing: var(--track-eyebrow); text-transform: uppercase; color: var(--teal); margin-bottom: 14px; }
.footer ul { display: grid; gap: 4px; }
.footer ul a { display: inline-block; padding: 4px 0; font-size: var(--text-small); transition: color var(--dur); }
.footer ul a:hover { color: var(--plum); }
.footer-brand img { height: 32px; width: auto; }
.footer-brand p { margin-top: 14px; font-size: var(--text-small); color: var(--muted); max-width: 36ch; }
.footer-brand .chips { margin-top: 18px; }
.footer-bottom { margin-top: 48px; padding: 16px 20px; border-radius: var(--r-btn); background: var(--surface-page); display: flex; flex-wrap: wrap; gap: 8px 24px; font-size: var(--text-micro); color: var(--muted); }
.footer-bottom a:hover { color: var(--plum); }
.footer.dark { background: var(--surface-dark); color: var(--white); }
.footer.dark h4 { color: var(--mint); }
.footer.dark ul a, .footer.dark .footer-brand p { color: var(--lavender); }
.footer.dark ul a:hover { color: var(--white); }
.footer.dark .footer-bottom { background: rgb(255 255 255 / .08); color: var(--lavender); }
.footer.dark .chip { background: rgb(255 255 255 / .12); color: var(--white); }
/* minimal footer (the mockup's): logo · descriptor · phone button */
.footer-min { background: var(--surface-raised); padding: 56px 0; }
.footer-min .container { display: flex; align-items: center; gap: 24px; flex-wrap: wrap; }
.footer-min img { height: 32px; width: auto; }
.footer-min .eyebrow, .footer-min .index { margin-right: auto; }

/* ============ L8 — pagination, tabs (light use) ============ */
.pagination { display: flex; gap: 6px; align-items: center; }
.pagination a, .pagination span { display: inline-grid; place-items: center; min-width: 40px; height: 40px; padding: 0 10px; border-radius: var(--r-btn); font: 600 var(--text-small)/1 var(--font); color: var(--plum-deep); }
.pagination a:hover { background: var(--lavender); }
.pagination [aria-current="page"] { background: var(--plum); color: var(--white); }
.tabs { display: flex; gap: 6px; padding: 4px; border-radius: var(--r-btn); background: var(--lavender); width: max-content; max-width: 100%; overflow: auto; }
.tabs a, .tabs button { display: inline-flex; align-items: center; height: 40px; padding: 0 16px; border-radius: var(--r-chip); font: 700 var(--text-small)/1 var(--font); color: var(--plum-deep); white-space: nowrap; transition: background var(--dur); }
.tabs [aria-selected="true"], .tabs [aria-current="page"] { background: var(--white); }

/* ============ RESPONSIVE ============ */
@media (max-width: 900px) {
  .hero { padding: 56px 0; }
  .hero .copy, .hero .visual, .page-hero .copy, .page-hero .visual, .page-hero.center .copy { grid-column: 1 / -1; }
  .hero .visual .ph { aspect-ratio: 4 / 3; }
  .card-service { grid-template-columns: 1fr; }
  .card-service .ph { aspect-ratio: 16 / 10; }
  .step { grid-column: 1 / -1; }
  .stat { grid-column: span 6; }
  .quote { padding: 28px; }
  .quote .eyebrow, .quote .index, .quote blockquote { grid-column: 1 / -1; }
  .testimonials, .pricing { grid-template-columns: 1fr; }
  .cta-band { padding: 40px 28px; }
  .cta-band .actions { flex: 1 1 100%; }
  .form-row { grid-template-columns: 1fr; }
  .stepper { flex-direction: column; }
  .footer-grid { grid-template-columns: 1fr 1fr; }
  .list-cols { columns: 1; }
  .nav-menu { position: static; box-shadow: none; padding: 0; }
}
@media (max-width: 600px) {
  .lockup { gap: 12px; } .lockup img { height: 26px; } .lockup .rule { height: 32px; } .lockup .label { font-size: 11px; letter-spacing: 2px; }
  .footer-grid { grid-template-columns: 1fr; }
  .tile { padding: 24px; } .tile.pad-lg { padding: 28px; }
  dialog.modal { padding: 28px; }
}

/* ===== site.css ===== */
/* ==================================================================
   In a Pinch Subs mockup: the site's own styles on top of the brand kit
   (tokens.css, base.css, components.css are the kit's files, untouched).
   Grouped by composition layer like the kit. New classes take the ips- prefix
   when they are the mockup's own; the kit's class names stay as they are.
   ================================================================== */

/* ============ L8 — document ============ */
[hidden] { display: none !important; }
html { scroll-padding-top: 96px; }
.ips-body { min-height: 100vh; display: flex; flex-direction: column; }
.ips-body > main { flex: 1; }
main:focus { outline: none; }
.link .icon { display: inline-block; }   /* the kit's reset makes every svg a block, which pushed a text link's arrow onto a line of its own (live QA, 2026-11-11) */

/* photo placeholder tints (the kit sets them inline; the CSP forbids inline styles here) */
.ph.t-a { --ph-a: #FFFFFF; --ph-b: #8ED8C8; }
.ph.t-b { --ph-a: #E9E2F5; --ph-b: #DDF3EE; }
.ph.t-c { --ph-a: #F6F3FA; --ph-b: #D7CBEA; }
.ph.t-d { --ph-a: #DDF3EE; --ph-b: #E9E2F5; }
.ph.pos-low { --ph-pos: 50% 65%; }
.ph.pos-top { --ph-pos: 50% 25%; }
.ph.pos-left { --ph-pos: 38% 45%; }
.about-crumb { margin-bottom: 20px; }
.about-intro .prose h1 { margin-top: 12px; }
.about-intro .prose .eyebrow { color: var(--teal-deep); }   /* .prose p would make it ink; teal-deep stays AA on the mint end of the wash (Lance, 2026-11-08) */
.contact-top .form-tile h1 { font-size: var(--text-h2); }   /* the form's title is the page's H1 now, at section-title size */
.ph.placeholder > .ph-label { font-size: 13px; left: 16px; bottom: 14px; color: var(--plum-deep); opacity: .9; }

/* ============ L8 — header ============ */
.nav .logo img { width: auto; }
.nav .tel { margin-left: auto; white-space: nowrap; }
.nav .tel + .cta { margin-left: 0; }
.nav-item summary:focus-visible, .nav-mobile summary:focus-visible { outline: var(--focus-ring); outline-offset: var(--focus-offset); border-radius: 6px; }
.nav-menu a:focus-visible { outline-offset: -2px; }
/* dropdown items: a light mint underlay on hover and for the current page, never an underline
   (Lance, 2026-11-10). The top-level "current page" underline (.nav-links a[aria-current]) also
   matched the dropdown's links, and on a two-line item it cut through the description. */
.nav-menu a:hover { background: var(--mint-tint); }
.nav-links .nav-menu a[aria-current="page"] { background: var(--mint-tint); text-decoration: none; font-weight: inherit; }
@media (max-width: 1099.98px) {
  .nav .tel { display: none; }
  .nav .cta { margin-left: auto; }
}
.nav-sheet .eyebrow { color: var(--plum); }   /* teal on lavender is below AA */
html.ips-sheet-open { overflow: hidden; }
@media (max-width: 900px) {
  /* the sheet hangs from the bar itself, so it sits right under it whether or not the preview bar is above */
  .nav-sheet { position: absolute; top: 100%; left: 0; right: 0; bottom: auto; height: calc(100dvh - 64px); }
}
.surface-white .step { background: var(--surface-tint); }   /* white tiles vanish on white */

/* ============ L4 — layout helpers ============ */
/* grid and flex items shrink below their content's intrinsic width (form controls have one), so a
   one-column phone layout never grows wider than the screen */
.grid-2 > *, .grid-3 > *, .split > *, .two > *, .form-row > *, .field > *, .form-aside > *, .card-service > *, .steps > *, .stats > * { min-width: 0; }
.grid-2, .grid-3 { display: grid; gap: var(--gutter); }
.grid-2 { grid-template-columns: repeat(2, 1fr); }
.grid-3 { grid-template-columns: repeat(3, 1fr); }
.split { display: grid; grid-template-columns: 7fr 5fr; gap: 48px var(--gutter); align-items: start; }
.split.even { grid-template-columns: 1fr 1fr; }
.split.rev { grid-template-columns: 5fr 7fr; }   /* the text (first child) keeps the wide column, on the right */
.split.rev > :first-child { order: 2; }
.two { display: grid; grid-template-columns: repeat(12, 1fr); gap: 48px var(--gutter); }
.two > * { grid-column: span 6; }
.section-intro h2 + .lead, .section-intro h1 + .lead { margin-top: -4px; }
.mt-0 { margin-top: 0; } .mt-6 { margin-top: 24px; } .mt-8 { margin-top: 32px; } .mt-12 { margin-top: 48px; }
@media (max-width: 900px) {
  .grid-2, .grid-3, .split, .split.even { grid-template-columns: 1fr; }
  .split.rev { grid-template-columns: 1fr; }          /* the About owner card kept two columns on phones */
  .split.rev > :first-child { order: 0; }
  /* About on phones (Lance, 2026-11-08): Jen's photo first, under a centered "About the owner".
     Visual order only: the story's H2 still comes first in the page for screen readers. */
  .page-about #owner .section-head { justify-content: center; }
  .page-about #owner .card-person { order: -1; }
  .page-about #owner .card-person h3, .page-about #owner .card-person .role { display: none; }   /* the "Meet Jennifer Koppes: Owner…" heading follows right after (Lance, 2026-11-08) */
  .two > * { grid-column: 1 / -1; }
}

/* ============ L8 — hero extras ============ */
.hero .meta { grid-column: 1 / -1; margin-top: 48px; }
/* the home hero (Amanda, 2026-11-07): tighter, so the fact chips show without scrolling at 1440 */
.hero-home { padding: 56px 0 64px; }
.hero-home .copy { grid-column: 1 / span 8; gap: 20px; }
.hero-home .visual { grid-column: 9 / span 4; align-self: center; }
.hero-home .lead { max-width: 54ch; }
.hero-chip { color: var(--teal-deep); font-weight: 700; letter-spacing: .02em; }   /* the "bubble": teal-deep reads 6.9:1 on mint tint */
.hero-lines { display: grid; gap: 6px; margin-top: -4px; }
.hero-call { display: flex; gap: 8px; align-items: center; font: 600 var(--text-small)/1.4 var(--font); color: var(--plum-deep); }
.hero-call .icon { width: 16px; height: 16px; color: var(--teal); flex: none; }
.hero-call a { color: var(--teal-deep); text-decoration: underline; text-underline-offset: 3px; white-space: nowrap; }
.hero-trust { font-size: var(--text-caption); color: var(--muted); }
.hero-facts { margin-top: 4px; }
@media (max-width: 900px) {
  .hero-home { padding: 40px 0 56px; }
  .hero-home .copy, .hero-home .visual { grid-column: 1 / -1; }
  .hero-call { align-items: flex-start; }
  .hero-call .icon { margin-top: 3px; }
}

/* the one highlight device, hand-drawn (Amanda, 2026-11-07; Lance's OK 2026-11-08): a mint brush
   stroke under the key phrase that draws itself left to right when the page loads, then fades and
   redraws every 7 s (Lance, 2026-11-08). Since 2026-11-10 it matches Lance's reference image,
   traced column by column: a smooth, solid marker stroke (no texture) that starts as a thin tapered
   tip under the comma, rises quickly, arcs gently across the phrase (highest around the "w"), eases
   down and ends round just past the "n", wholly below the baseline; a mask path draws it in. The
   SVG box spans 20% before to 20% past the phrase, and in em from the baseline (0.12 em above the
   span's bottom at line-height 1.05) 0.05 em above it to 0.55 em below. It sits behind the whole
   headline (the h1 is the stacking context), so the "g" crosses over it. With reduced motion it is
   simply there. Replaces the kit's straight .ul underline on this page. */
.hero-home .display { isolation: isolate; }
.ul-draw { position: relative; display: inline-block; white-space: nowrap; }
.ul-stroke { position: absolute; z-index: -1; left: -20%; width: 140%; max-width: none; bottom: -.432em; height: .6em; overflow: visible; pointer-events: none; }   /* max-width: the kit caps every svg at 100% */
/* on phones and tablets (one column) "right when" can start its line, so the tail under the comma
   would run off the screen: tuck the box in (the shape narrows by about 9%). The hero also clips
   sideways as a backstop, so the stroke can never cause sideways scrolling. */
@media (max-width: 900px) { .ul-stroke { left: -8%; width: 128%; } }
.hero-home { overflow-x: clip; }
.ul-brush { fill: var(--mint); }
.ul-reveal { fill: none; stroke: var(--white); stroke-width: 30; stroke-dasharray: 1; stroke-dashoffset: 1; animation: ips-draw 7s linear 350ms infinite both; }
/* one 7 s cycle: draw in 0.9 s, hold, fade out over the last 0.4 s, start again. Hidden at the start
   of each draw, so nothing shows before the stroke moves. */
@keyframes ips-draw {
  0%     { stroke-dashoffset: 1; opacity: 0; animation-timing-function: cubic-bezier(.65, 0, .35, 1); }
  0.3%   { opacity: 1; }
  12.86% { stroke-dashoffset: 0; }
  94.3%  { stroke-dashoffset: 0; opacity: 1; animation-timing-function: ease-in; }
  100%   { stroke-dashoffset: 0; opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .ul-reveal { animation: none; stroke-dashoffset: 0; }
}
.hero .copy .lockup, .page-hero .copy .lockup { margin-bottom: 4px; }
.page-hero.center .copy .actions { justify-content: center; }
.page-hero .copy .lead { max-width: 56ch; }
.hero .phone-line, .page-hero .phone-line { font-size: var(--text-lead); color: var(--plum-deep); font-weight: 600; }
.hero .phone-line a, .page-hero .phone-line a { color: var(--teal); text-decoration: underline; text-underline-offset: 4px; }

/* ============ L8 — tiles and content blocks ============ */
.tile > .eyebrow + h2, .tile > .eyebrow + h3 { margin-top: 10px; }
.tile.card-feature h3 { margin-top: 4px; }
.card-feature.tile { padding: 28px; }
/* a lavender icon badge vanishes on a lavender tile: give it white, so the three badges in a row
   (white, mint, plum) read as a set (Amanda, 2026-11-07) */
.tile.tint .icon-badge:not(.mint):not(.dark) { background: var(--white); }
.cities { display: flex; flex-wrap: wrap; gap: 10px; }
.hours-tile .v { font: 800 var(--text-h2)/1.1 var(--font); letter-spacing: var(--track-display); color: var(--plum-deep); }
.hours-tile .k { margin-top: 6px; color: var(--muted); }
.hours-tile p + p { margin-top: 14px; }
.card-person .ph { aspect-ratio: 4 / 5; }
.quote.on-white { background: var(--surface-tint); }
.stat .k { max-width: 22ch; }
.contact-block .row .plain { color: var(--ink); }
.contact-block .row > div { min-width: 0; }               /* an email address must not widen the row */
body { overflow-wrap: anywhere; }                          /* long words (emails, 208.968.SUBS) break rather than spill at 320px */
.contact-block .row .icon-badge .icon { width: 22px; height: 22px; }
/* the kit's ".contact-block .row span" (meant for the text lines) also hit the badges, which are spans:
   it made them blocks (icon stuck top-left) and greyed the icons. Put the badge look back. */
.contact-block .row .icon-badge { display: grid; place-items: center; color: var(--plum); }
.contact-block .row .icon-badge.mint { color: var(--teal); }
.contact-block .row .icon-badge.dark { color: var(--white); }
.icon.icon-fill { fill: currentColor; stroke: none; }   /* brand glyphs (Facebook) are filled shapes, not line icons */
.intro-list { display: grid; gap: 18px; }
.intro-list p { color: var(--ink); }
.list-check li, .list-dot li { color: var(--ink); }
.list-check.lg { font-size: var(--text-body); }
.credentials { display: grid; gap: 12px; }
.chooser { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--gutter); }
.chooser .tile { display: grid; gap: 10px; align-content: start; }
.chooser .tile h2 { font-size: var(--text-h3); }
.chooser .tile p { color: var(--muted); font-size: var(--text-small); }
.chooser .tile .arrow { margin-top: 8px; display: inline-flex; align-items: center; gap: 6px; font: 700 var(--text-small)/1 var(--font); color: var(--teal); }
.chooser .tile:hover .arrow .icon { transform: translateX(3px); }
.chooser .tile .arrow .icon { transition: transform var(--dur); }
@media (max-width: 900px) {
  .chooser { grid-template-columns: 1fr; }
}

/* ============ L8 — forms (demo) ============ */
.form-tile { width: 100%; }
/* the kit's rule: fields are wash on white, white on wash or lavender. A white tile is white, so its fields are wash. */
.tile .input, .tile .select, .tile .textarea { background-color: var(--surface-page); }
.tile.tint .input, .tile.tint .select, .tile.tint .textarea, .tile.glass .input { background-color: var(--surface-raised); }
.form legend.legend { margin-bottom: 8px; }
.form fieldset { border: 0; padding: 0; margin: 0; min-width: 0; }
.form .field > label .req, .form legend .req { color: var(--teal); margin-left: 2px; }
.form .seg { margin-top: 2px; }
.form .form-actions { margin-top: 8px; }
.form .form-actions .note a { color: var(--teal); font-weight: 600; text-decoration: underline; text-underline-offset: 3px; }
.form .check small { display: block; font-size: var(--text-micro); color: var(--muted); }
.form .field .error { margin-top: 2px; }
.thanks .notice { margin-bottom: 20px; }
.thanks h2 { font-size: var(--text-h2); }
.thanks p { margin-top: 12px; color: var(--ink); max-width: 56ch; }
.thanks .actions { margin-top: 24px; }
.thanks .steps-mini { margin-top: 24px; }
.steps-mini { display: grid; gap: 8px; }
.steps-mini li { display: flex; gap: 14px; counter-increment: n; font-size: var(--text-small); }
.steps-mini li::before { content: counter(n); flex: none; width: 28px; font: 800 18px/1.3 var(--font); color: var(--teal); }
.steps-mini { counter-reset: n; }
.form-aside { display: grid; gap: var(--gutter); align-content: start; }
.form-aside .tile p { color: var(--ink); }

/* ============ L8 — the registration form facade (the real GoHighLevel form, loaded on request) ============ */
.ips-facade { display: grid; gap: 20px; }
.ips-facade .ips-facade-intro { display: grid; gap: 14px; }
.ips-facade .ips-facade-intro p { color: var(--ink); max-width: 60ch; }
.ips-embed { display: block; width: 100%; height: 1800px; border: 0; border-radius: var(--r); background: var(--white); }
@media (max-width: 600px) { .ips-embed { height: 2300px; } }
/* WordPress only: the GoHighLevel forms (ips_form_ghl_box and the registration form). Each frame
   starts at the height GoHighLevel gives it at that screen width (measured on the live site,
   2026-11-11), and while GoHighLevel's script hides the frame to load it (left: -9999px, out of
   the flow) its box keeps that height, so nothing below the form jumps (the live QA measured
   layout shifts of 0.2–0.6 on phones). The phone line under the form, as the demo forms print it
   beside the button. */
.ips-form-embed[data-ips-form] .ips-embed { height: var(--ips-embed-h, 1800px); }
.ips-form-embed[data-ips-form]:has(iframe[style*="-9999px"]) { min-height: var(--ips-embed-h, 0px); }
.ips-form-embed[data-ips-form="contact"] { --ips-embed-h: 842px; }
.ips-form-embed[data-ips-form="request"] { --ips-embed-h: 1245px; }
.ips-form-embed[data-ips-form="event"] { --ips-embed-h: 1481px; }
.ips-form-embed[data-ips-form="apply"] { --ips-embed-h: 864px; }
.ips-form-embed[data-ips-form="register"] { --ips-embed-h: 3829px; }
@media (max-width: 900px) { .ips-form-embed[data-ips-form="register"] { --ips-embed-h: 3874px; } }
@media (max-width: 700px) { .ips-form-embed[data-ips-form="register"] { --ips-embed-h: 4138px; } }
@media (max-width: 599px) {
  .ips-form-embed[data-ips-form="contact"] { --ips-embed-h: 881px; }
  .ips-form-embed[data-ips-form="request"] { --ips-embed-h: 1264px; }
  .ips-form-embed[data-ips-form="event"] { --ips-embed-h: 1502px; }
}
@media (max-width: 500px) { .ips-form-embed[data-ips-form="register"] { --ips-embed-h: 4492px; } }
@media (max-width: 400px) {
  .ips-form-embed[data-ips-form="contact"] { --ips-embed-h: 921px; }
  .ips-form-embed[data-ips-form="request"] { --ips-embed-h: 1303px; }
  .ips-form-embed[data-ips-form="apply"] { --ips-embed-h: 883px; }
  .ips-form-embed[data-ips-form="register"] { --ips-embed-h: 4648px; }
}
@media (max-width: 350px) {
  .ips-form-embed[data-ips-form="contact"] { --ips-embed-h: 940px; }
  .ips-form-embed[data-ips-form="request"] { --ips-embed-h: 1345px; }
  .ips-form-embed[data-ips-form="event"] { --ips-embed-h: 1540px; }
  .ips-form-embed[data-ips-form="register"] { --ips-embed-h: 5041px; }
}
.ips-form-note { margin-top: 16px; font-size: var(--text-micro); color: var(--muted); }
.ips-form-note a { color: var(--teal); font-weight: 600; text-decoration: underline; text-underline-offset: 3px; }

/* ============ L8 — dialog (the "Not part of this preview" note) ============ */

/* ============ L8 — footer ============ */
.footer .footer-h { font: 800 var(--text-micro)/1.35 var(--font); letter-spacing: var(--track-eyebrow); text-transform: uppercase; color: var(--teal); margin-bottom: 14px; }   /* the kit's h4 look, on an h3 */
.footer-brand .footer-logo { height: 44px; width: auto; }
.footer-contact li { font-size: var(--text-small); color: var(--ink); }
.footer-contact li small { display: block; color: var(--muted); font-size: var(--text-micro); }
.footer-contact a { font-weight: 600; }
.footer-bottom .footer-tag { margin-left: auto; }
.footer ul li { padding: 4px 0; }
.footer ul li a { padding: 0; }
@media (max-width: 600px) { .footer-bottom .footer-tag { margin-left: 0; } }

/* ============ L8 — utility pages ============ */
.page-404 .pin { height: 72px; width: auto; margin-inline: auto; }
.page-404 .copy { gap: 24px; }
.prose .notice { margin-top: 1.5em; }
.prose .caption { display: block; }
.prose ul.plain li::before { display: none; }
.prose ul.plain li { padding-left: 0; }

/* ============ L8 — the change log (/changes/, preview only) ============ */

/* ============ small phones (320–400px) ============ */
@media (max-width: 400px) {
  .btn { white-space: normal; height: auto; min-height: 50px; padding-block: 12px; text-align: center; }   /* long labels ("Parent Pre-Registration Form") wrap instead of spilling */
  .btn.sm { min-height: 40px; padding-block: 8px; }
  .stat { grid-column: 1 / -1; }                       /* 2-up stat tiles can't hold "2008" at 36px in 76px */
  .lockup { flex-wrap: wrap; gap: 10px 12px; }          /* the sub-brand lockup wraps instead of spilling */
  .lockup .rule { display: none; }
  .lockup .label { white-space: normal; }
}

/* ============ L9 — motion ============ */
@media (prefers-reduced-motion: reduce) {
  .chooser .tile:hover .arrow .icon, .card-link:hover .arrow .icon { transform: none; }
}
/* hover effects that move things are for pointers that can hover; on touch they'd stick after a tap */
@media (hover: none) {
  a.tile:hover, .tile.is-interactive:hover { transform: none; }
  .card-link:hover .arrow .icon, .chooser .tile:hover .arrow .icon { transform: none; }
}
