/* Hallmark · genre: editorial · macrostructure: Split Studio (H2 split-diptych hero) · theme: custom, brand-locked (MERIT)
 * tone: editorial, plain-spoken · anchor hue: signal orange #F0501A · paper: cream #F3F1EC
 * display: Instrument Serif (roman only) · body: Geist · labels: Geist Mono
 * enrichment: Tier A built demo (HTML/CSS + vanilla JS) · nav: N9 edge-aligned minimal · footer: Ft1 mast-headed
 * Colours and fonts come from tokens.css only.
 * Hallmark · pre-emit critique: P4 H5 E4 S5 R4 V4
 */

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

html {
  -webkit-text-size-adjust: 100%;
  overflow-x: clip;
  scroll-padding-top: 5.5rem;
}

@media (prefers-reduced-motion: no-preference) {
  html { scroll-behavior: smooth; }
}

body {
  margin: 0;
  position: relative;
  overflow-x: clip;
  background: var(--color-paper);
  color: var(--color-text);
  font-family: var(--font-body);
  font-size: var(--text-base);
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

h1, h2, h3, p, ol, ul, figure { margin: 0; }
ol, ul { padding: 0; list-style: none; }
svg { display: block; flex-shrink: 0; }

h1, h2, h3 { font-style: normal; text-wrap: balance; }
p { text-wrap: pretty; }

:focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 3px;
}
.on-ink :focus-visible { outline-color: var(--color-focus-on-ink); }

.container {
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

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

.scroll-sentinel {
  position: absolute;
  top: 0;
  left: 0;
  width: 1px;
  height: 8px;
  pointer-events: none;
}

.skip-link {
  position: absolute;
  top: var(--space-sm);
  left: var(--space-sm);
  z-index: 20;
  padding: var(--space-xs) var(--space-md);
  border-radius: var(--radius-pill);
  background: var(--color-ink);
  color: var(--color-cream);
  font-weight: 500;
  text-decoration: none;
  transform: translateY(-200%);
}
.skip-link:focus-visible {
  transform: none;
  outline-color: var(--color-orange);
}

/* ---------- Type ---------- */
.label {
  font-family: var(--font-mono);
  font-size: var(--text-label);
  font-weight: 500;
  line-height: 1.4;
  letter-spacing: var(--tracking-label);
  text-transform: uppercase;
  color: var(--color-muted);
}
.on-ink .label { color: var(--color-muted-ink); }

.display,
.h2 {
  font-family: var(--font-display);
  font-weight: 400;
  line-height: var(--leading-display);
  letter-spacing: var(--tracking-display);
  overflow-wrap: anywhere;
  min-width: 0;
}
.display { font-size: var(--text-display); }
.h2 { font-size: var(--text-h2); }

.line { display: block; }

/* Orange is for large display text only (fails contrast at body sizes on cream). */
.accent { color: var(--color-accent); }
.dot { color: var(--color-accent); }

.lede {
  font-size: var(--text-lede);
  line-height: 1.5;
  color: var(--color-muted);
  max-width: 36ch;
}
.on-ink .lede { color: var(--color-muted-ink); }

/* ---------- Buttons and links ---------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.65em;
  min-height: 3.375rem;
  padding: 0 1.75rem;
  border: 0;
  border-radius: var(--radius-pill);
  font-family: var(--font-body);
  font-size: 1rem;
  font-weight: 600;
  line-height: 1;
  letter-spacing: -0.005em;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  transition:
    background-color var(--dur-short) var(--ease-out),
    color var(--dur-short) var(--ease-out),
    transform var(--dur-micro) var(--ease-out);
}
.btn:active { transform: translateY(1px) scale(0.985); }

.btn-arrow { transition: transform var(--dur-short) var(--ease-out); }
.btn:hover .btn-arrow { transform: translateX(3px); }

.btn-orange { background: var(--color-orange); color: var(--color-ink); }
.btn-orange:hover { background: var(--color-ink); color: var(--color-cream); }
.on-ink .btn-orange:hover { background: var(--color-cream); color: var(--color-ink); }

.btn-ink { background: var(--color-ink); color: var(--color-cream); }
.btn-ink:hover { background: var(--color-orange); color: var(--color-ink); }

.btn-sm {
  min-height: 2.75rem;
  padding: 0 1.25rem;
  font-size: 0.9375rem;
}

.text-link {
  display: inline-flex;
  align-items: center;
  min-height: 2.75rem;
  color: var(--color-ink);
  font-weight: 500;
  white-space: nowrap;
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 0.35em;
  text-decoration-color: var(--color-muted);
  transition: text-decoration-color var(--dur-short) var(--ease-out);
}
.text-link:hover { text-decoration-color: var(--color-orange); }

/* ---------- Header ---------- */
.site-header {
  position: sticky;
  top: 0;
  z-index: 10;
  background: var(--color-paper);
  border-bottom: 1px solid transparent;
  transition: border-color var(--dur-short) var(--ease-out);
}
.site-header.is-scrolled { border-bottom-color: var(--color-hairline); }

.header-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-md);
  height: 4.5rem;
}

.wordmark {
  font-family: var(--font-display);
  font-size: 1.875rem;
  font-weight: 400;
  line-height: 1;
  letter-spacing: var(--tracking-wordmark);
  color: var(--color-ink);
  text-decoration: none;
}

/* ---------- Hero: "Night shift" ----------
 * Ported from hero-lab tab 2. Everything is scoped under .ns so nothing else on the page changes.
 * The page goes dark at 9:14 pm while enquiries are booked, then back to light. script.js drives
 * --night (0..1) on .ns and .site-header and toggles .is-dark at the halfway point.
 */
.ns {
  --ns-note: #1B1A18;           /* night-card surface; no brand token for it yet */
  --night: 0;
  position: relative;
  overflow: hidden;
  background: var(--color-paper);
  color: var(--color-ink);
}
.ns-bg {
  position: absolute;
  inset: 0;
  z-index: 0;
  background: var(--color-ink);
  opacity: var(--night);
  pointer-events: none;
  will-change: opacity;
}
.ns-scene {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  min-height: 46rem;
}
.ns-body {
  position: relative;
  flex: 1;
  padding-block: 1.5rem 3.5rem;
}
.ns-copy { position: relative; z-index: 2; max-width: 600px; }

.ns-eyebrow { margin: 0 0 20px; }
.ns-clock {
  /* Big serif numerals. Measured: Instrument Serif's glyph ink (ascent ~0.75em, descent ~0.01em) sits
     fully inside this 0.95 line box, and no ancestor clips it except the hero edge. */
  font-family: var(--font-display);
  font-size: clamp(84px, 14vw, 168px);
  line-height: 0.95;
  letter-spacing: -0.015em;
  margin: 0 0 18px;
  white-space: nowrap;
  overflow: visible;
}
.ns-clock small { font-size: 0.38em; letter-spacing: 0.02em; margin-left: 0.12em; }
.ns h1 {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: clamp(46px, 6.6vw, 100px);
  line-height: 1;
  letter-spacing: -0.012em;
  margin: 0;
  overflow-wrap: normal;
}
.ns h1 .accent { color: var(--color-orange); }
.ns-lede { font-size: clamp(17px, 1.5vw, 19px); line-height: 1.55; max-width: 30em; margin: 26px 0 0; color: var(--color-muted); }
.ns-ctas { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 26px; margin-top: 32px; }
.ns .text-link { color: inherit; text-decoration-color: currentColor; text-underline-offset: 5px; font-size: 15px; font-weight: 500; }
.ns-dawn { margin: 22px 0 0; font-size: 16px; max-width: 26em; color: var(--color-muted); opacity: 0; }

/* dark phase: text and controls flip to cream */
.ns.is-dark .ns-clock,
.ns.is-dark h1,
.ns.is-dark .text-link { color: var(--color-cream); }
.ns.is-dark .ns-eyebrow,
.ns.is-dark .ns-lede,
.ns.is-dark .ns-dawn { color: var(--color-muted-ink); }
.ns.is-dark .btn-orange:hover { background: var(--color-cream); color: var(--color-ink); }
.ns.is-dark :focus-visible { outline-color: var(--color-focus-on-ink); }

/* header: follows the hero into the night while it sits over it */
.site-header { background: color-mix(in srgb, var(--color-ink) calc(var(--night, 0) * 100%), var(--color-paper)); }
.site-header.is-night .wordmark { color: var(--color-cream); }
.site-header.is-night .btn-ink { background: var(--color-cream); color: var(--color-ink); }
.site-header.is-night .btn-ink:hover { background: var(--color-orange); color: var(--color-ink); }
.site-header.is-night :focus-visible { outline-color: var(--color-focus-on-ink); }
.site-header.is-night.is-scrolled { border-bottom-color: var(--color-hairline-ink); }

.ns-notes { position: absolute; inset: 0; pointer-events: none; }
.ns-note {
  position: absolute;
  width: 300px;
  background: var(--ns-note);
  border: 1px solid var(--color-hairline-ink);
  border-radius: var(--radius-card);
  padding: 14px 16px;
  opacity: 0;
  transform: translateY(14px) scale(0.94);
  transition: opacity 0.3s, transform 0.55s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.ns-note.in { opacity: 1; transform: none; }
.ns-note.out { opacity: 0; }
.ns-note:nth-child(1) { left: 56%; top: 10%; }
.ns-note:nth-child(2) { left: 68%; top: 25%; }
.ns-note:nth-child(3) { left: 54%; top: 41%; }
.ns-note:nth-child(4) { left: 67%; top: 57%; }
.ns-note:nth-child(5) { left: 55%; top: 73%; }
.ns-nh { margin-bottom: 8px; }
.ns-nh .tr { font: 400 11px/1 var(--font-mono); letter-spacing: 0.12em; text-transform: uppercase; color: var(--color-muted-ink); }
.ns-nst { position: relative; height: 20px; margin-top: 10px; }
.ns-nst > * { position: absolute; left: 0; top: 0; }
.ns-dots { display: flex; gap: 4px; height: 20px; align-items: center; transition: opacity 0.12s; }
.ns-dots b { width: 6px; height: 6px; border-radius: 50%; background: var(--color-muted-ink); animation: ns-dot 1s ease-in-out infinite; }
.ns-dots b:nth-child(2) { animation-delay: 0.15s; }
.ns-dots b:nth-child(3) { animation-delay: 0.3s; }
.ns-nok {
  display: flex; align-items: center; gap: 7px; height: 20px;
  font-size: 13px; font-weight: 500; color: var(--color-cream); white-space: nowrap;
  opacity: 0; transform: translateY(4px);
  transition: opacity 0.2s 0.12s, transform 0.45s 0.12s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.ns-note.done .ns-dots { opacity: 0; }
.ns-note.done .ns-nok { opacity: 1; transform: none; }
.ns-note p { margin: 0; font-size: 15px; line-height: 1.35; color: var(--color-cream); }
@keyframes ns-dot { 0%, 100% { transform: translateY(0); opacity: 0.5; } 50% { transform: translateY(-4px); opacity: 1; } }
.ns[data-run="0"] *, .ns[data-run="0"] *::after { animation-play-state: paused !important; }

@media (max-width: 68.75rem) { .ns-lede { max-width: 23em; } }
@media (max-width: 62.5rem) {
  .ns-scene { min-height: 0; }
  .ns-body { padding-bottom: 28px; }
  .ns-notes { position: relative; inset: auto; display: flex; flex-direction: column; gap: 8px; margin-top: 30px; min-height: 380px; }
  .ns-note { position: relative; width: auto; left: auto !important; top: auto !important; padding: 12px 14px; }
  .ns-note p { font-size: 14px; }
}
@media (max-width: 30rem) {
  .ns .btn-orange { padding: 0 24px; }
}
@media (prefers-reduced-motion: reduce) {
  .ns *, .ns *::after { animation: none !important; transition: none !important; }
}

/* ---------- Section rhythm ---------- */
.section-head {
  display: grid;
  grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
  gap: var(--space-xl) var(--space-3xl);
  align-items: end;
  margin-bottom: clamp(2.5rem, 5vw, 4.5rem);
}
.section-head .lede { padding-bottom: 0.4rem; }

/* ---------- The four leaks ---------- */
.leaks {
  padding-block: clamp(5rem, 10vw, 9rem) clamp(5.5rem, 11vw, 10rem);
  border-top: var(--rule);
}

.leak-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--space-sm);
}

.leak-card {
  display: flex;
  flex-direction: column;
  min-height: 21rem;
  padding: var(--space-lg) var(--space-lg) var(--space-xl);
  border-radius: var(--radius-card);
  background: var(--color-chip);
}
.leak-num { color: var(--color-muted); }
.leak-title {
  margin-top: auto;
  padding-top: var(--space-3xl);
  font-family: var(--font-display);
  font-size: clamp(2rem, 1.6rem + 1vw, 2.625rem);
  font-weight: 400;
  line-height: 0.98;
  letter-spacing: -0.015em;
}
.leak-card p {
  margin-top: var(--space-sm);
  color: var(--color-muted);
  font-size: 1rem;
  line-height: 1.5;
  max-width: 26ch;
}

/* ---------- What we build (ink) ---------- */
.build {
  padding-block: clamp(5rem, 10vw, 9.5rem);
  background: var(--color-ink);
  color: var(--color-cream);
}
.build .h2 { margin-bottom: clamp(2.5rem, 6vw, 5rem); }

.build-list { border-top: var(--rule-ink); }
.build-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 6fr) minmax(0, 4fr);
  gap: var(--space-md) var(--space-xl);
  align-items: baseline;
  padding-block: clamp(1.75rem, 3.5vw, 3rem);
  border-bottom: var(--rule-ink);
}
.build-title {
  font-family: var(--font-display);
  font-size: clamp(2.125rem, 1.2rem + 2.8vw, 4rem);
  font-weight: 400;
  line-height: 0.98;
  letter-spacing: -0.015em;
}
.build-row p {
  color: var(--color-muted-ink);
  font-size: var(--text-lede);
  line-height: 1.5;
  max-width: 30ch;
}

/* ---------- How the free audit works ---------- */
.steps { padding-block: clamp(5rem, 10vw, 9rem) clamp(4rem, 8vw, 7rem); }
.steps .h2 { margin-bottom: clamp(2.5rem, 6vw, 5rem); }

.step-list {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--space-2xl) var(--space-xl);
}
.step {
  padding-top: var(--space-lg);
  border-top: 1px solid var(--color-ink);
}
.step-num {
  display: block;
  margin-bottom: var(--space-2xl);
  font-family: var(--font-display);
  font-size: clamp(3.5rem, 2.6rem + 2.6vw, 5.5rem);
  line-height: 0.85;
  letter-spacing: -0.02em;
}
.step-text {
  font-family: var(--font-display);
  font-size: var(--text-xl);
  line-height: 1.12;
  letter-spacing: -0.01em;
  max-width: 22ch;
}

/* ---------- Audit form ---------- */
.audit { padding-block: 0 clamp(4.5rem, 9vw, 8rem); }

.audit-card {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.25fr);
  gap: var(--space-2xl) clamp(2.5rem, 6vw, 6rem);
  padding: clamp(1.75rem, 5vw, 4.5rem);
  border-radius: var(--radius-card);
  background: var(--color-ink);
  color: var(--color-cream);
}
.audit-intro {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
}
.audit-intro .h2 { font-size: clamp(2.75rem, 1.8rem + 3.4vw, 4.75rem); }
.audit-intro .lede { margin-top: var(--space-lg); }
.nowrap { white-space: nowrap; }
.audit-mark {
  width: 3.5rem;
  height: 3.5rem;
  margin-top: auto;
  padding-top: var(--space-2xl);
  box-sizing: content-box;
  color: var(--color-cream);
}

.form-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-lg) var(--space-md);
}
.field { min-width: 0; }
.field-full { grid-column: 1 / -1; }

.field label {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.25rem 0.6rem;
  margin-bottom: var(--space-xs);
  font-size: 0.9375rem;
  font-weight: 500;
  line-height: 1.35;
  color: var(--color-cream);
}
.optional {
  font-family: var(--font-mono);
  font-size: 0.6875rem;
  font-weight: 400;
  letter-spacing: var(--tracking-label);
  text-transform: uppercase;
  color: var(--color-muted-ink);
}

.field input,
.field textarea {
  display: block;
  width: 100%;
  min-height: 3.25rem;
  padding: 0.8rem 1rem;
  border: 1px solid var(--color-muted);
  border-radius: var(--radius-field);
  background: var(--color-hairline-ink);
  color: var(--color-cream);
  font-family: var(--font-body);
  font-size: 1rem;
  line-height: 1.4;
  transition: border-color var(--dur-short) var(--ease-out);
}
.field textarea {
  min-height: 7.5rem;
  resize: vertical;
}
.field input:hover,
.field textarea:hover { border-color: var(--color-muted-ink); }
.field input:focus-visible,
.field textarea:focus-visible {
  border-color: var(--color-cream);
  outline: 2px solid var(--color-orange);
  outline-offset: 2px;
}
.field input:user-invalid,
.field textarea:user-invalid { border-color: var(--color-orange); }

.btn-submit {
  margin-top: var(--space-xl);
  width: 100%;
}

/* ---------- Footer ---------- */
.site-footer {
  padding-block: clamp(3rem, 6vw, 5rem) clamp(2rem, 4vw, 3rem);
  border-top: var(--rule);
}
.footer-inner {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: var(--space-2xl);
  align-items: end;
}

.lockup {
  display: inline-flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-sm);
}
.lockup-mark {
  font-family: var(--font-display);
  font-size: clamp(4rem, 2.4rem + 6vw, 8.5rem);
  font-weight: 400;
  line-height: 0.8;
  letter-spacing: var(--tracking-wordmark);
}
.lockup-agency {
  padding-left: 0.2em;
  font-family: var(--font-mono);
  font-size: clamp(0.8125rem, 0.65rem + 0.55vw, 1.125rem);
  font-weight: 500;
  letter-spacing: var(--tracking-agency);
  text-transform: uppercase;
}

.footer-meta {
  justify-self: end;
  display: grid;
  gap: 0.3rem;
  text-align: right;
  color: var(--color-muted);
  font-size: 0.9375rem;
  line-height: 1.5;
}
.footer-tagline {
  color: var(--color-ink);
  font-weight: 500;
}

/* ---------- Responsive ---------- */
@media (max-width: 68rem) {
  .leak-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .leak-card { min-height: 17rem; }
}

@media (max-width: 60rem) {
  .section-head { grid-template-columns: minmax(0, 1fr); }
  .audit-card { grid-template-columns: minmax(0, 1fr); }
  .audit-mark { display: none; }
  .build-row { grid-template-columns: minmax(0, 1fr) minmax(0, 8fr); }
  .build-row p { grid-column: 2; }
  .step-list { grid-template-columns: minmax(0, 1fr); }
  .step {
    display: grid;
    grid-template-columns: 5.5rem minmax(0, 1fr);
    align-items: start;
  }
  .step-num { margin-bottom: 0; }
  .step-text { max-width: 30ch; padding-top: 0.35rem; }
}

@media (max-width: 40rem) {
  .header-inner { height: 4rem; }
  .wordmark { font-size: 1.625rem; }
  .btn-sm { min-height: 2.5rem; padding: 0 1rem; font-size: 0.875rem; }


  .leak-grid { grid-template-columns: minmax(0, 1fr); }
  .leak-card { min-height: 0; }
  .leak-title { padding-top: var(--space-2xl); }

  .build-row { grid-template-columns: minmax(0, 1fr); gap: var(--space-sm); }
  .build-row p { grid-column: auto; }

  .step { grid-template-columns: 4rem minmax(0, 1fr); }

  .form-grid { grid-template-columns: minmax(0, 1fr); }

  .footer-inner { grid-template-columns: minmax(0, 1fr); }
  .footer-meta { justify-self: start; text-align: left; }
}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 1ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 150ms !important;
    transition-delay: 0ms !important;
  }
}
