/* =============================================================
   zone-scroll.css — Scroll Animations Zone
   A Love Letter to the Web
   ============================================================= */

/* ── Zone Tokens ────────────────────────────────────────────── */
:root {
  --zone-color:     oklch(60% 0.22 265);
  --zone-glow:      oklch(55% 0.20 270 / 0.35);
  --planet-1-hue:   285;
  --planet-2-hue:   220;
}

/* ── Zone Hero ──────────────────────────────────────────────── */
.zone-hero {
  position: relative;
  overflow: hidden;
  background: oklch(5% 0.02 265);
  view-transition-name: zone-hero;
}

/* ── Galaxy Container ───────────────────────────────────────── */
.galaxy {
  position: absolute;
  inset: 0;
  overflow: hidden;
  pointer-events: none;
  z-index: 0;
}

/* ── Galaxy Layers (scroll-driven parallax) ─────────────────── */
.galaxy-layer {
  position: absolute;
  inset: -20%;      /* overhang to prevent edge gaps during drift */
  width: 140%;
  height: 140%;
}

/* Far stars — tiny white dots, drift -50px over full scroll */
.stars-far {
  background-image:
    radial-gradient(1px 1px at 10%  12%, oklch(92% 0.01 265) 0%, transparent 100%),
    radial-gradient(1px 1px at 25%  68%, oklch(90% 0.01 265) 0%, transparent 100%),
    radial-gradient(1px 1px at 40%  22%, oklch(94% 0.01 265) 0%, transparent 100%),
    radial-gradient(1px 1px at 55%  80%, oklch(88% 0.01 265) 0%, transparent 100%),
    radial-gradient(1px 1px at 70%  35%, oklch(91% 0.01 265) 0%, transparent 100%),
    radial-gradient(1px 1px at 82%  55%, oklch(89% 0.01 265) 0%, transparent 100%),
    radial-gradient(1px 1px at 92%  10%, oklch(93% 0.01 265) 0%, transparent 100%),
    radial-gradient(1px 1px at 15%  45%, oklch(87% 0.01 265) 0%, transparent 100%),
    radial-gradient(1px 1px at 35%  90%, oklch(95% 0.01 265) 0%, transparent 100%),
    radial-gradient(1px 1px at 60%  5%,  oklch(90% 0.01 265) 0%, transparent 100%),
    radial-gradient(1px 1px at 78%  72%, oklch(92% 0.01 265) 0%, transparent 100%),
    radial-gradient(1px 1px at 48%  48%, oklch(88% 0.01 265) 0%, transparent 100%),
    radial-gradient(1px 1px at 5%   85%, oklch(91% 0.01 265) 0%, transparent 100%),
    radial-gradient(1px 1px at 90%  92%, oklch(94% 0.01 265) 0%, transparent 100%),
    radial-gradient(1px 1px at 20%  30%, oklch(89% 0.01 265) 0%, transparent 100%),
    radial-gradient(1px 1px at 65%  60%, oklch(93% 0.01 265) 0%, transparent 100%),
    radial-gradient(1px 1px at 44%  15%, oklch(90% 0.01 265) 0%, transparent 100%),
    radial-gradient(1px 1px at 87%  40%, oklch(88% 0.01 265) 0%, transparent 100%);
  opacity: 0.7;
}

@supports (animation-timeline: scroll()) {
  .stars-far {
    animation: drift-far linear both;
    animation-timeline: scroll();
    animation-range: 0% 100%;
  }
}

@keyframes drift-far {
  from { transform: translateY(0px); }
  to   { transform: translateY(-50px); }
}

/* Mid stars — slightly larger, color-tinted, drift -100px */
.stars-mid {
  background-image:
    radial-gradient(2px 2px at 8%   20%, oklch(72% 0.18 285) 0%, transparent 100%),
    radial-gradient(2px 2px at 30%  55%, oklch(70% 0.16 250) 0%, transparent 100%),
    radial-gradient(2px 2px at 52%  18%, oklch(74% 0.20 300) 0%, transparent 100%),
    radial-gradient(2px 2px at 68%  75%, oklch(68% 0.14 240) 0%, transparent 100%),
    radial-gradient(2px 2px at 85%  30%, oklch(73% 0.19 280) 0%, transparent 100%),
    radial-gradient(2px 2px at 18%  80%, oklch(71% 0.17 265) 0%, transparent 100%),
    radial-gradient(2px 2px at 42%  92%, oklch(69% 0.15 295) 0%, transparent 100%),
    radial-gradient(2px 2px at 75%  10%, oklch(75% 0.21 270) 0%, transparent 100%),
    radial-gradient(2px 2px at 95%  65%, oklch(67% 0.13 255) 0%, transparent 100%),
    radial-gradient(2px 2px at 3%   42%, oklch(72% 0.18 310) 0%, transparent 100%),
    radial-gradient(2px 2px at 58%  50%, oklch(70% 0.16 230) 0%, transparent 100%),
    radial-gradient(2px 2px at 22%  15%, oklch(74% 0.20 275) 0%, transparent 100%);
  opacity: 0.85;
}

@supports (animation-timeline: scroll()) {
  .stars-mid {
    animation: drift-mid linear both;
    animation-timeline: scroll();
    animation-range: 0% 100%;
  }
}

@keyframes drift-mid {
  from { transform: translateY(0px); }
  to   { transform: translateY(-100px); }
}

/* Near stars — largest, brightest, drift -150px */
.stars-near {
  background-image:
    radial-gradient(3px 3px at 15%  35%, oklch(82% 0.22 260) 0%, transparent 100%),
    radial-gradient(3px 3px at 45%  70%, oklch(80% 0.20 290) 0%, transparent 100%),
    radial-gradient(3px 3px at 72%  25%, oklch(84% 0.24 275) 0%, transparent 100%),
    radial-gradient(3px 3px at 90%  80%, oklch(78% 0.18 245) 0%, transparent 100%),
    radial-gradient(3px 3px at 5%   60%, oklch(83% 0.23 300) 0%, transparent 100%),
    radial-gradient(3px 3px at 60%  5%,  oklch(81% 0.21 265) 0%, transparent 100%),
    radial-gradient(3px 3px at 33%  90%, oklch(79% 0.19 280) 0%, transparent 100%),
    radial-gradient(3px 3px at 80%  48%, oklch(85% 0.25 255) 0%, transparent 100%);
  opacity: 0.95;
}

@supports (animation-timeline: scroll()) {
  .stars-near {
    animation: drift-near linear both;
    animation-timeline: scroll();
    animation-range: 0% 100%;
  }
}

@keyframes drift-near {
  from { transform: translateY(0px); }
  to   { transform: translateY(-150px); }
}

/* ── Nebula Clouds ──────────────────────────────────────────── */
.nebula {
  position: absolute;
  border-radius: 50%;
  filter: blur(60px);
  pointer-events: none;
}

.nebula-1 {
  width: 55vw;
  height: 55vw;
  top: -15%;
  left: -10%;
  background: radial-gradient(ellipse, oklch(50% 0.20 285 / 0.45) 0%, transparent 70%);
}

.nebula-2 {
  width: 45vw;
  height: 45vw;
  top: 10%;
  right: -8%;
  background: radial-gradient(ellipse, oklch(48% 0.18 250 / 0.35) 0%, transparent 70%);
}

.nebula-3 {
  width: 35vw;
  height: 35vw;
  bottom: -10%;
  left: 35%;
  background: radial-gradient(ellipse, oklch(52% 0.22 310 / 0.30) 0%, transparent 70%);
}

@supports (animation-timeline: scroll()) {
  .nebula-1 {
    animation: nebula-pulse-1 linear both;
    animation-timeline: scroll();
    animation-range: 0% 100%;
  }
  .nebula-2 {
    animation: nebula-pulse-2 linear both;
    animation-timeline: scroll();
    animation-range: 0% 100%;
  }
  .nebula-3 {
    animation: nebula-pulse-3 linear both;
    animation-timeline: scroll();
    animation-range: 0% 100%;
  }
}

@keyframes nebula-pulse-1 {
  from { opacity: 0.3; transform: scale(1)    translateY(0px); }
  to   { opacity: 0.6; transform: scale(1.08) translateY(-40px); }
}

@keyframes nebula-pulse-2 {
  from { opacity: 0.25; transform: scale(1)    translateY(0px); }
  to   { opacity: 0.55; transform: scale(1.06) translateY(-60px); }
}

@keyframes nebula-pulse-3 {
  from { opacity: 0.20; transform: scale(1)    translateY(0px); }
  to   { opacity: 0.50; transform: scale(1.05) translateY(-30px); }
}

/* ── Planets ────────────────────────────────────────────────── */
.planet {
  position: absolute;
  border-radius: 50%;
  pointer-events: none;
}

.planet-1 {
  width: clamp(80px, 12vw, 180px);
  height: clamp(80px, 12vw, 180px);
  top: 12%;
  right: 10%;
  background: radial-gradient(
    circle at 35% 35%,
    oklch(70% 0.20 var(--planet-1-hue)) 0%,
    oklch(45% 0.18 var(--planet-1-hue)) 50%,
    oklch(20% 0.08 var(--planet-1-hue)) 100%
  );
  box-shadow:
    inset -8px -8px 24px oklch(10% 0.05 var(--planet-1-hue) / 0.8),
    0 0 40px oklch(55% 0.18 var(--planet-1-hue) / 0.3),
    0 0 80px oklch(50% 0.15 var(--planet-1-hue) / 0.15);
  animation: planet-float-1 6s ease-in-out infinite;
}

.planet-2 {
  width: clamp(40px, 6vw, 90px);
  height: clamp(40px, 6vw, 90px);
  bottom: 22%;
  left: 8%;
  background: radial-gradient(
    circle at 38% 32%,
    oklch(72% 0.16 var(--planet-2-hue)) 0%,
    oklch(48% 0.14 var(--planet-2-hue)) 55%,
    oklch(22% 0.06 var(--planet-2-hue)) 100%
  );
  box-shadow:
    inset -5px -5px 16px oklch(10% 0.04 var(--planet-2-hue) / 0.8),
    0 0 24px oklch(55% 0.14 var(--planet-2-hue) / 0.3),
    0 0 48px oklch(50% 0.12 var(--planet-2-hue) / 0.15);
  animation: planet-float-2 8s ease-in-out infinite;
}

@supports (animation-timeline: scroll()) {
  .planet-1 {
    animation:
      planet-float-1 6s ease-in-out infinite,
      planet-scroll-1 linear both;
    animation-timeline: auto, scroll();
    animation-range: auto, 0% 100%;
  }
  .planet-2 {
    animation:
      planet-float-2 8s ease-in-out infinite,
      planet-scroll-2 linear both;
    animation-timeline: auto, scroll();
    animation-range: auto, 0% 100%;
  }
}

@keyframes planet-float-1 {
  0%, 100% { transform: translateY(0px) rotate(0deg); }
  50%       { transform: translateY(-18px) rotate(4deg); }
}

@keyframes planet-float-2 {
  0%, 100% { transform: translateY(0px) rotate(0deg); }
  50%       { transform: translateY(-12px) rotate(-3deg); }
}

@keyframes planet-scroll-1 {
  from { transform: translateX(0px); }
  to   { transform: translateX(-40px); }
}

@keyframes planet-scroll-2 {
  from { transform: translateX(0px); }
  to   { transform: translateX(30px); }
}

/* ── Scroll Progress Bar ────────────────────────────────────── */
.scroll-progress {
  position: fixed;
  top: 0;
  left: 0;
  height: 3px;
  background: linear-gradient(
    90deg,
    var(--zone-color),
    oklch(68% 0.14 295)
  );
  transform-origin: left;
  transform: scaleX(0);
  z-index: calc(var(--z-overlay) + 1);
}

@supports (animation-timeline: scroll()) {
  .scroll-progress {
    transform: none;
    animation: progress-grow linear both;
    animation-timeline: scroll();
    animation-range: 0% 100%;
  }
}

@keyframes progress-grow {
  from { transform: scaleX(0); width: 100%; }
  to   { transform: scaleX(1); width: 100%; }
}

/* ── Zone Hero Text ─────────────────────────────────────────── */
.zone-hero-text {
  position: relative;
  z-index: var(--z-raised);
  text-align: center;
}

.zone-label {
  color: var(--zone-color);
  margin-bottom: var(--space-md);
  letter-spacing: 0.12em;
}

.zone-title {
  font-size: var(--text-3xl);
  font-weight: 800;
  letter-spacing: -0.04em;
  line-height: 0.95;
  color: oklch(95% 0.01 265);
  text-shadow:
    0 0 60px oklch(60% 0.22 265 / 0.4),
    0 0 120px oklch(55% 0.18 265 / 0.2);
  margin-bottom: var(--space-lg);
}

.zone-subtitle {
  font-size: var(--text-lg);
  color: oklch(65% 0.05 265);
  line-height: 1.6;
}

/* ── Scroll Hint ────────────────────────────────────────────── */
.scroll-hint {
  position: absolute;
  bottom: var(--space-xl);
  left: 50%;
  transform: translateX(-50%);
  z-index: var(--z-raised);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-xs);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: oklch(55% 0.05 265);
  animation: scroll-hint-float 3s ease-in-out infinite;
}

.scroll-hint__arrow {
  font-size: var(--text-md);
  animation: scroll-hint-bounce 2s ease-in-out infinite;
}

@keyframes scroll-hint-float {
  0%, 100% { opacity: 0.5; transform: translateX(-50%) translateY(0); }
  50%       { opacity: 1;   transform: translateX(-50%) translateY(6px); }
}

@keyframes scroll-hint-bounce {
  0%, 100% { transform: translateY(0); }
  50%       { transform: translateY(4px); }
}

/* ── Story Section ──────────────────────────────────────────── */
.zone-story {
  view-transition-name: zone-content;
  background: var(--color-base);
}

.story-inner {
  max-width: var(--content-width);
  margin-inline: auto;
  padding-inline: var(--content-padding);
}

.story-header {
  margin-bottom: var(--space-2xl);
}

.story-header h2 {
  margin-bottom: var(--space-md);
}

/* Back link */
.back-link {
  display: inline-flex;
  align-items: center;
  gap: var(--space-sm);
  font-size: var(--text-sm);
  font-family: var(--font-mono);
  color: var(--zone-color);
  margin-bottom: var(--space-xl);
  padding: var(--space-xs) 0;
  border-bottom: 1px solid transparent;
  transition:
    color var(--duration-base) var(--ease-out),
    border-color var(--duration-base) var(--ease-out),
    gap var(--duration-base) var(--ease-out);
}

.back-link:hover {
  color: oklch(75% 0.20 265);
  border-bottom-color: oklch(75% 0.20 265 / 0.4);
  gap: var(--space-md);
}

/* Story grid */
.story-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 22rem), 1fr));
  gap: var(--space-lg);
  margin-bottom: var(--space-2xl);
}

.story-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  padding: var(--space-xl);
  transition:
    transform var(--duration-slow) var(--ease-out),
    border-color var(--duration-base) var(--ease-out),
    box-shadow var(--duration-slow) var(--ease-out);
}

.story-card:hover {
  transform: translateY(-4px);
  border-color: var(--zone-color);
  box-shadow: 0 12px 40px var(--zone-glow);
}

.story-card__icon {
  font-size: 2rem;
  margin-bottom: var(--space-md);
  color: var(--zone-color);
  display: block;
}

.story-card h3 {
  font-family: var(--font-mono);
  font-size: var(--text-base);
  font-weight: 600;
  color: var(--color-text);
  margin-bottom: var(--space-md);
}

.story-card p {
  font-size: var(--text-sm);
  color: var(--color-muted);
  line-height: 1.75;
}

.story-card code {
  font-family: var(--font-mono);
  font-size: 0.875em;
  color: var(--zone-color);
  background: oklch(60% 0.22 265 / 0.1);
  padding: 0.1em 0.3em;
  border-radius: var(--radius-sm);
}

/* ── Browser Support Badge ──────────────────────────────────── */
.support-badge {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  padding: var(--space-xl);
  margin-bottom: var(--space-2xl);
}

.support-badge__heading {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--color-muted);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  margin-bottom: var(--space-lg);
}

.support-badge__list {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-md);
}

.support-badge__item {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  padding: var(--space-sm) var(--space-md);
  border-radius: var(--radius-pill);
  font-size: var(--text-sm);
  font-family: var(--font-mono);
  border: 1px solid var(--color-border);
}

.support-badge__item--full {
  border-color: oklch(60% 0.18 145 / 0.4);
  background: oklch(60% 0.18 145 / 0.06);
}

.support-badge__item--partial {
  border-color: oklch(70% 0.18 60 / 0.4);
  background: oklch(70% 0.18 60 / 0.06);
}

.support-badge__browser {
  color: var(--color-text);
  font-weight: 600;
}

.support-badge__version {
  color: var(--color-muted);
}

.support-badge__item--full .support-badge__status {
  color: oklch(68% 0.20 145);
}

.support-badge__item--partial .support-badge__status {
  color: oklch(72% 0.20 60);
}

/* ── Code Section ───────────────────────────────────────────── */
.code-section {
  display: flex;
  flex-direction: column;
  gap: var(--space-lg);
  margin-bottom: var(--space-2xl);
}

.code-block-wrapper {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  overflow: hidden;
}

.code-block-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--space-sm) var(--space-lg);
  background: oklch(10% 0.01 265);
  border-bottom: 1px solid var(--color-border);
}

.code-block-label {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-muted);
  letter-spacing: 0.04em;
}

.code-block-wrapper .code-block {
  border: none;
  border-radius: 0;
  margin: 0;
}

/* ── Copy Button ────────────────────────────────────────────── */
.copy-btn {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  color: var(--zone-color);
  padding: var(--space-xs) var(--space-sm);
  border: 1px solid oklch(60% 0.22 265 / 0.3);
  border-radius: var(--radius-sm);
  background: oklch(60% 0.22 265 / 0.08);
  cursor: pointer;
  transition:
    background var(--duration-fast) var(--ease-out),
    border-color var(--duration-fast) var(--ease-out),
    color var(--duration-fast) var(--ease-out);
  letter-spacing: 0.04em;
}

.copy-btn:hover {
  background: oklch(60% 0.22 265 / 0.18);
  border-color: oklch(60% 0.22 265 / 0.6);
  color: oklch(72% 0.20 265);
}

/* ── Playground Section ─────────────────────────────────────── */
.zone-playground {
  background: oklch(7% 0.015 265);
  border-top: 1px solid var(--color-border);
}

.playground-inner {
  max-width: var(--content-width);
  margin-inline: auto;
  padding-inline: var(--content-padding);
}

.playground-header {
  margin-bottom: var(--space-2xl);
}

.playground-header h2 {
  margin-bottom: var(--space-md);
}

.playground-split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-xl);
  margin-bottom: var(--space-xl);
  align-items: start;
}

@media (max-width: 768px) {
  .playground-split {
    grid-template-columns: 1fr;
  }
}

/* ── Controls Panel ─────────────────────────────────────────── */
.playground-controls {
  display: flex;
  flex-direction: column;
  gap: var(--space-lg);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  padding: var(--space-xl);
}

.control-group {
  display: flex;
  flex-direction: column;
  gap: var(--space-sm);
}

.control-label {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--color-text);
  letter-spacing: 0.02em;
}

.control-select {
  appearance: none;
  -webkit-appearance: none;
  background: oklch(8% 0.01 265);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  color: var(--color-text);
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  padding: var(--space-sm) var(--space-md);
  padding-right: var(--space-xl);
  cursor: pointer;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23666' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 12px center;
  transition:
    border-color var(--duration-fast) var(--ease-out),
    box-shadow var(--duration-fast) var(--ease-out);
}

.control-select:hover,
.control-select:focus {
  border-color: var(--zone-color);
  box-shadow: 0 0 0 2px oklch(60% 0.22 265 / 0.15);
  outline: none;
}

.control-desc {
  font-size: var(--text-xs);
  color: var(--color-muted);
  line-height: 1.5;
}

.control-range {
  -webkit-appearance: none;
  appearance: none;
  width: 100%;
  height: 4px;
  background: var(--color-border);
  border-radius: var(--radius-pill);
  cursor: pointer;
  outline: none;
  transition: background var(--duration-fast) var(--ease-out);
}

.control-range::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: var(--zone-color);
  border: 2px solid oklch(8% 0.01 265);
  box-shadow: 0 0 8px var(--zone-glow);
  cursor: pointer;
  transition:
    transform var(--duration-fast) var(--ease-out),
    box-shadow var(--duration-fast) var(--ease-out);
}

.control-range:focus-visible {
  outline: 2px solid var(--zone-color, var(--color-primary));
  outline-offset: 4px;
  border-radius: var(--radius-pill);
}

.control-range::-webkit-slider-thumb:hover {
  transform: scale(1.2);
  box-shadow: 0 0 16px var(--zone-glow);
}

.control-range::-moz-range-thumb {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: var(--zone-color);
  border: 2px solid oklch(8% 0.01 265);
  box-shadow: 0 0 8px var(--zone-glow);
  cursor: pointer;
}

/* ── Demo Panel ─────────────────────────────────────────────── */
.playground-demo-panel {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  overflow: hidden;
  background: oklch(6% 0.01 265);
}

.demo-scroller {
  height: 340px;
  overflow-y: scroll;
  overflow-x: hidden;
  scroll-behavior: smooth;
  position: relative;
}

.demo-scroller:focus {
  outline: 2px solid var(--zone-color);
  outline-offset: 0;
}

/* Custom scrollbar */
.demo-scroller::-webkit-scrollbar {
  width: 4px;
}

.demo-scroller::-webkit-scrollbar-track {
  background: oklch(8% 0.01 265);
}

.demo-scroller::-webkit-scrollbar-thumb {
  background: var(--zone-color);
  border-radius: var(--radius-pill);
}

.demo-scroller__inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  min-height: 900px;
  padding: var(--space-lg);
  gap: 0;
}

.demo-spacer {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: oklch(40% 0.04 265);
}

/* ── Scroll Demo Box ────────────────────────────────────────── */
.scroll-demo-box {
  width: 120px;
  height: 120px;
  border-radius: var(--radius-lg);
  background: linear-gradient(
    135deg,
    oklch(60% 0.22 265) 0%,
    oklch(55% 0.20 295) 50%,
    oklch(50% 0.18 310) 100%
  );
  box-shadow:
    0 8px 32px oklch(55% 0.20 265 / 0.35),
    0 0 0 1px oklch(70% 0.18 265 / 0.2);
  flex-shrink: 0;
  align-self: center;
  will-change: transform, opacity;
}

/* ── Generated Code Block ───────────────────────────────────── */
.generated-code {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  overflow: hidden;
  margin-bottom: var(--space-2xl);
}

.generated-code .code-block-header {
  background: oklch(10% 0.01 265);
}

.generated-code .code-block {
  border: none;
  border-radius: 0;
  min-height: 160px;
}

/* ── js-reveal Scroll Animation ─────────────────────────────── */
.js-reveal {
  opacity: 0;
  transform: translateY(1.5rem);
  transition:
    opacity var(--duration-xslow) var(--ease-out),
    transform var(--duration-xslow) var(--ease-out);
  transition-delay: var(--reveal-delay, 0ms);
}

.js-reveal.revealed {
  opacity: 1;
  transform: translateY(0);
}

/* ── Reduced Motion ─────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  .stars-far,
  .stars-mid,
  .stars-near,
  .nebula-1,
  .nebula-2,
  .nebula-3,
  .planet-1,
  .planet-2,
  .scroll-progress {
    animation: none !important;
  }

  .scroll-hint {
    animation: none !important;
    opacity: 0.7;
  }

  .js-reveal {
    opacity: 1;
    transform: none;
    transition: none;
  }
}

/* ── Ambient Aurora (Layer 1 / Task 5) ─────────────────── */
.ambient-bg--aurora::before {
  content: ""; position: absolute; inset: -50%;
  background: conic-gradient(from 0deg, transparent, var(--zone-color, oklch(0.65 0.18 290)) 30%, transparent 60%);
  animation: ambient-aurora 60s linear infinite;
  opacity: 0.12;
}
