/*
 * Escala Digital — Cinematic v2. Shared across the homepage and the four
 * inner pages (Services, About, Pricing, Contact) — see escala_is_cinematic()
 * in functions.php. Every page's markup uses these classes; no cinematic
 * colour/spacing value should be hardcoded in a template — add or reuse a
 * token/class here instead.
 *
 * Sticky positioning note: overflow-x is guarded on real <body> (via the
 * .escala-cinematic class added by escala_body_class()), never on a wrapper
 * div. Setting overflow on a wrapper makes it an internal scroll container,
 * which silently breaks position:sticky on the header and the Services
 * page's sticky columns — this bit the original prototype once already.
 */

/* ---------- Tokens ---------- */
.escala-cinematic {
  --ec-ink: #14120F;
  --ec-ink-deep: #100E0B;
  --ec-ink-film: #0E0C0A;
  --ec-ink-raise: #181510;
  --ec-ink-hover: #191510;
  --ec-ink-hover-alt: #221D16;
  --ec-bone: #F4F1EA;
  --ec-bone-dim: #C4BDB1;
  --ec-bone-dimmer: #CFC9BE;
  --ec-grey: #A39C90;
  --ec-grey-dk: #8C8578;
  /* Raised from the spec's #7C7568, which measures ~4.2:1 on ink at this
     size — short of the 4.5:1 AA needs. See IMPLEMENTATION-NOTES.md. */
  --ec-grey-meta: #8A8375;
  --ec-paper: #F2EDE3;
  --ec-paper-shade: #E2DACB;
  --ec-paper-ink: #16130F;
  --ec-paper-ink-dim: #57513f;
  --ec-paper-meta: #8A8272;
  --ec-lime: #C6F84A;
  --ec-lime-hover: #D6FF6E;
  --ec-clay: #C16E47;
  --ec-clay-text: #D08A63;
  --ec-placeholder: #6E6759;
  --ec-notice-body: #E8DFD4;
  --ec-line-ink: rgba(244, 241, 234, .14);
  --ec-line-ink-strong: rgba(244, 241, 234, .2);
  --ec-line-ink-btn: rgba(244, 241, 234, .28);
  --ec-line-paper: rgba(22, 19, 15, .16);
  --ec-line-paper-strong: rgba(22, 19, 15, .2);
  --ec-font: Archivo, Helvetica, Arial, sans-serif;
  --ec-mono-font: 'JetBrains Mono', monospace;
}

body.escala-cinematic {
  background: var(--ec-ink);
  overflow-x: hidden;
}

/* ---------- Page shell ---------- */
.ec-page {
  background: var(--ec-ink);
  color: var(--ec-bone);
  font-family: var(--ec-font);
}
.ec-page h1, .ec-page h2, .ec-page h3,
.ec-page blockquote, .ec-page p { margin: 0; }
.ec-page a { text-decoration: none; }

.ec-container { max-width: 1360px; margin: 0 auto; }
.ec-container--narrow { max-width: 1140px; }

.ec-mono { font-family: var(--ec-mono-font); }

/* ---------- Section backgrounds ---------- */
.ec-section--ink { background: var(--ec-ink-deep); color: var(--ec-bone); }
.ec-section--paper { background: var(--ec-paper); color: var(--ec-paper-ink); }
.ec-section--lime { background: var(--ec-lime); color: var(--ec-ink); }

/* Section padding scale (matches the design's recurring clamp values) */
.ec-pad-intro { padding: clamp(64px, 8vw, 110px) clamp(24px, 4vw, 64px) clamp(48px, 6vw, 76px); }
.ec-pad-standard { padding: clamp(64px, 8vw, 110px) clamp(24px, 4vw, 64px); }
.ec-pad-cta { padding: clamp(80px, 10vw, 140px) clamp(24px, 4vw, 64px); }
.ec-pad-cta--large { padding: clamp(90px, 12vw, 160px) clamp(24px, 4vw, 64px); }

/* ---------- Eyebrow / mono meta ---------- */
.ec-eyebrow {
  font-family: var(--ec-mono-font);
  font-size: 11px;
  letter-spacing: .22em;
  color: var(--ec-grey);
  margin-bottom: 24px;
}
.ec-eyebrow--paper { color: var(--ec-paper-meta); }

/* ---------- Heading scale ---------- */
.ec-h1-hero {
  font-size: clamp(44px, 6vw, 102px);
  line-height: .94;
  font-weight: 900;
  letter-spacing: -0.045em;
  text-wrap: balance;
}
.ec-h1-intro {
  font-size: clamp(40px, 5.6vw, 88px);
  line-height: .95;
  font-weight: 900;
  letter-spacing: -0.045em;
  text-wrap: balance;
}
.ec-h1-pricing {
  font-size: clamp(40px, 5.6vw, 72px);
  line-height: .98;
  font-weight: 900;
  letter-spacing: -0.045em;
}
.ec-h1-contact {
  font-size: clamp(38px, 5.2vw, 80px);
  line-height: .95;
  font-weight: 900;
  letter-spacing: -0.045em;
  text-wrap: balance;
}

.ec-h2-teaser {
  font-size: clamp(40px, 5.2vw, 78px);
  line-height: .96;
  font-weight: 800;
  letter-spacing: -0.042em;
}
.ec-h2-delivery {
  font-size: clamp(36px, 4.6vw, 68px);
  line-height: .98;
  font-weight: 800;
  letter-spacing: -0.04em;
}
.ec-h2-pricing-title {
  font-size: clamp(32px, 3.6vw, 52px);
  line-height: 1;
  font-weight: 800;
  letter-spacing: -0.035em;
}
.ec-h2-cta {
  font-size: clamp(44px, 7vw, 108px);
  line-height: .9;
  font-weight: 900;
  letter-spacing: -0.05em;
}
.ec-h2-cta--compact {
  font-size: clamp(38px, 6vw, 92px);
  line-height: .92;
  font-weight: 900;
  letter-spacing: -0.05em;
}
.ec-h2-half {
  font-size: clamp(34px, 4.2vw, 60px);
  line-height: .98;
  font-weight: 800;
  letter-spacing: -0.04em;
}
.ec-h2-mission {
  font-size: clamp(34px, 4.4vw, 64px);
  line-height: .98;
  font-weight: 800;
  letter-spacing: -0.04em;
}

.ec-h3-teaser { font-size: clamp(26px, 2.6vw, 36px); font-weight: 800; letter-spacing: -0.028em; }
.ec-h3-stage { font-size: 21px; font-weight: 700; letter-spacing: -0.02em; }
.ec-h3-list-item { font-size: 21px; font-weight: 700; letter-spacing: -0.02em; margin-bottom: 8px; }

.ec-blockquote {
  font-size: clamp(24px, 2.4vw, 34px);
  line-height: 1.18;
  font-weight: 700;
  letter-spacing: -0.032em;
  text-wrap: pretty;
}

/* ---------- Badges & chips ---------- */
.ec-badge-lime {
  display: inline-block;
  font-family: var(--ec-mono-font);
  font-size: 11px;
  letter-spacing: .16em;
  color: var(--ec-paper-ink);
  background: var(--ec-lime);
  padding: 9px 13px;
}
.ec-pill-badge {
  font-family: var(--ec-mono-font);
  font-size: 11px;
  letter-spacing: .22em;
}

.ec-chip {
  font-family: var(--ec-mono-font);
  font-size: 11px;
  letter-spacing: .12em;
  padding: 7px 11px;
  display: inline-block;
}
.ec-chip--paper { border: 1px solid var(--ec-line-paper-strong); color: var(--ec-paper-ink-dim); }
.ec-chip--ink { border: 1px solid var(--ec-line-ink-strong); color: var(--ec-grey); }
.ec-chip-row { display: flex; gap: 10px; flex-wrap: wrap; }

/* ---------- Hairline list rows (Services page) ---------- */
.ec-list-row {
  padding: 24px 0;
  display: flex;
  gap: 20px;
  align-items: baseline;
  flex-wrap: wrap;
}
.ec-list-row--paper { border-top: 1px solid var(--ec-line-paper); }
.ec-list-row--ink { border-top: 1px solid var(--ec-line-ink); }
.ec-list-row--last.ec-list-row--paper { border-bottom: 1px solid var(--ec-line-paper); }
.ec-list-row--last.ec-list-row--ink { border-bottom: 1px solid var(--ec-line-ink); }
.ec-list-row__index {
  font-family: var(--ec-mono-font);
  font-size: 11px;
  letter-spacing: .14em;
  flex: 0 0 26px;
}
.ec-list-row__body { flex: 1 1 260px; min-width: 0; }
.ec-list-row__desc { max-width: 52ch; font-size: 15px; line-height: 1.7; }
.ec-list-row__desc--tight { margin-bottom: 14px; }

/* ---------- CTA band (shared template part) ---------- */
.ec-cta {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 48px;
  flex-wrap: wrap;
}
.ec-cta__eyebrow {
  font-family: var(--ec-mono-font);
  font-size: 11px;
  letter-spacing: .22em;
  color: rgba(20, 18, 15, .6);
}
.ec-cta__copy { display: flex; flex-direction: column; gap: 20px; }
.ec-btn-cta {
  display: flex;
  align-items: center;
  gap: 18px;
  background: var(--ec-ink);
  color: var(--ec-lime);
  padding: 22px 32px;
  font-size: 19px;
  font-weight: 700;
  transition: background .15s ease;
}
.ec-btn-cta:hover { background: var(--ec-ink-hover-alt); }

/* ---------- Buttons & links ---------- */
.ec-navlink { color: var(--ec-bone-dimmer); transition: color .15s ease; }
.ec-navlink:hover { color: var(--ec-lime); }
.ec-navlink.is-current { color: var(--ec-lime); }
.ec-navlink.is-current:hover { color: #ffffff; }

.ec-wordmark { color: var(--ec-bone); transition: color .15s ease; display: flex; align-items: baseline; gap: 12px; }
.ec-wordmark:hover { color: var(--ec-lime); }
.ec-wordmark__mark { font-weight: 900; letter-spacing: -0.02em; font-size: 19px; }
.ec-wordmark__sub { font-family: var(--ec-mono-font); font-size: 10px; letter-spacing: .22em; color: var(--ec-grey); }
.ec-wordmark--logo { align-items: center; transition: opacity .15s ease; }
.ec-wordmark--logo:hover { opacity: .82; }
.ec-wordmark--logo img { display: block; height: 75px; width: auto; }

.ec-getquote {
  padding: 12px 20px;
  border: 1px solid var(--ec-line-ink-btn);
  color: var(--ec-bone);
  font-size: 13px;
  font-weight: 600;
  transition: background .15s ease, color .15s ease, border-color .15s ease;
}
.ec-getquote:hover { background: var(--ec-lime); color: var(--ec-ink); border-color: var(--ec-lime); }

.ec-btn-hero {
  display: flex;
  align-items: center;
  gap: 16px;
  background: var(--ec-lime);
  color: var(--ec-ink);
  padding: 19px 26px;
  font-size: 17px;
  font-weight: 700;
  transition: background .15s ease;
}
.ec-btn-hero:hover { background: var(--ec-lime-hover); }

.ec-pricelink {
  font-family: var(--ec-mono-font);
  font-size: 12px;
  letter-spacing: .14em;
  color: var(--ec-bone-dimmer);
  border-bottom: 1px solid rgba(244, 241, 234, .3);
  padding-bottom: 4px;
  transition: color .15s ease, border-color .15s ease;
}
.ec-pricelink:hover { color: var(--ec-lime); border-color: var(--ec-lime); }

.ec-stage { transition: background .3s ease; }
.ec-stage:hover { background: var(--ec-ink-hover); }

.ec-footer-link { color: var(--ec-bone-dimmer); transition: color .15s ease; }
.ec-footer-link:hover { color: var(--ec-lime); }

/* ---------- Header (sticky, inner pages) ---------- */
.ec-header-sticky {
  position: sticky;
  top: 0;
  z-index: 40;
  background: var(--ec-ink-deep);
  border-bottom: 1px solid var(--ec-line-ink);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 32px;
  padding: 18px clamp(24px, 4vw, 64px);
}

/* ---------- Homepage hero header (non-sticky, in-hero) ---------- */
.ec-header-hero {
  position: relative;
  z-index: 20;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 32px;
  padding: 26px clamp(24px, 4vw, 64px);
}
.ec-header-hero .ec-nav { transform: translateX(-40px); }
.ec-header-sticky .ec-nav { transform: translateX(-40px); }

/* ---------- Mobile nav toggle ---------- */
.ec-menu-toggle {
  display: none;
  background: none;
  border: 1px solid var(--ec-line-ink-btn);
  color: var(--ec-bone);
  font-family: var(--ec-mono-font);
  font-size: 12px;
  letter-spacing: .14em;
  padding: 10px 16px;
  cursor: pointer;
  transition: background .15s ease, color .15s ease, border-color .15s ease;
}
.ec-menu-toggle:hover,
.ec-menu-toggle[aria-expanded="true"] { background: var(--ec-lime); color: var(--ec-ink); border-color: var(--ec-lime); }
.ec-navlink--mobile-cta { display: none; }

@media (max-width: 760px) {
  .ec-header-hero .ec-nav,
  .ec-header-sticky .ec-nav {
    display: none;
    transform: none;
    width: 100%;
    flex-direction: column;
    align-items: flex-start;
    gap: 4px;
    position: absolute;
    top: 100%;
    left: 0;
    padding: 8px clamp(24px, 4vw, 64px) 24px;
    background: var(--ec-ink-deep);
    border-bottom: 1px solid var(--ec-line-ink);
  }
  .ec-header-hero .ec-nav.is-open,
  .ec-header-sticky .ec-nav.is-open { display: flex; }
  .ec-navlink { width: 100%; padding: 10px 0; }
  .ec-navlink--mobile-cta { display: block; margin-top: 6px; color: var(--ec-lime); }
  .ec-getquote { display: none; }
  .ec-menu-toggle { display: block; }
}

/* ---------- Hero (homepage only) ---------- */
.ec-hero {
  position: relative;
  min-height: min(100vh, 900px);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  background: var(--ec-ink-deep);
}
.ec-hero-media { position: absolute; inset: 0; z-index: 0; }
.ec-hero-scrim {
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background:
    linear-gradient(180deg, rgba(16, 14, 11, .88) 0%, rgba(16, 14, 11, .34) 30%, rgba(16, 14, 11, .58) 60%, rgba(16, 14, 11, .97) 100%),
    linear-gradient(90deg, rgba(16, 14, 11, .82) 0%, rgba(16, 14, 11, .12) 58%, rgba(16, 14, 11, .45) 100%);
}
.ec-hero-content {
  position: relative;
  z-index: 5;
  flex: 1;
  display: flex;
  align-items: center;
  padding: 0 clamp(24px, 4vw, 64px);
}
.ec-hero-row {
  width: 100%;
  max-width: 1360px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 56px;
  flex-wrap: wrap;
}
.ec-hero-status {
  display: flex;
  align-items: center;
  gap: 9px;
  margin-bottom: 26px;
  font-family: var(--ec-mono-font);
  font-size: 10px;
  letter-spacing: .2em;
  color: var(--ec-grey);
}
.ec-hero-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--ec-lime); }
.ec-hero-dot--offline { background: var(--ec-grey); }
.ec-hero-meta {
  text-align: right;
  padding-right: 22px;
  border-right: 1px solid rgba(244, 241, 234, .16);
  font-family: var(--ec-mono-font);
  font-size: 11px;
  letter-spacing: .18em;
  color: var(--ec-grey);
  line-height: 2.1;
}

/* ---------- Ticker ---------- */
.ec-ticker { background: var(--ec-lime); color: var(--ec-ink); overflow: hidden; padding: 13px 0; white-space: nowrap; }
.ec-marquee-track {
  display: inline-flex;
  gap: 48px;
  padding-right: 48px;
  font-family: var(--ec-mono-font);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: .18em;
  animation: ec-marquee 34s linear infinite;
}

/* ---------- Delivery film strip ---------- */
.ec-film {
  position: relative;
  width: 100%;
  height: clamp(420px, 64vh, 720px);
  overflow: hidden;
  background: var(--ec-ink-film);
}
.ec-film-video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.ec-film-scrim {
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(180deg, rgba(16, 14, 11, .5) 0%, rgba(16, 14, 11, .05) 30%, rgba(16, 14, 11, .9) 100%);
}
.ec-film-badge {
  position: absolute;
  left: clamp(20px, 4vw, 56px);
  top: clamp(20px, 3vw, 36px);
  font-family: var(--ec-mono-font);
  font-size: 10px;
  letter-spacing: .2em;
  color: rgba(244, 241, 234, .7);
  display: flex;
  align-items: center;
  gap: 9px;
}
.ec-film-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--ec-lime); }

/* ---------- Pricing cards ---------- */
.ec-price-card { padding: 30px 26px; display: flex; flex-direction: column; gap: 13px; }
.ec-price-card--dark { background: var(--ec-ink); }
.ec-price-card--raised { background: var(--ec-ink-raise); box-shadow: inset 3px 0 0 var(--ec-lime); }
.ec-price-card__name { font-size: 17px; font-weight: 700; }
.ec-price-card__price { font-size: 38px; font-weight: 800; letter-spacing: -0.04em; }
.ec-price-card__unit { margin-left: 6px; font-size: 14px; font-weight: 500; color: var(--ec-grey-dk); }
.ec-price-card__unit--wide { letter-spacing: .05em; }
.ec-price-card__desc { font-size: 15px; line-height: 1.65; }
.ec-price-card__most-picked { font-family: var(--ec-mono-font); font-size: 10px; letter-spacing: .14em; color: var(--ec-lime); }
.ec-price-card__from { margin-right: 6px; font-family: var(--ec-mono-font); font-size: 14px; font-weight: 500; letter-spacing: .1em; color: var(--ec-grey-dk); }

/* ---------- Pricing extras (Accessibility advisory, Contract & interim) ---------- */
.ec-price-extra {
  border-top: 1px solid var(--ec-line-ink);
  padding: 20px 0;
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
}
.ec-price-extra--last { border-bottom: 1px solid var(--ec-line-ink); }
.ec-price-extra__name { font-size: 16px; font-weight: 700; }
.ec-price-extra__price { font-family: var(--ec-mono-font); font-size: 13px; letter-spacing: .04em; color: var(--ec-grey-dk); white-space: nowrap; }
.ec-price-extra__desc { flex-basis: 100%; font-size: 14px; line-height: 1.6; color: var(--ec-grey); }

/* Reserved space for photo/video slots — fills shown until real assets
   land. Paper context (#E2DACB) vs ink context (#0E0C0A). */
.ec-slot-paper {
  aspect-ratio: 16 / 9;
  overflow: hidden;
  background: var(--ec-paper-shade);
}
.ec-slot-paper--portrait { aspect-ratio: 4 / 5; }
.ec-slot-paper img,
.ec-slot-ink img,
.ec-hero-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* ---------- Contact form ---------- */
.ec-field {
  width: 100%;
  box-sizing: border-box;
  background: var(--ec-ink);
  border: 1px solid var(--ec-line-ink-strong);
  color: var(--ec-bone);
  font-family: var(--ec-font);
  font-size: 16px; /* stops iOS zooming the viewport on focus */
  padding: 15px 16px;
  outline: none;
  transition: border-color .15s ease;
}
.ec-field:focus { border-color: var(--ec-lime); }
.ec-field::placeholder { color: var(--ec-placeholder); }

.ec-field-label {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.ec-field-label__text {
  font-family: var(--ec-mono-font);
  font-size: 10px;
  letter-spacing: .2em;
  color: var(--ec-grey);
}
.ec-field-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr)); gap: 26px; }

.ec-chip-input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.ec-chip-label {
  display: inline-block;
  font-family: var(--ec-mono-font);
  font-size: 11px;
  letter-spacing: .12em;
  color: var(--ec-bone-dimmer);
  border: 1px solid var(--ec-line-ink-strong);
  padding: 11px 14px;
  cursor: pointer;
  transition: border-color .15s ease, color .15s ease;
}
.ec-chip-label:hover,
.ec-chip-input:checked + .ec-chip-label {
  border-color: var(--ec-lime);
  color: var(--ec-lime);
}
.ec-chip-input:focus-visible + .ec-chip-label {
  outline: 2px solid var(--ec-lime);
  outline-offset: 2px;
}

.ec-btn-submit {
  display: flex;
  align-items: center;
  gap: 16px;
  background: var(--ec-lime);
  color: var(--ec-ink);
  border: none;
  font-family: var(--ec-font);
  padding: 19px 26px;
  font-size: 17px;
  font-weight: 700;
  cursor: pointer;
  transition: background .15s ease;
}
.ec-btn-submit:hover { background: var(--ec-lime-hover); }

.ec-honeypot { position: absolute; left: -9999px; opacity: 0; height: 0; overflow: hidden; }

.ec-aside { display: flex; flex-direction: column; border-top: 1px solid var(--ec-line-ink); }
.ec-aside__block { padding: 24px 0; display: flex; flex-direction: column; gap: 9px; }
.ec-aside__block--divided { border-bottom: 1px solid var(--ec-line-ink); }
.ec-aside__label { font-family: var(--ec-mono-font); font-size: 10px; letter-spacing: .2em; color: var(--ec-grey-meta); }
.ec-aside__value { font-size: 17px; color: var(--ec-bone-dim); }
.ec-aside__email { font-size: 19px; font-weight: 600; color: var(--ec-bone); }

/* Notices */
.ec-notice { padding: 18px 20px; display: flex; flex-direction: column; gap: 7px; }
.ec-notice--success {
  border: 1px solid rgba(198, 248, 74, .45);
  border-left: 3px solid var(--ec-lime);
  background: rgba(198, 248, 74, .07);
}
.ec-notice--success .ec-notice__eyebrow { color: var(--ec-lime); }
.ec-notice--error {
  border: 1px solid rgba(193, 110, 71, .5);
  border-left: 3px solid var(--ec-clay);
  background: rgba(193, 110, 71, .09);
}
.ec-notice--error .ec-notice__eyebrow { color: var(--ec-clay-text); }
.ec-notice--error .ec-notice__body { color: var(--ec-notice-body); }
.ec-notice--error a { color: var(--ec-clay-text); border-bottom: 1px solid rgba(208, 138, 99, .5); }
.ec-notice__eyebrow { font-family: var(--ec-mono-font); font-size: 10px; letter-spacing: .2em; }
.ec-notice__body { margin: 0; font-size: 15px; line-height: 1.65; }
.ec-field-error {
  font-family: var(--ec-mono-font);
  font-size: 10px;
  letter-spacing: .16em;
  color: var(--ec-clay-text);
}

/* ---------- Footer ---------- */
.ec-footer-full { background: var(--ec-ink-deep); padding: clamp(52px, 6vw, 76px) clamp(24px, 4vw, 64px) 34px; }
.ec-footer-full--contact { background: var(--ec-ink); border-top: 1px solid var(--ec-line-ink); }
.ec-fs-15 { font-size: 15px; }
.ec-footer-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 190px), 1fr));
  gap: 40px;
  padding-bottom: 36px;
  border-bottom: 1px solid var(--ec-line-ink);
}
.ec-footer-col { display: flex; flex-direction: column; gap: 12px; }
.ec-footer-col__heading {
  font-family: var(--ec-mono-font);
  font-size: 10px;
  letter-spacing: .2em;
  color: var(--ec-grey-meta);
  margin-bottom: 4px;
}
.ec-footer-brand { display: flex; flex-direction: column; gap: 14px; }
.ec-footer-brand__desc { max-width: 26ch; font-size: 15px; line-height: 1.65; color: var(--ec-grey-dk); }
.ec-footer-bottom {
  padding-top: 24px;
  display: flex;
  justify-content: space-between;
  gap: 24px;
  flex-wrap: wrap;
  font-family: var(--ec-mono-font);
  font-size: 11px;
  letter-spacing: .16em;
  color: var(--ec-grey-meta);
}

/* ---------- Animations ---------- */
@keyframes ec-marquee {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}
@keyframes ec-pulse {
  0%, 100% { opacity: .3; }
  50% { opacity: 1; }
}
.ec-pulse { animation: ec-pulse 2.4s ease-in-out infinite; }

@media (prefers-reduced-motion: reduce) {
  .ec-pulse { animation: none; }
  .ec-marquee-track { animation: none; }
}

/* =================================================================
 * Layout & spacing utilities
 * A small hand-rolled scale (not every value — only ones the design
 * actually reuses) so section-specific layout doesn't need inline
 * style. Component classes above stay the primary tool; reach for
 * these to compose a one-off row/column/measure without a raw style
 * attribute anywhere in the templates.
 * ================================================================= */
.ec-flex { display: flex; flex-wrap: wrap; }
.ec-col { display: flex; flex-direction: column; }
.ec-grid { display: grid; }
.ec-items-center { align-items: center; }
.ec-items-baseline { align-items: baseline; }
.ec-items-end { align-items: flex-end; }
.ec-items-start { align-items: start; }
.ec-justify-between { justify-content: space-between; }
.ec-no-wrap { flex-wrap: nowrap; }

.ec-gap-1 { gap: 1px; }
.ec-gap-9 { gap: 9px; }
.ec-gap-10 { gap: 10px; }
.ec-gap-12 { gap: 12px; }
.ec-gap-13 { gap: 13px; }
.ec-gap-14 { gap: 14px; }
.ec-gap-16 { gap: 16px; }
.ec-gap-18 { gap: 18px; }
.ec-gap-20 { gap: 20px; }
.ec-gap-22 { gap: 22px; }
.ec-gap-26 { gap: 26px; }
.ec-gap-28 { gap: 28px; }
.ec-gap-34 { gap: 34px; }
.ec-gap-40 { gap: 40px; }
.ec-gap-48 { gap: 48px; }
.ec-gap-56 { gap: 56px; }

.ec-mb-14 { margin-bottom: 14px; }
.ec-mb-16 { margin-bottom: 16px; }
.ec-mb-20 { margin-bottom: 20px; }
.ec-mb-22 { margin-bottom: 22px; }
.ec-mb-26 { margin-bottom: 26px; }
.ec-mb-34 { margin-bottom: 34px; }
.ec-mt-22 { margin-top: 22px; }
.ec-pt-6 { padding-top: 6px; }

.ec-mw-16 { max-width: 16ch; }
.ec-mw-18 { max-width: 18ch; }
.ec-mw-19 { max-width: 19ch; }
.ec-mw-20 { max-width: 20ch; }
.ec-mw-22 { max-width: 22ch; }
.ec-mw-26 { max-width: 26ch; }
.ec-mw-30 { max-width: 30ch; }
.ec-mw-34 { max-width: 34ch; }
.ec-mw-36 { max-width: 36ch; }
.ec-mw-38 { max-width: 38ch; }
.ec-mw-40 { max-width: 40ch; }
.ec-mw-44 { max-width: 44ch; }
.ec-mw-46 { max-width: 46ch; }
.ec-mw-52 { max-width: 52ch; }

.ec-cursor-pointer { cursor: pointer; }
.ec-min-w-0 { min-width: 0; }
.ec-inline-block { display: inline-block; }
.ec-btn-arrow { font-size: 16px; }
.ec-btn-arrow--lg { font-size: 18px; }

/* Body copy scale — pair a size class with a colour class */
.ec-body { margin: 0; font-size: 17px; line-height: 1.7; }
.ec-body-sm { margin: 0; font-size: 15px; line-height: 1.7; }
.ec-body-lg { margin: 0; font-size: 18px; line-height: 1.65; }
.ec-c-grey { color: var(--ec-grey); }
.ec-c-grey-dk { color: var(--ec-grey-dk); }
.ec-c-grey-meta { color: var(--ec-grey-meta); }
.ec-c-bone { color: var(--ec-bone); }
.ec-c-bone-dim { color: var(--ec-bone-dim); }
.ec-c-paper-dim { color: var(--ec-paper-ink-dim); }
.ec-c-paper-meta { color: var(--ec-paper-meta); }
.ec-c-lime { color: var(--ec-lime); }
.ec-c-placeholder { color: var(--ec-placeholder); }

/* Mono meta line — the "12px/.14em index" and "11px/.16em label" pairs
   that sit beside a heading, index a list, or lead a stage column */
.ec-meta-12 { font-family: var(--ec-mono-font); font-size: 12px; letter-spacing: .14em; }
.ec-meta-11 { font-family: var(--ec-mono-font); font-size: 11px; letter-spacing: .16em; }
.ec-meta-11-wide { font-family: var(--ec-mono-font); font-size: 11px; letter-spacing: .2em; }
.ec-meta-11-tight { font-family: var(--ec-mono-font); font-size: 11px; letter-spacing: .14em; }
.ec-meta-10-wide { font-family: var(--ec-mono-font); font-size: 10px; letter-spacing: .18em; }

/* ---------- Named section grids ---------- */
.ec-grid-teaser { grid-template-columns: repeat(auto-fit, minmax(min(100%, 420px), 1fr)); gap: clamp(48px, 6vw, 90px); }
.ec-grid-half { grid-template-columns: repeat(auto-fit, minmax(min(100%, 380px), 1fr)); gap: clamp(40px, 5vw, 80px); }
.ec-grid-quote { grid-template-columns: repeat(auto-fit, minmax(min(100%, 340px), 1fr)); gap: clamp(40px, 5vw, 80px); }
.ec-grid-story { grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr)); gap: clamp(32px, 4vw, 64px); }
.ec-grid-mission { grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr)); border-top: 1px solid var(--ec-line-ink); }
.ec-grid-stages { grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr)); border-top: 1px solid var(--ec-line-ink); }
.ec-grid-contact { grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr)); gap: clamp(40px, 5vw, 84px); }
.ec-grid-price { grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); }

/* ---------- Homepage-specific bits ---------- */
.ec-hero-left { flex: 1 1 520px; max-width: 760px; min-width: 0; }
.ec-two-halves__sticky { position: sticky; top: 60px; }
/* Must stop sticking once the grid collapses to one column, same reason
   as .ec-sticky-col above, or it stays pinned and later content scrolls
   up behind it. Placed after the base rule on purpose — same specificity,
   so source order decides, and this needs to win. */
@media (max-width: 860px) {
  .ec-two-halves__sticky { position: static; }
}
.ec-sticky-col { position: sticky; top: 100px; }
/* Must stop sticking once the grid collapses to one column, same reason
   as .ec-two-halves__sticky above — and same fix: placed after the base
   rule on purpose so source order lets this win. */
@media (max-width: 860px) {
  .ec-sticky-col { position: static; }
}
.ec-price-grid {
  gap: 1px;
  background: var(--ec-line-ink);
  border: 1px solid var(--ec-line-ink);
}
.ec-rule {
  height: 1px;
  display: inline-block;
}
.ec-rule--paper { background: var(--ec-paper-ink); }
.ec-rule--paper-meta { background: var(--ec-paper-meta); }

/* ---------- About mission column (non-interactive, no hover fill) ---------- */
.ec-mission-col { border-right: 1px solid var(--ec-line-ink); display: flex; flex-direction: column; gap: 12px; }
.ec-mission-col:last-child { border-right: none; }
.ec-mission-col--first { padding: clamp(28px, 2.6vw, 40px) clamp(22px, 2vw, 32px) clamp(28px, 2.6vw, 40px) 0; }
.ec-mission-col--mid { padding: clamp(28px, 2.6vw, 40px) clamp(22px, 2vw, 32px); }
.ec-mission-col--last { padding: clamp(28px, 2.6vw, 40px) 0 clamp(28px, 2.6vw, 40px) clamp(22px, 2vw, 32px); }

/* ---------- About page ---------- */
.ec-pad-about-intro { padding: clamp(64px, 8vw, 110px) clamp(24px, 4vw, 64px) clamp(52px, 6vw, 80px); }
.ec-pad-quote { padding: clamp(64px, 8vw, 120px) clamp(24px, 4vw, 64px); }
.ec-pad-story { padding: 0 clamp(24px, 4vw, 64px) clamp(64px, 8vw, 120px); }
.ec-story-container { border-top: 1px solid var(--ec-line-paper); padding-top: clamp(40px, 5vw, 64px); }
.ec-mission-head { margin-bottom: clamp(36px, 4vw, 56px); }
.ec-bg-paper-ink { background: var(--ec-paper-ink); }
.ec-bg-paper-meta { background: var(--ec-paper-meta); }
.ec-w-44 { width: 44px; }
.ec-w-22 { width: 22px; }
.ec-h-1 { height: 1px; }

/* ---------- Remaining one-off component classes ---------- */
.ec-nav { font-size: 14px; font-weight: 500; }
.ec-nowrap { white-space: nowrap; }
.ec-relative { position: relative; }
.ec-hero-sub { margin: 0 0 34px; max-width: 44ch; font-size: clamp(17px, 1.3vw, 20px); line-height: 1.6; }
.ec-mb-30 { margin-bottom: 30px; }
.ec-half-item { border-top: 1px solid var(--ec-line-paper); padding: 34px 0 40px; display: flex; flex-direction: column; gap: 20px; }
.ec-half-item--last { padding-bottom: 0; }
.ec-body--tight-lh { line-height: 1.65; }
.ec-lh-18 { line-height: 1.8; }
.ec-em-lime { font-style: normal; color: var(--ec-lime); }
.ec-pad-teaser { padding: clamp(80px, 11vw, 150px) clamp(24px, 4vw, 64px); }
.ec-pad-delivery-intro { padding: clamp(70px, 9vw, 120px) clamp(24px, 4vw, 64px) clamp(44px, 5vw, 64px); }
.ec-pad-stage { padding: clamp(28px, 2.6vw, 40px) clamp(22px, 2vw, 32px); }
.ec-pricing-head { margin-bottom: clamp(32px, 4vw, 52px); }
.ec-pad-pricing-intro { padding: clamp(64px, 8vw, 110px) clamp(24px, 4vw, 64px) clamp(40px, 5vw, 56px); }
.ec-pad-pricing-section { padding: 0 clamp(24px, 4vw, 64px) clamp(72px, 9vw, 120px); }
.ec-pad-contact-intro { padding: clamp(56px, 7vw, 96px) clamp(24px, 4vw, 64px) clamp(72px, 9vw, 120px); }
.ec-h1-contact-mb { margin-bottom: clamp(44px, 5vw, 72px); }
.ec-submit-row { display: flex; align-items: center; gap: 22px; flex-wrap: wrap; padding-top: 6px; }
