/* =============================================================
   RICHARD SAVIOUR — ENHANCEMENT LAYER
   Loaded after styles.css on every page. Pure progressive
   enhancement: if enhance.js never runs, nothing here hides
   or breaks any content.
   ============================================================= */

/* ===== 1. SCROLL PROGRESS BAR ===== */
.rs-progress {
  position: fixed;
  top: 0; left: 0;
  width: 100%;
  height: 2px;
  z-index: 300;
  pointer-events: none;
  background: transparent;
}
.rs-progress i {
  display: block;
  height: 100%;
  width: 100%;
  transform-origin: 0 50%;
  transform: scaleX(0);
  background: linear-gradient(90deg, var(--gold-deep), var(--gold), var(--gold-soft));
}

/* ===== 2. NAV CHOREOGRAPHY (hide down / show up) ===== */
.nav.nav-hidden {
  transform: translate(-50%, -180%);
}

/* ===== 4. SPLIT-LINE HEADLINE REVEALS =====
   JS wraps words in .ew > .ew-i. Nothing is hidden until the
   parent gets .ew-ready (added only after a successful split). */
.ew {
  display: inline-block;
  overflow: hidden;
  vertical-align: bottom;
  padding-bottom: 0.14em;
  margin-bottom: -0.14em;
  padding-right: 0.06em;
  margin-right: -0.06em;
}
.ew-i {
  display: inline-block;
  transform: translateY(0);
}
.ew-ready .ew-i {
  transform: translateY(115%);
  opacity: 0;
}
.ew-ready.ew-go .ew-i {
  transform: translateY(0);
  opacity: 1;
  transition: transform 0.9s var(--ease), opacity 0.6s ease;
  transition-delay: var(--ewd, 0s);
}

/* ===== 5. STAGGERED CLUSTER REVEALS ===== */
.js-stagger > * {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity 0.7s var(--ease), transform 0.7s var(--ease);
  transition-delay: var(--sgd, 0s);
}
.js-stagger.sg-go > * {
  opacity: 1;
  transform: translateY(0);
}

/* ===== 6. SPOTLIGHT CARDS (pointer-tracked sheen) ===== */
.rs-spot {
  position: relative;
}
.rs-spot::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  pointer-events: none;
  opacity: 0;
  transition: opacity 0.4s ease;
  background: radial-gradient(220px circle at var(--mx, 50%) var(--my, 50%),
              rgba(var(--gold-rgb), 0.14), transparent 65%);
  z-index: 1;
}
.rs-spot:hover::after { opacity: 1; }

/* subtle lift to pair with the sheen */
.pillar-card, .testi-card, .why-item {
  transition: transform 0.5s var(--ease), box-shadow 0.5s var(--ease),
              opacity 0.9s var(--ease), border-color 0.4s ease;
}
.pillar-card:hover, .testi-card:hover {
  transform: translateY(-6px);
  box-shadow: var(--shadow-lg);
}
.why-item:hover { transform: translateY(-3px); }

/* ===== 7. MARQUEE: pause on hover, velocity skew handled inline ===== */
.marquee { will-change: transform; }
.marquee-section:hover .marquee-track { animation-play-state: paused; }

/* ===== 8. LINK UNDERLINE MICRO-INTERACTION (nav + footer) ===== */
.nav-links a:not(.btn) {
  position: relative;
}
.nav-links a:not(.btn)::after {
  content: '';
  position: absolute;
  left: 0; right: 0;
  bottom: -4px;
  height: 1px;
  background: var(--gold-soft);
  transform: scaleX(0);
  transform-origin: 100% 50%;
  transition: transform 0.35s var(--ease);
}
.nav-links a:not(.btn):hover::after,
.nav-links a:not(.btn).is-active::after {
  transform: scaleX(1);
  transform-origin: 0 50%;
}

/* ===== 9. AMBIENT FINAL CTA (slow gold aurora) ===== */
@keyframes rs-aurora {
  0%   { transform: translate(-12%, -6%) scale(1);    opacity: 0.5; }
  50%  { transform: translate(10%, 6%)  scale(1.25);  opacity: 0.9; }
  100% { transform: translate(-12%, -6%) scale(1);    opacity: 0.5; }
}
.final-cta .rs-aurora {
  position: absolute;
  top: 50%; left: 50%;
  width: 720px; height: 480px;
  margin: -240px 0 0 -360px;
  pointer-events: none;
  border-radius: 50%;
  background: radial-gradient(closest-side, rgba(var(--gold-rgb), 0.16), transparent 70%);
  filter: blur(30px);
  animation: rs-aurora 14s ease-in-out infinite;
  z-index: 0;
}

/* ===== 10. MEDIA PARALLAX TARGETS ===== */
.rs-parallax { will-change: transform; }
.step-image, .batman-frame { overflow: hidden; }
.step-image img, .batman-frame img { transform: translateY(0) scale(1.12); }

/* ===== 11. BUTTON POLISH (magnetic base) ===== */
.btn, .section-cta, .cf-btn {
  will-change: transform;
}
.btn .arrow, .section-cta svg {
  transition: transform 0.35s var(--ease);
}
.btn:hover .arrow, .section-cta:hover svg {
  transform: translate(3px, -3px);
}

/* ===== 12. LOADER COUNTER ===== */
.rs-loader-count {
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.12em;
  color: var(--text-faint);
  margin-top: 14px;
  font-variant-numeric: tabular-nums;
}

/* ===== 13. VISIBLE KEYBOARD FOCUS ===== */
a:focus-visible, button:focus-visible {
  outline: 2px solid var(--gold);
  outline-offset: 3px;
  border-radius: 4px;
}

/* ===== 14. REDUCED MOTION: neutralise everything above ===== */
@media (prefers-reduced-motion: reduce) {
  .ew-ready .ew-i { transform: none; opacity: 1; transition: none; }
  .js-stagger > * { opacity: 1; transform: none; transition: none; }
  .final-cta .rs-aurora { animation: none; }
  .step-image img, .batman-frame img { transform: none; }
  .nav.nav-hidden { transform: translateX(-50%); }
}
