@import url("https://fonts.googleapis.com/css2?family=Source+Serif+4:opsz,wght@8..60,200..900&family=Inter:wght@300;400;500;600&display=swap");

/* ─── Reset ─────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; }
html, body, h1, h2, h3, h4, h5, h6, p, ul, ol, figure, blockquote {
  margin: 0; padding: 0;
}
ul, ol { list-style: none; }
img, svg, video { display: block; max-width: 100%; height: auto; }
button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; padding: 0; }
a { color: inherit; text-decoration: none; }

/* ─── Base ──────────────────────────────────────────────── */
html {
  scroll-behavior: smooth;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}
body {
  background: var(--ivory);
  color: var(--ink-soft);
  font-family: var(--font-body);
  font-size: var(--fz-16);
  line-height: var(--lh-base);
  font-weight: 400;
  min-height: 100vh;
  overflow-x: hidden;
  position: relative;
}

/* ─── Background atmosphere ────────────────────────────────
   Two fixed layers behind everything:
   1. Static film grain — a 220px SVG noise tile, multiplied at low
      opacity over the whole viewport. Adds tactile paper feel.
   2. Slow breathing gradient — a single huge radial of warmer ivory,
      origin per-page, scaling and drifting over 28s. Imperceptible
      motion, makes the ivory feel "alive."
   Body class `no-texture` (or off-by-default toggle) hides both. #}*/
body::before,
body::after {
  content: "";
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 0;
}
body::before {
  /* Film grain. Multiply blend keeps the ivory hue stable. */
  background-image: url("/assets/grain.svg");
  background-size: 220px 220px;
  opacity: var(--grain-opacity);
  mix-blend-mode: multiply;
}
body::after {
  /* Breathing warm spotlight. Single radial, big, off-screen origin. */
  background:
    radial-gradient(
      var(--glow-radius) var(--glow-radius)
      at var(--glow-x) var(--glow-y),
      color-mix(in oklab, var(--glow-tint) calc(var(--glow-strength) * 100%), transparent),
      transparent 72%
    );
  animation: breathe var(--breathe-duration) ease-in-out infinite;
  will-change: transform, opacity;
  transform-origin: var(--glow-x) var(--glow-y);
}

/* Make sure normal page content paints above both layers. */
.nav, main, .footer, .skip { position: relative; z-index: 1; }

/* Per-page glow origin variation — same atmospheric system, different
   page personality. Set via body[data-page="..."] in base.njk. */
body[data-page="home"]      { --glow-x: 82%; --glow-y:  8%; }
body[data-page="biography"] { --glow-x: 18%; --glow-y: 14%; }
body[data-page="press"]     { --glow-x: 50%; --glow-y: 96%; }
body[data-page="contact"]   { --glow-x: 88%; --glow-y: 88%; }

@keyframes breathe {
  0%, 100% {
    transform: translate3d(0, 0, 0) scale(1);
    opacity: 0.7;
  }
  50% {
    transform: translate3d(-1.5vw, 0.8vw, 0) scale(1.08);
    opacity: 1;
  }
}

/* Toggle off — hides both atmosphere layers.
   `html[data-texture="off"]` is set synchronously by an inline
   script in <head>, so there's no flash on initial paint. */
html[data-texture="off"] body::before,
html[data-texture="off"] body::after { display: none; }

/* Respect reduced-motion: keep the grain (it's static), freeze the breath. */
@media (prefers-reduced-motion: reduce) {
  body::after { animation: none; }
}

/* ─── Atmosphere toggle ─────────────────────────────────────
   Tiny floating chip, bottom-right. Click to flip on/off,
   persisted via localStorage. Remove by deleting the .bg-toggle
   element from base.njk when you don't need to A/B anymore. */
.bg-toggle {
  position: fixed;
  bottom: 20px;
  right: 20px;
  z-index: var(--z-modal);
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 14px;
  background: var(--ink);
  color: var(--ivory);
  font-family: var(--font-body);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  border: 0;
  border-radius: 999px;
  cursor: pointer;
  opacity: 0.55;
  transition: opacity var(--dur-fast) var(--ease-brand),
              transform var(--dur-fast) var(--ease-brand);
}
.bg-toggle:hover { opacity: 1; transform: translateY(-1px); }
.bg-toggle__dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--accent);
  transition: background var(--dur-base) var(--ease-brand);
}
html[data-texture="off"] .bg-toggle__dot { background: var(--ink-mute); }
@media (max-width: 720px) {
  .bg-toggle { bottom: 14px; right: 14px; padding: 7px 12px; font-size: 10px; }
}

/* ─── Typography ────────────────────────────────────────── */
.serif        { font-family: var(--font-display); }
.caps         { text-transform: uppercase; letter-spacing: var(--tracking-caps); font-size: var(--fz-12); font-weight: 500; color: var(--ink-mute); }
.eyebrow      { font-family: var(--font-body); text-transform: uppercase; letter-spacing: var(--tracking-caps); font-size: var(--fz-12); color: var(--ink-mute); font-weight: 500; }
.lead         { font-family: var(--font-display); font-weight: 300; font-size: var(--fz-24); line-height: var(--lh-snug); color: var(--ink); letter-spacing: var(--tracking-snug); }
.prose        { color: var(--ink-soft); font-size: var(--fz-18); line-height: var(--lh-loose); max-width: var(--max-prose); }
.prose p + p  { margin-top: var(--sp-4); }

h1, h2, h3, h4 {
  font-family: var(--font-display);
  font-weight: 350;
  color: var(--ink);
  letter-spacing: var(--tracking-snug);
  line-height: var(--lh-tight);
}
.h-display    { font-size: var(--fz-display); font-weight: 300; line-height: 0.96; letter-spacing: -0.025em; }
.h-section    { font-size: var(--fz-56); font-weight: 350; line-height: var(--lh-snug); }
.h-block      { font-size: var(--fz-32); font-weight: 400; }
.h-card       { font-size: var(--fz-24); font-weight: 400; line-height: var(--lh-snug); }

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

/* ─── Links ─────────────────────────────────────────────── */
a.link {
  position: relative;
  display: inline-block;
  color: var(--ink);
  transition: color var(--dur-fast) var(--ease-brand);
}
a.link::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: -4px;
  height: 1.5px;
  background: currentColor;
  transform: scaleX(0);
  transform-origin: right;
  transition: transform var(--dur-base) var(--ease-brand),
              background var(--dur-base) var(--ease-brand);
}
a.link:hover { color: var(--accent); }
a.link:hover::after {
  transform: scaleX(1);
  transform-origin: left;
  background: var(--accent);
}
a.link[aria-current="page"]::after {
  transform: scaleX(1);
  transform-origin: left;
  background: var(--ink);
  height: 1.5px;
}
a.link[aria-current="page"]:hover::after {
  background: var(--accent);
}

/* ─── Layout ────────────────────────────────────────────── */
.shell {
  width: 100%;
  max-width: var(--max-page);
  margin-inline: auto;
  padding-inline: var(--gutter);
}
.section {
  padding-block: clamp(var(--sp-8), 9vw, var(--sp-11));
}
.section--tight { padding-block: clamp(var(--sp-7), 6vw, var(--sp-9)); }
.section + .section { border-top: var(--rule-w) solid var(--rule-soft); }

.rule { height: 1px; background: var(--rule); border: 0; }
.rule--soft { background: var(--rule-soft); }

/* ─── Nav ───────────────────────────────────────────────── */
.nav {
  position: sticky;
  top: 0;
  z-index: var(--z-nav);
  background: color-mix(in oklab, var(--ivory) 92%, transparent);
  backdrop-filter: saturate(140%) blur(8px);
  -webkit-backdrop-filter: saturate(140%) blur(8px);
  border-bottom: 1px solid transparent;
  transition: border-color var(--dur-base) var(--ease-brand),
              background var(--dur-base) var(--ease-brand);
}
.nav.is-scrolled { border-bottom-color: var(--rule-soft); }
.nav__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-block: clamp(16px, 1.6vw, 22px);
}
.nav__brand {
  font-family: var(--font-display);
  font-size: var(--fz-20);
  font-weight: 400;
  letter-spacing: var(--tracking-snug);
  color: var(--ink);
  transition: letter-spacing var(--dur-base) var(--ease-brand),
              color var(--dur-fast) var(--ease-brand);
}
.nav__brand:hover { letter-spacing: 0.005em; color: var(--accent); }
.nav__links {
  display: flex;
  gap: clamp(20px, 3vw, 40px);
  align-items: center;
}
.nav__links a {
  font-size: var(--fz-14);
  letter-spacing: 0.02em;
  color: var(--ink);
  padding-block: 6px;
  font-weight: 400;
  transition: letter-spacing var(--dur-base) var(--ease-brand),
              font-weight var(--dur-fast) var(--ease-brand);
}
.nav__links a:hover { letter-spacing: 0.06em; }
.nav__links a[aria-current="page"] { font-weight: 500; }
.nav__toggle {
  display: none;
  width: 40px; height: 40px;
  position: relative;
}
.nav__toggle span {
  position: absolute;
  left: 8px; right: 8px;
  height: 1px;
  background: var(--ink);
  transition: transform var(--dur-base) var(--ease-brand),
              opacity var(--dur-fast) var(--ease-brand);
}
.nav__toggle span:nth-child(1) { top: 14px; }
.nav__toggle span:nth-child(2) { top: 20px; }
.nav__toggle span:nth-child(3) { top: 26px; }
.nav.is-open .nav__toggle span:nth-child(1) { transform: translateY(6px) rotate(45deg); }
.nav.is-open .nav__toggle span:nth-child(2) { opacity: 0; }
.nav.is-open .nav__toggle span:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }

@media (max-width: 720px) {
  .nav__toggle { display: block; }
  .nav__links {
    position: fixed;
    inset: 0;
    background: var(--ivory);
    background-color: var(--ivory); /* explicit fallback for rendering safety */
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    isolation: isolate;             /* own stacking context, not nav's */
    z-index: 90;                    /* above body texture, main, bg-toggle */
    flex-direction: column;
    align-items: flex-start;
    justify-content: center;
    padding: 96px var(--gutter) var(--sp-7);
    gap: var(--sp-5);
    transform: translateY(-8px);
    opacity: 0;
    pointer-events: none;
    visibility: hidden;             /* fully removes it on close */
    transition: transform var(--dur-base) var(--ease-brand),
                opacity var(--dur-base) var(--ease-brand),
                visibility 0s linear var(--dur-base);
  }
  .nav.is-open .nav__links {
    transform: translateY(0);
    opacity: 1;
    pointer-events: auto;
    visibility: visible;
    transition: transform var(--dur-base) var(--ease-brand),
                opacity var(--dur-base) var(--ease-brand),
                visibility 0s linear 0s;
  }
  .nav__links a {
    font-family: var(--font-display);
    font-size: var(--fz-40);
    font-weight: 350;
    color: var(--ink);
    width: 100%;
    padding-block: 8px;
  }
  .nav__links a[aria-current="page"] { color: var(--accent); }
  /* Bump nav z-index above modal tier when drawer is open so the X
     stays clickable above floating chips. */
  .nav.is-open { z-index: 100; }
}

/* Hide the texture toggle while the mobile drawer is open. */
.nav-open .bg-toggle { opacity: 0; pointer-events: none; }

/* ─── Hero ──────────────────────────────────────────────── */
.hero {
  padding-top: clamp(48px, 8vw, 96px);
  padding-bottom: clamp(48px, 6vw, 80px);
}
.hero__eyebrow {
  margin-bottom: var(--sp-5);
}
.hero__name {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--fz-display);
  line-height: 0.94;
  letter-spacing: -0.03em;
  color: var(--ink);
  margin-bottom: clamp(24px, 3vw, 40px);
}
.hero__lead {
  max-width: 60ch;
  font-family: var(--font-display);
  font-weight: 300;
  font-size: clamp(18px, 1.6vw, 24px);
  line-height: 1.45;
  color: var(--ink);
  letter-spacing: -0.005em;
  margin-bottom: var(--sp-7);
}
.hero__meta {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-4);
  font-size: var(--fz-12);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--ink-mute);
}
.hero__meta::before {
  content: "";
  width: 32px;
  height: 1px;
  background: var(--rule);
}

/* ─── Editorial bio sections ────────────────────────────── */
.bio {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--sp-9);
}
@media (min-width: 980px) {
  .bio { grid-template-columns: 1fr 1.3fr; gap: clamp(48px, 7vw, 128px); }
  .bio__aside { position: sticky; top: clamp(80px, 9vw, 140px); align-self: start; }
}
.bio__portrait {
  position: relative;
  aspect-ratio: 4 / 5;
  background: var(--ivory-deep);
  overflow: hidden;
}
.bio__portrait img {
  width: 100%; height: 100%; object-fit: cover;
  transition: transform var(--dur-glide) var(--ease-brand),
              filter var(--dur-glide) var(--ease-brand);
  filter: saturate(0.92);
}
.bio__portrait:hover img { transform: scale(1.02); filter: saturate(1.05); }
.bio__caption {
  margin-top: var(--sp-3);
  font-size: var(--fz-12);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--ink-mute);
}

.bio__sections {
  display: grid;
  gap: clamp(40px, 5vw, 72px);
}
.bio__block {
  display: grid;
  gap: var(--sp-3);
}
.bio__block-num {
  font-family: var(--font-display);
  font-size: var(--fz-18);
  font-weight: 400;
  letter-spacing: var(--tracking-snug);
  color: var(--ink-mute);
  font-feature-settings: "lnum" 1, "tnum" 1;
  margin-bottom: 4px;
  transition: color var(--dur-base) var(--ease-brand);
}
.bio__block:hover .bio__block-num { color: var(--accent); }
.bio__block h3 {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: var(--fz-32);
  letter-spacing: var(--tracking-snug);
  line-height: var(--lh-snug);
  color: var(--ink);
}
.bio__block p {
  font-size: var(--fz-18);
  line-height: var(--lh-loose);
  color: var(--ink-soft);
  max-width: 60ch;
}

/* ─── Logo grids ────────────────────────────────────────── */
.logo-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1px;
  background: var(--rule-soft);
  border: 1px solid var(--rule-soft);
}
@media (min-width: 720px) { .logo-grid { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 1100px) { .logo-grid { grid-template-columns: repeat(4, 1fr); } }

.logo-tile {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  background: var(--ivory);
  padding: clamp(28px, 3vw, 48px) clamp(20px, 2.4vw, 32px);
  min-height: 220px;
  transition: background var(--dur-base) var(--ease-brand),
              transform var(--dur-base) var(--ease-brand),
              box-shadow var(--dur-base) var(--ease-brand);
  z-index: 1;
  color: inherit;
  text-decoration: none;
}
.logo-tile:hover {
  background: var(--paper);
  transform: translateY(-3px);
  box-shadow: var(--shadow-lift);
  z-index: 2;
}
a.logo-tile { cursor: pointer; }
a.logo-tile:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: -2px;
  z-index: 3;
}

/* External link indicator — top-right corner, shows on hover */
.logo-tile__ext {
  position: absolute;
  top: clamp(14px, 1.4vw, 20px);
  right: clamp(14px, 1.4vw, 20px);
  font-size: var(--fz-14);
  color: var(--ink-mute);
  opacity: 0;
  transform: translate(-3px, 3px);
  transition: opacity var(--dur-base) var(--ease-brand),
              transform var(--dur-base) var(--ease-brand),
              color var(--dur-base) var(--ease-brand);
  pointer-events: none;
}
a.logo-tile:hover .logo-tile__ext {
  opacity: 1;
  transform: translate(0, 0);
  color: var(--accent);
}
a.logo-tile.is-current .logo-tile__ext { color: var(--accent); opacity: 0.55; transform: none; }
a.logo-tile.is-current:hover .logo-tile__ext { opacity: 1; color: var(--accent-hover); }
.logo-tile__mark {
  height: clamp(40px, 4.4vw, 64px);
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: var(--sp-5);
}
.logo-tile__mark img {
  max-height: 100%;
  max-width: 80%;
  width: auto;
  object-fit: contain;
  filter: grayscale(1) contrast(1.1) brightness(0.55);
  opacity: 0.85;
  transition: filter var(--dur-base) var(--ease-brand),
              opacity var(--dur-base) var(--ease-brand),
              transform var(--dur-base) var(--ease-brand);
}
.logo-tile:hover .logo-tile__mark img {
  filter: grayscale(0) contrast(1) brightness(1);
  opacity: 1;
  transform: scale(1.04);
}
.logo-tile__name {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: var(--fz-18);
  color: var(--ink);
  letter-spacing: var(--tracking-snug);
  line-height: var(--lh-snug);
  margin-bottom: 6px;
}
.logo-tile__role {
  font-size: var(--fz-12);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--ink-mute);
  line-height: 1.4;
  transition: letter-spacing var(--dur-base) var(--ease-brand);
}
.logo-tile:hover .logo-tile__role {
  letter-spacing: 0.22em;
  color: var(--ink-soft);
}

/* Current role marker — applied to the tile flagged `current: true`. */
.logo-tile.is-current .logo-tile__role {
  color: var(--accent);
  font-weight: 500;
}
.logo-tile.is-current:hover .logo-tile__role {
  color: var(--accent-hover);
}
.logo-tile__present {
  font-weight: 600;
  letter-spacing: 0.22em;
  white-space: nowrap;
}

/* Executive grid: the current tile (ATH) becomes a featured cell —
   leftmost column, spanning two rows. Other six tiles flow into the
   remaining cells naturally via grid auto-placement. */
.logo-grid--executive .logo-tile.is-current {
  grid-row: 1 / span 2;
  grid-column: 1;
}
.logo-grid--executive .logo-tile.is-current .logo-tile__mark {
  height: clamp(56px, 5.4vw, 88px);
  margin-bottom: clamp(20px, 2.4vw, 36px);
}
.logo-grid--executive .logo-tile.is-current .logo-tile__name {
  font-size: var(--fz-24);
}
.logo-grid--executive .logo-tile.is-current .logo-tile__ext {
  /* Slightly more present on the featured tile. */
  opacity: 0.7;
}

.grid-label {
  display: inline-flex;
  align-items: baseline;
  gap: 10px;
  font-size: var(--fz-12);
  text-transform: uppercase;
  letter-spacing: var(--tracking-caps);
  color: var(--ink-mute);
  margin-bottom: var(--sp-5);
}
.grid-label__num {
  font-family: var(--font-display);
  font-size: var(--fz-18);
  font-weight: 400;
  text-transform: none;
  letter-spacing: var(--tracking-snug);
  color: var(--ink);
  font-feature-settings: "lnum" 1, "tnum" 1;
}
.grid-label__sep {
  color: var(--rule);
  font-weight: 300;
  font-size: var(--fz-18);
  font-family: var(--font-display);
  letter-spacing: 0;
  margin-inline: 2px;
}
.grid-label__text {
  align-self: center;
}
.grid-heading {
  font-family: var(--font-display);
  font-weight: 350;
  font-size: var(--fz-40);
  color: var(--ink);
  letter-spacing: var(--tracking-snug);
  line-height: var(--lh-snug);
  margin-bottom: var(--sp-7);
}

/* ─── Press list ────────────────────────────────────────── */
.press {
  display: grid;
  gap: 0;
  border-top: 1px solid var(--rule);
}
.press__item {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--sp-4);
  padding-block: clamp(28px, 3vw, 44px);
  padding-inline: 0;
  border-bottom: 1px solid var(--rule);
  transition: background var(--dur-base) var(--ease-brand),
              padding-inline var(--dur-base) var(--ease-brand),
              border-color var(--dur-base) var(--ease-brand);
  cursor: pointer;
}
.press__item:hover {
  background: var(--paper);
  padding-inline: clamp(16px, 2vw, 32px);
  border-color: var(--ink);
}

@media (min-width: 720px) {
  .press__item {
    grid-template-columns: 100px 1fr auto;
    align-items: center;
    gap: var(--sp-6);
  }
}

.press__thumb {
  aspect-ratio: 4 / 3;
  width: 100px;
  background: var(--ivory-deep);
  overflow: hidden;
}
@media (max-width: 720px) {
  .press__thumb { width: 100%; aspect-ratio: 16 / 9; }
}
.press__thumb img {
  width: 100%; height: 100%; object-fit: cover;
  filter: saturate(0.85);
  transition: transform var(--dur-base) var(--ease-brand),
              filter var(--dur-base) var(--ease-brand);
}
.press__item:hover .press__thumb img { transform: scale(1.04); filter: saturate(1); }
/* SVG logos in press cards: contain (don't crop), keep brand colors, tight padding. */
.press__thumb img[src$=".svg"] {
  object-fit: contain;
  filter: none;
  padding: 4px;
}

.press__body { min-width: 0; }
.press__title {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: var(--fz-24);
  line-height: var(--lh-snug);
  color: var(--ink);
  letter-spacing: var(--tracking-snug);
  margin-bottom: 6px;
  transition: color var(--dur-base) var(--ease-brand);
}
.press__item:hover .press__title { color: var(--accent); }
.press__blurb {
  font-size: var(--fz-14);
  color: var(--ink-mute);
  line-height: var(--lh-base);
}

.press__cta {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-size: var(--fz-12);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--ink);
  white-space: nowrap;
}
.press__cta .arrow {
  display: inline-block;
  transition: transform var(--dur-base) var(--ease-brand);
}
.press__item:hover .press__cta .arrow { transform: translateX(8px); }

a.press__link { display: contents; color: inherit; }
a.press__link:focus-visible { outline: 2px solid var(--accent); outline-offset: 4px; }

/* ─── Contact form ──────────────────────────────────────── */
.form__honeypots {
  position: absolute !important;
  left: -9999px !important;
  width: 1px;
  height: 1px;
  overflow: hidden;
  pointer-events: none;
  opacity: 0;
}

.form {
  display: grid;
  gap: var(--sp-6);
  max-width: 640px;
}
.form__row {
  display: grid;
  gap: var(--sp-6);
  grid-template-columns: 1fr;
}
@media (min-width: 600px) { .form__row { grid-template-columns: 1fr 1fr; } }

.field { display: grid; gap: 8px; position: relative; }
.field label {
  font-size: var(--fz-12);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--ink-mute);
}
.field input,
.field textarea {
  font: inherit;
  color: var(--ink);
  background: transparent;
  border: 0;
  border-bottom: 1px solid var(--rule);
  padding: 8px 0 12px;
  font-size: var(--fz-18);
  border-radius: 0;
  outline: none;
  transition: border-color var(--dur-base) var(--ease-brand);
  font-family: var(--font-body);
}
.field textarea { resize: vertical; min-height: 140px; }
.field::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 1px;
  background: var(--ink);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform var(--dur-base) var(--ease-brand);
}
.field:focus-within::after { transform: scaleX(1); }
.field:focus-within label { color: var(--ink); }

.btn {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  padding: 16px 28px;
  background: var(--ink);
  color: var(--ivory);
  font-size: var(--fz-12);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  font-weight: 500;
  border: 1px solid var(--ink);
  cursor: pointer;
  transition: background var(--dur-base) var(--ease-brand),
              color var(--dur-base) var(--ease-brand),
              transform var(--dur-fast) var(--ease-brand);
  align-self: flex-start;
}
.btn:hover { background: var(--accent); border-color: var(--accent); }
.btn:active { transform: translateY(1px); }
.btn .arrow { transition: transform var(--dur-base) var(--ease-brand); }
.btn:hover .arrow { transform: translateX(6px); }

/* ─── "Continue" links on home ──────────────────────────── */
.continue {
  display: grid;
  gap: 0;
  border-top: 1px solid var(--rule-soft);
}
.continue li { border-bottom: 1px solid var(--rule-soft); }
.continue__link {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--sp-4);
  padding: clamp(20px, 2.5vw, 32px) 0;
  font-family: var(--font-display);
  font-size: clamp(28px, 3.6vw, 48px);
  font-weight: 350;
  color: var(--ink);
  letter-spacing: var(--tracking-snug);
  line-height: 1.1;
  transition: padding var(--dur-base) var(--ease-brand),
              color var(--dur-fast) var(--ease-brand);
}
.continue__link:hover {
  color: var(--accent);
  padding-left: clamp(12px, 1.6vw, 24px);
}
.continue__label {
  position: relative;
}
.continue__label::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: -4px;
  height: 1.5px;
  background: currentColor;
  transform: scaleX(0);
  transform-origin: right;
  transition: transform var(--dur-base) var(--ease-brand);
}
.continue__link:hover .continue__label::after {
  transform: scaleX(1);
  transform-origin: left;
}
.continue__arrow {
  display: inline-block;
  font-size: 0.85em;
  color: var(--ink-mute);
  transition: transform var(--dur-base) var(--ease-brand),
              color var(--dur-fast) var(--ease-brand);
}
.continue__link:hover .continue__arrow {
  transform: translateX(12px);
  color: var(--accent);
}

/* ─── Footer ────────────────────────────────────────────── */
.footer {
  border-top: 1px solid var(--rule-soft);
  padding-block: clamp(40px, 4vw, 64px);
  margin-top: var(--sp-9);
}
.footer__inner {
  display: flex;
  flex-direction: column;
  gap: var(--sp-4);
  align-items: flex-start;
  justify-content: space-between;
}
@media (min-width: 720px) {
  .footer__inner { flex-direction: row; align-items: center; }
}
.footer__brand {
  font-family: var(--font-display);
  font-size: var(--fz-18);
  color: var(--ink);
}
.footer__copy {
  font-size: var(--fz-12);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--ink-mute);
}
.footer__social {
  display: flex;
  gap: var(--sp-5);
  align-items: center;
}
.footer__social a {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: var(--fz-12);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  font-weight: 500;
  color: var(--ink);
}
.footer__social-arrow {
  display: inline-block;
  font-size: 0.95em;
  transition: transform var(--dur-base) var(--ease-brand);
}
.footer__social a:hover .footer__social-arrow {
  transform: translate(3px, -3px);
}

/* ─── Placeholder portrait (SVG fallback / decorative use) ─ */
.portrait-placeholder {
  width: 100%; height: 100%;
  display: flex; align-items: center; justify-content: center;
  background: var(--ivory-deep);
  color: var(--ink);
  font-family: var(--font-display);
  font-size: clamp(48px, 8vw, 128px);
  font-weight: 200;
  letter-spacing: -0.03em;
  border: 1px solid var(--rule-soft);
}

/* ─── Reveal-on-scroll ──────────────────────────────────── */
[data-reveal] {
  opacity: 0;
  transform: translateY(28px);
  filter: blur(2px);
  transition: opacity 900ms var(--ease-brand),
              transform 900ms var(--ease-brand),
              filter 900ms var(--ease-brand);
  will-change: opacity, transform, filter;
}
[data-reveal].is-visible {
  opacity: 1;
  transform: translateY(0);
  filter: blur(0);
}
[data-reveal-fast] {
  opacity: 0;
  transform: translateY(12px);
  transition: opacity 500ms var(--ease-brand),
              transform 500ms var(--ease-brand);
}
[data-reveal-fast].is-visible {
  opacity: 1;
  transform: translateY(0);
}

/* ─── View transitions (progressive enhancement) ────────── */
@view-transition { navigation: auto; }
::view-transition-old(root),
::view-transition-new(root) { animation-duration: 250ms; animation-timing-function: var(--ease-brand); }

/* ─── Focus-visible ─────────────────────────────────────── */
:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
  border-radius: 1px;
}

/* ─── Utility: tracked caps small label ─────────────────── */
.label {
  font-size: var(--fz-12);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--ink-mute);
  font-weight: 500;
}

/* ─── Skip link ─────────────────────────────────────────── */
.skip {
  position: absolute;
  left: -9999px;
  top: 0;
  background: var(--ink);
  color: var(--ivory);
  padding: 12px 18px;
  z-index: 200;
}
.skip:focus { left: var(--gutter); top: 12px; }
