@charset "UTF-8";
/* ============================================================================
   KACHINOVA — Design System
   REAL ESTATE TECHNOLOGY COMPANY / Reinventing the Value of Living.

   Structure
   00 Tokens
   01 Reset & base
   02 Continuous background field (one canvas for the whole page)
   03 Typography
   04 Motion primitives
   05 Header / navigation
   06 Hero
   07 Film sections (video)
   08 Statement / editorial blocks
   09 Flow, values, tiles, data
   10 Forms
   11 CTA & footer
   12 Utilities & responsive
   ========================================================================== */

/* ---------------------------------------------------------------- 00 tokens */
/* Two themes share one structure. LIGHT is the default; DARK is the same
   design re-pointed at inverted values via [data-theme="dark"] on <html>.
   Only colour and a handful of scrim/veil values differ — no layout forks. */
:root {
  /* Neutrals, light -> dark. Named by role, not by value, so the dark theme
     re-points the same names instead of duplicating rules. */
  --ink:        #0c0f12;   /* text / the darkest ink            */
  --ink-2:      #14181c;
  --charcoal:   #22272c;
  --graphite:   #3a4148;
  --slate:      #5a626a;
  --steel:      #5c646c;   /* dimmest text tone still ≥4.5:1 on the lightest ground */
  --silver:     #545c64;
  --mist:       #2c3238;
  --ice:        #0c0f12;
  --paper:      #f4f3f0;   /* warm off-white — the page ground   */
  --paper-2:    #e9e7e2;

  /* Accents — used at tiny surface area only */
  --cyan:       #0b6d85;   /* technology / data, legible on paper */
  --cyan-dim:   #084f61;
  --gold:       #7a6532;   /* the "estate" half                  */
  --gold-dim:   #5f4e26;

  /* Semantic */
  --bg:         var(--paper);
  --fg:         var(--ink);
  --fg-mute:    #4e565e;
  --line:       rgba(12, 15, 18, .15);
  --line-soft:  rgba(12, 15, 18, .08);

  /* The inverted band — the theme's "other" ground. On white this is the dark
     interlude; on black it is the paper interlude. Same class either way. */
  --band-rgb:   14, 18, 22;
  --band-fg:    #e7ebee;
  --band-mute:  #a3abb3;
  --band-steel: #8d959d;
  --band-line:  rgba(231, 235, 238, .14);
  --band-soft:  rgba(231, 235, 238, .07);
  --band-cyan:  #6fe0f7;
  --band-gold:  #c4a870;
  --band-tile:  rgba(20, 25, 30, .55);
  --on-accent:  #ffffff;
  --tile-bg:    rgba(255, 255, 255, .55);
  --tile-hover: rgba(255, 255, 255, .92);
  --danger:     #b3261e;
  /* NY art layer re-pointed for paper: pencil on gesso, not light on ink */
  --art-line:   rgba(12, 15, 18, .075);
  --art-line-2: rgba(12, 15, 18, .052);
  --art-f1:     #ecebe6;
  --art-f2:     #f8f7f4;
  --art-f3:     #efeee9;
  --art-zip:    rgba(12, 15, 18, .17);
  --art-gold:   rgba(138, 116, 72, .34);
  --art-trav:   rgba(11, 109, 133, .70);
  --art-trav-g: rgba(138, 116, 72, .60);
  --plan-line-c:  rgba(12, 15, 18, .24);
  --plan-new-c:   #0b6d85;
  --plan-label-c: #4a525a;

  /* Media treatment: on white the plates are veiled with paper, not ink */
  --veil:        244, 243, 240;
  --veil-strong: .80;
  /* vertical ramp (top, upper-mid, lower-mid, bottom) */
  --sc-a: .74; --sc-b: .16; --sc-c: .24; --sc-d: .78;
  /* horizontal ramp (edge, 30%, 60%) — the side the copy sits on */
  --sh-a: .80; --sh-b: .54; --sh-c: .18;
  --shadow-key:  0 1px 20px rgba(244, 243, 240, .72);

  /* Type */
  --f-display:  "Bodoni Moda", "Times New Roman", serif;
  --f-jp:       "Noto Serif JP", "Yu Mincho", "Hiragino Mincho ProN", serif;
  --f-sans:     "Noto Sans JP", -apple-system, "Segoe UI", "Hiragino Kaku Gothic ProN", "Yu Gothic", sans-serif;
  --f-mono:     "IBM Plex Mono", "SFMono-Regular", Consolas, monospace;

  --t-mega:  clamp(2.5rem, 9.6vw, 8.6rem);
  --t-hero:  clamp(2.4rem, 7.2vw, 7rem);
  --t-xxl:   clamp(2.2rem, 6.2vw, 5.2rem);
  --t-jp:    clamp(1.7rem, 5.4vw, 4.4rem);   /* 和文は同サイズでも字面が大きい */
  --t-xl:    clamp(1.8rem, 4.2vw, 3.4rem);
  --t-lg:    clamp(1.35rem, 2.6vw, 2.1rem);
  --t-md:    clamp(1.02rem, 1.25vw, 1.18rem);
  --t-sm:    .875rem;
  --t-xs:    .75rem;

  /* Space */
  --shell:   1440px;
  --gutter:  clamp(1.25rem, 5vw, 5.5rem);
  --band:    clamp(3.4rem, 7.4vh, 6.4rem);  /* vertical section rhythm */

  /* Motion */
  --ease:    cubic-bezier(.22, 1, .36, 1);
  --ease-io: cubic-bezier(.65, 0, .35, 1);
  --dur:     1100ms;
  --dur-s:   680ms;

  --hdr-h:   72px;

  /* A light section's colour fades OUT of its own box. Tying the fade length
     to an equal margin guarantees it only ever covers empty space. */
  --light-fade: clamp(72px, 9vh, 104px);
}

[data-theme="dark"] {
  --ink:        #05070a;
  --ink-2:      #090c10;
  --charcoal:   #0e1216;
  --graphite:   #171c21;
  --slate:      #262d34;
  --steel:      #7e8790;
  --silver:     #8d979f;
  --mist:       #c3cbd1;
  --ice:        #dfe7ec;
  --paper:      #f2f1ee;
  --paper-2:    #e9e8e3;

  --cyan:       #4fe3ff;
  --cyan-dim:   #2b93a8;
  --gold:       #c4a870;
  --gold-dim:   #8a7448;

  --bg:         var(--ink);
  --fg:         var(--ice);
  --fg-mute:    var(--silver);
  --line:       rgba(223, 231, 236, .13);
  --line-soft:  rgba(223, 231, 236, .07);

  --band-rgb:   242, 241, 238;
  --band-fg:    #05070a;
  --band-mute:  #5c646b;
  --band-steel: #5f676e;
  --band-line:  rgba(5, 7, 10, .13);
  --band-soft:  rgba(5, 7, 10, .07);
  --band-cyan:  #0b6d85;
  --band-gold:  #7a6532;
  --band-tile:  rgba(242, 241, 238, .72);
  --on-accent:  #05070a;
  --tile-bg:    rgba(6, 9, 12, .66);
  --tile-hover: rgba(23, 28, 33, .72);
  --danger:     #ff7d7d;
  --art-line:   rgba(223, 231, 236, .050);
  --art-line-2: rgba(223, 231, 236, .034);
  --art-f1:     #0c1116;
  --art-f2:     #04070a;
  --art-f3:     #0a1015;
  --art-zip:    rgba(223, 231, 236, .17);
  --art-gold:   rgba(196, 168, 112, .19);
  --art-trav:   rgba(79, 227, 255, .85);
  --art-trav-g: rgba(196, 168, 112, .80);
  --plan-line-c:  rgba(223, 231, 236, .22);
  --plan-new-c:   #4fe3ff;
  --plan-label-c: #c3cbd1;

  --veil:        5, 7, 10;
  --veil-strong: .93;
  --sc-a: .80; --sc-b: .32; --sc-c: .40; --sc-d: .90;
  --sh-a: .93; --sh-b: .80; --sh-c: .32;
  --shadow-key:  0 1px 20px rgba(5, 7, 10, .62);
}

@media (min-width: 900px) { :root { --hdr-h: 88px; } }

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

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  scroll-padding-top: calc(var(--hdr-h) + 1rem);
}

body {
  margin: 0;
  background: var(--bg);
  color: var(--fg);
  font-family: var(--f-sans);
  font-size: var(--t-md);
  font-weight: 300;
  line-height: 1.85;
  letter-spacing: .02em;
  overflow-x: hidden;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

body.is-locked { overflow: hidden; }

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

a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; }

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

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

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

.skip-link {
  position: absolute; left: 1rem; top: -6rem; z-index: 200;
  padding: .8rem 1.4rem; background: var(--fg); color: var(--bg);
  font-family: var(--f-mono); font-size: var(--t-xs); letter-spacing: .18em;
  transition: top 240ms var(--ease);
}
.skip-link:focus { top: 1rem; }

/* -------------------------------------------- 02 continuous background ----- */
/* One field behind the whole document — no section owns a background, so no
   step-edges can appear between them. (Light sections opt in explicitly and
   fade in/out over a 180px band.) */
.bg-canvas {
  position: fixed; inset: 0; z-index: -3; pointer-events: none;
  background:
    radial-gradient(120% 70% at 50% -10%,  #ffffff 0%, rgba(255, 255, 255, 0) 58%),
    radial-gradient(80% 55% at 104% 26%,   #edebe6 0%, rgba(237, 235, 230, 0) 60%),
    radial-gradient(90% 60% at -6% 72%,    #eae8e2 0%, rgba(234, 232, 226, 0) 62%),
    linear-gradient(180deg, #f7f6f3 0%, #f2f1ed 38%, #f5f4f1 72%, #eeede8 100%);
}

.bg-grain {
  position: fixed; inset: 0; z-index: -1; pointer-events: none;
  opacity: .045; mix-blend-mode: multiply;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)'/%3E%3C/svg%3E");
  background-size: 200px 200px;
}

/* ------------------------------------------- 02b background art layer ------ */
/* A single fixed painting behind the whole document, in the vocabulary of the
   New York abstractionists — kept in the site's monochrome so it reads as
   architecture, not decoration. Sections that carry their own ground (films,
   .section--light) paint over it, so it only ever shows in the quiet passages.

     .bg-art__field   Reinhardt / Judd — black-on-black rectangles (ΔL* ≤ 3)
     .bg-art__weave   Agnes Martin     — an almost invisible drawn grid
     .bg-art__zips    Barnett Newman   — vertical bands of light, breathing
     .bw              Mondrian, "Broadway Boogie Woogie" — light travelling
                      the grid. Long delays: it should feel occasional, never
                      like something is permanently animating.

   Everything here is transform/opacity only, and every animation stops under
   prefers-reduced-motion (the composition itself stays). */
.bg-art {
  position: fixed; inset: 0; z-index: -2;
  pointer-events: none; overflow: hidden;
  contain: strict;
}

/* FIELD — hard-edged rectangles, contrast deliberately at the threshold of
   perception. They give the black depth without ever reading as "boxes". */
.bg-art__field {
  position: absolute; inset: -6%;
  background:
    linear-gradient(90deg, transparent 0 7%,  var(--art-f1) 7% 33%,  transparent 33%),
    linear-gradient(90deg, transparent 0 61%, var(--art-f2) 61% 100%),
    linear-gradient(0deg,  transparent 0 66%, var(--art-f3) 66% 100%);
  opacity: .55;
  filter: blur(.5px);
  animation: fieldDrift 140s ease-in-out infinite alternate;
  will-change: transform;
}
@keyframes fieldDrift {
  from { transform: translate3d(0, 0, 0) scale(1); }
  to   { transform: translate3d(-1.4%, 1.1%, 0) scale(1.035); }
}

/* WEAVE — Agnes Martin. Ruled, imperfect, nearly gone. Masked to an oval so
   the tile never announces itself at the edges of the viewport. */
.bg-art__weave {
  position: absolute; inset: 0;
  background-image:
    repeating-linear-gradient(90deg, var(--art-line) 0 1px, transparent 1px 94px),
    repeating-linear-gradient(0deg,  var(--art-line-2) 0 1px, transparent 1px 94px);
  filter: blur(.35px);
  -webkit-mask-image: radial-gradient(118% 78% at 50% 42%, #000 26%, transparent 76%);
          mask-image: radial-gradient(118% 78% at 50% 42%, #000 26%, transparent 76%);
  animation: weaveBreathe 46s ease-in-out infinite alternate;
}
@keyframes weaveBreathe {
  from { opacity: .62; }
  to   { opacity: 1; }
}

/* ZIPS — Newman. Four vertical incisions of light, one of them champagne.
   They do not move; they only breathe, on different cycles. */
.bg-art__zips { position: absolute; inset: 0; }
.bg-art__zips::before,
.bg-art__zips::after {
  content: ""; position: absolute; top: -8%; bottom: -8%; width: 1px;
}
.bg-art__zips::before {
  left: 22%;
  background: linear-gradient(180deg, transparent, var(--art-zip) 26%,
              var(--art-zip) 68%, transparent);
  animation: zipBreathe 27s ease-in-out infinite alternate;
}
.bg-art__zips::after {
  left: 78%;
  background: linear-gradient(180deg, transparent, var(--art-gold) 34%,
              var(--art-gold) 72%, transparent);
  animation: zipBreathe 34s ease-in-out -12s infinite alternate;
}
@keyframes zipBreathe {
  from { opacity: .3; }
  to   { opacity: 1; }
}

/* BROADWAY BOOGIE WOOGIE — a light runs a grid line, then the wall is quiet
   again for two thirds of the cycle. Rarity is the whole point. */
.bw {
  position: absolute; display: block;
  --c: var(--art-trav);
  will-change: transform, opacity;
}
.bw--gold { --c: var(--art-trav-g); }

.bw--v {
  left: var(--x); top: 0;
  width: 1px; height: 20vh;
  background: linear-gradient(180deg, transparent, var(--c) 62%, transparent);
  animation: bwDown var(--s, 24s) var(--d, 0s) linear infinite;
}
.bw--h {
  top: var(--y); left: 0;
  height: 1px; width: 18vw;
  background: linear-gradient(90deg, transparent, var(--c) 62%, transparent);
  animation: bwRight var(--s, 24s) var(--d, 0s) linear infinite;
}

@keyframes bwDown {
  0%   { transform: translate3d(0, -22vh, 0); opacity: 0; }
  5%   { opacity: .9; }
  33%  { opacity: .9; }
  40%  { transform: translate3d(0, 104vh, 0); opacity: 0; }
  100% { transform: translate3d(0, 104vh, 0); opacity: 0; }
}
@keyframes bwRight {
  0%   { transform: translate3d(-20vw, 0, 0); opacity: 0; }
  5%   { opacity: .75; }
  33%  { opacity: .75; }
  40%  { transform: translate3d(104vw, 0, 0); opacity: 0; }
  100% { transform: translate3d(104vw, 0, 0); opacity: 0; }
}

/* Small screens: keep the painting, halve the moving parts. */
@media (max-width: 767px) {
  .bg-art__weave { background-size: 68px 68px, 68px 68px; }
  .bw--v:nth-of-type(2), .bw--v:nth-of-type(4), .bw--h:nth-of-type(6) { display: none; }
}

section { position: relative; background: transparent; }

.shell {
  width: 100%;
  max-width: var(--shell);
  margin-inline: auto;
  padding-inline: var(--gutter);
}
.shell--narrow { max-width: 980px; }
.shell--text   { max-width: 760px; }

.band { padding-block: var(--band); }
.band--tight { padding-block: calc(var(--band) * .46); }

/* Light (off-white) sections: bleed the colour ±180px so the transition is a
   gradient, never a line. */
.section--light {
  isolation: isolate;
  color: var(--band-fg);
  --fg: var(--band-fg);
  --fg-mute: var(--band-mute);
  --steel: var(--band-steel);
  --line: var(--band-line);
  --line-soft: var(--band-soft);
  --cyan: var(--band-cyan);
  --gold: var(--band-gold);
  margin-block: var(--light-fade);
}
.section--light::before {
  content: ""; position: absolute; inset: calc(var(--light-fade) * -1) 0; z-index: -1;
  background: linear-gradient(180deg,
    rgba(var(--band-rgb), 0) 0%,
    rgb(var(--band-rgb)) var(--light-fade),
    rgb(var(--band-rgb)) calc(100% - var(--light-fade)),
    rgba(var(--band-rgb), 0) 100%);
}
.section--light::after {
  content: ""; position: absolute; inset: calc(var(--light-fade) * -1) 0; z-index: -1;
  opacity: .5; mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)' opacity='.16'/%3E%3C/svg%3E");
}

/* ------------------------------------------------------- 03 typography ----- */
.eyebrow {
  display: flex; align-items: center; gap: .9rem;
  font-family: var(--f-mono); font-size: var(--t-xs); font-weight: 400;
  letter-spacing: .32em; text-transform: uppercase;
  color: var(--fg-mute); line-height: 1;
}
.eyebrow::before {
  content: ""; width: clamp(24px, 4vw, 56px); height: 1px; flex: none;
  background: linear-gradient(90deg, var(--cyan), transparent);
  opacity: .85;
}
.eyebrow--gold::before { background: linear-gradient(90deg, var(--gold), transparent); }
.eyebrow--plain::before { display: none; }

.num {
  font-family: var(--f-mono); font-size: var(--t-xs); letter-spacing: .24em;
  color: var(--steel);
}

/* Latin display — the cinema title voice */
.display {
  font-family: var(--f-display);
  font-weight: 500;
  font-size: var(--t-hero);
  line-height: .92;
  letter-spacing: -.015em;
  text-transform: uppercase;
  text-wrap: balance;
}
.display--mega { font-size: var(--t-mega); }
.display--xxl  { font-size: var(--t-xxl); }
.display--xl   { font-size: var(--t-xl); line-height: 1.02; }
.display .thin { font-weight: 400; }
.display em { font-style: italic; font-weight: 400; }

/* Japanese display — mincho, the "estate" voice */
.jp-display {
  font-family: var(--f-jp);
  font-weight: 300;
  font-size: var(--t-jp);
  line-height: 1.55;
  letter-spacing: .04em;
  text-wrap: balance;
  /* break Japanese on phrase boundaries where the browser supports it */
  word-break: auto-phrase;
  line-break: strict;
}
.jp-display--lg { font-size: var(--t-xl); }
.jp-display--sm { font-size: var(--t-lg); line-height: 1.75; }

.lede {
  font-size: clamp(1.02rem, 1.5vw, 1.24rem);
  line-height: 1.95;
  color: var(--fg-mute);
  max-width: 62ch;
  font-weight: 300;
}
.prose p + p { margin-top: 1.3em; }
.prose { color: var(--fg-mute); max-width: 68ch; }
.prose strong { color: var(--fg); font-weight: 500; }

.hl { color: var(--cyan); }
.hl-gold { color: var(--gold); }

.rule {
  height: 1px; border: 0; margin: 0;
  background: linear-gradient(90deg, transparent, var(--line) 12%, var(--line) 88%, transparent);
}
.rule--beam {
  background: linear-gradient(90deg, transparent, rgba(79, 227, 255, .34), transparent);
  opacity: .7;
}

/* ---------------------------------------------------- 04 motion primitives - */
@keyframes reveal {
  from { opacity: 0; transform: translateY(26px) scale(.988); filter: blur(7px); }
  to   { opacity: 1; transform: none; filter: blur(0); }
}
@keyframes revealSoft {
  from { opacity: 0; transform: translateY(14px); }
  to   { opacity: 1; transform: none; }
}
@keyframes lineIn {
  from { transform: scaleX(0); }
  to   { transform: scaleX(1); }
}
@keyframes drawStroke { to { stroke-dashoffset: 0; } }

.reveal {
  animation: reveal var(--dur) var(--ease) both;
  animation-play-state: paused;
}
.reveal.is-in { animation-play-state: running; }

.reveal-soft {
  animation: revealSoft var(--dur-s) var(--ease) both;
  animation-play-state: paused;
}
.reveal-soft.is-in { animation-play-state: running; }

.stagger > * {
  animation: reveal var(--dur) var(--ease) both;
  animation-play-state: paused;
  animation-delay: calc(var(--i, 0) * 80ms);
}
.stagger.is-in > * { animation-play-state: running; }

/* Mask reveal for headline lines */
.line-mask { display: block; overflow: hidden; }
.line-mask > span {
  display: block;
  transform: translateY(105%);
  transition: transform 1150ms var(--ease);
  transition-delay: calc(var(--i, 0) * 90ms);
}
.is-in .line-mask > span, .line-mask.is-in > span { transform: none; }

/* -------------------------------------------------------- 05 header -------- */
.site-header {
  position: fixed; inset: 0 0 auto; z-index: 100;
  height: var(--hdr-h);
  display: flex; align-items: center;
  transition: background-color 520ms var(--ease), backdrop-filter 520ms var(--ease),
              border-color 520ms var(--ease);
  border-bottom: 1px solid transparent;
}
.site-header.is-stuck {
  background: rgba(var(--veil), .80);
  backdrop-filter: saturate(140%) blur(14px);
  -webkit-backdrop-filter: saturate(140%) blur(14px);
  border-bottom-color: var(--line);
}
.site-header.is-hidden { transform: translateY(-100%); transition: transform 420ms var(--ease); }

.header-in {
  width: 100%; max-width: var(--shell); margin-inline: auto;
  padding-inline: var(--gutter);
  display: flex; align-items: center; justify-content: space-between; gap: 2rem;
}

.brand { display: flex; align-items: center; gap: .8rem; }
.brand__mark { height: 26px; width: auto; }
.brand__word { height: 13px; width: auto; }
@media (min-width: 900px) { .brand__mark { height: 30px; } .brand__word { height: 15px; } }
.brand__tag {
  display: none;
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .26em;
  color: var(--fg-mute); text-transform: uppercase;
  padding-left: .9rem; margin-left: .2rem; border-left: 1px solid var(--line);
  line-height: 1.6;
}
@media (min-width: 1280px) { .brand__tag { display: block; } }

.nav { display: none; align-items: center; gap: clamp(1.1rem, 2vw, 2.1rem); }
@media (min-width: 1024px) { .nav { display: flex; } }
.nav a {
  position: relative;
  font-family: var(--f-mono); font-size: var(--t-xs); letter-spacing: .2em;
  text-transform: uppercase; color: var(--fg-mute);
  padding-block: .5rem;
  transition: color 320ms var(--ease);
}
.nav a::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 1px;
  background: var(--cyan); transform: scaleX(0); transform-origin: left;
  transition: transform 460ms var(--ease);
}
.nav a:hover { color: var(--fg); }
.nav a:hover::after, .nav a[aria-current="page"]::after { transform: scaleX(1); }
.nav a[aria-current="page"] { color: var(--fg); }

.nav-cta {
  display: none;
  font-family: var(--f-mono); font-size: var(--t-xs); letter-spacing: .18em;
  text-transform: uppercase;
  padding: .85rem 1.5rem;
  border: 1px solid var(--line);
  color: var(--fg);
  transition: background-color 380ms var(--ease), border-color 380ms var(--ease), color 380ms var(--ease);
}
@media (min-width: 1024px) { .nav-cta { display: inline-block; } }
.nav-cta:hover { background: var(--fg); border-color: var(--fg); color: var(--bg); }

.nav-toggle {
  display: inline-flex; flex-direction: column; justify-content: center; gap: 6px;
  width: 44px; height: 44px; margin-right: -10px;
}
@media (min-width: 1024px) { .nav-toggle { display: none; } }
.nav-toggle span {
  display: block; height: 1px; background: var(--fg);
  transition: transform 420ms var(--ease), opacity 260ms var(--ease), width 420ms var(--ease);
}
.nav-toggle span:nth-child(1) { width: 26px; }
.nav-toggle span:nth-child(2) { width: 18px; margin-left: auto; }
.nav-toggle[aria-expanded="true"] span:nth-child(1) { transform: translateY(3.5px) rotate(45deg); }
.nav-toggle[aria-expanded="true"] span:nth-child(2) { width: 26px; transform: translateY(-3.5px) rotate(-45deg); }

.drawer {
  position: fixed; inset: 0; z-index: 99;
  background: rgba(var(--veil), .97);
  backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(18px);
  padding: calc(var(--hdr-h) + 3rem) var(--gutter) 3rem;
  display: flex; flex-direction: column; justify-content: space-between;
  opacity: 0; visibility: hidden; transform: translateY(-12px);
  transition: opacity 460ms var(--ease), transform 460ms var(--ease), visibility 460ms;
  overflow-y: auto;
}
.drawer.is-open { opacity: 1; visibility: visible; transform: none; }
.drawer nav { display: flex; flex-direction: column; gap: .2rem; }
.drawer nav a {
  font-family: var(--f-display); font-size: clamp(1.9rem, 8vw, 3rem);
  text-transform: uppercase; line-height: 1.28; letter-spacing: -.01em;
  border-bottom: 1px solid var(--line-soft); padding-block: .55rem;
  display: flex; align-items: baseline; gap: 1rem;
}
.drawer nav a small {
  font-family: var(--f-sans); font-size: .6rem; letter-spacing: .16em;
  color: var(--steel); font-weight: 400;
}
.drawer__foot { display: flex; flex-wrap: wrap; gap: .75rem; padding-top: 2rem; }

/* ---------------------------------------------------------- 06 hero -------- */
.hero {
  position: relative;
  min-height: 100svh;
  display: flex; align-items: flex-end;
  padding-block: calc(var(--hdr-h) + 1.4rem) clamp(2rem, 5vh, 3.4rem);
  overflow: hidden;
  isolation: isolate;
}
.hero--inner { min-height: 56svh; }

.hero__media, .film__media {
  position: absolute; inset: 0; z-index: -2; overflow: hidden;
}

/* Full-bleed films dissolve into whatever ground sits above and below them —
   the dark canvas, or the paper bleed of an adjacent light section. Both the
   plate and its scrim carry the same edge mask, so no boundary is ever a line.
   (The hero is exempt: it is the top of the document.) */
.film__media, .film__scrim {
  --edge: clamp(90px, 14vh, 170px);
  -webkit-mask-image: linear-gradient(180deg, transparent 0, #000 var(--edge),
                       #000 calc(100% - var(--edge)), transparent 100%);
          mask-image: linear-gradient(180deg, transparent 0, #000 var(--edge),
                       #000 calc(100% - var(--edge)), transparent 100%);
}
.hero__media img, .hero__media video,
.film__media img, .film__media video {
  width: 100%; height: 100%; object-fit: cover;
  filter: saturate(.92) contrast(1.03);
}
.hero__media video, .film__media video {
  opacity: 0; transition: opacity 1400ms var(--ease);
}
.hero__media video.is-ready, .film__media video.is-ready { opacity: 1; }
.hero__media img, .film__media img { position: absolute; inset: 0; }

/* Cinematic scrim: keeps type legible without flattening the image.
   Sized for the brightest plate in the set (the daylight shots), so no film
   section can ever drop below readable contrast. */
.hero__scrim, .film__scrim {
  position: absolute; inset: 0; z-index: -1; pointer-events: none;
}
.hero__scrim {
  background:
    linear-gradient(180deg, rgba(var(--veil), var(--sc-a)) 0%, rgba(var(--veil), var(--sc-b)) 30%, rgba(var(--veil), var(--sc-c)) 58%, rgba(var(--veil), var(--veil-strong)) 100%),
    linear-gradient(90deg, rgba(var(--veil), var(--sh-a)) 0%, rgba(var(--veil), var(--sh-b)) 34%, rgba(var(--veil), var(--sh-c)) 62%, rgba(var(--veil), 0) 86%);
}
/* Inner heroes sit on a still rather than the dark city plate, and carry the
   page's h1 — they get the stronger, film-grade scrim. */
.hero--inner .hero__scrim {
  background:
    linear-gradient(180deg, rgba(var(--veil), var(--sc-a)) 0%, rgba(var(--veil), var(--sc-b)) 26%, rgba(var(--veil), var(--sc-c)) 60%, rgba(var(--veil), var(--veil-strong)) 100%),
    linear-gradient(90deg, rgba(var(--veil), var(--sh-a)) 0%, rgba(var(--veil), var(--sh-b)) 30%, rgba(var(--veil), var(--sh-c)) 62%, rgba(var(--veil), 0) 88%);
}
.film__scrim {
  background:
    linear-gradient(180deg, rgba(var(--veil), var(--sc-a)) 0%, rgba(var(--veil), var(--sc-b)) 26%, rgba(var(--veil), var(--sc-c)) 62%, rgba(var(--veil), var(--sc-d)) 92%, var(--bg) 100%),
    linear-gradient(90deg, rgba(var(--veil), var(--sh-a)) 0%, rgba(var(--veil), var(--sh-b)) 26%, rgba(var(--veil), var(--sh-c)) 56%, rgba(var(--veil), 0) 82%);
}
.film__scrim--even {
  background:
    linear-gradient(180deg, rgba(var(--veil), var(--sc-a)) 0%, rgba(var(--veil), var(--sc-b)) 26%, rgba(var(--veil), var(--sc-c)) 62%, rgba(var(--veil), var(--sc-d)) 92%, var(--bg) 100%),
    linear-gradient(270deg, rgba(var(--veil), var(--sh-a)) 0%, rgba(var(--veil), var(--sh-b)) 26%, rgba(var(--veil), var(--sh-c)) 56%, rgba(var(--veil), 0) 82%);
}
.film .prose, .hero .prose { color: var(--mist); }
.film--center .film__scrim {
  background:
    linear-gradient(180deg, rgba(var(--veil), var(--sc-d)) 0%, rgba(var(--veil), var(--sh-b)) 34%, rgba(var(--veil), var(--sh-b)) 66%, rgba(var(--veil), var(--sc-d)) 92%, var(--bg) 100%);
}

.hero__inner { width: 100%; }
.hero__mark { height: clamp(44px, 7vw, 76px); width: auto; margin-bottom: clamp(1rem, 2.6vw, 1.7rem); }
.hero__title { margin-block: .35rem clamp(1rem, 2.2vw, 1.5rem); }
.hero__jp { color: var(--mist); }

.scroll-cue {
  display: inline-flex; align-items: center; gap: .8rem;
  margin-top: clamp(1.2rem, 3vh, 2.2rem);
  font-family: var(--f-mono); font-size: var(--t-xs); letter-spacing: .28em;
  text-transform: uppercase; color: var(--silver);
}
.scroll-cue i {
  display: block; width: 1px; height: 46px; background: var(--line);
  position: relative; overflow: hidden;
}
.scroll-cue i::after {
  content: ""; position: absolute; inset: 0; background: var(--cyan);
  animation: cue 2600ms var(--ease-io) infinite;
}
@keyframes cue {
  0%   { transform: translateY(-100%); }
  55%  { transform: translateY(0); }
  100% { transform: translateY(100%); }
}

/* --------------------------------------------------- 07 film sections ------ */
.film {
  position: relative;
  min-height: clamp(440px, 68svh, 760px);
  display: flex; align-items: center;
  padding-block: var(--band);
  overflow: hidden;
  isolation: isolate;
}
.film--tall { min-height: clamp(480px, 76svh, 820px); }
.film__inner { width: 100%; }
.film__body { max-width: 46rem; }
.film--right .film__body { margin-left: auto; text-align: left; }
.film--center { text-align: center; }
.film--center .film__body { margin-inline: auto; }
.film--center .eyebrow { justify-content: center; }

.film__index {
  font-family: var(--f-mono); font-size: var(--t-xs); letter-spacing: .3em;
  color: var(--mist); margin-bottom: 1.1rem;
}

/* Small type over a moving plate needs more help than small type over a flat
   ground: the background luminance changes under it every frame. Lift the
   labels and give the whole film body a wide, soft shadow — invisible as a
   shadow, but it holds contrast when a bright part of the shot drifts past. */
.film__body { text-shadow: var(--shadow-key); }
.film .eyebrow,
.hero .eyebrow { color: var(--ice); }
.film .eyebrow::before,
.hero .eyebrow::before { opacity: 1; }
.hero__inner { text-shadow: var(--shadow-key); }
.hero__inner .scroll-cue { color: var(--mist); }

/* Data motes for the AI film — quiet, not a sci-fi HUD */
.motes { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: 1.5rem; }
.mote {
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .18em;
  text-transform: uppercase; color: var(--mist);
  padding: .5rem .85rem;
  border: 1px solid var(--line);
  background: rgba(var(--veil), .46);
  backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
  animation: revealSoft 900ms var(--ease) both;
  animation-play-state: paused;
  animation-delay: calc(var(--i, 0) * 90ms);
}
.is-in .mote { animation-play-state: running; }
.mote b { color: var(--cyan); font-weight: 400; }

/* ------------------------------------------- 08 statement / editorial ------ */
.statement {
  min-height: 38svh;
  display: flex; align-items: center;
  padding-block: var(--band);
}
.statement--tall { min-height: 52svh; }
/* NB: not `ch` — this box holds display-size mincho, but `ch` would be
   measured against the inherited 18px sans and crush it to ~4 characters. */
.statement__body { max-width: min(100%, 62rem); }
.statement--center { text-align: center; }
.statement--center .statement__body { max-width: min(100%, 54rem); margin-inline: auto; }
/* The section's only flex child is the full-width .shell, so alignment has to
   happen on the body itself. */
.statement--end .statement__body { margin-left: auto; }

.split {
  display: grid; gap: clamp(1.8rem, 4vw, 4rem);
  align-items: start;
}
.split > * { min-width: 0; }
.flow__step > * { min-width: 0; }
@media (min-width: 900px) {
  .split { grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); }
  .split--even { grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: center; }
  .split--sticky > :first-child { position: sticky; top: calc(var(--hdr-h) + 2rem); }
}

.figure { position: relative; overflow: hidden; }
.figure img {
  width: 100%; filter: saturate(.92) contrast(1.03);
  transition: transform 1600ms var(--ease);
}
.figure--mask {
  -webkit-mask-image: linear-gradient(180deg, transparent 0, #000 9%, #000 91%, transparent 100%);
  mask-image: linear-gradient(180deg, transparent 0, #000 9%, #000 91%, transparent 100%);
}
.figure__cap {
  margin-top: .9rem;
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .22em;
  text-transform: uppercase; color: var(--steel);
}

/* --------------------------------------------- 09 flow / values / tiles ---- */
.flow { display: grid; gap: 0; margin-top: clamp(1.6rem, 3.4vw, 2.4rem); }
.flow__step {
  display: grid; grid-template-columns: 3.2rem minmax(0, 1fr); gap: clamp(1.2rem, 4vw, 3rem);
  align-items: baseline;
  padding-block: clamp(1.05rem, 2.1vw, 1.6rem);
  border-top: 1px solid var(--line);
  position: relative;
}
.flow__step:last-child { border-bottom: 1px solid var(--line); }
.flow__step::after {
  content: ""; position: absolute; left: 0; top: -1px; height: 1px; width: 100%;
  background: linear-gradient(90deg, var(--cyan), transparent 70%);
  transform: scaleX(0); transform-origin: left;
  transition: transform 1200ms var(--ease);
  transition-delay: calc(var(--i, 0) * 110ms);
}
.is-in .flow__step::after { transform: scaleX(1); }
.flow__n {
  font-family: var(--f-mono); font-size: var(--t-xs); letter-spacing: .22em;
  color: var(--steel); padding-top: .5em;
}
.flow__en {
  font-family: var(--f-display); font-size: var(--t-xl);
  text-transform: uppercase; line-height: 1; letter-spacing: -.01em;
  overflow-wrap: break-word;
}
.flow__jp {
  display: block; margin-top: .6rem;
  font-family: var(--f-jp); font-size: var(--t-md); color: var(--fg-mute);
  letter-spacing: .12em;
}
.flow__note {
  grid-column: 2 / -1;
  margin-top: .8rem; font-size: .95rem; color: var(--fg-mute); max-width: 52ch;
}
@media (min-width: 900px) {
  .flow__step { grid-template-columns: 5rem minmax(0, 15rem) minmax(0, 1fr); }
  .flow__note { grid-column: auto; margin-top: 0; padding-top: .4em; }
}

/* Three values — near-full-screen, not cards */
.value {
  min-height: 40svh;
  display: flex; align-items: center;
  padding-block: var(--band);
  border-top: 1px solid var(--line);
}
.value__n {
  font-family: var(--f-display); font-size: clamp(3.2rem, 11vw, 9rem);
  line-height: .8; color: transparent;
  -webkit-text-stroke: 1px color-mix(in srgb, var(--fg) 36%, transparent);
  margin-bottom: clamp(.7rem, 2vw, 1.3rem);
}
.value--accent .value__n { -webkit-text-stroke-color: color-mix(in srgb, var(--cyan) 60%, transparent); }

.tiles { display: grid; gap: 1px; background: var(--line); border-block: 1px solid var(--line); }
@media (min-width: 700px)  { .tiles--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 700px)  { .tiles--3 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 1024px) { .tiles--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
.tile {
  background: var(--tile-bg); min-width: 0;
  padding: clamp(1.25rem, 2.5vw, 1.9rem);
  display: flex; flex-direction: column; gap: .75rem;
  position: relative;
  transition: background-color 620ms var(--ease);
}
.section--light .tile { background: var(--band-tile); }
.tile:hover { background: var(--tile-hover); }
.section--light .tile:hover { background: color-mix(in srgb, rgb(var(--band-rgb)) 88%, var(--band-fg)); }
.tile h3 {
  font-family: var(--f-display); font-size: var(--t-lg);
  text-transform: uppercase; letter-spacing: -.005em; line-height: 1.1;
  overflow-wrap: break-word; hyphens: auto;
}
.tile p { font-size: .95rem; color: var(--fg-mute); line-height: 1.85; }
.tile__jp { font-family: var(--f-jp); font-size: .95rem; color: var(--fg); letter-spacing: .06em; }

.chip {
  display: inline-flex; align-items: center; gap: .5rem; align-self: flex-start;
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .2em;
  text-transform: uppercase; padding: .34rem .7rem;
  border: 1px solid var(--line); color: var(--fg-mute);
}
.chip::before { content: ""; width: 5px; height: 5px; border-radius: 50%; background: currentColor; }
.chip--live     { color: var(--cyan);  border-color: color-mix(in srgb, var(--cyan) 42%, transparent); }
.chip--dev      { color: var(--gold);  border-color: color-mix(in srgb, var(--gold) 42%, transparent); }
.chip--research { color: var(--fg-mute); }
.chip--future   { color: var(--steel); }
.chip--todo     { color: var(--gold); border-color: color-mix(in srgb, var(--gold) 40%, transparent); }

/* The contrasting band re-points --fg / --cyan / --line / --steel, so the base
   rules already resolve correctly inside it. Only genuinely band-specific
   affordances are listed here. */
.section--light .field input,
.section--light .field select,
.section--light .field textarea { background: rgba(var(--band-rgb), .05); }
.section--light .field input::placeholder,
.section--light .field textarea::placeholder { color: var(--band-steel); }
.section--light .consent input { accent-color: var(--band-cyan); }
.section--light .field input:focus,
.section--light .field select:focus,
.section--light .field textarea:focus {
  border-bottom-color: var(--band-cyan);
  background: color-mix(in srgb, var(--band-cyan) 6%, transparent);
}
.section--light .btn { border-color: var(--band-line); color: var(--band-fg); }
.section--light .btn::before { background: var(--band-fg); }
.section--light .btn:hover { color: rgb(var(--band-rgb)); border-color: var(--band-fg); }
.section--light .plan { --plan-line: color-mix(in srgb, var(--band-fg) 26%, transparent);
  --plan-new: var(--band-cyan); --plan-label: var(--band-mute); }
.section--light .value__n { -webkit-text-stroke-color: color-mix(in srgb, var(--band-fg) 34%, transparent); }
.section--light a[style*="--cyan"] { color: var(--band-cyan) !important; }

/* Definition data (company table) */
.data { border-top: 1px solid var(--line); }
.data > div {
  display: grid; gap: .3rem 2rem;
  padding-block: clamp(.8rem, 1.5vw, 1.1rem);
  border-bottom: 1px solid var(--line);
}
@media (min-width: 760px) { .data > div { grid-template-columns: minmax(0, 15rem) minmax(0, 1fr); } }
.data dd { min-width: 0; overflow-wrap: anywhere; }
.data dt {
  font-family: var(--f-mono); font-size: var(--t-xs); letter-spacing: .2em;
  text-transform: uppercase; color: var(--steel);
}
.data dd { margin: 0; font-size: 1rem; }
.data dd small { display: block; margin-top: .3rem; font-size: .78rem; color: var(--fg-mute); }

/* Empty states — honest placeholders, never fabricated content */
.empty {
  border: 1px dashed var(--line);
  padding: clamp(1.8rem, 4vw, 3rem);
  text-align: center;
}
.empty .display { color: var(--steel); }
.empty p { margin-top: 1rem; color: var(--fg-mute); font-size: .95rem; }

/* Signature motion: the REVALUE LINE — an architectural plan that redraws
   itself over the existing structure. One key animation for the whole site. */
.plan { width: 100%; height: auto; overflow: visible;
  --plan-line: var(--plan-line-c); --plan-new: var(--plan-new-c); --plan-label: var(--plan-label-c); }
.plan .plan-existing { stroke: var(--plan-line); stroke-width: 1; fill: none; }
.plan .plan-new {
  stroke: var(--plan-new); stroke-width: 1.4; fill: none;
  stroke-dasharray: var(--len, 1400); stroke-dashoffset: var(--len, 1400);
  filter: drop-shadow(0 0 6px color-mix(in srgb, var(--plan-new) 38%, transparent));
}
.plan .plan-fill { fill: color-mix(in srgb, var(--plan-new) 8%, transparent); opacity: 0; transition: opacity 1400ms var(--ease) 700ms; }
.plan .plan-node { fill: var(--plan-new); opacity: 0; transition: opacity 700ms var(--ease); }
.plan.is-in .plan-new { animation: drawStroke 2600ms var(--ease-io) forwards; }
.plan.is-in .plan-fill { opacity: 1; }
.plan.is-in .plan-node { opacity: 1; transition-delay: calc(1200ms + var(--i, 0) * 180ms); }
.plan .plan-label {
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .16em;
  fill: var(--plan-label); text-transform: uppercase;
}

/* Number counters */
.stat { display: flex; flex-direction: column; gap: .4rem; }
.stat__v {
  font-family: var(--f-display); font-size: var(--t-xxl); line-height: 1;
  font-variant-numeric: tabular-nums;
}
.stat__k {
  font-family: var(--f-mono); font-size: var(--t-xs); letter-spacing: .2em;
  text-transform: uppercase; color: var(--fg-mute);
}
.stat__src { font-size: .72rem; color: var(--steel); line-height: 1.7; }

/* Marquee — quiet motion in the whitespace */
.marquee { overflow: hidden; border-block: 1px solid var(--line); padding-block: .85rem; }
.marquee__track {
  display: flex; gap: 3.5rem; width: max-content;
  animation: slide 42s linear infinite;
}
.marquee__track span {
  font-family: var(--f-mono); font-size: var(--t-xs); letter-spacing: .3em;
  text-transform: uppercase; color: var(--steel); white-space: nowrap;
}
.marquee__track span::after { content: "／"; margin-left: 3.5rem; color: color-mix(in srgb, var(--steel) 50%, transparent); }
@keyframes slide { to { transform: translateX(-50%); } }

/* ---------------------------------------------------------- 10 forms ------- */
.form { display: grid; gap: clamp(1.4rem, 3vw, 2rem); }
.form__grid { display: grid; gap: inherit; }
@media (min-width: 760px) { .form__grid--2 { grid-template-columns: 1fr 1fr; } }

.field { display: flex; flex-direction: column; gap: .55rem; }
.field > label {
  font-family: var(--f-mono); font-size: var(--t-xs); letter-spacing: .18em;
  text-transform: uppercase; color: var(--fg-mute);
  display: flex; align-items: center; gap: .6rem;
}
.field .req { color: var(--cyan); font-size: 9px; letter-spacing: .12em; }
.field input, .field select, .field textarea {
  font: inherit; font-size: 1rem; font-weight: 300;
  color: var(--fg); background: rgba(var(--veil), .05);
  border: 0; border-bottom: 1px solid var(--line);
  padding: .85rem .2rem;
  border-radius: 0;
  transition: border-color 420ms var(--ease), background-color 420ms var(--ease);
  width: 100%;
}
.section--light .field input,
.section--light .field select,
.section--light .field textarea { background: rgba(5, 7, 10, .028); }
.field textarea { min-height: 8.5rem; resize: vertical; line-height: 1.85; }
.field select { appearance: none; background-image: none; cursor: pointer; }
.field input:focus, .field select:focus, .field textarea:focus {
  outline: none; border-bottom-color: var(--cyan);
  background: rgba(79, 227, 255, .04);
}
.field input::placeholder, .field textarea::placeholder { color: var(--steel); }
.field__hint { font-size: .76rem; color: var(--steel); line-height: 1.7; }
.field__err { font-size: .76rem; color: var(--danger); display: none; }
.field.has-error .field__err { display: block; }
.field.has-error input, .field.has-error select, .field.has-error textarea { border-bottom-color: var(--danger); }

.consent { display: flex; gap: .85rem; align-items: flex-start; font-size: .85rem; color: var(--fg-mute); }
.consent input { width: 18px; height: 18px; flex: none; margin-top: .35rem; accent-color: var(--cyan); }
.consent a { color: var(--fg); text-decoration: underline; text-underline-offset: 3px; }

.form__note {
  font-size: .78rem; color: var(--steel); line-height: 1.9;
  border-left: 1px solid var(--line); padding-left: 1.1rem;
}
.form__status { font-family: var(--f-mono); font-size: var(--t-xs); letter-spacing: .12em; }
.form__status[data-state="ok"]  { color: var(--cyan); }
.form__status[data-state="err"] { color: var(--danger); }

/* --------------------------------------------------- 11 buttons / CTA ------ */
.btn {
  display: inline-flex; align-items: center; gap: 1.1rem;
  font-family: var(--f-mono); font-size: var(--t-xs); letter-spacing: .2em;
  text-transform: uppercase;
  padding: 1.15rem 1.9rem;
  border: 1px solid var(--line);
  color: var(--fg); background: transparent;
  position: relative; overflow: hidden;
  transition: color 460ms var(--ease), border-color 460ms var(--ease);
}
.btn::before {
  content: ""; position: absolute; inset: 0; background: var(--fg); z-index: -1;
  transform: translateY(101%); transition: transform 560ms var(--ease);
}
.btn:hover { color: var(--bg); border-color: var(--fg); }
.btn:hover::before { transform: none; }
.btn i { width: 22px; height: 1px; background: currentColor; flex: none; }
.btn--solid { background: var(--fg); color: var(--bg); border-color: var(--fg); }
.btn--solid::before { background: var(--cyan); }
.btn--solid:hover { color: var(--on-accent); border-color: var(--cyan); }
.btn--cyan { border-color: rgba(79, 227, 255, .5); color: var(--cyan); }
.btn--cyan::before { background: var(--cyan); }
.btn--cyan:hover { color: var(--on-accent); }
.section--light .btn { border-color: rgba(5, 7, 10, .28); color: var(--ink); }
.section--light .btn::before { background: var(--ink); }
.section--light .btn:hover { color: var(--paper); border-color: var(--ink); }
.btn--lg { padding: 1.35rem 2.4rem; }
.btn[disabled] { opacity: .5; pointer-events: none; }

.btn-row { display: flex; flex-wrap: wrap; gap: .9rem; }

.cta-split { display: grid; gap: 1px; background: var(--line); border-block: 1px solid var(--line); }
@media (min-width: 860px) { .cta-split { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.cta-split > a { min-width: 0; }
.cta-split > a {
  background: var(--tile-bg);
  padding: clamp(1.8rem, 3.6vw, 2.8rem) clamp(1.4rem, 3vw, 2.4rem);
  display: flex; flex-direction: column; gap: 1rem;
  transition: background-color 620ms var(--ease);
  position: relative;
}
.cta-split > a:hover { background: var(--tile-hover); }
.cta-split > a:hover .cta-split__go { transform: translateX(10px); }
.cta-split__go {
  margin-top: auto; display: inline-flex; align-items: center; gap: .9rem;
  font-family: var(--f-mono); font-size: var(--t-xs); letter-spacing: .2em;
  text-transform: uppercase; color: var(--cyan);
  transition: transform 560ms var(--ease);
}
.cta-split__go i { width: 30px; height: 1px; background: currentColor; }

/* ---------------------------------------------------------- footer --------- */
.site-footer {
  border-top: 1px solid var(--line);
  padding-block: clamp(2.4rem, 5vw, 3.8rem) 2rem;
  margin-top: clamp(2.4rem, 5vw, 4rem);
}
.footer-grid { display: grid; gap: clamp(1.8rem, 3.6vw, 3rem); }
@media (min-width: 900px) { .footer-grid { grid-template-columns: minmax(0, 1.3fr) repeat(3, minmax(0, 1fr)); } }
.footer-col { min-width: 0; }
.footer-col h4 {
  font-family: var(--f-mono); font-size: var(--t-xs); letter-spacing: .24em;
  text-transform: uppercase; color: var(--steel); margin-bottom: 1.2rem; font-weight: 400;
}
.footer-col li + li { margin-top: .7rem; }
.footer-col a { font-size: .9rem; color: var(--mist); transition: color 320ms var(--ease); }
.footer-col a:hover { color: var(--ice); }
.footer__brand .brand { margin-bottom: 1.4rem; gap: 1rem; flex-wrap: wrap; }
.footer__brand .brand__mark { height: 32px; }
.footer__brand .brand__word { height: 16px; }
@media (min-width: 480px) {
  .footer__brand .brand__mark { height: 40px; }
  .footer__brand .brand__word { height: 20px; }
}
.footer__brand p { font-size: .84rem; color: var(--steel); line-height: 1.9; max-width: 34ch; }
.footer__addr {
  font-style: normal; margin-top: 1.1rem;
  font-size: .8rem; line-height: 1.95; color: var(--fg-mute);
}
.footer__addr a { color: var(--fg-mute); text-decoration: underline; text-underline-offset: 3px; }
.footer__addr a:hover { color: var(--fg); }
.footer__lic { display: inline-block; margin-top: .5rem; color: var(--steel); }
.footer-bottom {
  display: flex; flex-wrap: wrap; gap: 1rem 2rem; justify-content: space-between;
  align-items: center; margin-top: clamp(1.8rem, 3.6vw, 2.8rem);
  padding-top: 1.3rem; border-top: 1px solid var(--line-soft);
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .18em;
  text-transform: uppercase; color: var(--steel);
}

/* -------------------------------------------------- 12 utilities ----------- */
.u-mt-s { margin-top: .95rem; }
.u-mt   { margin-top: clamp(1.4rem, 2.8vw, 2.2rem); }
.u-mt-l { margin-top: clamp(1.8rem, 3.6vw, 2.8rem); }
.u-mb   { margin-bottom: clamp(1.4rem, 2.8vw, 2.2rem); }
.u-center { text-align: center; }
.u-mono { font-family: var(--f-mono); letter-spacing: .18em; text-transform: uppercase; font-size: var(--t-xs); }
.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;
}

.breadcrumb {
  padding-top: calc(var(--hdr-h) + 1.6rem);
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .18em;
  text-transform: uppercase; color: var(--steel);
}
.breadcrumb ol { display: flex; flex-wrap: wrap; gap: .6rem; }
.breadcrumb li + li::before { content: "/"; margin-right: .6rem; color: color-mix(in srgb, var(--steel) 70%, transparent); }
.breadcrumb a:hover { color: var(--mist); }

/* Reduced motion / data saver ------------------------------------------------ */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
  .reveal, .reveal-soft, .stagger > *, .mote { animation: none !important; opacity: 1 !important; filter: none !important; transform: none !important; }
  .line-mask > span { transform: none !important; }
  .plan .plan-new { stroke-dashoffset: 0 !important; }
  .plan .plan-fill, .plan .plan-node { opacity: 1 !important; }
  .marquee__track { animation: none !important; }
  .bg-art__field, .bg-art__weave,
  .bg-art__zips::before, .bg-art__zips::after { animation: none !important; }
  .bw { display: none !important; }
  .scroll-cue i::after { animation: none !important; }
  .hero__media video, .film__media video { display: none !important; }
}

@media print {
  .site-header, .drawer, .bg-grain, .bg-art, .scroll-cue, video { display: none !important; }
  body { background: #fff; color: #000; }
}
