/* -------------------------------------------------------------
   Base — reset, typography, layout helpers
   ------------------------------------------------------------- */

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

html {
  color-scheme: light;
  scroll-behavior: smooth;
  scroll-padding-top: calc(var(--nav-h) + 16px);
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
}

body {
  margin: 0;
  font-family: var(--font-body);
  font-size: var(--size-body);
  line-height: 1.6;
  color: var(--ink);
  background: var(--cream);
  -webkit-font-smoothing: antialiased;
  font-optical-sizing: auto;
  overflow-x: clip;
}

/* Subtle paper-noise texture on the whole page — gives the cream some life */
body::before {
  content: "";
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 1;
  opacity: 0.35;
  mix-blend-mode: multiply;
  background-image:
    radial-gradient(rgba(60, 50, 20, 0.08) 1px, transparent 1px),
    radial-gradient(rgba(60, 50, 20, 0.06) 1px, transparent 1px);
  background-size: 3px 3px, 7px 7px;
  background-position: 0 0, 1px 1px;
}

body.nav-open { overflow: hidden; }

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

h1, h2, h3, h4, h5 {
  font-family: var(--font-display);
  font-weight: 800;
  line-height: 0.95;
  letter-spacing: -0.03em;
  margin: 0;
  font-optical-sizing: auto;
}

p { margin: 0 0 var(--s-sm); }

a {
  color: inherit;
  text-decoration-thickness: 2px;
  text-underline-offset: 4px;
  text-decoration-color: currentColor;
}

button { font: inherit; cursor: pointer; }

::selection {
  background: var(--lime);
  color: var(--ink);
}

/* Skip link */
.skip {
  position: fixed; top: 0.5rem; left: 0.5rem;
  z-index: 9999;
  padding: 0.6rem 0.9rem;
  background: var(--ink); color: var(--cream);
  font-weight: 700; font-size: 0.85rem;
  border-radius: var(--r-sm);
  transform: translateY(-200%);
  transition: transform 0.2s var(--ease-out);
  text-decoration: none;
}
.skip:focus { transform: translateY(0); }

/* Keyboard focus */
a:focus-visible,
button:focus-visible,
select:focus-visible,
input:focus-visible,
textarea:focus-visible {
  outline: 3px solid var(--ink);
  outline-offset: 3px;
  border-radius: 4px;
}

/* Layout primitives */
.wrap {
  width: min(100% - var(--s-md) * 2, var(--max));
  margin-inline: auto;
  position: relative;
  z-index: 2; /* above the paper-noise overlay */
}

.wrap--narrow {
  width: min(100% - var(--s-md) * 2, var(--max-narrow));
  margin-inline: auto;
  position: relative;
  z-index: 2;
}

section {
  position: relative;
  padding-block: var(--s-xl);
}

.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;
}

/* Reveal animation */
[data-reveal] {
  opacity: 0;
  transform: translateY(32px) rotate(-0.5deg);
  transition:
    opacity 0.8s var(--ease-out),
    transform 0.9s var(--ease-spring);
  transition-delay: calc(var(--i, 0) * 80ms);
}
[data-reveal].in {
  opacity: 1;
  transform: translateY(0) rotate(0);
}

@media (prefers-reduced-motion: reduce) {
  [data-reveal] { opacity: 1; transform: none; transition: none; }
}

/* Word-stagger reveal used on hero */
.word-stagger .word {
  display: inline-block;
  opacity: 0;
  transform: translateY(0.4em) rotate(4deg);
  transition:
    opacity 0.55s var(--ease-out),
    transform 0.7s var(--ease-spring);
}
.word-stagger.in .word {
  opacity: 1;
  transform: translateY(0) rotate(0);
}
.word-stagger .word { transition-delay: calc(var(--wi, 0) * 60ms); }

@media (prefers-reduced-motion: reduce) {
  .word-stagger .word { opacity: 1; transform: none; transition: none; }
}

/* Utility helpers */
.italic-serif {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 400;
  letter-spacing: -0.01em;
}

.handwritten {
  font-family: var(--font-hand);
  font-weight: 500;
}
