/* Tiny Tomato Games — CINEMATIC SCROLL choreography
   - fixed section progress rail (right side)
   - manifesto headline that assembles word-by-word, scrubbed by scroll
   - light parallax on the manifesto glow
   Motion-safe enhancements; the rail stays usable without motion. */

/* ============================================================
   SECTION PROGRESS RAIL
   ============================================================ */
.scroll-rail {
  position: fixed; right: 26px; top: 50%; transform: translateY(-50%);
  z-index: 40; display: flex; flex-direction: column; align-items: center;
  padding: 6px 0; opacity: 0; pointer-events: none;
  transition: opacity 0.6s ease;
}
.scroll-rail.ready { opacity: 1; pointer-events: auto; }

.rail-track {
  position: absolute; left: 50%; top: 13px; bottom: 13px; width: 1.5px;
  transform: translateX(-50%); background: var(--line); overflow: hidden; border-radius: 2px;
}
.rail-track i {
  position: absolute; left: 0; top: 0; width: 100%; height: 0%;
  background: linear-gradient(180deg, var(--accent), color-mix(in oklab, var(--accent) 45%, var(--text)));
  box-shadow: 0 0 9px color-mix(in oklab, var(--accent) 60%, transparent);
}

.rail-dot {
  position: relative; width: 28px; height: 26px;
  display: grid; place-items: center; cursor: pointer;
  background: none; border: 0; padding: 0; -webkit-tap-highlight-color: transparent;
}
.rail-dot::before {
  content: ''; width: 6.5px; height: 6.5px; border-radius: 50%;
  background: var(--faint);
  transition: transform 0.25s cubic-bezier(0.5,0,0.2,1), background 0.25s, box-shadow 0.25s;
}
.rail-dot:hover::before { background: var(--text); transform: scale(1.25); }
.rail-dot.active::before {
  background: var(--accent); transform: scale(1.3);
  box-shadow: 0 0 0 4px color-mix(in oklab, var(--accent) 20%, transparent);
}
.rail-label {
  position: absolute; right: 30px; top: 50%;
  transform: translateY(-50%) translateX(8px);
  font-family: 'IBM Plex Mono', monospace; font-size: 9.5px;
  letter-spacing: 0.24em; text-indent: 0.24em; color: var(--faint);
  white-space: nowrap; pointer-events: none;
  opacity: 0; transition: opacity 0.25s ease, transform 0.25s cubic-bezier(0.5,0,0.2,1);
}
.rail-dot:hover .rail-label,
.rail-dot.active .rail-label { opacity: 1; transform: translateY(-50%) translateX(0); }
.rail-dot.active .rail-label { color: var(--text); }

@media (max-width: 900px) { .scroll-rail { display: none; } }

/* ============================================================
   MANIFESTO — scroll-scrubbed word assembly
   ============================================================ */
.manifesto::before { transition: opacity 0.4s ease; will-change: transform; transform: translate(-50%, calc(-50% + var(--py, 0px))); }
.manifesto blockquote .mw {
  display: inline-block; will-change: transform, opacity;
}
.manifesto blockquote .mw .hl { display: inline-block; }

@media (prefers-reduced-motion: reduce) {
  .manifesto blockquote .mw { opacity: 1 !important; transform: none !important; }
}
