/* ============================================================================
   SENATORE — self-hosted webfonts
   Three families carry the design: EB Garamond (--serif), Inter (--sans) and
   Cinzel (--insc). These @font-face rules MUST live in a stylesheet the server
   actually serves. The previous implementation kept them in _fonts.css, which
   server.js refuses to serve (the leading "_" marks a build helper) and which no
   page linked — so no @font-face ever reached a browser and every page silently
   fell back to system serif/sans while still preloading woff2 files it could not
   apply. Lives here, not in a separate file, so the fonts arrive in the same
   response as the rules that use them.
   ========================================================================= */
@font-face{font-family:"EB Garamond";font-style:normal;font-weight:400 800;font-display:swap;src:url("/fonts/eb-garamond-roman.woff2") format("woff2");}
@font-face{font-family:"EB Garamond";font-style:italic;font-weight:400 700;font-display:swap;src:url("/fonts/eb-garamond-italic.woff2") format("woff2");}
@font-face{font-family:"Inter";font-style:normal;font-weight:100 900;font-display:swap;src:url("/fonts/inter-roman.woff2") format("woff2");}
@font-face{font-family:"Inter";font-style:italic;font-weight:100 900;font-display:swap;src:url("/fonts/inter-italic.woff2") format("woff2");}
@font-face{font-family:"Cinzel";font-style:normal;font-weight:400 900;font-display:swap;src:url("/fonts/cinzel.woff2") format("woff2");}

/* ============================================================================
   SENATORE — design system (redesign 2026-09-16)
   Ancient library + modern editorial studio. Hand-authored, no framework,
   no third-party origin. Tokens first, then layout, components, utilities.

   CONTRAST — measured from RENDERED PIXELS, not from declared pairs.
   745 visible text elements across the homepage, /pricing/, /articles/,
   /contact/ and a journal post, measured in 1440px full-page screenshots
   (evidence/contrast-rendered.json). Rendered values are lower than declared
   ones wherever Cinzel is small, because inscriptional hairlines never reach
   full stroke coverage — that gap is what the .eyebrow / .ba__label / .rn
   size-and-weight fixes below exist to close.

     pair (worst measured on the live pages)          n     measured
     ivory on ink .................................  48   15.9 – 18.1:1
     ink on ivory ................................. 263   13.8 – 18.2:1
     stone #625D54 secondary on ivory/parchment ... 176    5.1 – 11.1:1
     burgundy #6E1F2A on ivory (small caps) .......  38    4.9 –  8.2:1
     ochre #D0A250 on ink ......................... 143    4.7 –  7.9:1
     hero kicker over the photograph ..............   1    4.8:1  (--ochre-light)

   Minimum across the site: 4.69:1 for normal text (needs 4.5:1) and 7.09:1 for
   large text (needs 3.0:1). Failures: 0.

   Never use --ochre for text on a light ground (2.0 – 2.5:1); use
   --ochre-ink. Never use --stone on a dark ground; use --stone-2.
   ========================================================================== */

*, *::before, *::after { box-sizing: border-box; }

:root {
  /* ground */
  --ink:        #14161A;
  --graphite:   #2A2F36;
  --ivory:      #F7F3EC;
  --parchment:  #EDE4D6;
  --paper:      #FFFFFF;
  --stone:      #625D54;
  --stone-2:    #9A9488;
  /* accent — restrained */
  --burgundy:   #6E1F2A;
  --burgundy-2: #8C2A36;
  --ochre:      #D0A250;
  /* Text placed over the hero photograph is composited in greyscale and its
     glyph cores only reach ~40% coverage, versus ~81% for identical text on a
     flat ground - so the same ochre that measures 5.7:1 on a solid dark band
     measures 3.6:1 over the image. --ochre-light compensates for that lost
     coverage; it is only for text sitting on imagery. */
  --ochre-light: #E8CE96;
  --ochre-ink:  #7A4E00;
  /* structure */
  --rule:       rgba(20, 22, 26, .14);
  --rule-soft:  rgba(20, 22, 26, .08);
  --rule-dark:  rgba(247, 243, 236, .18);
  --maxw:       1180px;
  --gutter:     1.25rem;
  /* type */
  --serif:  "EB Garamond", Georgia, "Times New Roman", serif;
  --sans:   "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --script: Georgia, serif;
  --insc:   "Cinzel", "EB Garamond", Georgia, serif;
}

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  scroll-padding-top: 5.5rem;
}
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }

body {
  margin: 0;
  background: var(--ivory);
  color: var(--ink);
  font-family: var(--sans);
  font-size: 1rem;
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  overflow-x: hidden;
}

img, svg, video { display: block; max-width: 100%; }
img { height: auto; }

h1, h2, h3, h4 {
  font-family: var(--serif);
  font-weight: 600;
  line-height: 1.12;
  letter-spacing: -.005em;
  margin: 0 0 .6em;
  text-wrap: balance;
}
h1 { font-size: clamp(2.4rem, 6.2vw, 4.2rem); line-height: 1.04; }
h2 { font-size: clamp(1.75rem, 3.6vw, 2.6rem); }
h3 { font-size: clamp(1.2rem, 2.1vw, 1.5rem); }
h4 { font-size: 1.06rem; font-family: var(--sans); font-weight: 650; letter-spacing: 0; }

p { margin: 0 0 1.05em; }
p:last-child { margin-bottom: 0; }

a { color: var(--burgundy); text-decoration-thickness: 1px; text-underline-offset: 3px; }
a:hover { color: var(--burgundy-2); }

ul, ol { margin: 0 0 1.05em; padding-left: 1.15rem; }
li { margin-bottom: .38rem; }
li::marker { color: var(--stone-2); }

hr { border: 0; border-top: 1px solid var(--rule); margin: 2.5rem 0; }

:focus-visible {
  outline: 3px solid var(--burgundy);
  outline-offset: 3px;
  border-radius: 3px;
}
::selection { background: var(--burgundy); color: var(--ivory); }

/* ---------- layout -------------------------------------------------------- */
.wrap { width: min(100% - (var(--gutter) * 2), var(--maxw)); margin-inline: auto; }
.wrap--narrow { max-width: 760px; }
.wrap--wide { max-width: 1320px; }

.section { padding: clamp(3.5rem, 8vw, 6.5rem) 0; }
.section--tight { padding: clamp(2.5rem, 5vw, 4rem) 0; }
.section--dark { background: var(--ink); color: var(--ivory); }
.section--dark h1, .section--dark h2, .section--dark h3 { color: var(--ivory); }
.section--dark a { color: var(--ivory); }
.section--dark a:hover { color: var(--ochre); }
.section--paper { background: var(--paper); }
.section--parchment { background: var(--parchment); }
.section--ruled { border-top: 1px solid var(--rule); }

.stack > * + * { margin-top: 1rem; }
.lede { font-size: clamp(1.06rem, 1.6vw, 1.25rem); color: var(--stone); max-width: 62ch; }
.section--dark .lede { color: var(--stone-2); }
.muted { color: var(--stone); font-size: .93rem; }
.section--dark .muted { color: var(--stone-2); }
.center { text-align: center; }
.center .lede { margin-inline: auto; }

.grid { display: grid; gap: 1.5rem; }
.grid--2 { grid-template-columns: 1fr; }
.grid--3 { grid-template-columns: 1fr; }
.grid--4 { grid-template-columns: 1fr; }
@media (min-width: 640px) {
  .grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .grid--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (min-width: 900px) {
  .grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .grid--sidebar { grid-template-columns: 1.6fr 1fr; align-items: start; }
}

/* ---------- inscription labels & classical details ----------------------- */
.eyebrow {
  font-family: var(--insc);
  /* Cinzel is an inscriptional face with very high stroke contrast: its
     hairlines are far thinner than a text face at the same size. At .68rem/600
     the rendered glyph cores only reached ~50% of the specified colour, so a
     5.8:1 declared pairing measured 2.9:1 on screen against the 4.5:1 that small
     text requires. Larger and heavier strokes survive antialiasing; the size and
     0.18em tracking below are the measured fix, verified against rendered
     pixels (see evidence/contrast-rendered.json). */
  font-size: .78rem;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: var(--burgundy);
  margin: 0 0 .9rem;
  font-weight: 700;
}
.section--dark .eyebrow { color: var(--ochre); }
.eyebrow--stone { color: var(--stone); }

.rn {
  font-family: var(--insc);
  /* 800, not 700: at the .78rem inherited size the numeral sat at 4.46:1
     measured against a 4.5:1 requirement - denser strokes close that gap. */
  font-weight: 800;
  /* Deeper than --burgundy: the numeral renders over parchment at ~40% stroke
     coverage, so the base colour has to carry the ratio. */
  color: #5E1922;
  margin-right: .6rem;
  letter-spacing: .06em;
}
.section--dark .rn { color: var(--ochre); }

.motto {
  font-family: var(--script);
  font-style: italic;
  font-size: clamp(1.15rem, 2vw, 1.5rem);
  color: var(--burgundy);
}
.section--dark .motto { color: var(--ochre); }
.motto-gloss { display: block; font-family: var(--sans); font-style: normal; font-size: .84rem; color: var(--stone); letter-spacing: .01em; margin-top: .25rem; }
.section--dark .motto-gloss { color: var(--stone-2); }
/* The site footer is dark (--ink) but is not a .section--dark, so a gloss inside
   it kept the light-surface --stone and measured 2.9:1 - flagged by Lighthouse
   as the one contrast failure on the homepage. Pin it to the footer's own body
   colour. */
.site-footer .motto-gloss { color: var(--stone-2); }

.rule-orn { border: 0; border-top: 1px solid var(--rule); margin: 2rem 0; }
.rule-orn--short { max-width: 8rem; }
.rule-orn--dark { border-top-color: var(--rule-dark); }

/* ---------- header / navigation ------------------------------------------ */
.skip {
  position: absolute; left: -9999px; top: 0; z-index: 200;
  background: var(--ink); color: var(--ivory);
  padding: .75rem 1.1rem; border-radius: 0 0 6px 0; font-weight: 600;
}
.skip:focus { left: 0; }

.site-header {
  position: sticky; top: 0; z-index: 100;
  background: var(--ivory);
  border-bottom: 1px solid var(--rule);
}
.site-header__bar {
  display: flex; align-items: center; gap: 1rem;
  padding: .6rem 0; min-height: 4.1rem;
}
.brand { display: flex; align-items: center; gap: .6rem; text-decoration: none; color: var(--ink); flex: 0 0 auto; }
.brand__mark { width: 30px; height: 30px; flex: 0 0 auto; }
.brand__name { font-family: var(--insc); font-size: 1rem; letter-spacing: .16em; font-weight: 700; }
.brand:hover { color: var(--burgundy); }

.nav { margin-left: auto; }
.nav__list {
  display: none; align-items: center; gap: 1.35rem;
  list-style: none; margin: 0; padding: 0;
}
.nav__list li { margin: 0; }
.nav__link {
  font-size: .875rem; font-weight: 500; color: var(--ink);
  text-decoration: none; padding: .35rem 0;
  border-bottom: 2px solid transparent;
}
.nav__link:hover, .nav__link[aria-current="page"] { color: var(--burgundy); border-bottom-color: var(--burgundy); }

/* Services disclosure (native <details>, keyboard-operable without JS) */
.dd { position: relative; }
.dd > summary {
  list-style: none; cursor: pointer; font-size: .875rem; font-weight: 500;
  color: var(--ink); padding: .35rem 0; display: inline-flex; align-items: center; gap: .3rem;
  border-bottom: 2px solid transparent;
}
.dd > summary::-webkit-details-marker { display: none; }
.dd > summary::after { content: ""; width: .38rem; height: .38rem; border-right: 1.5px solid currentColor; border-bottom: 1.5px solid currentColor; transform: rotate(45deg) translateY(-1px); }
.dd[open] > summary { color: var(--burgundy); border-bottom-color: var(--burgundy); }
.dd__panel {
  position: absolute; top: calc(100% + .55rem); left: -.9rem;
  min-width: 17rem; background: var(--paper);
  border: 1px solid var(--rule); border-radius: 10px;
  padding: .55rem; margin: 0; list-style: none;
  box-shadow: 0 22px 45px -28px rgba(20, 22, 26, .5);
  z-index: 120;
}
.dd__panel li { margin: 0; }
.dd__panel a {
  display: block; padding: .5rem .7rem; border-radius: 6px;
  font-size: .87rem; color: var(--ink); text-decoration: none;
}
.dd__panel a:hover { background: var(--parchment); color: var(--burgundy); }
.dd__panel .dd__all { border-top: 1px solid var(--rule); margin-top: .35rem; padding-top: .35rem; font-weight: 600; }

/* The header CTA is redundant below the desktop breakpoint - the same
   destination is the first item in the mobile menu - so it is hidden here and
   revealed at >=1040px. Written as ".site-header .nav__cta", not a bare
   ".nav__cta": at equal specificity the generic ".btn { display:inline-flex }"
   rule further down this file wins on source order, which left this button
   visible at 320px and pushed the header 61px past the viewport. */
.site-header .nav__cta { display: none; }

.menu-btn {
  margin-left: auto; display: inline-flex; align-items: center; gap: .5rem;
  background: none; border: 1px solid var(--rule); border-radius: 6px;
  padding: .5rem .7rem; font: inherit; font-size: .82rem; font-weight: 600;
  color: var(--ink); cursor: pointer;
}
.menu-btn:hover { border-color: var(--ink); }
.menu-btn__bars { display: inline-block; width: 15px; }
.menu-btn__bars i { display: block; height: 1.6px; background: currentColor; margin: 2.6px 0; }

.mobile-nav {
  border-top: 1px solid var(--rule); background: var(--ivory);
  padding: .6rem 0 1.4rem;
}
.mobile-nav[hidden] { display: none; }
.mobile-nav ul { list-style: none; margin: 0; padding: 0; }
.mobile-nav li { margin: 0; border-bottom: 1px solid var(--rule-soft); }
.mobile-nav a {
  display: block; padding: .8rem .25rem; color: var(--ink);
  text-decoration: none; font-size: .98rem; font-weight: 500;
}
.mobile-nav a:hover { color: var(--burgundy); }
.mobile-nav .mobile-nav__group {
  font-family: var(--insc); font-size: .66rem; letter-spacing: .18em;
  text-transform: uppercase; color: var(--stone); padding: 1.1rem .25rem .35rem;
}
.mobile-nav .mobile-nav__cta { padding: 1.1rem .25rem .2rem; border-bottom: 0; }

@media (min-width: 1040px) {
  .nav__list { display: flex; }
  .site-header .nav__cta { display: inline-flex; }
  .menu-btn { display: none; }
  .mobile-nav { display: none !important; }
  .site-header__bar { min-height: 4.6rem; }
}

/* ---------- buttons ------------------------------------------------------ */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .5rem;
  font-family: var(--sans); font-size: .93rem; font-weight: 600;
  line-height: 1.2; padding: .82rem 1.4rem; border-radius: 6px;
  text-decoration: none; border: 1px solid transparent; cursor: pointer;
  transition: background-color .18s ease, color .18s ease, border-color .18s ease;
}
.btn--primary { background: var(--ink); color: var(--ivory); border-color: var(--ink); }
.btn--primary:hover { background: var(--burgundy); border-color: var(--burgundy); color: var(--ivory); }
.btn--accent { background: var(--burgundy); color: var(--ivory); border-color: var(--burgundy); }
.btn--accent:hover { background: var(--ink); border-color: var(--ink); color: var(--ivory); }
.btn--ghost { background: transparent; color: var(--ink); border-color: rgba(20, 22, 26, .4); }
.btn--ghost:hover { background: var(--ink); color: var(--ivory); border-color: var(--ink); }
.btn--ghost-light { background: transparent; color: var(--ivory); border-color: rgba(247, 243, 236, .5); }
.btn--ghost-light:hover { background: var(--ivory); color: var(--ink); border-color: var(--ivory); }
.btn--block { width: 100%; }
.btn--sm { padding: .58rem 1rem; font-size: .85rem; }
.btn-row { display: flex; flex-wrap: wrap; gap: .75rem; }
.btn-row--center { justify-content: center; }
.link-arrow { font-weight: 600; text-decoration: none; white-space: nowrap; }
.link-arrow::after { content: " \2192"; }
.link-arrow:hover { text-decoration: underline; }
@media (prefers-reduced-motion: reduce) { .btn { transition: none; } }

/* ---------- hero --------------------------------------------------------- */
.hero { position: relative; isolation: isolate; background: var(--ink); color: var(--ivory); overflow: hidden; }
.hero__media { position: absolute; inset: 0; z-index: -2; }
.hero__media img { width: 100%; height: 100%; object-fit: cover; object-position: 66% 50%; }
.hero__scrim {
  position: absolute; inset: 0; z-index: -1;
  background:
    linear-gradient(100deg, rgba(20,22,26,.97) 0%, rgba(20,22,26,.94) 34%,
                            rgba(20,22,26,.72) 56%, rgba(20,22,26,.34) 76%,
                            rgba(20,22,26,.18) 100%),
    linear-gradient(180deg, rgba(20,22,26,.55), rgba(20,22,26,0) 40%, rgba(20,22,26,.5));
}
.hero__inner { padding: clamp(3.25rem, 9vw, 7rem) 0 clamp(2.75rem, 7vw, 5.5rem); position: relative; }
.hero h1 { color: var(--ivory); margin-bottom: .45em; max-width: 22ch; }
.hero__sub { font-size: clamp(1.05rem, 1.9vw, 1.34rem); color: rgba(247, 243, 236, .93); max-width: 44ch; margin-bottom: 1rem; }
.hero__body { color: rgba(247, 243, 236, .84); max-width: 52ch; margin-bottom: 1.9rem; }
.hero .eyebrow { color: var(--ochre-light); }
.hero__motto { margin-bottom: 1.1rem; }
.hero__motto .motto { color: var(--ochre); }
.hero__motto .motto-gloss { color: rgba(247, 243, 236, .8); }

.page-head { padding: clamp(2.5rem, 6vw, 4.25rem) 0 clamp(1.5rem, 3vw, 2.25rem); border-bottom: 1px solid var(--rule); }
.page-head h1 { margin-bottom: .4em; }
.page-head--dark { background: var(--ink); color: var(--ivory); border-bottom-color: var(--rule-dark); }
.page-head--dark h1 { color: var(--ivory); }

.crumbs { font-size: .78rem; color: var(--stone); margin: 0 0 1rem; }
.crumbs ol { list-style: none; display: flex; flex-wrap: wrap; gap: .45rem; margin: 0; padding: 0; }
.crumbs li { margin: 0; display: flex; gap: .45rem; }
.crumbs li + li::before { content: "/"; color: var(--stone-2); }
.crumbs a { text-decoration: none; }
.crumbs a:hover { text-decoration: underline; }

/* ---------- cards ------------------------------------------------------- */
.card {
  background: var(--paper); border: 1px solid var(--rule); border-radius: 10px;
  padding: 1.5rem; display: flex; flex-direction: column;
}
.card h3 { margin-bottom: .45em; }
.card p { color: var(--stone); }
.card--feature { border-color: rgba(110, 31, 42, .4); box-shadow: inset 0 3px 0 var(--burgundy); }
.card__tag {
  font-family: var(--insc); font-size: .64rem; letter-spacing: .17em; text-transform: uppercase;
  color: var(--burgundy); margin-bottom: .7rem;
}
.card__foot { margin-top: auto; padding-top: 1.1rem; }
.card--dark { background: var(--graphite); border-color: var(--rule-dark); color: var(--ivory); }
.card--dark p { color: var(--stone-2); }

.svc-list { list-style: none; margin: .9rem 0 0; padding: 0; font-size: .92rem; }
.svc-list li { margin: 0 0 .3rem; padding-left: 1rem; position: relative; color: var(--stone); }
.svc-list li::before { content: ""; position: absolute; left: 0; top: .62em; width: .42rem; height: 1px; background: var(--burgundy); }

/* ---------- process steps ------------------------------------------------ */
.steps { list-style: none; margin: 0; padding: 0; counter-reset: step; display: grid; gap: 0; }
.step { display: grid; grid-template-columns: 3.1rem 1fr; gap: 1.1rem; padding: 1.35rem 0; border-bottom: 1px solid var(--rule); }
.step:first-child { border-top: 1px solid var(--rule); }
.step__n {
  font-family: var(--insc); font-size: .95rem; font-weight: 700; color: var(--burgundy);
  letter-spacing: .1em; padding-top: .18rem;
}
.step h3 { margin-bottom: .3em; }
.step p { color: var(--stone); margin-bottom: 0; }
.section--dark .step { border-color: var(--rule-dark); }
.section--dark .step p { color: var(--stone-2); }
.section--dark .step__n { color: var(--ochre); }

.expansion { list-style: none; margin: 1.5rem 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: .55rem; align-items: center; }
.expansion li { margin: 0; font-size: .88rem; }
.expansion .chip {
  display: inline-block; background: var(--paper); border: 1px solid var(--rule);
  border-radius: 999px; padding: .42rem .95rem; font-weight: 500;
}
.expansion .chip--last { border-color: rgba(110, 31, 42, .5); color: var(--burgundy); font-weight: 600; }
.expansion .arrow { color: var(--stone-2); }
.expansion .expansion__cap { width: 100%; font-size: .84rem; color: var(--stone); margin-bottom: .35rem; }

/* ---------- before / after ---------------------------------------------- */
.ba { display: grid; gap: 1.25rem; }
@media (min-width: 820px) { .ba { grid-template-columns: 1fr 1fr; } }
.ba__col { background: var(--paper); border: 1px solid var(--rule); border-radius: 10px; padding: 1.35rem; }
.ba__col--after { border-color: rgba(110, 31, 42, .38); }
.ba__label {
  /* Same failure mode as .eyebrow: Cinzel at .66rem/400 rendered at 3.5:1
     against a 6.5:1 declared pairing on the white panel. Size and stroke weight
     carry the fix, verified against rendered pixels. */
  font-family: var(--insc); font-size: .78rem; font-weight: 700; letter-spacing: .16em;
  text-transform: uppercase;
  /* #33302B, not --stone: this label sits on the white .ba__col panel, where
     --stone is only ~6.5:1 declared and therefore ~4.0:1 once 12.5px Cinzel
     strokes are rendered. A darker warm grey keeps the muted "before" tone and
     clears 4.5:1 on rendered pixels. */
  color: #33302B; margin-bottom: .8rem; display: block;
}
.ba__col--after .ba__label { color: var(--burgundy); }
.ba__text { font-family: var(--serif); font-size: 1.04rem; line-height: 1.62; color: var(--ink); margin: 0; }
.ba__text em { color: var(--stone); }
.ba__why { margin-top: 1.5rem; }
.ba__why ul { margin: .6rem 0 0; }

.demo-tag {
  display: inline-block; font-family: var(--insc); font-size: .62rem; letter-spacing: .2em;
  text-transform: uppercase; color: var(--paper); background: var(--burgundy);
  padding: .28rem .62rem; border-radius: 3px; margin-bottom: .9rem;
}
.notice {
  border-left: 3px solid var(--ochre); background: var(--parchment);
  padding: .85rem 1.1rem; border-radius: 0 6px 6px 0; font-size: .88rem; color: var(--stone);
}
.notice strong { color: var(--ink); }
.notice--inline { margin-top: 1.25rem; }

/* ---------- figures ----------------------------------------------------- */
.figure { margin: 0; }
.figure img { width: 100%; border-radius: 10px; border: 1px solid var(--rule); }
.figure figcaption { font-size: .8rem; color: var(--stone); margin-top: .65rem; line-height: 1.5; }
.section--dark .figure figcaption { color: var(--stone-2); }
.figure--framed { background: var(--paper); border: 1px solid var(--rule); border-radius: 10px; padding: 1.1rem; }
.figure--framed img { border: 0; border-radius: 6px; }
.media-band { width: 100%; }
.media-band img { width: 100%; max-height: 26rem; object-fit: cover; border-radius: 10px; border: 1px solid var(--rule); }

/* ---------- pricing ----------------------------------------------------- */
.tiers { display: grid; gap: 1.25rem; }
@media (min-width: 700px) { .tiers { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 1080px) { .tiers { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
.tier { background: var(--paper); border: 1px solid var(--rule); border-radius: 10px; padding: 1.5rem; display: flex; flex-direction: column; }
.tier--feature { border-color: rgba(110, 31, 42, .45); box-shadow: inset 0 3px 0 var(--burgundy); }
.tier__name { font-family: var(--serif); font-size: 1.28rem; font-weight: 600; margin: 0 0 .2em; }
.tier__for { font-size: .88rem; color: var(--stone); margin: 0 0 1rem; }
.tier__price { font-family: var(--serif); font-size: 1.85rem; font-weight: 600; line-height: 1; margin: 0 0 .15rem; }
.tier__unit { font-family: var(--sans); font-size: .86rem; color: var(--stone); margin: 0 0 1.15rem; }
.tier ul { font-size: .9rem; margin: 0 0 1.35rem; padding-left: 1.05rem; color: var(--stone); }
.tier__foot { margin-top: auto; }
.tier__badge {
  font-family: var(--insc); font-size: .6rem; letter-spacing: .17em; text-transform: uppercase;
  color: var(--paper); background: var(--burgundy); padding: .24rem .55rem; border-radius: 3px;
}

.tbl-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
table.data { width: 100%; border-collapse: collapse; font-size: .89rem; background: var(--paper); }
table.data caption { caption-side: top; text-align: left; font-size: .84rem; color: var(--stone); padding-bottom: .7rem; }
table.data th, table.data td { text-align: left; padding: .8rem .9rem; border-bottom: 1px solid var(--rule); vertical-align: top; }
table.data thead th { background: var(--ink); color: var(--ivory); font-family: var(--sans); font-size: .72rem; letter-spacing: .07em; text-transform: uppercase; font-weight: 600; }
table.data tbody tr:nth-child(even) { background: rgba(237, 228, 214, .45); }
table.data td:first-child { font-weight: 600; }
table.data .num { font-variant-numeric: tabular-nums; white-space: nowrap; }

/* ---------- FAQ --------------------------------------------------------- */
.faq { display: grid; gap: .7rem; }
.faq-item { background: var(--paper); border: 1px solid var(--rule); border-radius: 8px; }
.faq-item > summary {
  cursor: pointer; list-style: none; display: flex; gap: .9rem; align-items: flex-start;
  padding: 1.05rem 1.2rem; font-weight: 600; font-family: var(--sans); font-size: 1rem; line-height: 1.45;
}
.faq-item > summary::-webkit-details-marker { display: none; }
.faq-item > summary::after {
  content: "+"; margin-left: auto; color: var(--burgundy); font-family: var(--sans);
  font-size: 1.3rem; line-height: 1; font-weight: 400; flex: 0 0 auto;
}
.faq-item[open] > summary::after { content: "\2013"; }
.faq-item[open] > summary { color: var(--burgundy); }
.faq-item__body { padding: 0 1.2rem 1.2rem; color: var(--stone); }
.faq-item__body p:last-child { margin-bottom: 0; }
.section--dark .faq-item { background: var(--graphite); border-color: var(--rule-dark); }
.section--dark .faq-item > summary { color: var(--ivory); }
.section--dark .faq-item[open] > summary { color: var(--ochre); }
.section--dark .faq-item > summary::after { color: var(--ochre); }
.section--dark .faq-item__body { color: var(--stone-2); }

/* ---------- forms ------------------------------------------------------- */
.form { display: grid; gap: 1.05rem; }
@media (min-width: 720px) { .form__row { display: grid; grid-template-columns: 1fr 1fr; gap: 1.05rem; } }
.field { display: flex; flex-direction: column; gap: .35rem; }
.field label { font-size: .85rem; font-weight: 600; }
.field .hint { font-size: .78rem; color: var(--stone); font-weight: 400; }
.field .req { color: var(--burgundy); }
.field input, .field select, .field textarea {
  font: inherit; font-size: .95rem; color: var(--ink);
  background: var(--paper); border: 1px solid rgba(20, 22, 26, .32);
  border-radius: 6px; padding: .66rem .75rem; width: 100%;
}
.field textarea { min-height: 8rem; resize: vertical; }
.field input:focus, .field select:focus, .field textarea:focus { border-color: var(--burgundy); }
.field--invalid input, .field--invalid select, .field--invalid textarea { border-color: #A3271B; border-width: 2px; }
.field__error { font-size: .8rem; color: #8E2216; font-weight: 600; }
.consent { font-size: .84rem; color: var(--stone); }
.form-status { border-radius: 6px; padding: .85rem 1.05rem; font-size: .9rem; }
.form-status:empty { display: none; }
.form-status--info { background: var(--parchment); border-left: 3px solid var(--ochre); color: var(--ink); }
.form-status--error { background: #FBE9E7; border-left: 3px solid #A3271B; color: #7A1C12; }
.contact-email { font-family: var(--serif); font-size: clamp(1.2rem, 2.6vw, 1.7rem); word-break: break-word; }

/* ---------- footer ------------------------------------------------------ */
.site-footer { background: var(--ink); color: var(--stone-2); padding: clamp(2.75rem, 6vw, 4.25rem) 0 2rem; font-size: .9rem; }
.site-footer h2 { color: var(--ivory); font-family: var(--insc); font-size: .95rem; letter-spacing: .16em; font-weight: 700; }
.site-footer a { color: var(--stone-2); text-decoration: none; }
.site-footer a:hover { color: var(--ivory); text-decoration: underline; }
.site-footer .motto { color: var(--ochre); }
.foot-grid { display: grid; gap: 2rem; }
@media (min-width: 760px) { .foot-grid { grid-template-columns: 1.5fr 1fr 1fr 1fr; } }
.foot-grid ul { list-style: none; margin: 0; padding: 0; }
.foot-grid li { margin: 0 0 .5rem; }
.foot-note { border-top: 1px solid var(--rule-dark); margin-top: 2.5rem; padding-top: 1.4rem; font-size: .8rem; }
.foot-note p { margin: 0 0 .45rem; }

.prose { max-width: 72ch; }
.prose h2 { margin-top: 2.2rem; }
.prose h2:first-child { margin-top: 0; }
.prose h3 { margin-top: 1.7rem; }
.prose ul, .prose ol { color: var(--stone); }
.prose p, .prose li { color: var(--stone); }
.prose strong { color: var(--ink); }

.sr-only {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .001ms !important; }
}
