/* RHYVOX site styles, built on top of the design tokens. */
@import url('./tokens.css');

* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; background: var(--bg-stage); color: var(--fg-platinum); font-family: var(--font-body); -webkit-font-smoothing: antialiased; }

/* film grain over the page */
.grain::after {
  content: ""; position: fixed; inset: 0; pointer-events: none;
  opacity: 0.06; mix-blend-mode: overlay; z-index: 5000;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence baseFrequency='0.9' numOctaves='2'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
}

a { color: inherit; text-decoration: none; }
button { font-family: inherit; cursor: pointer; }

.container { max-width: 1240px; margin: 0 auto; padding: 0 32px; }

/* ============ BUTTONS ============ */
.rv-btn {
  font-family: var(--font-headline);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  padding: 14px 24px;
  border-radius: 999px;
  border: none;
  display: inline-flex; align-items: center; gap: 10px;
  transition: all 140ms var(--ease-out);
}
.rv-btn-primary { background: var(--grad-gold); color: #0A0A0B; box-shadow: var(--glow-gold-sm); }
.rv-btn-primary:hover { box-shadow: var(--glow-gold-md); transform: translateY(-1px); }
.rv-btn-primary:active { box-shadow: var(--shadow-inner); transform: translateY(0); }

.rv-btn-ghost { background: transparent; color: var(--gold-500); border: 1px solid var(--gold-500); }
.rv-btn-ghost:hover { background: rgba(200,155,60,0.08); color: var(--gold-300); }

.rv-btn-mono { background: var(--fg-platinum); color: #0A0A0B; }
.rv-btn-mono:hover { background: #FFF; }

.rv-btn-sm { padding: 9px 16px; font-size: 10px; }

/* ============ EYEBROW ============ */
.rv-eyebrow-line {
  font-family: var(--font-headline);
  font-weight: 500;
  font-size: 12px;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: var(--gold-500);
  display: inline-flex; align-items: center; gap: 12px;
}
.rv-eyebrow-line::before { content: ""; width: 32px; height: 1px; background: var(--hairline-hot); }

/* ============ CHIPS ============ */
.rv-chip {
  font-family: var(--font-headline);
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  padding: 6px 12px;
  border-radius: 999px;
  border: 1px solid var(--hairline-mid);
  color: var(--fg-silver);
  background: transparent;
  display: inline-flex; align-items: center; gap: 6px;
  white-space: nowrap;
}
.rv-chip.gold { color: var(--gold-500); border-color: var(--hairline-hot); }
.rv-chip.live::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--danger); animation: pulse 1.6s ease-in-out infinite; }
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }

/* ============ SECTION SCAFFOLD ============ */
.rv-section { padding: 96px 0; position: relative; }
.rv-section-head { display: flex; flex-direction: column; gap: 14px; margin-bottom: 56px; }
.rv-section-head h2 {
  font-family: var(--font-display); font-weight: 700; font-size: 48px;
  letter-spacing: -0.02em; line-height: 1.05; margin: 0;
  color: var(--fg-platinum);
  max-width: 720px;
}

/* ============================================================
   MOTION — Scroll reveals via CSS animation (transition-free)
   ============================================================ */

@keyframes reveal-up    { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: none; } }
@keyframes reveal-left  { from { opacity: 0; transform: translateX(-32px); } to { opacity: 1; transform: none; } }
@keyframes reveal-right { from { opacity: 0; transform: translateX(32px); } to { opacity: 1; transform: none; } }
@keyframes reveal-scale { from { opacity: 0; transform: scale(0.96); } to { opacity: 1; transform: none; } }
@keyframes reveal-fade  { from { opacity: 0; } to { opacity: 1; } }

/* Hide elements until JS confirms they should reveal */
[data-reveal][data-primed]:not(.is-revealed) { opacity: 0; }

/* On reveal — fire the animation */
[data-reveal].is-revealed              { animation: reveal-up    820ms var(--ease-stage) both; }
[data-reveal="left"].is-revealed       { animation: reveal-left  820ms var(--ease-stage) both; }
[data-reveal="right"].is-revealed      { animation: reveal-right 820ms var(--ease-stage) both; }
[data-reveal="scale"].is-revealed      { animation: reveal-scale 820ms var(--ease-stage) both; }
[data-reveal="fade"].is-revealed       { animation: reveal-fade  820ms var(--ease-stage) both; }

/* Stagger via animation-delay (works with animations unlike transition-delay subtleties) */
[data-stagger] > *.is-revealed { animation-delay: calc(var(--stagger-index, 0) * 90ms); }

/* ============ HERO AMBIENT — drifting stage lights ============ */
@keyframes drift-a {
  0%, 100% { transform: translate3d(-10%, -5%, 0) scale(1.1); }
  50%      { transform: translate3d(8%, 6%, 0) scale(1.25); }
}
@keyframes drift-b {
  0%, 100% { transform: translate3d(8%, 5%, 0) scale(1.15); }
  50%      { transform: translate3d(-6%, -4%, 0) scale(1.0); }
}
@keyframes drift-c {
  0%, 100% { transform: translate3d(0%, 4%, 0) scale(1); }
  50%      { transform: translate3d(4%, -3%, 0) scale(1.1); }
}
.hero-light {
  position: absolute; inset: -10%;
  pointer-events: none;
  filter: blur(40px);
}
.hero-light.a {
  background: radial-gradient(ellipse 40% 30% at 30% 30%, rgba(242,169,59,0.45) 0%, transparent 60%);
  animation: drift-a 14s ease-in-out infinite;
}
.hero-light.b {
  background: radial-gradient(ellipse 35% 30% at 75% 25%, rgba(200,58,136,0.35) 0%, transparent 60%);
  animation: drift-b 18s ease-in-out infinite;
}
.hero-light.c {
  background: radial-gradient(ellipse 40% 30% at 50% 85%, rgba(106,61,184,0.30) 0%, transparent 60%);
  animation: drift-c 22s ease-in-out infinite;
}

/* ============ HERO ENTRANCE — staggered fade-in on load ============ */
@keyframes hero-enter {
  from { transform: translateY(24px); filter: blur(8px); }
  to   { transform: translateY(0);    filter: blur(0); }
}
/* Stays visible if animation doesn't run — only motion/blur is animated */
.hero-enter { animation: hero-enter 900ms var(--ease-stage); }
.hero-enter:nth-child(1) { animation-delay: 0ms; }
.hero-enter:nth-child(2) { animation-delay: 140ms; }
.hero-enter:nth-child(3) { animation-delay: 280ms; }
.hero-enter:nth-child(4) { animation-delay: 420ms; }
.hero-enter:nth-child(5) { animation-delay: 560ms; }
.hero-enter:nth-child(6) { animation-delay: 700ms; }
.hero-enter:nth-child(7) { animation-delay: 840ms; }
.hero-enter:nth-child(8) { animation-delay: 980ms; }

@keyframes poster-float {
  0%, 100% { transform: translateY(0) rotateZ(0deg); }
  50%      { transform: translateY(-8px) rotateZ(0.4deg); }
}
@keyframes poster-sheen {
  0%   { background-position: 200% 0; }
  60%  { background-position: -100% 0; }
  100% { background-position: -100% 0; }
}

/* ============ BREATHING LOGO ============ */
@keyframes breathe {
  0%, 100% { box-shadow: 0 0 24px rgba(200,155,60,0.4), 0 0 8px rgba(242,223,164,0.25); }
  50%      { box-shadow: 0 0 60px rgba(200,155,60,0.7), 0 0 18px rgba(242,223,164,0.4); }
}
.hero-logo-breathe { animation: breathe 4.5s ease-in-out infinite; }

/* ============ HEADER COMPRESS ON SCROLL ============ */
.rv-header { transition: padding 240ms var(--ease-out), background 240ms var(--ease-out); }
.rv-header.is-scrolled { padding-top: 10px; padding-bottom: 10px; background: rgba(10,10,11,0.88); }

/* ============ ACTIVE EVENT — pulsing border glow ============ */
@keyframes active-pulse {
  0%, 100% { box-shadow: 0 0 36px rgba(200,155,60,0.30), 0 0 8px rgba(242,223,164,0.20); }
  50%      { box-shadow: 0 0 64px rgba(200,155,60,0.50), 0 0 16px rgba(242,223,164,0.30); }
}
.active-pulse { animation: active-pulse 3.2s ease-in-out infinite; }

/* ============ MARQUEE TICKER ============ */
@keyframes marquee {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}
.marquee-track {
  display: flex; gap: 64px; white-space: nowrap;
  animation: marquee 38s linear infinite;
  will-change: transform;
}
.marquee:hover .marquee-track { animation-play-state: paused; }

/* ============ SHIMMER on chrome text (subtle) ============ */
@keyframes shimmer {
  0%   { background-position: -200% center; }
  100% { background-position: 200% center; }
}
.chrome-shimmer {
  background: linear-gradient(90deg,
    #B8BCC6 0%, #B8BCC6 35%,
    #F5F5F7 50%,
    #B8BCC6 65%, #B8BCC6 100%);
  background-size: 200% auto;
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent;
  animation: shimmer 6s linear infinite;
}

/* ============ EVENT ROW — arrow drift on hover ============ */
.event-row-arrow { transition: transform 240ms var(--ease-out), color 240ms var(--ease-out); }
.event-row:hover .event-row-arrow { transform: translateX(6px); color: var(--gold-500); }

/* ============ HERO RESPONSIVE — stack on tablet/mobile, poster on top ============ */
@media (max-width: 900px) {
  .hero-grid {
    grid-template-columns: 1fr !important;
    gap: 32px !important;
    padding: 0 20px !important;
  }
  .hero-poster {
    order: -1;                /* poster appears before the text column */
    width: 100%;
    max-width: 460px;
    margin: 0 auto;
  }
}
@media (max-width: 480px) {
  .hero-grid { gap: 24px !important; padding: 0 16px !important; }
  .hero-poster { max-width: 100%; }
}

/* ============ EVENTS BANNER — shorter & tighter on mobile ============ */
@media (max-width: 700px) {
  .rv-section { padding: 64px 0 !important; }
  .rv-section-head h2 { font-size: 36px !important; }
  .container { padding: 0 20px !important; }
}

/* ============ ABOUT — stack on tablet/mobile, cap portrait width ============ */
@media (max-width: 900px) {
  .about-grid {
    grid-template-columns: 1fr !important;
    gap: 40px !important;
  }
  .about-portrait {
    width: 100%;
    max-width: 380px;
    margin: 0 auto;
  }
}
@media (max-width: 480px) {
  .about-grid { gap: 32px !important; }
  .about-portrait { max-width: 320px; }
}

/* Respect user preference */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
  [data-reveal] { opacity: 1 !important; transform: none !important; }
}
