/* decor_swaps.css — cross-vibe DECOR library (GENERATED). vibedecor-20260718
   Each item scoped under .vkd-<key>; injected by assets/vibe_decor.js. */

/* ===== deco-frame (deco, slot frame) ===== */
.vkd-deco-frame .dco-pilaster { position: absolute; top: 6%; bottom: 6%; width: 16px; z-index: 1; opacity: 0.5; background: repeating-linear-gradient(0deg, transparent 0 14px, rgba(217,185,92,0.55) 14px 15px, transparent 15px 16px); }
.vkd-deco-frame .dco-pilaster::before { content: ''; position: absolute; inset: 0; background: repeating-linear-gradient(180deg, transparent 0 26px, rgba(217,185,92,0.4) 26px 30px); -webkit-mask: repeating-linear-gradient(180deg, #000 0 15px, transparent 15px 30px); mask: repeating-linear-gradient(180deg, #000 0 15px, transparent 15px 30px); animation: dco-shim 5s linear infinite; }
.vkd-deco-frame .dco-pilaster--l { left: clamp(14px,3vw,30px); }
.vkd-deco-frame .dco-pilaster--r { right: clamp(14px,3vw,30px); }
@media (max-width: 768px) {
  /* decorails-20260718: rails stay visible on phone (they are the whole decor now) — slimmer, tight to the edges */
  .vkd-deco-frame .dco-pilaster { width: 10px; }
  .vkd-deco-frame .dco-pilaster--l { left: 6px; }
  .vkd-deco-frame .dco-pilaster--r { right: 6px; }
}

/* emblemscrap-20260718: emblem slot removed (deco-sun, disco-ball, acid-ripple, house-record) —
   floating fixed badges fought every composition. Frames + scene layers remain. */
@media (prefers-reduced-motion: reduce) {
  .vibe-deco .dco-title, .vibe-deco .dco-pilaster::before, .vibe-deco .dco-kicker span, .vibe-deco .vx-pay, .vibe-deco .dco-sticky { animation: none; }
}

/* ===== forest-leaves (forest, slot scene) ===== */
.vkd-forest-leaves .fst-leaves { position: fixed; inset: 0; z-index: 0; pointer-events: none; }
.vkd-forest-leaves .fst-leaves span { position: absolute; top: -6%; width: 12px; height: 12px; border-radius: 0 100% 0 100%; background: var(--sage, #8aa97a); opacity: 0.35; animation: fst-fall linear infinite; }
.vkd-forest-leaves .fst-leaves span:nth-child(1) { left: 8%; animation-duration: 13s; animation-delay: 0s; background: var(--gold, #d4a056); }
.vkd-forest-leaves .fst-leaves span:nth-child(2) { left: 24%; animation-duration: 17s; animation-delay: 3s; }
.vkd-forest-leaves .fst-leaves span:nth-child(3) { left: 46%; animation-duration: 15s; animation-delay: 6s; background: var(--gold, #d4a056); }
.vkd-forest-leaves .fst-leaves span:nth-child(4) { left: 63%; animation-duration: 19s; animation-delay: 2s; }
.vkd-forest-leaves .fst-leaves span:nth-child(5) { left: 78%; animation-duration: 14s; animation-delay: 8s; }
.vkd-forest-leaves .fst-leaves span:nth-child(6) { left: 91%; animation-duration: 16s; animation-delay: 5s; background: var(--gold, #d4a056); }
@media (prefers-reduced-motion: reduce) {
  .vkd-forest-leaves .fst-leaves span, .vibe-forest .fst-node { animation: none; }
}

/* ===== disco-lights (discotheque, slot scene) ===== */
.vkd-disco-lights .disco-floor { position: fixed; left: -20%; right: -20%; bottom: 0; height: 46vh; z-index: 0; pointer-events: none; background-image: linear-gradient(rgba(245,196,81,0.14) 1px, transparent 1px), linear-gradient(90deg, rgba(245,196,81,0.14) 1px, transparent 1px); background-size: 46px 46px; transform: perspective(340px) rotateX(62deg); transform-origin: bottom center; -webkit-mask: linear-gradient(to top, #000 0%, transparent 92%); mask: linear-gradient(to top, #000 0%, transparent 92%); animation: disco-floorpulse 5s ease-in-out infinite; }
.vkd-disco-lights .disco-dots { position: fixed; inset: 0; z-index: 0; pointer-events: none; opacity: 0.55; background-image: radial-gradient(circle, rgba(245,196,81,0.9) 0 3px, transparent 4px), radial-gradient(circle, rgba(255,79,163,0.85) 0 2px, transparent 3px), radial-gradient(circle, rgba(85,230,255,0.85) 0 2px, transparent 3px), radial-gradient(circle, rgba(255,255,255,0.8) 0 2px, transparent 3px); background-size: 180px 180px, 140px 140px, 220px 220px, 160px 160px; background-position: 0 0, 40px 80px, 120px 30px, 90px 120px; animation: disco-dots 12s linear infinite; }
.vkd-disco-lights .disco-beams { position: fixed; top: 0; left: 50%; width: 200vmax; height: 200vmax; z-index: 0; transform: translate(-50%, -60%); pointer-events: none; opacity: 0.4; background: repeating-conic-gradient(from 0deg at 50% 50%, transparent 0deg 16deg, rgba(245,196,81,0.10) 16deg 18deg, transparent 18deg 34deg, rgba(255,79,163,0.08) 34deg 36deg); -webkit-mask: radial-gradient(circle at 50% 50%, #000 0%, transparent 55%); mask: radial-gradient(circle at 50% 50%, #000 0%, transparent 55%); animation: disco-beams 24s linear infinite; }
@media (prefers-reduced-motion: reduce) {
  .vkd-disco-lights .disco-floor, .vibe-disco .disco-dots, .vibe-disco .disco-beams, .vibe-disco .disco-ball, .vibe-disco .disco-ball__shine, .vibe-disco .disco-title, .vibe-disco .vx-pay, .vibe-disco .disco-sticky { animation: none; }
}

/* ===== acid-warp (acid, slot scene) ===== */
.vkd-acid-warp .acid-warp { position: fixed; inset: -30%; z-index: 0; pointer-events: none; opacity: 0.5; background: radial-gradient(40vmax 40vmax at 30% 30%, rgba(182,255,0,0.28), transparent 60%), radial-gradient(44vmax 44vmax at 72% 68%, rgba(255,23,195,0.24), transparent 60%), conic-gradient(from 0deg at 50% 50%, rgba(0,229,255,0.10), transparent 30%, rgba(182,255,0,0.10) 60%, transparent 90%); filter: blur(20px); animation: acid-warp 18s ease-in-out infinite, acid-hue 14s linear infinite; }
@media (prefers-reduced-motion: reduce) {
  .vkd-acid-warp .acid-warp, .vibe-acid .acid-ring, .vibe-acid .acid-title { animation: none; }
}

/* ===== berlin-fx (berlin, slot scene) ===== */
.vkd-berlin-fx .bln-fx { position: fixed; inset: 0; z-index: 0; pointer-events: none; }
.vkd-berlin-fx .bln-fx::before { content: ''; position: absolute; inset: 0; background: radial-gradient(60% 45% at 18% 0%, rgba(55,230,255,0.16), transparent 60%), radial-gradient(55% 45% at 100% 100%, rgba(255,47,176,0.12), transparent 60%); animation: bln-breathe 5s ease-in-out infinite; }
.vkd-berlin-fx .bln-scan { position: absolute; inset: 0; background: repeating-linear-gradient(0deg, transparent 0 2px, rgba(55,230,255,0.035) 2px 3px); animation: bln-scandrift 8s linear infinite; }
.vkd-berlin-fx .bln-beam { position: absolute; top: -30%; left: -40%; width: 55%; height: 180%; background: linear-gradient(90deg, transparent, rgba(55,230,255,0.12), rgba(255,255,255,0.06), transparent); transform: rotate(14deg); filter: blur(6px); animation: bln-sweep 7s ease-in-out infinite; }
@media (prefers-reduced-motion: reduce) {
  .vkd-berlin-fx .bln-fx *, .vibe-berlin .bln-fx::before, .vibe-berlin .bln-title, .vibe-berlin .bln-title::before, .vibe-berlin .bln-title::after, .vibe-berlin .bln-panel, .vibe-berlin .bln-caret, .vibe-berlin .bln-ico, .vibe-berlin .bln-kick, .vibe-berlin .vx-pay, .vibe-berlin .bln-flyerpanel::after { animation: none !important; }
}

/* ===== dnb-grain (dnb, slot scene) ===== */
.vkd-dnb-grain .dnb-grain { position: fixed; inset: -50%; z-index: 3; pointer-events: none; opacity: 0.5; background-image: radial-gradient(rgba(255,255,255,0.10) 0.5px, transparent 0.6px), radial-gradient(rgba(0,0,0,0.16) 0.5px, transparent 0.6px); background-size: 3px 3px, 4px 4px; background-position: 0 0, 1px 2px; animation: dnb-grain 0.6s steps(3) infinite; }
.vkd-dnb-grain .dnb-tape { position: relative; overflow: hidden; height: 34px; margin: 0 -2vw; background: repeating-linear-gradient(45deg, var(--dnb-acc, #c6ff00) 0 18px, #111 18px 36px); box-shadow: 0 8px 20px -8px rgba(0,0,0,0.7); display: flex; align-items: center; }
.vkd-dnb-grain .dnb-tape--top { transform: rotate(-1.6deg); }
.vkd-dnb-grain .dnb-tape--mid { transform: rotate(1.2deg); margin-top: clamp(28px,5vw,44px); margin-bottom: clamp(20px,4vw,34px); }
.vkd-dnb-grain .dnb-tape span { white-space: nowrap; font-family: 'Space Mono', monospace; font-weight: 700; font-size: 13px; letter-spacing: 0.2em; text-transform: uppercase; color: #0a0a09; background: rgba(243,240,230,0.86); padding: 3px 0; mix-blend-mode: normal; animation: dnb-march 14s linear infinite; }
@media (prefers-reduced-motion: reduce) {
  .vkd-dnb-grain .dnb-grain, .vibe-dnb .dnb-tape span { animation: none; }
}
/* wrapper: deco-frame */
/* decorails-20260718: Shock — no full BOX frame; just the SIDES with the moving shimmer. ::before border+inset-shadow rectangle removed; the animated pilaster rails are the whole decor now. */
.vkd-deco-frame{position:fixed;inset:0;z-index:6;pointer-events:none}.vkd-deco-frame .dco-pilaster--l{left:clamp(10px,2vw,26px)}.vkd-deco-frame .dco-pilaster--r{right:clamp(10px,2vw,26px)}
/* wrapper: dnb-grain */
.vkd-dnb-grain .dnb-tape{position:fixed;top:0;left:0;right:0;margin:0;z-index:6}

/* ===== KEYFRAMES ===== */
/* acid */ @keyframes acid-hue { to { filter: blur(20px) hue-rotate(360deg); } }
/* acid */ @keyframes acid-warp { 0%,100% { transform: scale(1) translate(0,0) rotate(0deg); } 50% { transform: scale(1.15) translate(3%,-3%) rotate(8deg); } }
/* berlin */ @keyframes bln-breathe { 0%,100% { opacity: 0.6; } 50% { opacity: 1; } }
/* berlin */ @keyframes bln-scandrift { to { background-position: 0 60px; } }
/* berlin */ @keyframes bln-sweep { 0% { left: -50%; opacity: 0; } 40% { opacity: 1; } 100% { left: 130%; opacity: 0; } }
/* deco */ @keyframes dco-shim { to { background-position: 0 60px; } }
/* discotheque */ @keyframes disco-beams { to { transform: translate(-50%, -60%) rotate(360deg); } }
/* discotheque */ @keyframes disco-dots { to { background-position: 180px 90px, -100px 200px, 320px -120px, -140px 240px; } }
/* discotheque */ @keyframes disco-floorpulse { 0%,100% { filter: hue-rotate(0deg) brightness(1); } 50% { filter: hue-rotate(40deg) brightness(1.35); } }
/* dnb */ @keyframes dnb-grain { 0% { transform: translate(0,0); } 33% { transform: translate(-3%,2%); } 66% { transform: translate(2%,-2%); } 100% { transform: translate(-1%,1%); } }
/* dnb */ @keyframes dnb-march { to { transform: translateX(-50%); } }
/* forest */ @keyframes fst-fall { 0% { transform: translateY(0) rotate(0deg); opacity: 0; } 10% { opacity: 0.4; } 100% { transform: translateY(108vh) rotate(420deg); opacity: 0; } }

/* =============================================================================
   DECOR DONORS EXPANSION — decordonors-20260718 (emblemscrap-20260718: emblems removed)
   Donors mined from every vibe family. Faithful ports with fallback-
   resolved colors (no bare vars). Scene glows z:0, grain/scan overlays above,
   frames z:6. All pointer-events:none, all reduced-motion aware.
   ============================================================================= */

/* ===== noir-sparkle (noir, slot scene) ===== */
.vkd-noir-sparkle .nr-spot { display: block; position: fixed; inset: 0; z-index: 0; pointer-events: none; background: radial-gradient(60vmax 50vmax at 50% -10%, rgba(212,175,55,.12), transparent 60%); }
.vkd-noir-sparkle .nr-sparkle { display: block; position: fixed; inset: 0; z-index: 0; pointer-events: none;
  background:
    radial-gradient(circle at 16% 24%, #d4af37 0 1.5px, transparent 2px),
    radial-gradient(circle at 82% 18%, #f3e2a3 0 1px, transparent 2px),
    radial-gradient(circle at 70% 64%, #d4af37 0 1px, transparent 2px),
    radial-gradient(circle at 28% 78%, #f3e2a3 0 1.5px, transparent 2px),
    radial-gradient(circle at 50% 40%, #fff 0 1px, transparent 2px);
  animation: noir-twinkle 3.2s ease-in-out infinite; }

/* ===== velvet-sheen (velvet, slot scene) — champagne only, emerald dropped by design ===== */
.vkd-velvet-sheen .vlv-drift { display: block; position: fixed; inset: -20vmax; z-index: 0; pointer-events: none;
  background:
    radial-gradient(50vmax 40vmax at 25% 15%, rgba(230,201,138,.10), transparent 60%),
    radial-gradient(60vmax 50vmax at 50% 50%, rgba(255,255,255,.03), transparent 55%);
  animation: vlv-drift 20s ease-in-out infinite alternate; }

/* ===== launch-mesh (launch, slot scene) ===== */
.vkd-launch-mesh .lnch-mesh { display: block; position: fixed; inset: -25vmax; z-index: 0; pointer-events: none; filter: blur(10px);
  background:
    radial-gradient(38vmax 32vmax at 20% 18%, rgba(124,92,255,.35), transparent 60%),
    radial-gradient(34vmax 30vmax at 82% 26%, rgba(34,211,238,.28), transparent 60%),
    radial-gradient(36vmax 30vmax at 60% 92%, rgba(255,92,168,.22), transparent 60%);
  animation: lnch-mesh 16s ease-in-out infinite alternate; }

/* ===== candle-glow (candlelight, slot scene) ===== */
.vkd-candle-glow .cdl-vignette { display: block; position: fixed; inset: 0; z-index: 0; pointer-events: none;
  background:
    radial-gradient(60vmax 46vmax at 50% 8%, rgba(230,179,92,.16), transparent 58%),
    radial-gradient(80vmax 80vmax at 50% 120%, rgba(0,0,0,.5), transparent 60%);
  animation: cdl-breathe 7s ease-in-out infinite; }
.vkd-candle-glow .cdl-flame { display: block; position: fixed; top: 0; left: 50%; transform: translateX(-50%); width: 60vmax; height: 30vmax; z-index: 0; pointer-events: none;
  background: radial-gradient(40% 60% at 50% 0%, rgba(255,196,92,.22), transparent 70%);
  animation: cdl-flicker 2.6s ease-in-out infinite; }

/* ===== harvest-wheat (harvest, slot scene) ===== */
.vkd-harvest-wheat .hrv-glowlayer { display: block; position: fixed; inset: 0; z-index: 0; pointer-events: none;
  background:
    radial-gradient(60vmax 44vmax at 50% 8%, rgba(217,154,82,.16), transparent 58%),
    radial-gradient(80vmax 70vmax at 50% 120%, rgba(0,0,0,.45), transparent 60%);
  animation: hrv-glow 9s ease-in-out infinite; }
.vkd-harvest-wheat .hrv-wheat { display: block; position: fixed; inset: 0; z-index: 0; pointer-events: none; opacity: .45;
  background:
    radial-gradient(circle at 20% -2%, #d99a52 0 1.5px, transparent 2px),
    radial-gradient(circle at 55% -2%, #f0c585 0 1px, transparent 2px),
    radial-gradient(circle at 80% -2%, #d99a52 0 1px, transparent 2px);
  background-repeat: repeat-y; background-size: 100% 50vh; animation: hrv-fall 16s linear infinite; }

/* ===== eternal-petals (eternal, slot scene) ===== */
.vkd-eternal-petals .etn-petals { display: block; position: fixed; inset: 0; z-index: 0; pointer-events: none; }
.vkd-eternal-petals .etn-petals span { position: absolute; top: -5%; width: 14px; height: 14px; border-radius: 0 100% 50% 100%; background: #e6b3ab; opacity: 0.5; animation: etn-fall linear infinite; }
.vkd-eternal-petals .etn-petals span:nth-child(1){left:10%;animation-duration:16s;animation-delay:0s}
.vkd-eternal-petals .etn-petals span:nth-child(2){left:28%;animation-duration:20s;animation-delay:4s;background:#efc9c1}
.vkd-eternal-petals .etn-petals span:nth-child(3){left:47%;animation-duration:18s;animation-delay:8s}
.vkd-eternal-petals .etn-petals span:nth-child(4){left:66%;animation-duration:22s;animation-delay:2s;background:#efc9c1}
.vkd-eternal-petals .etn-petals span:nth-child(5){left:82%;animation-duration:17s;animation-delay:10s}
.vkd-eternal-petals .etn-petals span:nth-child(6){left:92%;animation-duration:19s;animation-delay:6s}

/* ===== garden-canopy (garden, slot scene) ===== */
.vkd-garden-canopy .grd-leaf { display: block; position: fixed; top: -10px; width: clamp(120px, 24vw, 240px); height: clamp(160px, 30vw, 300px); z-index: 0; pointer-events: none; opacity: .5; transform-origin: top center;
  background: radial-gradient(closest-side, #7d8b6a 0 60%, transparent 62%) 0 0/22px 38px,
              radial-gradient(closest-side, #56624a 0 60%, transparent 62%) 11px 19px/22px 38px;
  -webkit-mask-image: linear-gradient(180deg, #000, transparent); mask-image: linear-gradient(180deg, #000, transparent);
  animation: grd-sway 7s ease-in-out infinite alternate; }
.vkd-garden-canopy .grd-leaf--l { left: -30px; }
.vkd-garden-canopy .grd-leaf--r { right: -30px; animation-delay: -3.5s; animation-name: grd-sway-r; }

/* ===== playa-heat (playa, slot scene) ===== */
.vkd-playa-heat .ply-sun { display: block; position: fixed; top: 0; left: 50%; transform: translate(-50%, -55%); width: min(90vw, 720px); aspect-ratio: 1; border-radius: 50%; z-index: 0; pointer-events: none;
  background: radial-gradient(circle, rgba(255,196,120,0.55) 0%, rgba(232,121,74,0.30) 30%, transparent 62%);
  filter: blur(4px); animation: ply-flare-c 5.5s ease-in-out infinite; }
.vkd-playa-heat .ply-grain { display: block; position: fixed; inset: 0; z-index: 0; pointer-events: none; opacity: 0.5;
  background-image:
    radial-gradient(1px 1px at 20% 30%, rgba(255,225,180,0.25), transparent),
    radial-gradient(1px 1px at 70% 60%, rgba(255,210,160,0.18), transparent),
    radial-gradient(1px 1px at 45% 85%, rgba(255,235,200,0.14), transparent),
    radial-gradient(2px 2px at 85% 20%, rgba(255,220,170,0.10), transparent);
  background-size: 240px 240px, 180px 180px, 300px 300px, 220px 220px;
  animation: ply-grain 9s steps(6) infinite; }

/* ===== headliner-stars (headliner, slot scene) ===== */
.vkd-headliner-stars .hdl-sky { display: block; position: fixed; inset: 0; z-index: 0; pointer-events: none;
  background:
    radial-gradient(ellipse 60% 40% at 30% 10%, rgba(251,191,36,0.08) 0%, transparent 55%),
    radial-gradient(ellipse 50% 35% at 80% 90%, rgba(245,158,11,0.06) 0%, transparent 55%); }
.vkd-headliner-stars .hdl-stars { display: block; position: fixed; inset: 0; z-index: 0; pointer-events: none;
  background-image:
    radial-gradient(1px 1px at 20% 30%, rgba(251,191,36,0.5), transparent),
    radial-gradient(1px 1px at 60% 70%, rgba(255,255,255,0.3), transparent),
    radial-gradient(1px 1px at 80% 20%, rgba(251,191,36,0.4), transparent),
    radial-gradient(1px 1px at 40% 80%, rgba(255,255,255,0.25), transparent),
    radial-gradient(1px 1px at 10% 60%, rgba(251,191,36,0.3), transparent),
    radial-gradient(1px 1px at 90% 50%, rgba(255,255,255,0.4), transparent);
  animation: noir-twinkle 4.6s ease-in-out infinite; }

/* ===== junglist-scan (junglist, slot scene) ===== */
.vkd-junglist-scan .jgl-glow { display: block; position: fixed; inset: 0; z-index: 0; pointer-events: none;
  background:
    radial-gradient(ellipse 70% 50% at 0% 0%, rgba(0,255,65,0.1) 0%, transparent 50%),
    radial-gradient(ellipse 60% 40% at 100% 100%, rgba(0,255,255,0.08) 0%, transparent 50%); }
.vkd-junglist-scan .jgl-scan { display: block; position: fixed; inset: 0; z-index: 1; pointer-events: none;
  background: repeating-linear-gradient(0deg, transparent 0px, transparent 2px, rgba(0,255,65,0.018) 2px, rgba(0,255,65,0.018) 3px); }

/* ===== subbass-crt (sub_bass, slot scene) ===== */
.vkd-subbass-crt .sb-bleed { display: block; position: fixed; inset: 0; z-index: 0; pointer-events: none;
  background:
    radial-gradient(ellipse 80% 60% at 10% 0%, rgba(168,85,247,0.18) 0%, transparent 60%),
    radial-gradient(ellipse 70% 50% at 100% 100%, rgba(34,211,238,0.12) 0%, transparent 60%),
    linear-gradient(180deg, transparent 0%, rgba(0,0,0,0.4) 100%); }
.vkd-subbass-crt .sb-scan { display: block; position: fixed; inset: 0; z-index: 1; pointer-events: none;
  background: repeating-linear-gradient(0deg, transparent 0px, transparent 3px, rgba(255,255,255,0.012) 3px, rgba(255,255,255,0.012) 4px); }

/* ===== stub-perf (stub, slot frame) — tear-off top strip, Shock-approved ===== */
.vkd-stub-perf .stub-tear { display: block; position: fixed; top: 12px; left: 0; right: 0; height: 2px; z-index: 6; pointer-events: none; opacity: .8;
  background: repeating-linear-gradient(90deg, rgba(246,239,224,.6) 0 7px, transparent 7px 15px); }
.vkd-stub-perf .stub-tear::before, .vkd-stub-perf .stub-tear::after { content: ''; position: absolute; top: 50%; transform: translateY(-50%); width: 22px; height: 22px; border-radius: 50%; border: 2px dashed rgba(246,239,224,.6); }
.vkd-stub-perf .stub-tear::before { left: -11px; }
.vkd-stub-perf .stub-tear::after { right: -11px; }

/* ===== headliner-marquee (headliner, slot frame) — chase bulbs, tints to event accent ===== */
/* marqrails-20260719 (Shock: the full rectangle "goes through elements — just keep
   the sides, run the entire length of the site"): SIDE RAILS ONLY, top of screen to
   bottom, viewport-pinned so they ride the whole page as you scroll. Left rail
   chases down, right rail chases up. Same decor payload, new dress (decorails
   precedent). */
.vkd-headliner-marquee .hdl-bulbs { --bulb: var(--event-accent, #fbbf24); display: block; position: fixed; top: 0; bottom: 0; left: 10px; right: 10px; z-index: 6; pointer-events: none;
  background:
    radial-gradient(circle, var(--bulb) 30%, transparent 42%) repeat-y left top  / 13px 26px,
    radial-gradient(circle, var(--bulb) 30%, transparent 42%) repeat-y right top / 13px 26px;
  filter: drop-shadow(0 0 5px var(--bulb));
  animation: hdl-chase 900ms linear infinite; }

/* ===== donor keyframes (faithful copies; identical defs are collision-safe on home vibes) ===== */
@keyframes noir-twinkle { 0%,100% { opacity: .25; } 50% { opacity: .8; } }
@keyframes vlv-drift { from { transform: translate3d(0,0,0); } to { transform: translate3d(0,-2%,0) scale(1.05); } }
@keyframes lnch-mesh { 0% { transform: translate3d(0,0,0) scale(1); } 100% { transform: translate3d(0,-4%,0) scale(1.12) rotate(4deg); } }
@keyframes cdl-breathe { 0%,100% { opacity: .82; } 50% { opacity: 1; } }
@keyframes cdl-flicker { 0%,100% { opacity: .7; transform: translateX(-50%) scaleX(1); } 30% { opacity: .95; transform: translateX(-50%) scaleX(1.04); } 60% { opacity: .78; transform: translateX(-50%) scaleX(.98); } }
@keyframes hrv-glow { 0%,100% { opacity: .82; } 50% { opacity: 1; } }
@keyframes hrv-fall { to { background-position: 4% 50vh, -6% 50vh, 5% 50vh; } }
@keyframes etn-fall { 0%{transform:translateY(0) rotate(0);opacity:0} 12%{opacity:.5} 100%{transform:translateY(108vh) rotate(360deg);opacity:0} }
@keyframes grd-sway { from { transform: rotate(-3deg); } to { transform: rotate(3deg); } }
@keyframes grd-sway-r { from { transform: scaleX(-1) rotate(-3deg); } to { transform: scaleX(-1) rotate(3deg); } }
@keyframes ply-grain { 0% { transform: translate(0,0); } 100% { transform: translate(-12px, 8px); } }
@keyframes ply-flare-c { 0%,100% { opacity: 0.8; transform: translate(-50%,-55%) scale(1); } 50% { opacity: 1; transform: translate(-50%,-55%) scale(1.06); } }
@keyframes hdl-chase { to { background-position: left 26px, right -26px; } } /* marqrails-20260719: two rails, opposite directions */

/* ===== reduced motion for all donors ===== */
@media (prefers-reduced-motion: reduce) {
  .vkd-noir-sparkle .nr-sparkle, .vkd-velvet-sheen .vlv-drift, .vkd-launch-mesh .lnch-mesh,
  .vkd-candle-glow .cdl-vignette, .vkd-candle-glow .cdl-flame,
  .vkd-harvest-wheat .hrv-glowlayer, .vkd-harvest-wheat .hrv-wheat,
  .vkd-eternal-petals .etn-petals span, .vkd-garden-canopy .grd-leaf,
  .vkd-playa-heat .ply-sun, .vkd-playa-heat .ply-grain, .vkd-headliner-stars .hdl-stars,
  .vkd-headliner-marquee .hdl-bulbs { animation: none; }
}

/* ===== phone pass (≤430px): keep frames out of the content's way ===== */
@media (max-width: 430px) {
  .vkd-headliner-marquee .hdl-bulbs { top: 0; bottom: 0; left: 4px; right: 4px; background-size: 11px 22px, 11px 22px; } /* marqrails-20260719: slim rails tight to the phone edges */
  .vkd-stub-perf .stub-tear { top: 8px; }
}
