/* ============================================================
   happy2rave — HOME PAGE redesign styles
   playful, leans into the happy⇄rave duality, more motion.
   pairs with styles.css (shared chrome). load AFTER styles.css.
   ============================================================ */

/* the whole homepage flips with html.rave (handled in styles.css for
   body bg/text). here we add the home-only atmosphere + components. */

/* ---------- HERO ---------- */
.hero {
  position: relative;
  min-height: calc(100svh - 70px);
  display: flex;
  align-items: center;
  padding: clamp(48px, 8vh, 110px) 0 clamp(56px, 9vh, 120px);
  overflow: hidden;
}

.hero-inner {
  position: relative;
  z-index: 3;
  width: 100%;
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(22px, 3.4vh, 40px);
}
.hero-inner > * { position: relative; }

/* top meta row */
.hero-top {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 24px;
  flex-wrap: wrap;
}
.hero-side {
  font-family: var(--font-mono);
  font-size: 12px;
  text-transform: lowercase;
  opacity: 0.55;
  text-align: right;
  line-height: 1.65;
}
.hero-side b { color: var(--magenta); font-weight: 500; opacity: 0.9; }
html.rave .hero-side b { color: var(--cyan); }

/* ---------- the dual wordmark + rift portal ---------- */
/* wrap holds: rift (behind) → wordmark → invisible click zones (on top) */
.hero-logo-wrap {
  position: relative;
  width: min(94%, 1040px);
  animation: heroFloat 7s ease-in-out infinite;
}
.hero-logo {
  position: relative;
  display: block;
  margin: 0;
  width: 100%;
  filter: drop-shadow(0 22px 44px rgba(26, 22, 18, 0.14));
}
.hero-logo img {
  display: block;
  width: 100%;
  height: auto;
  position: relative;
  z-index: 2;
}
html.rave .hero-logo {
  filter: drop-shadow(0 0 34px rgba(255, 0, 110, 0.32)) drop-shadow(0 0 80px rgba(0, 240, 255, 0.18));
}
.hero-logo .logo-rave { display: none; }
html.rave .hero-logo .logo-happy { display: none; }
html.rave .hero-logo .logo-rave { display: block; }

/* chromatic echo copies behind the wordmark (only in rave) */
.hero-logo .logo-echo {
  position: absolute;
  inset: 0;
  z-index: 1;
  opacity: 0;
  mix-blend-mode: screen;
  pointer-events: none;
}
.hero-logo .logo-echo img { width: 100%; height: auto; animation: none; }
html.rave .hero-logo .echo-c { opacity: 0.55; transform: translate(-9px, 4px); filter: brightness(0) saturate(100%) invert(72%) sepia(93%) saturate(2000%) hue-rotate(140deg); }
html.rave .hero-logo .echo-m { opacity: 0.55; transform: translate(9px, -4px); filter: brightness(0) saturate(100%) invert(28%) sepia(96%) saturate(5000%) hue-rotate(300deg); }

/* ===== THE RIFT — your glitch-portal gif, flipped 90°, behind the "rave" text ===== */
.rift {
  position: absolute;
  z-index: 0;
  right: 1.5%;
  top: 50%;
  width: 41%;
  aspect-ratio: 1 / 1;
  transform: translateY(-50%) rotate(90deg);
  image-rendering: pixelated;
  pointer-events: none;
  transition: transform 0.3s ease, filter 0.3s ease;
  filter: drop-shadow(0 0 10px rgba(255,0,110,0.5)) drop-shadow(0 0 24px rgba(0,240,255,0.25));
}
/* soft bloom halo behind the rift */
.rift-glow {
  position: absolute;
  z-index: 0;
  right: 6%;
  top: 50%;
  width: 34%;
  height: 130%;
  transform: translateY(-50%);
  pointer-events: none;
  border-radius: 50%;
  background: radial-gradient(ellipse at center, rgba(255,0,110,0.55) 0%, rgba(157,0,255,0.32) 38%, rgba(0,240,255,0.18) 62%, transparent 75%);
  filter: blur(34px);
  opacity: 0.55;
  animation: riftPulse 3.4s ease-in-out infinite;
}
html.rave .rift-glow { opacity: 0.85; }
@keyframes riftPulse {
  0%, 100% { opacity: 0.42; transform: translateY(-50%) scale(0.97); }
  50% { opacity: 0.7; transform: translateY(-50%) scale(1.04); }
}

/* invisible click zones over the wordmark */
.logo-zone {
  position: absolute;
  top: -16%;
  height: 132%;
  z-index: 5;
  border: 0;
  background: transparent;
  padding: 0;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.zone-happy { left: 0; width: 55%; }
.zone-rave  { right: 0; width: 45%; }
.logo-zone:focus-visible { outline: 2px dashed var(--magenta); outline-offset: 4px; border-radius: 12px; }

/* hover affordances: hovering the rave zone brightens + grows the rift */
.hero-logo-wrap:has(.zone-rave:hover) .rift { transform: translateY(-50%) rotate(90deg) scale(1.06); filter: drop-shadow(0 0 14px rgba(255,0,110,0.9)) drop-shadow(0 0 30px rgba(0,240,255,0.4)) brightness(1.12); }
.hero-logo-wrap:has(.zone-rave:hover) .rift-glow { opacity: 0.9; }
.hero-logo-wrap:has(.zone-happy:hover) .hero-logo { filter: drop-shadow(0 14px 30px rgba(255,210,63,0.4)); }
html.rave .hero-logo-wrap:has(.zone-happy:hover) .hero-logo { filter: drop-shadow(0 0 26px rgba(255,210,63,0.5)); }

/* the little "tap the rift" hint, shown only on the happy side's rave zone */
.zone-hint {
  position: absolute;
  bottom: -2px;
  left: 50%;
  transform: translateX(-50%);
  white-space: nowrap;
  font-family: var(--font-mono);
  font-size: 11px;
  letter-spacing: 0.06em;
  text-transform: lowercase;
  color: var(--magenta);
  display: inline-flex;
  align-items: center;
  gap: 7px;
  pointer-events: none;
  animation: hintPulse 2.6s ease-in-out infinite;
}
.zone-hint .zap { font-size: 13px; }
html.rave .zone-rave .zone-hint { display: none; }

@keyframes heroFloat {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-12px); }
}

/* tagline */
.hero-tag {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: clamp(22px, 3vw, 38px);
  line-height: 1.16;
  letter-spacing: -0.02em;
  max-width: 22ch;
  text-wrap: balance;
}
.hero-tag em { font-family: var(--font-body); font-style: italic; color: var(--tomato); }
html.rave .hero-tag em { color: var(--magenta); }

/* CTA row */
.hero-cta-row {
  display: flex;
  align-items: center;
  gap: clamp(18px, 3vw, 36px);
  flex-wrap: wrap;
  margin-top: 6px;
}
.btn-xl { font-size: 15px; padding: 17px 28px; }

/* big primary button glow-up on hover */
.btn-xl:hover { transform: translateY(-2px); }
.btn { transition: all 0.2s, transform 0.2s; }
.btn:active { transform: scale(0.97); }

/* ============================================================
   THE SUN TOGGLE — replaces the clunky orb.
   spinning sun in happy mode = "tap to rave".
   becomes the warm "back to happy" control in rave mode.
   ============================================================ */
.sun-toggle {
  position: relative;
  width: clamp(96px, 12vw, 132px);
  height: clamp(96px, 12vw, 132px);
  border: 0;
  padding: 0;
  background: none;
  cursor: pointer;
  flex-shrink: 0;
  border-radius: 50%;
  isolation: isolate;
}
.sun-toggle:focus-visible { outline: 2px solid var(--magenta); outline-offset: 8px; border-radius: 50%; }

/* the rays + disc */
.sun-toggle .sun-rays {
  position: absolute;
  inset: -18%;
  border-radius: 50%;
  background:
    conic-gradient(from 0deg,
      var(--sun) 0 8deg, transparent 8deg 22deg, var(--sun) 22deg 30deg, transparent 30deg 44deg,
      var(--sun) 44deg 52deg, transparent 52deg 66deg, var(--sun) 66deg 74deg, transparent 74deg 88deg,
      var(--sun) 88deg 96deg, transparent 96deg 110deg, var(--sun) 110deg 118deg, transparent 118deg 132deg,
      var(--sun) 132deg 140deg, transparent 140deg 154deg, var(--sun) 154deg 162deg, transparent 162deg 176deg,
      var(--sun) 176deg 184deg, transparent 184deg 198deg, var(--sun) 198deg 206deg, transparent 206deg 220deg,
      var(--sun) 220deg 228deg, transparent 228deg 242deg, var(--sun) 242deg 250deg, transparent 250deg 264deg,
      var(--sun) 264deg 272deg, transparent 272deg 286deg, var(--sun) 286deg 294deg, transparent 294deg 308deg,
      var(--sun) 308deg 316deg, transparent 316deg 330deg, var(--sun) 330deg 338deg, transparent 338deg 352deg);
  -webkit-mask: radial-gradient(circle, transparent 0 40%, #000 41%);
  mask: radial-gradient(circle, transparent 0 40%, #000 41%);
  animation: spin 18s linear infinite;
  transition: opacity 0.4s ease;
}
.sun-toggle .sun-disc {
  position: absolute;
  inset: 18%;
  border-radius: 50%;
  background: radial-gradient(circle at 42% 36%, var(--sun) 0%, var(--sun-deep) 78%);
  box-shadow: 0 6px 22px -4px rgba(245, 180, 0, 0.7), inset 0 0 0 2px rgba(255,255,255,0.25);
  display: grid;
  place-items: center;
}
/* a little smiley face on the disc — the "happy" half made literal */
.sun-toggle .smile {
  width: 56%;
  height: 56%;
  position: relative;
}
.sun-toggle .smile::before,
.sun-toggle .smile::after {
  content: "";
  position: absolute;
  top: 30%;
  width: 11%;
  height: 17%;
  border-radius: 50%;
  background: var(--ink);
}
.sun-toggle .smile::before { left: 26%; }
.sun-toggle .smile::after { right: 26%; }
.sun-toggle .smile i {
  position: absolute;
  left: 26%; right: 26%;
  bottom: 22%;
  height: 34%;
  border: 0.16em solid var(--ink);
  border-top: 0;
  border-radius: 0 0 999px 999px;
}
.sun-toggle .sun-label {
  position: absolute;
  bottom: -26px;
  left: 50%;
  transform: translateX(-50%);
  white-space: nowrap;
  font-family: var(--font-mono);
  font-size: 11px;
  letter-spacing: 0.06em;
  text-transform: lowercase;
  color: var(--sun-deep);
}
html.rave .sun-toggle .sun-label { color: var(--sun); }
.sun-toggle:hover { transform: scale(1.06); }
.sun-toggle { transition: transform 0.25s ease; }
.sun-toggle:active { transform: scale(0.96); }

/* in rave, the sun lifts to a fixed corner control so it's always reachable */
html.rave .sun-toggle {
  position: fixed;
  right: clamp(18px, 3vw, 34px);
  bottom: clamp(18px, 3vw, 34px);
  z-index: 120;
  width: clamp(64px, 8vw, 84px);
  height: clamp(64px, 8vw, 84px);
  filter: drop-shadow(0 0 22px rgba(255, 210, 63, 0.55));
}
html.rave .sun-toggle .sun-label { bottom: auto; top: -22px; }

/* ============================================================
   ATMOSPHERE LAYERS
   ============================================================ */
/* happy: the big spinning background sun (kept, enlarged) */
.atmo { position: absolute; inset: 0; z-index: 0; pointer-events: none; overflow: hidden; }
.atmo-sun {
  position: absolute;
  top: -160px; right: -200px;
  width: 540px; height: 540px;
  border-radius: 50%;
  background:
    radial-gradient(circle at center, var(--sun) 0 38%, transparent 39%),
    conic-gradient(from 0deg,
      var(--sun) 0 8deg, transparent 8deg 22deg, var(--sun) 22deg 30deg, transparent 30deg 44deg,
      var(--sun) 44deg 52deg, transparent 52deg 66deg, var(--sun) 66deg 74deg, transparent 74deg 88deg,
      var(--sun) 88deg 96deg, transparent 96deg 110deg, var(--sun) 110deg 118deg, transparent 118deg 132deg,
      var(--sun) 132deg 140deg, transparent 140deg 154deg, var(--sun) 154deg 162deg, transparent 162deg 176deg,
      var(--sun) 176deg 184deg, transparent 184deg 198deg, var(--sun) 198deg 206deg, transparent 206deg 220deg,
      var(--sun) 220deg 228deg, transparent 228deg 242deg, var(--sun) 242deg 250deg, transparent 250deg 264deg,
      var(--sun) 264deg 272deg, transparent 272deg 286deg, var(--sun) 286deg 294deg, transparent 294deg 308deg,
      var(--sun) 308deg 316deg, transparent 316deg 330deg, var(--sun) 330deg 338deg, transparent 338deg 352deg);
  opacity: 0.9;
  animation: spin 60s linear infinite;
  transition: opacity 0.5s ease;
}
html.rave .atmo-sun { opacity: 0; }

/* rave: a spinning moon in the top-right corner (same size + spot as the sun; no parallax) */
.atmo-moon {
  position: absolute;
  top: -160px; right: -200px;
  width: 540px; height: 540px;
  border-radius: 50%;
  background:
    /* craters — soft pits, each with a faint sun-lit rim for depth */
    radial-gradient(circle 22px at 60% 38%, rgba(62,74,118,0.55) 0 12px, rgba(228,234,253,0.55) 14px 16px, transparent 22px),
    radial-gradient(circle 30px at 41% 63%, rgba(58,70,114,0.5) 0 17px, rgba(226,232,252,0.5) 19px 22px, transparent 30px),
    radial-gradient(circle 17px at 71% 67%, rgba(62,74,118,0.5) 0 9px, rgba(224,230,250,0.5) 11px 13px, transparent 17px),
    radial-gradient(circle 14px at 33% 37%, rgba(58,70,114,0.46) 0 7px, rgba(224,230,250,0.46) 9px 11px, transparent 14px),
    radial-gradient(circle 15px at 24% 53%, rgba(62,74,118,0.46) 0 8px, rgba(224,230,250,0.45) 10px 12px, transparent 15px),
    radial-gradient(circle 11px at 54% 20%, rgba(58,70,114,0.42) 0 6px, rgba(216,224,248,0.4) 7px 9px, transparent 11px),
    radial-gradient(circle 9px at 78% 49%, rgba(62,74,118,0.4) 0 5px, transparent 9px),
    radial-gradient(circle 8px at 47% 47%, rgba(58,70,114,0.34) 0 4px, transparent 8px),
    /* maria — broad, soft dark plains for surface variation */
    radial-gradient(150px 130px at 52% 60%, rgba(92,108,156,0.4) 0%, transparent 72%),
    radial-gradient(120px 110px at 37% 39%, rgba(98,114,162,0.32) 0%, transparent 74%),
    /* the lit sphere — light from the upper-left, limb-darkened toward the edge */
    radial-gradient(circle at 36% 32%,
      #f6f8ff 0%, #e9edfc 16%, #d6ddf3 36%,
      #bcc5e6 58%, #a2acd5 80%, #828fc1 100%);
  box-shadow:
    0 0 90px rgba(0,240,255,0.35),
    0 0 170px rgba(157,0,255,0.25),
    inset 24px 24px 60px rgba(236,242,255,0.22),
    inset -28px -28px 78px rgba(10,6,18,0.55);
  opacity: 0;
  animation: spin 60s linear infinite;
  transition: opacity 0.6s ease;
}
html.rave .atmo-moon { opacity: 0.92; }

/* a soft second sun glow low-left for warmth balance */
.atmo-warm {
  position: absolute;
  bottom: -220px; left: -160px;
  width: 520px; height: 520px;
  border-radius: 50%;
  background: radial-gradient(circle, var(--tomato) 0%, transparent 62%);
  filter: blur(90px);
  opacity: 0.14;
  animation: drift 20s ease-in-out infinite alternate;
}
html.rave .atmo-warm { opacity: 0; }

/* rave: neon glow blobs */
.atmo-blob { position: absolute; border-radius: 50%; filter: blur(90px); opacity: 0; transition: opacity 0.6s ease; }
.atmo-blob.uv  { top: -180px; left: -140px; width: 560px; height: 560px; background: radial-gradient(circle, var(--uv) 0%, transparent 62%); animation: drift 22s ease-in-out infinite alternate; }
.atmo-blob.mag { bottom: -200px; right: -120px; width: 560px; height: 560px; background: radial-gradient(circle, var(--magenta) 0%, transparent 62%); animation: drift 18s ease-in-out infinite alternate-reverse; }
.atmo-blob.cyan{ top: 30%; left: 40%; width: 420px; height: 420px; background: radial-gradient(circle, var(--cyan) 0%, transparent 62%); animation: drift 26s ease-in-out infinite alternate; }
html.rave .atmo-blob.uv  { opacity: 0.42; }
html.rave .atmo-blob.mag { opacity: 0.38; }
html.rave .atmo-blob.cyan{ opacity: 0.18; }

/* rave: faint perspective grid floor */
.atmo-grid {
  position: absolute;
  inset: 40% -10% -10% -10%;
  background-image:
    linear-gradient(to right, rgba(0,240,255,0.18) 1px, transparent 1px),
    linear-gradient(to bottom, rgba(255,0,110,0.18) 1px, transparent 1px);
  background-size: 56px 56px;
  transform: perspective(420px) rotateX(62deg);
  transform-origin: bottom;
  opacity: 0;
  transition: opacity 0.6s ease;
  -webkit-mask: linear-gradient(to bottom, transparent, #000 60%);
  mask: linear-gradient(to bottom, transparent, #000 60%);
  animation: gridScroll 6s linear infinite;
}
html.rave .atmo-grid { opacity: 0.5; }
@keyframes gridScroll { to { background-position: 0 56px, 0 56px; } }

/* ============================================================
   FLOATING STICKERS — playful chips that wobble + parallax
   ============================================================ */
.sticker {
  position: absolute;
  z-index: 2;
  font-family: var(--font-mono);
  font-size: 11.5px;
  letter-spacing: 0.04em;
  text-transform: lowercase;
  padding: 8px 13px;
  border-radius: 999px;
  white-space: nowrap;
  border: 1px solid var(--ink);
  background: var(--cream);
  color: var(--ink);
  box-shadow: 0 8px 20px -8px rgba(26,22,18,0.4);
  transform: translate3d(calc(var(--mx,0) * var(--px,10px)), calc(var(--my,0) * var(--py,8px)), 0) rotate(var(--rot, -4deg));
  animation: stickerWobble var(--wob, 6s) ease-in-out infinite;
  transition: transform 0.3s cubic-bezier(0.2,0.7,0.2,1);
}
.sticker.pink { background: var(--magenta); color: var(--cream); border-color: var(--magenta); }
.sticker.sunny { background: var(--sun); color: var(--ink); border-color: var(--ink); }
.sticker.heart { background: var(--tomato); color: var(--cream); border-color: var(--tomato); }
html.rave .sticker { background: rgba(10,6,18,0.7); color: var(--bone); border-color: rgba(245,239,224,0.3); backdrop-filter: blur(6px); box-shadow: 0 0 18px -4px rgba(255,0,110,0.5); }
html.rave .sticker.pink { background: var(--magenta); color: var(--void); border-color: var(--magenta); box-shadow: 0 0 22px -2px rgba(255,0,110,0.7); }
html.rave .sticker.sunny { background: var(--cyan); color: var(--void); border-color: var(--cyan); box-shadow: 0 0 22px -2px rgba(0,240,255,0.7); }
html.rave .sticker.heart { background: var(--uv); color: var(--bone); border-color: var(--uv); }

.st-1 { bottom: 12%; right: 28%; --rot: -7deg; --px: 14px; --py: 10px; --wob: 6.5s; }
.st-2 { top: 58%; right: 3.5%; --rot: 6deg; --px: -12px; --py: 8px; --wob: 7.5s; }
.st-3 { bottom: 12%; right: 6%; --rot: 5deg; --px: 16px; --py: -10px; --wob: 8s; }
.st-4 { top: 70%; right: 19%; --rot: -5deg; --px: -16px; --py: -8px; --wob: 6.8s; }

@keyframes stickerWobble {
  0%, 100% { rotate: 0deg; }
  50% { rotate: var(--rot, -4deg); }
}

/* press-to-rave hint */
.rave-hint {
  position: absolute;
  left: 50%;
  bottom: clamp(14px, 3vh, 30px);
  transform: translateX(-50%);
  z-index: 3;
  font-family: var(--font-mono);
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: lowercase;
  opacity: 0.5;
  display: inline-flex;
  align-items: center;
  gap: 9px;
  animation: hintPulse 2.6s ease-in-out infinite;
}
.rave-hint .zap { color: var(--magenta); }
html.rave .rave-hint { display: none; }
@keyframes hintPulse { 0%,100% { opacity: 0.35; } 50% { opacity: 0.7; } }

/* nav wordmark swaps with the mode */
.nav-mark .nav-logo-rave { display: none; }
html.rave .nav-mark .nav-logo-happy { display: none; }
html.rave .nav-mark .nav-logo-rave { display: block; }

/* ============================================================
   FEATURE — The Hook section (self-contained; on the void)
   ============================================================ */
.feature { background: var(--void); color: var(--bone); padding: clamp(60px,9vw,140px) 0; position: relative; overflow: hidden; }
.feature::before { content:""; position:absolute; top:-180px; left:-200px; width:700px; height:700px; background:radial-gradient(circle,var(--uv) 0%,transparent 60%); filter:blur(80px); opacity:0.45; pointer-events:none; animation:drift 22s ease-in-out infinite alternate; }
.feature::after { content:""; position:absolute; bottom:-240px; right:-200px; width:600px; height:600px; background:radial-gradient(circle,var(--magenta) 0%,transparent 60%); filter:blur(80px); opacity:0.35; pointer-events:none; animation:drift 18s ease-in-out infinite alternate-reverse; }
.feature-inner { position: relative; z-index: 1; }
.feature-head { display:flex; justify-content:space-between; align-items:end; flex-wrap:wrap; gap:24px; margin-bottom:clamp(36px,5vw,64px); }
.feature-head .lhead { display:flex; flex-direction:column; gap:10px; }
.feature-head .eyebrow { color: var(--cyan); opacity: 0.85; }
.feature-head .eyebrow::before { background: var(--cyan); }
.feature-head h2 { font-family:var(--font-display); font-weight:700; font-size:clamp(40px,5.4vw,72px); letter-spacing:-0.03em; line-height:0.95; }
.feature-head h2 em { font-family:var(--font-body); font-style:italic; color:var(--magenta); font-weight:600; }
.feat-counter { font-family:var(--font-mono); font-size:12px; letter-spacing:0.08em; text-transform:uppercase; opacity:0.55; }
.feat-counter strong { color: var(--bone); opacity: 1; }

.feature-card { display:grid; grid-template-columns:1.05fr 1fr; gap:clamp(28px,4vw,56px); align-items:stretch; background:rgba(245,239,224,0.03); border:1px solid rgba(245,239,224,0.1); border-radius:20px; overflow:hidden; padding:clamp(20px,2.5vw,32px); }
@media (max-width:820px) { .feature-card { grid-template-columns: 1fr; gap: 24px; } }
.hook-art { position:relative; aspect-ratio:4/5; background:radial-gradient(ellipse at 50% 30%,#2a1845 0%,#0a0612 75%); border-radius:14px; overflow:hidden; isolation:isolate; }
.hook-art > img { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }
.hook-art .scanlines { position:absolute; inset:0; background:repeating-linear-gradient(0deg,transparent 0 2px,rgba(245,239,224,0.04) 2px 3px); pointer-events:none; }
.art-stamp { position:absolute; top:20px; left:20px; font-family:var(--font-mono); font-size:10.5px; letter-spacing:0.1em; text-transform:uppercase; padding:5px 10px; border-radius:999px; background:var(--magenta); color:var(--void); z-index:2; }
.art-coords { position:absolute; bottom:18px; left:20px; right:20px; display:flex; justify-content:space-between; font-family:var(--font-mono); font-size:10.5px; letter-spacing:0.06em; text-transform:lowercase; color:var(--cyan); opacity:0.7; z-index:2; }
.hook-text { display:flex; flex-direction:column; justify-content:space-between; gap:28px; padding:clamp(8px,1vw,20px) 0; }
.hook-title { font-family:var(--font-display); font-weight:800; font-size:clamp(56px,8vw,120px); line-height:0.88; letter-spacing:-0.045em; color:var(--bone); }
.hook-title em { font-family:var(--font-body); font-style:italic; color:var(--magenta); font-weight:600; }
.hook-tagline { font-family:var(--font-display); font-weight:500; font-size:clamp(20px,2.2vw,26px); letter-spacing:-0.015em; line-height:1.25; opacity:0.9; text-wrap:balance; }
.hook-meta-row { display:flex; flex-wrap:wrap; gap:8px; margin:4px 0 12px; }
.meta-pill { font-family:var(--font-mono); font-size:10.5px; letter-spacing:0.08em; text-transform:uppercase; padding:5px 10px; border-radius:999px; border:1px solid rgba(245,239,224,0.2); background:rgba(245,239,224,0.04); }
.meta-pill.ready { background:var(--sun); color:var(--void); border-color:var(--sun); }
.hook-stats { display:grid; grid-template-columns:1fr 1fr 1fr; gap:16px; padding:20px 0; border-top:1px solid rgba(245,239,224,0.12); border-bottom:1px solid rgba(245,239,224,0.12); }
.hook-stats .s-num { font-family:var(--font-display); font-weight:700; font-size:26px; letter-spacing:-0.02em; line-height:1; }
.hook-stats .s-num em { font-family:var(--font-body); font-style:italic; color:var(--cyan); }
.hook-stats .s-lab { font-family:var(--font-mono); font-size:10px; text-transform:uppercase; letter-spacing:0.08em; opacity:0.55; margin-top:6px; }
.hook-actions { display:flex; gap:12px; flex-wrap:wrap; }
/* the feature panel is always dark (even in happy mode), so the ghost CTA
   needs light ink here too — otherwise its --ink text is invisible.
   rave mode already gets this from the html.rave .btn-ghost override. */
.feature .btn.btn-ghost { color: var(--bone); border-color: var(--bone); }
.feature .btn.btn-ghost:hover { background: var(--bone); color: var(--void); border-color: var(--bone); }

/* ===== enriched hook content (so the section isn't empty) ===== */
.hook-inside { margin: 22px 0 4px; }
.hook-inside-lab {
  font-family: var(--font-mono);
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  opacity: 0.5;
  display: inline-flex;
  align-items: center;
  gap: 9px;
  margin-bottom: 12px;
}
.hook-inside-lab::before { content:""; width: 22px; height: 1px; background: var(--cyan); display: inline-block; }
.hook-inside ul {
  list-style: none;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px 22px;
}
@media (max-width: 540px) { .hook-inside ul { grid-template-columns: 1fr; } }
.hook-inside li {
  font-family: var(--font-body);
  font-size: 14.5px;
  line-height: 1.35;
  opacity: 0.86;
  padding-left: 16px;
  position: relative;
}
.hook-inside li::before {
  content: "";
  position: absolute;
  left: 0; top: 0.62em;
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--magenta);
  box-shadow: 0 0 8px var(--magenta);
}

.hook-platforms {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 22px;
  margin-top: 20px;
  padding-top: 18px;
  border-top: 1px solid rgba(245,239,224,0.12);
}
.hp-item {
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.02em;
  text-transform: lowercase;
  opacity: 0.82;
  display: inline-flex;
  align-items: center;
  gap: 9px;
}
.hp-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
.hp-dot.live { background: var(--sun); box-shadow: 0 0 10px var(--sun); animation: hpBlink 2.2s ease-in-out infinite; }
.hp-dot.soon { background: transparent; border: 1px solid rgba(245,239,224,0.5); }
@keyframes hpBlink { 0%,100% { opacity: 1; } 50% { opacity: 0.35; } }

/* loaded-only: a little soundtrack "now playing" accent (the studio is half music) */
.hook-soundtrack {
  display: none;
  align-items: center;
  gap: 12px;
  margin-top: 20px;
  padding: 11px 15px;
  border: 1px solid rgba(245,239,224,0.12);
  border-radius: 12px;
  background: rgba(245,239,224,0.03);
  width: fit-content;
}
.hs-eq { display: inline-flex; align-items: flex-end; gap: 3px; height: 18px; }
.hs-eq i {
  width: 3px;
  background: linear-gradient(to top, var(--magenta), var(--cyan));
  border-radius: 2px;
  animation: eqBar 0.9s ease-in-out infinite;
}
.hs-eq i:nth-child(1) { height: 40%; animation-delay: -0.1s; }
.hs-eq i:nth-child(2) { height: 80%; animation-delay: -0.5s; }
.hs-eq i:nth-child(3) { height: 55%; animation-delay: -0.2s; }
.hs-eq i:nth-child(4) { height: 95%; animation-delay: -0.7s; }
.hs-eq i:nth-child(5) { height: 50%; animation-delay: -0.35s; }
.hs-eq i:nth-child(6) { height: 75%; animation-delay: -0.6s; }
.hs-eq i:nth-child(7) { height: 35%; animation-delay: -0.15s; }
@keyframes eqBar { 0%,100% { transform: scaleY(0.4); } 50% { transform: scaleY(1); } }
.hs-track { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.04em; color: var(--cyan); opacity: 0.8; }

/* ----- density variants (driven by the Tweaks panel) ----- */
.feature[data-hook-density="minimal"] .hook-inside,
.feature[data-hook-density="minimal"] .hook-platforms,
.feature[data-hook-density="minimal"] .hook-soundtrack { display: none; }

.feature[data-hook-density="loaded"] .hook-soundtrack { display: inline-flex; }

/* ============================================================
   MARQUEE SEAM — scrolling brand words bridging hero → feature
   ============================================================ */
.marquee-seam {
  position: relative;
  background: var(--ink);
  color: var(--cream);
  padding: 16px 0;
  overflow: hidden;
  border-top: 1px solid rgba(26,22,18,0.2);
  border-bottom: 1px solid rgba(26,22,18,0.2);
}
html.rave .marquee-seam { background: var(--magenta); color: var(--void); }
.marquee-track {
  display: flex;
  width: max-content;
  gap: 0;
  animation: marquee 26s linear infinite;
}
.marquee-track span {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: clamp(20px, 2.6vw, 34px);
  letter-spacing: -0.02em;
  text-transform: lowercase;
  padding: 0 22px;
  display: inline-flex;
  align-items: center;
  gap: 22px;
}
.marquee-track span::after {
  content: "✦";
  font-size: 0.6em;
  color: var(--sun);
}
html.rave .marquee-track span::after { content: "✦"; color: var(--cyan); }
@keyframes marquee { to { transform: translateX(-50%); } }
.marquee-seam:hover .marquee-track { animation-play-state: paused; }

/* ============================================================
   FEATURE — enrich The Hook with a real screenshot strip
   (the feature's core copy/card markup keeps the original look)
   ============================================================ */
.hook-shots {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 12px;
  margin-top: clamp(28px, 4vw, 48px);
}
@media (max-width: 760px) {
  .hook-shots { grid-template-columns: repeat(2, 1fr); }
}
.hook-shot {
  position: relative;
  aspect-ratio: 4 / 5;
  border-radius: 12px;
  overflow: hidden;
  border: 1px solid rgba(245,239,224,0.12);
  background: var(--void-deep);
  cursor: pointer;
  isolation: isolate;
  transition: transform 0.3s cubic-bezier(0.2,0.7,0.2,1), border-color 0.3s, box-shadow 0.3s;
}
.hook-shot img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform 0.5s ease; }
.hook-shot .scan { position: absolute; inset: 0; background: repeating-linear-gradient(0deg, transparent 0 2px, rgba(245,239,224,0.05) 2px 3px); pointer-events: none; }
.hook-shot .shot-tag {
  position: absolute;
  left: 10px; bottom: 10px;
  font-family: var(--font-mono);
  font-size: 9.5px;
  letter-spacing: 0.05em;
  text-transform: lowercase;
  color: var(--cyan);
  background: rgba(10,6,18,0.6);
  padding: 3px 8px;
  border-radius: 999px;
  backdrop-filter: blur(4px);
  opacity: 0;
  transform: translateY(6px);
  transition: opacity 0.25s, transform 0.25s;
}
.hook-shot:hover { transform: translateY(-6px); border-color: var(--magenta); box-shadow: 0 24px 44px -22px rgba(255,0,110,0.55); }
.hook-shot:hover img { transform: scale(1.06); }
.hook-shot:hover .shot-tag { opacity: 1; transform: translateY(0); }

/* ============================================================
   STRONGER FULL-PAGE GLITCH on happy → rave flip
   ============================================================ */
@keyframes h2rShake {
  0% { transform: translate(0,0); }
  20% { transform: translate(-7px, 2px); }
  40% { transform: translate(6px, -3px); }
  60% { transform: translate(-4px, 1px); }
  80% { transform: translate(3px, -1px); }
  100% { transform: translate(0,0); }
}
html.h2r-glitch body { animation: h2rShake 0.5s steps(2, end) both; }

/* tearing colour bars sweeping the viewport */
@keyframes h2rBars { 0% { opacity: 0; } 10% { opacity: 1; } 60% { opacity: 1; } 100% { opacity: 0; } }
@keyframes h2rBarSlide1 { 0% { transform: translateX(0); } 100% { transform: translateX(60px); } }
@keyframes h2rBarSlide2 { 0% { transform: translateX(0); } 100% { transform: translateX(-80px); } }
html.h2r-glitch::before {
  content: "";
  position: fixed; inset: 0; z-index: 9998; pointer-events: none;
  background:
    linear-gradient(0deg, transparent 22%, rgba(0,240,255,0.55) 22% 24%, transparent 24%),
    linear-gradient(0deg, transparent 52%, rgba(255,0,110,0.55) 52% 55%, transparent 55%),
    linear-gradient(0deg, transparent 74%, rgba(157,0,255,0.5) 74% 76%, transparent 76%);
  mix-blend-mode: screen;
  animation: h2rBars 0.6s steps(3) forwards, h2rBarSlide1 0.6s steps(4) forwards;
}
html.h2r-glitch::after {
  content: "";
  position: fixed; inset: 0; z-index: 9999; pointer-events: none;
  background:
    repeating-linear-gradient(0deg, transparent 0 2px, rgba(245,239,224,0.10) 2px 3px),
    linear-gradient(90deg, rgba(255,0,110,0.18), rgba(157,0,255,0.10), rgba(0,240,255,0.18));
  mix-blend-mode: screen;
  animation: h2rBars 0.62s steps(4) forwards, h2rBarSlide2 0.62s steps(5) forwards;
}
html.h2r-glitch .hero-logo img { animation: h2rGlitch 0.32s steps(2, end) 2; }
@keyframes h2rGlitch {
  0% { transform: translate(0,0); filter: none; }
  25% { transform: translate(-4px, 1px); filter: drop-shadow(4px 0 var(--magenta)) drop-shadow(-4px 0 var(--cyan)); }
  50% { transform: translate(4px, -1px); filter: drop-shadow(-5px 0 var(--cyan)) drop-shadow(5px 0 var(--magenta)); }
  75% { transform: translate(-2px, 0); filter: drop-shadow(2px 0 var(--magenta)) drop-shadow(-2px 0 var(--cyan)); }
  100% { transform: translate(0,0); filter: none; }
}

/* ---------- entrance ---------- */
@keyframes heroRise { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: none; } }
.hero-inner > * { animation: heroRise 0.85s cubic-bezier(0.2,0.7,0.2,1) both; }
.hero-inner > *:nth-child(1) { animation-delay: 0.05s; }
.hero-inner > *:nth-child(2) { animation-delay: 0.16s; }
.hero-inner > *:nth-child(3) { animation-delay: 0.27s; }
.hero-inner > *:nth-child(4) { animation-delay: 0.38s; }

/* ---------- reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  .hero-logo, .hero-logo img, .atmo-sun, .atmo-warm, .atmo-blob, .atmo-grid,
  .sticker, .sun-toggle .sun-rays, .marquee-track, .rave-hint,
  .hero-inner > *, .hook-shot, .hook-shot img {
    animation: none !important;
    transition: none !important;
  }
  .hero-logo { transform: none !important; }
  html.h2r-glitch body, html.h2r-glitch .hero-logo img { animation: none !important; }
  html.h2r-glitch::before, html.h2r-glitch::after { display: none !important; }
}
