/* ── Registered custom properties ── */
@property --beam-heat {
  syntax: '<number>';
  inherits: true;
  initial-value: 0;
}
@property --beam-spread {
  syntax: '<number>';
  inherits: true;
  initial-value: 1;
}
/* Registering --wm-size enables calc() with it (e.g. for statement top) */
@property --wm-size {
  syntax: '<length>';
  inherits: true;
  initial-value: 7.5rem;
}

/* ── Font ── */
@font-face {
  font-family: 'Inter';
  src: url('/fonts/InterVariable.woff2') format('woff2');
  font-weight: 100 900;
  font-style: normal;
  font-display: block;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ── Tokens ── */
:root {
  /* Palette */
  --void:    #0A0A0C;  /* cold near-black canvas */
  --slag:    #141210;  /* neutral dark center bloom — less warm than before */
  --ember:   #7A3800;  /* outer falloff: orange-brown, not red-brown */
  --pour:    #FF6A00;  /* beam body: Kwark orange */
  --flash:   #FFF2E8;  /* beam core: off-white with the barest warm bias */
  --type:    #FFFFFF;
  --utility: rgba(255, 255, 255, 0.62);

  /* Beam state */
  --beam-x:      -20%;
  --beam-heat:   0;
  --beam-spread: 1;

  /* Wordmark scale */
  --wm-size:   clamp(3rem, 11.5vw, 11rem);
  --wm-track:  0.18em;
  --wm-weight: 600;
}

/* ── Reset ── */
*, *::before, *::after {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html, body {
  height: 100%;
  overflow: hidden;
  background: var(--void);
}

body {
  font-family: 'Inter', system-ui, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* ── Page container ── */
.page {
  position: fixed;
  inset: 0;
  overflow: hidden;
  isolation: isolate;
}

/* ── 1. Background canvas ──
   Cold void with a very subtle neutral dark bloom at the beam zone only.
   The warm orange comes entirely from the beam layers, not the background. */
.bg {
  position: absolute;
  inset: 0;
  background: radial-gradient(
    ellipse 100% 55% at 50% 46%,
    var(--slag) 0%,
    var(--void) 55%
  );
}

/* ── 2. Ghost wordmark beneath beam ──
   Perfectly overlaps the white wordmark (same top + translateY(-50%)).
   Screen-blend layers above will illuminate these letterforms where the
   core crosses them — the letters appear hot at the pour-line level. */
.wordmark-glow {
  position: absolute;
  top: 46%;
  left: 0;
  right: 0;
  transform: translateY(-50%);
  text-align: center;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: var(--wm-size);
  font-weight: var(--wm-weight);
  letter-spacing: var(--wm-track);
  /* Compensate trailing letter-spacing for optical centering */
  padding-right: var(--wm-track);
  text-transform: uppercase;
  color: var(--pour);
  opacity: 0.18;
  line-height: 1;
  user-select: none;
  pointer-events: none;
}

/* ── 3. Beam container ── */
.beam {
  position: absolute;
  inset: 0;
  pointer-events: none;
  user-select: none;
}

.beam-halo,
.beam-body,
.beam-core {
  position: absolute;
  inset: 0;
  mix-blend-mode: screen;
  pointer-events: none;
}

/* Halo — very wide orange-dark ellipse, heavy blur */
.beam-halo {
  background: radial-gradient(
    ellipse calc(88% * var(--beam-spread)) calc(22% * var(--beam-spread)) at var(--beam-x) 46%,
    rgba(180, 72, 0,  calc(0.16 * var(--beam-heat))) 0%,
    transparent 100%
  );
  filter: blur(90px);
}

/* Body — pure Kwark orange, saturated */
.beam-body {
  background: radial-gradient(
    ellipse calc(68% * var(--beam-spread)) calc(14% * var(--beam-spread)) at var(--beam-x) 46%,
    rgba(255, 106, 0, calc(0.55 * var(--beam-heat))) 0%,
    rgba(255, 106, 0, calc(0.14 * var(--beam-heat))) 45%,
    transparent 70%
  );
  filter: blur(40px);
}

/* Core — thin off-white ellipse at the axis */
.beam-core {
  background: radial-gradient(
    ellipse 54% 8% at var(--beam-x) 46%,
    rgba(255, 242, 232, calc(0.90 * var(--beam-heat))) 0%,
    rgba(255, 106, 0,   calc(0.38 * var(--beam-heat))) 28%,
    transparent 58%
  );
  filter: blur(12px);
}

/* Filament — 2px hairline at exact axis, masked to fade before edges */
.beam-filament {
  position: absolute;
  left: 0;
  right: 0;
  height: 2px;
  top: calc(46% - 1px);
  mix-blend-mode: screen;
  pointer-events: none;
  background: rgba(255, 242, 232, calc(0.90 * var(--beam-heat)));
  filter: blur(2px);
  -webkit-mask-image: radial-gradient(
    ellipse 55% 100% at var(--beam-x) 50%,
    black 0%,
    transparent 100%
  );
  mask-image: radial-gradient(
    ellipse 55% 100% at var(--beam-x) 50%,
    black 0%,
    transparent 100%
  );
}

/* ── 4. Content (semantic wrapper, not a positioning context) ── */
.content {
  pointer-events: none;
}

/* ── Wordmark ──
   translateY(-50%) centers the element's own em-box midpoint on top: 46%.
   For all-caps text this places the letter midpoint very close to 46%,
   so the beam core passes through the middle of the letterforms. */
.wordmark {
  position: absolute;
  top: 46%;
  left: 0;
  right: 0;
  transform: translateY(-50%);
  text-align: center;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: var(--wm-size);
  font-weight: var(--wm-weight);
  letter-spacing: 0;
  text-transform: uppercase;
  color: var(--type);
  line-height: 1;
  white-space: nowrap;
  pointer-events: auto;
}

.letter {
  display: inline;
  letter-spacing: var(--wm-track);
  opacity: 0;
  transition: opacity 500ms ease;
}

.letter:last-of-type {
  letter-spacing: 0;
}

/* ── Statement ──
   Absolute, positioned below beam: 46% + half wordmark + gap.
   @property on --wm-size makes calc() work with it. */
.statement {
  position: absolute;
  left: 0;
  right: 0;
  top: calc(46% + 0.5 * var(--wm-size) + 4.5rem);
  text-align: center;
  padding: 0 2rem;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: clamp(0.8125rem, 1.15vw, 1rem);
  font-weight: 400;
  letter-spacing: 0.12em;
  color: var(--utility);
  opacity: 0;
  transition: opacity 600ms ease;
  text-wrap: balance;
  pointer-events: auto;
}

/* ── Footer ── */
footer {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 0 2.25rem 2rem;
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  opacity: 0;
  transition: opacity 600ms ease;
  pointer-events: auto;
}

.footer-left {
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
}

.footer-left p {
  font-size: 0.75rem;
  letter-spacing: 0.06em;
  color: var(--utility);
  line-height: 1.5;
  font-family: 'Inter', system-ui, sans-serif;
}

.footer-link {
  font-size: 0.75rem;
  letter-spacing: 0.06em;
  color: var(--utility);
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-color: rgba(255, 255, 255, 0.25);
  line-height: 1.5;
  font-family: 'Inter', system-ui, sans-serif;
  transition: color 160ms ease, text-decoration-color 160ms ease;
}

.footer-link:hover {
  color: var(--type);
  text-decoration-color: rgba(255, 255, 255, 0.6);
}

.footer-right {
  display: flex;
  align-items: center;
}

.social-link {
  display: flex;
  align-items: center;
  color: var(--utility);
  transition: color 160ms ease;
}

.social-link:hover {
  color: var(--type);
}

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

/* ── Narrow viewports ── */
@media (max-width: 480px) {
  :root {
    --wm-size:  clamp(2.25rem, 16vw, 4rem);
    --wm-track: 0.12em;
  }

  .statement {
    top: calc(46% + 0.5 * var(--wm-size) + 3.5rem);
    padding: 0 1.25rem;
  }

  footer {
    padding: 0 1.5rem 1.5rem;
  }
}

/* ── Reduced motion: settled poster, no animation ── */
@media (prefers-reduced-motion: reduce) {
  .letter {
    opacity: 1 !important;
    transition: none !important;
  }

  .statement,
  footer {
    opacity: 1 !important;
    transition: none !important;
  }
}
