/* ============================================================
   WrathEye Studios — main stylesheet
   Direction: Monolith Type hero + Case File body/topbar.
   Palette (locked): bg #000–#0a0a0a · ink #f2f2f0 · muted #888/#666
   · accent #3a8fff (the ONLY color on the page)
   Type (locked): Oswald (headings, uppercase) · Space Mono (labels/body)
   ============================================================ */

:root {
  --bg: #050505;
  --ink: #f2f2f0;
  --muted: #888888;
  --dim: #666666;
  --line: #1c1c1c;
  --accent: #3a8fff;
  --accent-glow: rgba(58, 143, 255, 0.5);
  --topbar-h: 42px;
}

* { margin: 0; padding: 0; box-sizing: border-box; }

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

/* thin dark scrollbar, blue on hover */
html { scrollbar-width: thin; scrollbar-color: #1e1e1e #050505; }
::-webkit-scrollbar { width: 10px; }
::-webkit-scrollbar-track { background: #050505; }
::-webkit-scrollbar-thumb { background: #1e1e1e; border-radius: 5px; }
::-webkit-scrollbar-thumb:hover { background: var(--accent); }

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

body {
  background: var(--bg);
  /* case-file grid, barely-there */
  background-image:
    linear-gradient(#0c0c0c 1px, transparent 1px),
    linear-gradient(90deg, #0c0c0c 1px, transparent 1px);
  background-size: 72px 72px;
  color: var(--ink);
  font-family: 'Space Mono', monospace;
  overflow-x: hidden;
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3 {
  font-family: 'Oswald', sans-serif;
  text-transform: uppercase;
}

.accent { color: var(--accent); }

/* Visible keyboard focus everywhere (spec §technical) */
:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
}

/* ---------- Preloader — the site emerges from the fog ---------- */
.preloader {
  position: fixed;
  inset: 0;
  z-index: 300;
  background: #050505;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  /* failsafe: even with JS dead, the overlay clears itself */
  animation: preloader-failsafe 0.8s ease 7s forwards;
}
@keyframes preloader-failsafe {
  to { opacity: 0; visibility: hidden; }
}
.pre-fog {
  position: absolute;
  width: 110vmax;
  height: 110vmax;
  border-radius: 50%;
  filter: blur(60px);
  will-change: transform, opacity;
}
.pre-fog-a { left: -45vmax; top: -55vmax; background: radial-gradient(circle, #17171b 0%, transparent 62%); }
.pre-fog-b { right: -50vmax; bottom: -50vmax; background: radial-gradient(circle, #141418 0%, transparent 60%); }
.pre-fog-c {
  left: 50%;
  top: 50%;
  translate: -50% -50%;
  width: 80vmax;
  height: 80vmax;
  background: radial-gradient(circle, #1a1a1f 0%, transparent 55%);
  opacity: 0.8;
}
.pre-center { position: relative; text-align: center; }
.pre-emblem {
  display: block;
  width: clamp(72px, 16vw, 120px);
  margin: 0 auto 20px;
  filter: drop-shadow(0 0 30px rgba(58, 143, 255, 0.25));
  animation: pre-emblem-breathe 2.6s ease-in-out infinite;
}
@keyframes pre-emblem-breathe {
  0%, 100% { transform: scale(1); opacity: 0.92; }
  50%      { transform: scale(1.04); opacity: 1; }
}
@media (prefers-reduced-motion: reduce) {
  .pre-emblem { animation: none; }
}
.pre-mark {
  font-family: 'Oswald', sans-serif;
  font-weight: 600;
  font-size: clamp(30px, 5vw, 46px);
  letter-spacing: 0.14em;
  text-transform: uppercase;
}
.pre-status {
  margin-top: 14px;
  font-size: 10px;
  letter-spacing: 0.35em;
  color: var(--dim);
  text-transform: uppercase;
}
@media (prefers-reduced-motion: reduce) {
  .preloader { display: none; }
}

/* ---------- Lite mode ----------
   motion.js stamps .lite on <html> inside in-app browsers
   (Instagram/Facebook/TikTok webviews) and very low-memory
   devices. Kills the expensive paint work — blur filters,
   grain, backdrop blur — while keeping the design intact. */
.lite .grain { display: none; }
.lite #layer-fog { display: none; }
.lite .pre-fog { filter: none; opacity: 0.4; }
.lite .topbar, .lite .badge { backdrop-filter: none; }
.lite .cursor-glow { display: none; }
.lite .emblem-wrap img { filter: none; }

.skip-link {
  position: fixed;
  top: -100px;
  left: 16px;
  z-index: 200;
  padding: 10px 18px;
  background: var(--accent);
  color: #000;
  font-size: 12px;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  text-decoration: none;
  transition: top 0.2s;
}
.skip-link:focus-visible { top: 12px; }

/* ---------- Scroll progress bar ---------- */
.progress-bar {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 100;
  height: 3px;
  width: 100%;
  background: var(--accent);
  box-shadow: 0 0 12px var(--accent-glow);
  transform: scaleX(0);
  transform-origin: left center;
}

/* ---------- Case-file topbar ---------- */
.topbar {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 90;
  height: var(--topbar-h);
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 0 clamp(16px, 4vw, 40px);
  font-size: 10px;
  letter-spacing: 0.25em;
  color: var(--dim);
  text-transform: uppercase;
  border-bottom: 1px solid var(--line);
  background: rgba(5, 5, 5, 0.85);
  backdrop-filter: blur(6px);
}
.topbar-sep { color: #333; }
.topbar-right { display: flex; align-items: center; gap: 22px; }
.topbar-clock { color: var(--dim); font-variant-numeric: tabular-nums; }
.topbar-status { color: var(--accent); }
.topbar-status::before {
  content: '';
  display: inline-block;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--accent);
  margin-right: 8px;
  box-shadow: 0 0 8px var(--accent);
  animation: status-blink 2.4s ease-in-out infinite;
}
@keyframes status-blink {
  0%, 100% { opacity: 1; }
  50%      { opacity: 0.3; }
}
@media (prefers-reduced-motion: reduce) {
  .topbar-status::before { animation: none; }
}

/* ---------- Pill badge (back to top, appears on scroll) ---------- */
.badge {
  position: fixed;
  top: 5px;
  left: 50%;
  z-index: 95;              /* sits over the topbar center */
  translate: -50% 0;
  padding: 6px 20px;
  border-radius: 999px;
  background: rgba(8, 8, 8, 0.85);
  border: 1px solid #262626;
  backdrop-filter: blur(8px);
  font-family: 'Oswald', sans-serif;
  font-weight: 600;
  font-size: 14px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ink);
  text-decoration: none;
  /* hidden until the hero scrolls away — motion.js toggles .is-visible */
  opacity: 0;
  transform: translateY(-160%);
  transition: transform 0.45s cubic-bezier(0.2, 0.8, 0.2, 1), opacity 0.45s,
              border-color 0.3s, box-shadow 0.3s;
  pointer-events: none;
}
.badge.is-visible {
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}
.badge:hover, .badge:focus-visible {
  border-color: var(--accent);
  box-shadow: 0 0 20px rgba(58, 143, 255, 0.25);
}
@media (prefers-reduced-motion: reduce) {
  .badge { transition: none; }
}

/* ---------- Hero — Monolith Type ---------- */
.hero {
  position: relative;
  min-height: 100svh;
  display: flex;
  flex-direction: column;
  justify-content: center;
  overflow: hidden;
  padding: calc(var(--topbar-h) + 40px) 0 48px;
}

.hero-art {
  position: absolute;
  inset: -8% 0;             /* bleed so parallax drift never shows edges */
  opacity: 0.6;             /* keeps the sky dim; text stays dominant */
  will-change: transform;
}
.hero-art img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  /* the sky photo arrives brighter than the old drawn scene —
     pull it down further so the lockup owns the frame */
  filter: brightness(0.72) saturate(0.9);
}

/* film grain over the art — cinematic texture, near-invisible */
.grain {
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: 0.05;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='300' height='300' filter='url(%23n)'/%3E%3C/svg%3E");
}

.hero-shade {
  position: absolute;
  inset: 0;
  background:
    /* darken the left/right edges so the wordmark keeps contrast */
    linear-gradient(to right, rgba(0, 0, 0, 0.5), transparent 20%, transparent 80%, rgba(0, 0, 0, 0.5)),
    /* fully dissolve the sky into the page colour at BOTH the top
       (under the case-file bar) and the bottom, so the image never
       shows a hard edge — it just fades in and out of the page */
    linear-gradient(
      to bottom,
      var(--bg) 0%,
      rgba(5, 5, 5, 0.55) 7%,
      transparent 26%,
      transparent 60%,
      rgba(5, 5, 5, 0.75) 90%,
      var(--bg) 100%
    );
  pointer-events: none;
}

.giant {
  position: relative;
  z-index: 2;
  font-size: 19.5vw;
  font-weight: 700;
  line-height: 0.82;
  letter-spacing: -0.01em;
  padding-left: 3vw;
  user-select: none;
}

/* ----- the hooded-eye emblem -----
   Sized in em of the .giant font so it scales with the type,
   never the viewport; it lives inside the wordmark block, in
   the whitespace right of the words. */
.emblem-wrap {
  position: absolute;
  z-index: 3;
  left: 3.15em;             /* clear of the H/E — no text overlap */
  top: 0.17em;
  width: 1.2em;             /* aspect 438:508 — height ≈ 1.4em */
  pointer-events: none;
}
.emblem-wrap img {
  display: block;
  width: 100%;
  height: auto;
  /* layered dark shadows radiate from the hood silhouette to smother
     any background stars/aurora right around the emblem — shaped by the
     art itself, so (unlike a box) it never bleeds onto the wordmark */
  filter:
    drop-shadow(0 0 30px rgba(3, 4, 8, 0.95))
    drop-shadow(0 0 60px rgba(3, 4, 8, 0.85));
}
.giant-line { display: block; overflow: hidden; }
.giant-word { display: block; }
.giant-word.accent-word {
  /* fit-content so the hover region hugs the letters instead of the
     full-width row — otherwise EYE lights up when the cursor is far
     to its right, reading as an off-centre hover */
  width: fit-content;
  color: transparent;
  -webkit-text-stroke: 2px var(--accent);
  transition: color 0.5s, text-shadow 0.5s;
}
.giant-word.accent-word:hover {
  color: var(--accent);
  text-shadow: 0 0 60px rgba(58, 143, 255, 0.4);
}

/* thin rule with a blue light sliding along it */
.rule {
  position: relative;
  z-index: 2;
  margin: 5vh 3vw 0;
  height: 1px;
  background: #1e1e1e;
}
.rule::after {
  content: '';
  position: absolute;
  left: 0;
  top: -1px;
  height: 3px;
  width: 90px;
  background: var(--accent);
  box-shadow: 0 0 16px rgba(58, 143, 255, 0.8);
  animation: rule-slide 4.5s cubic-bezier(0.6, 0.05, 0.3, 0.95) infinite;
}
@keyframes rule-slide {
  0%, 100% { left: 0; }
  50%      { left: calc(100% - 90px); }
}
@media (prefers-reduced-motion: reduce) {
  .rule::after { animation: none; }
}

.hero-foot {
  position: relative;
  z-index: 2;
  display: flex;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 10px;
  padding: 22px 3vw 0;
  font-size: 10px;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  color: var(--dim);
}
.foot-link {
  color: var(--accent);
  text-decoration: none;
}
.foot-link:hover { text-shadow: 0 0 12px var(--accent-glow); }

/* ---------- Sections ---------- */
.section {
  max-width: 1360px;
  margin: 0 auto;
  padding: clamp(72px, 12vw, 140px) clamp(20px, 5vw, 64px);
  border-top: 1px solid var(--line);
}

.label {
  font-size: 11px;
  letter-spacing: 0.4em;
  color: var(--accent);
  text-transform: uppercase;
  margin-bottom: 28px;
}

/* ---------- Still Here feature ---------- */
.feature-grid {
  display: grid;
  grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
  gap: clamp(32px, 6vw, 80px);
  align-items: center;
}

/* case-file framed panel with corner ticks */
.panel {
  position: relative;
}
.panel-art {
  position: relative;
  overflow: hidden;
  border: 1px solid #242424;
  aspect-ratio: 4 / 5;
}
.panel-art img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  filter: grayscale(1) contrast(1.05);
  display: block;
}
/* cursor-reactive glow — motion.js drives --mx / --my on desktop */
.panel-glow {
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: radial-gradient(
    300px circle at var(--mx, 50%) var(--my, 40%),
    rgba(58, 143, 255, 0.16),
    transparent 65%
  );
  mix-blend-mode: screen;
}
.corner {
  position: absolute;
  width: 18px;
  height: 18px;
  border: 0 solid var(--accent);
  z-index: 2;
}
.corner.tl { top: 0; left: 0; border-top-width: 2px; border-left-width: 2px; transform-origin: top left; }
.corner.tr { top: 0; right: 0; border-top-width: 2px; border-right-width: 2px; transform-origin: top right; }
.corner.bl { bottom: 0; left: 0; border-bottom-width: 2px; border-left-width: 2px; transform-origin: bottom left; }
.corner.br { bottom: 0; right: 0; border-bottom-width: 2px; border-right-width: 2px; transform-origin: bottom right; }
.panel-caption {
  margin-top: 12px;
  font-size: 10px;
  letter-spacing: 0.3em;
  color: var(--dim);
  text-transform: uppercase;
}

.feature-copy h2, .founder-copy h2 {
  font-size: clamp(38px, 6vw, 72px);
  font-weight: 600;
  line-height: 1;
}

/* ----- showcase variant: the Still Here flagship block -----
   Full-width cinematic panel with an oversized title above and the
   description + a big entry button below — the game is the loudest
   thing on the studio page after the hero. */
.feature-grid--showcase {
  grid-template-columns: 1fr;
  gap: 36px;
  align-items: start;
}
.feature-grid--showcase .feature-copy h2 {
  font-size: clamp(56px, 9vw, 128px);
}
.feature-grid--showcase .panel-art {
  aspect-ratio: 21 / 9;
}
.feature-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: clamp(24px, 5vw, 64px);
  flex-wrap: wrap;
}
.feature-foot .feature-desc {
  margin-top: 0;
  max-width: 560px;
  font-size: 15px;
}
.cta--big {
  margin-top: 0;
  padding: clamp(18px, 2.6vw, 26px) clamp(44px, 6vw, 88px);
  font-size: clamp(13px, 1.4vw, 17px);
  letter-spacing: 0.35em;
  flex-shrink: 0;
}
.feature-meta {
  margin-top: 14px;
  font-size: 11px;
  letter-spacing: 0.25em;
  text-transform: uppercase;
  color: var(--accent);
}
.feature-desc {
  margin-top: 26px;
  max-width: 480px;
  color: var(--muted);
  font-size: 14px;
  line-height: 1.9;
}
.cta {
  position: relative;
  overflow: hidden;
  display: inline-block;
  margin-top: 38px;
  padding: 15px 36px;
  border: 1px solid var(--accent);
  color: var(--accent);
  text-decoration: none;
  font-size: 12px;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  transition: background 0.3s, color 0.3s, box-shadow 0.3s, scale 0.15s;
}
/* light sweep across the button face on hover */
.cta::after {
  content: '';
  position: absolute;
  top: 0;
  left: -130%;
  width: 60%;
  height: 100%;
  background: linear-gradient(105deg, transparent, rgba(242, 242, 240, 0.35), transparent);
  transform: skewX(-20deg);
  transition: left 0.55s ease;
  pointer-events: none;
}
.cta:hover, .cta:focus-visible {
  background: var(--accent);
  color: #000;
  box-shadow: 0 0 34px var(--accent-glow);
}
.cta:hover::after, .cta:focus-visible::after { left: 140%; }
.cta:active { scale: 0.96; }

/* ---------- Founder / about me ---------- */
.founder-grid {
  display: grid;
  grid-template-columns: minmax(0, 0.75fr) minmax(0, 1.25fr);
  gap: clamp(32px, 6vw, 80px);
  align-items: center;
}
.founder-art { aspect-ratio: 4 / 5; }
/* the founder photo is already lit in the brand blue — keep it in
   colour (the grayscale dossier treatment would flatten it) */
.founder-art img { filter: contrast(1.03) saturate(1.02); object-position: 50% 32%; }
.founder-copy h2 { line-height: 1.05; }

/* skill tags (also used on the products page) */
.tags {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 32px;
}
.tags .tag {
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  padding: 8px 15px;
  border: 1px solid var(--line);
  color: var(--muted);
  transition: border-color 0.3s, color 0.3s, box-shadow 0.3s;
}
.tags .tag:hover {
  border-color: var(--accent);
  color: var(--accent);
  box-shadow: 0 0 14px rgba(58, 143, 255, 0.15);
}

/* ---------- About / manifesto ---------- */
.about { text-align: center; }
.manifesto {
  font-family: 'Oswald', sans-serif;
  text-transform: uppercase;
  font-weight: 500;
  font-size: clamp(26px, 5vw, 54px);
  line-height: 1.3;
  max-width: 900px;
  margin: 0 auto;
}
.manifesto .w { display: inline-block; }

/* studio ident banner under the manifesto — framed like the other
   dossier panels (border + corner ticks), but the frame hugs the
   banner's OWN aspect so the art is never cropped, and the brand
   colour is kept (no grayscale). */
.ident-banner {
  max-width: 1160px;
  margin: clamp(40px, 8vh, 90px) auto 0;
  text-align: left;
}
.ident-banner .panel-art { aspect-ratio: auto; }
.ident-banner .panel-art img { filter: none; height: auto; }

/* ---------- Games catalog ---------- */
.catalog-title {
  font-size: clamp(30px, 5vw, 52px);
  font-weight: 600;
  margin-bottom: 44px;
}
.row {
  display: grid;
  grid-template-columns: 70px 1fr auto;
  gap: 18px;
  align-items: baseline;
  padding: 28px 18px;
  border-top: 1px solid var(--line);
  position: relative;
  text-decoration: none;
  color: inherit;
  transition: background 0.3s;
}
.row:last-child { border-bottom: 1px solid var(--line); }
/* left-edge accent bar slides in on hover */
.row::before {
  content: '';
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 3px;
  background: var(--accent);
  box-shadow: 0 0 14px var(--accent-glow);
  transform: scaleY(0);
  transition: transform 0.35s cubic-bezier(0.2, 0.8, 0.2, 1);
}
a.row:hover::before, a.row:focus-visible::before { transform: scaleY(1); }
a.row:hover { background: rgba(255, 255, 255, 0.02); }
a.row:focus-visible { outline: 1px solid var(--accent); outline-offset: -1px; }
.row .num {
  font-size: 12px;
  color: var(--dim);
  letter-spacing: 0.2em;
  transition: color 0.3s;
}
.row .row-title {
  font-family: 'Oswald', sans-serif;
  font-size: clamp(22px, 3.4vw, 32px);
  font-weight: 500;
  text-transform: uppercase;
  transition: letter-spacing 0.35s;
}
a.row:hover .num, a.row:focus-visible .num { color: var(--accent); }
a.row:hover .row-title { letter-spacing: 0.03em; }
.row .row-meta {
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--muted);
  text-align: right;
}
.row .row-meta .st { color: var(--accent); }
/* "open file" arrow slides in on hover */
a.row .row-meta::after {
  content: '→';
  display: inline-block;
  margin-left: 10px;
  color: var(--accent);
  opacity: 0;
  transform: translateX(-6px);
  transition: opacity 0.3s, transform 0.3s;
}
a.row:hover .row-meta::after,
a.row:focus-visible .row-meta::after {
  opacity: 1;
  transform: none;
}
.row.sealed { opacity: 0.35; }
.row.sealed .row-title { color: var(--dim); }

/* ---------- Footer ---------- */
.footer {
  border-top: 1px solid var(--line);
  padding: clamp(48px, 8vw, 80px) clamp(20px, 5vw, 64px) 56px;
  max-width: 1360px;
  margin: 0 auto;
}
.footer-links {
  display: flex;
  flex-wrap: wrap;
  gap: clamp(24px, 5vw, 64px);
  margin-bottom: 36px;
}
.footer-links a {
  display: inline-block;
  color: var(--ink);
  text-decoration: none;
  font-size: 12px;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  padding-bottom: 4px;
  /* underline draws in from the left */
  background: linear-gradient(var(--accent), var(--accent)) no-repeat left bottom / 0% 1px;
  transition: color 0.3s, background-size 0.35s, scale 0.15s;
}
.footer-links a:hover, .footer-links a:focus-visible {
  color: var(--accent);
  background-size: 100% 1px;
}
.footer-links a:active { scale: 0.95; }

.footer-social {
  display: flex;
  flex-wrap: wrap;
  gap: clamp(18px, 3vw, 36px);
  margin-bottom: 36px;
}
.footer-social a {
  display: inline-block;
  color: var(--dim);
  text-decoration: none;
  font-size: 10px;
  letter-spacing: 0.25em;
  text-transform: uppercase;
  background: linear-gradient(var(--accent), var(--accent)) no-repeat left bottom / 0% 1px;
  padding-bottom: 3px;
  transition: color 0.3s, background-size 0.35s;
}
.footer-social a:hover, .footer-social a:focus-visible {
  color: var(--accent);
  background-size: 100% 1px;
}
/* placeholder socials: visible but inert until real URLs exist */
.footer-social a.soon { cursor: default; }
.footer-social a.soon:hover { color: var(--dim); background-size: 0% 1px; }
.soon-tag {
  font-size: 8px;
  color: #333;
  margin-left: 6px;
  letter-spacing: 0.2em;
  vertical-align: super;
}

/* ---------- Support the studio ---------- */
.support { text-align: center; }
.support-title {
  font-family: 'Oswald', sans-serif;
  font-size: clamp(34px, 5.5vw, 64px);
  font-weight: 600;
  line-height: 1.05;
  text-transform: uppercase;
}
.support-desc {
  margin-left: auto;
  margin-right: auto;
  max-width: 520px;
}

/* ---------- Marquee ticker ---------- */
.marquee {
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
  padding: 18px 0;
  overflow: hidden;
}
.marquee-track {
  display: flex;
  width: max-content;
  /* duration scaled with the wider track (3 phrases per half) so the
     scroll speed stays the same slow crawl as before */
  animation: marquee-scroll 96s linear infinite;
}
.marquee:hover .marquee-track { animation-play-state: paused; }
.marquee-seq { display: flex; flex: 0 0 auto; }
.marquee-track span {
  white-space: nowrap;
  font-size: 11px;
  letter-spacing: 0.35em;
  text-transform: uppercase;
  color: var(--dim);
}
@keyframes marquee-scroll {
  to { transform: translateX(-50%); }
}
@media (prefers-reduced-motion: reduce) {
  .marquee-track { animation: none; }
}

/* ---------- Cursor glow (desktop; motion.js positions it) ---------- */
.cursor-glow {
  position: fixed;
  top: -17px;
  left: -17px;
  width: 34px;
  height: 34px;
  pointer-events: none;
  z-index: 250;
  opacity: 0;               /* revealed on first mouse move */
}
.cursor-ring {
  width: 100%;
  height: 100%;
  border-radius: 50%;
  border: 1px solid rgba(58, 143, 255, 0.55);
  box-shadow: 0 0 18px rgba(58, 143, 255, 0.25), inset 0 0 8px rgba(58, 143, 255, 0.15);
  transition: transform 0.3s, border-color 0.3s;
}
.cursor-glow.is-active .cursor-ring {
  transform: scale(1.6);
  border-color: rgba(58, 143, 255, 0.9);
}
.footer-line {
  font-size: 11px;
  letter-spacing: 0.15em;
  color: var(--muted);
  text-transform: uppercase;
}
.footer-dim { color: #333; }
/* blinking terminal cursor after the dossier sign-off */
.footer-dim::after {
  content: '_';
  color: var(--accent);
  margin-left: 4px;
  animation: cursor-blink 1.2s steps(2) infinite;
}
@keyframes cursor-blink {
  0%, 49% { opacity: 1; }
  50%, 100% { opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .footer-dim::after { animation: none; }
}

/* ---------- Mobile ---------- */
@media (max-width: 720px) {
  /* At phone widths the two-line monolith rewraps badly (emblem crowds
     the right edge, EYE strands below), so the hero switches to the
     official lockup: emblem centered on top, WRATH+EYE joined on one
     line beneath. Flex ignores the whitespace between the word spans,
     so the words butt together like the wordmark. */
  .giant {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    row-gap: 0.28em;
    /* big lockup that nearly fills the phone screen. Slight negative
       tracking keeps WRATHEYE inside the viewport even while the fallback
       font (wider than Oswald) is briefly showing */
    font-size: 21vw;
    letter-spacing: -0.02em;
    line-height: 1;
    padding-left: 0;
  }
  .giant-word.accent-word {
    /* solid blue like the lockup — the hover-fill outline is a
       desktop toy anyway */
    color: var(--accent);
    -webkit-text-stroke: 0;
  }
  .topbar-file { letter-spacing: 0.15em; }
  .scroll-hint { display: none; }

  /* emblem becomes the first flex row, centered above the words —
     still sized in em of the .giant font so it scales with the type */
  .emblem-wrap {
    position: static;
    order: -1;
    flex-basis: 100%;
    display: flex;
    justify-content: center;
    width: auto;
  }
  /* min(5em, 92vw): as big as the type allows, but never wider than the
     screen — caps at 92vw so it matches WRATHEYE's width and can't overflow */
  .emblem-wrap img { width: min(5em, 92vw); }

  /* footer row runs out of width — stack it */
  .hero-foot { flex-direction: column; gap: 8px; }

  /* single-column feature, landscape panel */
  .feature-grid { grid-template-columns: 1fr; }
  .panel-art { aspect-ratio: 16 / 10; }
  .feature-grid--showcase .panel-art { aspect-ratio: 16 / 10; }
  .feature-foot { flex-direction: column; align-items: flex-start; }
  .founder-grid { grid-template-columns: 1fr; }
  .founder-art { aspect-ratio: 4 / 5; }

  /* catalog rows stack their meta line */
  .row { grid-template-columns: 48px 1fr; }
  .row .row-meta { grid-column: 2; text-align: left; }
}

