/* ==========================================================================
   Base — design tokens, reset, typography, shared helpers
   ========================================================================== */

:root {
  /* colour */
  --bg: #F4F1EC;
  --ink: #12100E;
  --accent: #FF5A1F;
  --white: #fff;

  --ink-05: rgba(18, 16, 14, .05);
  --ink-06: rgba(18, 16, 14, .06);
  --ink-08: rgba(18, 16, 14, .08);
  --ink-10: rgba(18, 16, 14, .1);
  --ink-12: rgba(18, 16, 14, .12);
  --ink-14: rgba(18, 16, 14, .14);
  --ink-16: rgba(18, 16, 14, .16);
  --ink-20: rgba(18, 16, 14, .2);
  --ink-40: rgba(18, 16, 14, .4);
  --ink-45: rgba(18, 16, 14, .45);
  --ink-50: rgba(18, 16, 14, .5);
  --ink-55: rgba(18, 16, 14, .55);
  --ink-60: rgba(18, 16, 14, .6);
  --ink-72: rgba(18, 16, 14, .72);

  --on-dark-14: rgba(255, 255, 255, .14);
  --on-dark-45: rgba(255, 255, 255, .45);
  --on-dark-60: rgba(255, 255, 255, .6);

  /* type */
  --font: 'Satoshi', system-ui, -apple-system, 'Segoe UI', sans-serif;

  /* layout */
  --pad-x: clamp(18px, 4vw, 56px);
  --max: 1560px;
  /* the space between the last line of one section and the first line of the next is 90px (a little less on
     phones); each section owns half of it above and half below, so a tinted or dark band edge sits halfway */
  --sec-gap: clamp(56px, 9vw, 90px);
  --sec-pad: calc(var(--sec-gap) / 2);
  /* every section heading is 50px (a little less on phones) */
  --h2: clamp(34px, 8vw, 50px);

  /* motion */
  --ease-out: cubic-bezier(.16, 1, .3, 1);
  --ease-soft: cubic-bezier(.2, .7, .2, 1);
  --ease-sec: cubic-bezier(.22, 1, .36, 1);
}

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

html {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  scroll-behavior: smooth;
  scroll-padding-top: 72px;
}

html, body { height: auto; min-height: 100%; }

body {
  margin: 0;
  background: var(--bg);
  color: var(--ink);
  font-family: var(--font);
  font-size: 16px;
  line-height: 1.4;
  /* clip, not hidden: `hidden` would make body its own scroll container */
  overflow-x: clip;
  overflow-y: visible;
}

h1, h2, h3, h4, p, ul, ol, dl, dd, figure, blockquote { margin: 0; }
ul, ol { padding: 0; list-style: none; }

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

a { color: inherit; text-decoration: none; }
a:hover { color: var(--accent); }

button, input, textarea, select { font: inherit; color: inherit; }
button { cursor: pointer; }

address { font-style: normal; }
fieldset { margin: 0; padding: 0; border: 0; min-width: 0; }

::selection { background: var(--accent); color: var(--white); }

:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
}

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

.skip-link {
  position: fixed;
  top: 12px;
  left: 12px;
  z-index: 400;
  padding: 12px 18px;
  background: var(--ink);
  color: var(--white);
  font-size: 13px;
  font-weight: 700;
  transform: translateY(-200%);
  transition: transform .3s var(--ease-out);
}
.skip-link:focus { transform: none; color: var(--white); }

/* ---- shared type ---- */
.accent { color: var(--accent); }

.eyebrow {
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .1em;
  text-transform: uppercase;
  white-space: nowrap;
}
.eyebrow--accent { color: var(--accent); }
.eyebrow--muted { color: var(--ink-40); }
.eyebrow--faint { color: rgba(18, 16, 14, .35); letter-spacing: .18em; }

/* Section headings share one size */
.h2 {
  font-size: var(--h2);
  font-weight: 500;
  letter-spacing: -.05em;
  line-height: 1.02;
}

/* section header: "label ———— label" */
.sec-head {
  display: flex;
  align-items: center;
  gap: 16px;
  margin-bottom: clamp(60px, 5vh, 64px);
}

/* a long label on the right wraps instead of pushing the page wider (320px phones) */
.sec-head .eyebrow { min-width: 0; }
.sec-head .eyebrow--faint { text-align: right; white-space: normal; }

/* hairline that fills the space between a label and the edge */
.rule { flex: 1; height: 1px; background: var(--ink-14); }

.dot {
  display: inline-block;
  width: 6px;
  height: 6px;
  background: var(--accent);
}

/* ---- keyframes ---- */
@keyframes dz-marquee { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@keyframes dz-blink { 0%, 100% { opacity: 1; } 50% { opacity: .2; } }
@keyframes dz-float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-14px); } }
@keyframes dz-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }

.dot--blink { animation: dz-blink 2.2s ease-in-out infinite; }

/* ---- scroll reveals (driven by js/reveal.js) ----
   Hidden only when JS is present, so the page never depends on it to be readable. */
.js .sec {
  opacity: 0;
  transform: translateY(40px) scale(.94);
  transform-origin: center bottom;
  transition: opacity 1.15s var(--ease-sec), transform 1.35s var(--ease-sec);
  will-change: opacity, transform;
}
.js .sec.is-in { opacity: 1; transform: none; will-change: auto; }

.js [data-reveal] {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity .9s var(--ease-soft), transform .9s var(--ease-soft);
}
.js [data-reveal].is-in { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .12s !important;
    scroll-behavior: auto !important;
  }
  .js .sec, .js [data-reveal] { opacity: 1; transform: none; }
}
