/* v3 animasyonları (#521/#526, sahibi Elif). Sözleşme: docs/tasarim/v3/engine-contract.md §4; kaynak sistem.md §3.
   Kurallar (§3.1): yalnız transform + opacity canlanır; açılış ≤ 2800 ms; isim 0,7 × toplam anında tam görünür;
   döngü yok (her animasyon bir kez); 390'da parçacık yarısı; neon ≤ 3 Hz. Renkler yalnız var(--inv-*).
   Faz: body[data-intro-phase] idle → playing → done (js/v3-motion.js). Açılış kuralları
   body[data-animation="<key>"][data-intro-phase="playing"] kalıbıyla yazılır; süreler sabit ms (test bütçeyi ölçer).
   Sahne parçaları tabanda görünmezdir; örtüler (perde, kapı, sayfa) opaklığı keyframe'lerinde taşır, böylece done ve
   reduce kipinde kendiliğinden kalkar. Açılıştan sonra yalnız düşük opaklıklı ortam dekoru kalır (kandil halkası, yıldız). */

/* ---------- 1. Süre tablosu (sistem.md §3.2; js/v3-motion.js --v3-intro-ms / --v3-reduce-ms okur) ---------- */
body[data-animation="slow-fade"] { --v3-intro-ms: 2500ms; --v3-base-ms: 2500ms; --v3-name-ms: 1750ms; --v3-scroll-ms: 480ms; --v3-micro-ms: 180ms; --v3-reduce-ms: 150ms; }
body[data-animation="veil-lift"] { --v3-intro-ms: 2000ms; --v3-base-ms: 2000ms; --v3-name-ms: 1400ms; --v3-scroll-ms: 520ms; --v3-micro-ms: 180ms; --v3-reduce-ms: 150ms; }
body[data-animation="ink-reveal"] { --v3-intro-ms: 2400ms; --v3-base-ms: 2400ms; --v3-name-ms: 1680ms; --v3-scroll-ms: 480ms; --v3-micro-ms: 200ms; --v3-reduce-ms: 150ms; }
body[data-animation="split-slide"] { --v3-intro-ms: 1800ms; --v3-base-ms: 1800ms; --v3-name-ms: 1260ms; --v3-scroll-ms: 480ms; --v3-micro-ms: 180ms; --v3-reduce-ms: 150ms; }
body[data-animation="lantern-glow"] { --v3-intro-ms: 2200ms; --v3-base-ms: 2200ms; --v3-name-ms: 1540ms; --v3-scroll-ms: 560ms; --v3-micro-ms: 240ms; --v3-reduce-ms: 150ms; }
body[data-animation="map-pin-drop"] { --v3-intro-ms: 2400ms; --v3-base-ms: 2400ms; --v3-name-ms: 1680ms; --v3-scroll-ms: 480ms; --v3-micro-ms: 200ms; --v3-reduce-ms: 150ms; }
body[data-animation="envelope-unseal"] { --v3-intro-ms: 2600ms; --v3-base-ms: 2600ms; --v3-name-ms: 1800ms; --v3-scroll-ms: 560ms; --v3-micro-ms: 200ms; --v3-reduce-ms: 150ms; }
body[data-animation="curtain-part"] { --v3-intro-ms: 2200ms; --v3-base-ms: 2200ms; --v3-name-ms: 1540ms; --v3-scroll-ms: 560ms; --v3-micro-ms: 180ms; --v3-reduce-ms: 150ms; }
body[data-animation="door-open"] { --v3-intro-ms: 2600ms; --v3-base-ms: 2600ms; --v3-name-ms: 1800ms; --v3-scroll-ms: 560ms; --v3-micro-ms: 200ms; --v3-reduce-ms: 150ms; }
body[data-animation="page-turn"] { --v3-intro-ms: 2400ms; --v3-base-ms: 2400ms; --v3-name-ms: 1680ms; --v3-scroll-ms: 560ms; --v3-micro-ms: 200ms; --v3-reduce-ms: 150ms; }
body[data-animation="petal-drift"] { --v3-intro-ms: 2800ms; --v3-base-ms: 2800ms; --v3-name-ms: 1940ms; --v3-scroll-ms: 560ms; --v3-micro-ms: 200ms; --v3-reduce-ms: 150ms; }
body[data-animation="polaroid-drop"] { --v3-intro-ms: 2300ms; --v3-base-ms: 2300ms; --v3-name-ms: 1610ms; --v3-scroll-ms: 560ms; --v3-micro-ms: 200ms; --v3-reduce-ms: 150ms; }
body[data-animation="ribbon-unfurl"] { --v3-intro-ms: 2000ms; --v3-base-ms: 2000ms; --v3-name-ms: 1400ms; --v3-scroll-ms: 560ms; --v3-micro-ms: 180ms; --v3-reduce-ms: 150ms; }
body[data-animation="ticket-tear"] { --v3-intro-ms: 2000ms; --v3-base-ms: 2000ms; --v3-name-ms: 1400ms; --v3-scroll-ms: 560ms; --v3-micro-ms: 200ms; --v3-reduce-ms: 150ms; }
body[data-animation="star-twinkle"] { --v3-intro-ms: 2400ms; --v3-base-ms: 2400ms; --v3-name-ms: 1680ms; --v3-scroll-ms: 560ms; --v3-micro-ms: 240ms; --v3-reduce-ms: 150ms; }
body[data-animation="confetti-burst"] { --v3-intro-ms: 2400ms; --v3-base-ms: 2400ms; --v3-name-ms: 1680ms; --v3-scroll-ms: 600ms; --v3-micro-ms: 240ms; --v3-reduce-ms: 150ms; }
body[data-animation="balloon-rise"] { --v3-intro-ms: 2400ms; --v3-base-ms: 2400ms; --v3-name-ms: 1680ms; --v3-scroll-ms: 600ms; --v3-micro-ms: 240ms; --v3-reduce-ms: 150ms; }
body[data-animation="gift-unwrap"] { --v3-intro-ms: 2200ms; --v3-base-ms: 2200ms; --v3-name-ms: 1540ms; --v3-scroll-ms: 600ms; --v3-micro-ms: 240ms; --v3-reduce-ms: 150ms; }
body[data-animation="car-arrival"] { --v3-intro-ms: 2800ms; --v3-base-ms: 2800ms; --v3-name-ms: 1940ms; --v3-scroll-ms: 600ms; --v3-micro-ms: 240ms; --v3-reduce-ms: 150ms; }
body[data-animation="neon-flicker"] { --v3-intro-ms: 2000ms; --v3-base-ms: 2000ms; --v3-name-ms: 1400ms; --v3-scroll-ms: 600ms; --v3-micro-ms: 200ms; --v3-reduce-ms: 150ms; }

/* #1493: --v3-base-ms is the duration the animation keyframe schedule was authored for; js/v3-motion.js writes
   --v3-k = (the design's --v3-intro-ms) / --v3-base-ms before the intro, and every duration and delay in section 4 scales by it
   (per-design tempo: designs.json tuning.introMs). In baby invitations a single stage never exceeds 1000 ms (--v3-stage-max). */
body[data-type="baby_shower"] { --v3-stage-max: 1000ms; }

/* ---------- 2. Keyframe'ler (yalnız transform ve opacity) ---------- */
@keyframes v3-fade-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes v3-fade-out { from { opacity: 1; } to { opacity: 0; } }
@keyframes v3-rise-in { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: none; } }
@keyframes v3-rise-in-16 { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: none; } }
@keyframes v3-rise-in-24 { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: none; } }
@keyframes v3-grow-in { from { opacity: 0; transform: scale(.96); } to { opacity: 1; transform: none; } }
@keyframes v3-pop-in { from { opacity: 0; transform: scale(.92); } to { opacity: 1; transform: none; } }
@keyframes v3-box-in { from { opacity: 0; transform: scale(.9); } to { opacity: 1; transform: none; } }
@keyframes v3-veil-lift { from { opacity: .85; transform: translateY(0); } to { opacity: .85; transform: translateY(-100%); } }
@keyframes v3-slide-out-start { from { opacity: 1; transform: translateX(0); } to { opacity: 1; transform: translateX(-100%); } }
@keyframes v3-slide-out-end { from { opacity: 1; transform: translateX(0); } to { opacity: 1; transform: translateX(100%); } }
@keyframes v3-ring-grow { from { opacity: .35; transform: scale(.4); } to { opacity: .35; transform: scale(1); } }
@keyframes v3-ring-dim { from { opacity: .35; transform: scale(1); } to { opacity: .15; transform: scale(1); } }
@keyframes v3-pin-drop { from { opacity: 0; transform: translateY(-48px); } to { opacity: 1; transform: none; } }
@keyframes v3-wipe-x { from { opacity: 1; transform: scaleX(1); } to { opacity: 1; transform: scaleX(0); } }
@keyframes v3-draw-x { from { opacity: 1; transform: scaleX(0); } to { opacity: 1; transform: scaleX(1); } }
@keyframes v3-unfurl-y { from { opacity: 1; transform: scaleY(0); } to { opacity: 1; transform: scaleY(1); } }
@keyframes v3-seal-break {
  0% { opacity: 1; transform: scale(1); }
  40% { opacity: 1; transform: scale(1.08); }
  100% { opacity: 0; transform: scale(0); }
}
@keyframes v3-flap-fold { from { transform: scaleY(1); } to { transform: scaleY(0); } }
@keyframes v3-flap-unfold { from { transform: scaleY(0); } to { transform: scaleY(1); } }
@keyframes v3-lift { from { transform: none; } to { transform: translateY(var(--lift)); } }
@keyframes v3-scene-in { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: none; } }
@keyframes v3-bow-away { from { opacity: 1; transform: none; } to { opacity: 0; transform: translateY(-36px) rotate(-18deg); } }
@keyframes v3-door-start { from { opacity: 1; transform: perspective(1200px) rotateY(0deg); } to { opacity: 1; transform: perspective(1200px) rotateY(-105deg); } }
@keyframes v3-door-end { from { opacity: 1; transform: perspective(1200px) rotateY(0deg); } to { opacity: 1; transform: perspective(1200px) rotateY(105deg); } }
@keyframes v3-page-flip { from { opacity: 1; transform: perspective(1400px) rotateY(0deg); } to { opacity: 1; transform: perspective(1400px) rotateY(-180deg); } }
@keyframes v3-petal-drift {
  0% { opacity: 1; transform: translate(0, 0) rotate(0deg) scale(var(--s)); }
  86% { opacity: 1; transform: translate(calc(var(--tx) * .9), calc(var(--ty) * .9)) rotate(var(--r)) scale(var(--s)); }
  100% { opacity: 0; transform: translate(var(--tx), var(--ty)) rotate(var(--r)) scale(var(--s)); }
}
@keyframes v3-polaroid-drop { from { opacity: 0; transform: translateY(-64px) rotate(calc(var(--tilt) * -1)); } to { opacity: 1; transform: translateY(0) rotate(var(--tilt)); } }
@keyframes v3-tear-main { from { transform: none; } to { transform: translateX(-26px) rotate(-2deg); } }
@keyframes v3-tear-stub { from { transform: none; } to { transform: translate(30px, 16px) rotate(6deg); } }
/* Tek parlama: .2 → 1 → .6 (yıldız başına en çok bir yanma; §3.1/7). */
@keyframes v3-star-twinkle {
  0% { opacity: .2; transform: scale(.8); }
  50% { opacity: 1; transform: scale(1); }
  100% { opacity: .6; transform: scale(1); }
}
@keyframes v3-confetti-burst {
  0% { opacity: 1; transform: translate(0, 0) rotate(0deg); }
  71% { opacity: 1; }
  81% { transform: translate(var(--tx), var(--ty)) rotate(var(--r)); }
  100% { opacity: 0; transform: translate(var(--tx), var(--ty)) rotate(var(--r)); }
}
@keyframes v3-balloon-rise {
  0% { opacity: 1; transform: translate(0, 0); }
  50% { opacity: 1; transform: translate(calc(var(--tx) * .3), -65svh); }
  100% { opacity: 1; transform: translate(0, -135svh); }
}
@keyframes v3-lid-off { from { opacity: 1; transform: none; } to { opacity: 1; transform: translateY(-170px) rotate(-8deg); } }
@keyframes v3-car-drive {
  0% { opacity: 1; transform: translateX(-120vw); }
  84% { opacity: 1; transform: translateX(4px); }
  100% { opacity: 1; transform: translateX(0); }
}
/* Neon: 0-200 ms 0→.8, 300-400 ms .8→.3, 500-600 ms .3→1; ilk saniyede tek sönme-yanma (≤ 3 Hz). */
@keyframes v3-neon-on {
  0% { opacity: 0; }
  33.33% { opacity: .8; }
  50% { opacity: .8; }
  66.67% { opacity: .3; }
  83.33% { opacity: .3; }
  100% { opacity: 1; }
}
@keyframes v3-neon-hover { 0% { opacity: 1; } 50% { opacity: .85; } 100% { opacity: 1; } }
@keyframes v3-reveal-low { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: none; } }
@keyframes v3-reveal-medium { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: none; } }
@keyframes v3-reveal-high { from { opacity: 0; transform: translateY(24px) scale(.96); } to { opacity: 1; transform: none; } }
@keyframes v3-reveal-side { from { opacity: 0; transform: translateX(16px); } to { opacity: 1; transform: none; } }
@keyframes v3-reveal-side-start { from { opacity: 0; transform: translateX(-16px); } to { opacity: 1; transform: none; } }
@keyframes v3-reveal-scale { from { opacity: 0; transform: scale(.98); } to { opacity: 1; transform: none; } }
@keyframes v3-reveal-unfurl { from { opacity: 0; transform: scaleY(.96); } to { opacity: 1; transform: none; } }

/* ---------- 3. Açılış katmanı ve Atla düğmesi (partials/v3-intro.blade.php) ---------- */
.v3-intro {
  position: absolute; inset: 0 0 auto; height: 100svh; z-index: 40;
  overflow: clip; pointer-events: none; transition: opacity 200ms linear;
}
html.no-js .v3-intro { display: none; }
body[data-intro-phase="idle"] .v3-intro,
body[data-intro-phase="playing"] .v3-intro { pointer-events: auto; cursor: pointer; }
/* Atlama (düğme, Esc, kapağa dokunma): katman 200 ms opaklıkla kalkar, içerik son karesine geçer. */
body[data-intro-skip] .v3-intro { opacity: 0; }
.v3-intro__stage { position: absolute; inset: 0; }
.v3-intro__stage > *,
.v3-intro__particle { position: absolute; display: block; opacity: 0; }
.v3-intro__stage > .v3-intro__particles { inset: 0; opacity: 1; }
.v3-intro__backdrop { inset: 0; background: var(--inv-surface); }
.v3-intro__piece { top: 0; bottom: 0; width: 50%; background: var(--inv-primary); }
.v3-intro__piece--start { left: 0; transform-origin: left center; }
.v3-intro__piece--end { right: 0; transform-origin: right center; }
.v3-intro__line { left: 30%; width: 40%; top: 64%; height: 2px; background: var(--inv-accent); transform-origin: left center; }
.v3-intro__mark { left: 50%; top: 50%; width: 64px; height: 64px; margin: -32px 0 0 -32px; border-radius: 50%; background: var(--inv-accent); }
.v3-intro__particle { left: var(--px); top: var(--py); width: 10px; height: 14px; border-radius: 2px; background: var(--inv-accent); }
.v3-intro__particle:nth-child(3n) { background: var(--inv-primary); }
.v3-intro__particle:nth-child(3n + 2) { background: var(--inv-ornament); }
/* §3.1/9: 390'da parçacık sayısı 1440'ın yarısı. */
@media (max-width: 599.98px) {
  .v3-intro__particle:nth-child(2n) { display: none; }
}

.v3-intro__skip {
  position: fixed; top: max(12px, env(safe-area-inset-top)); right: max(12px, env(safe-area-inset-right)); z-index: 41;
  display: inline-flex; align-items: center; justify-content: center;
  width: 44px; height: 44px; padding: 0; border: 1px solid var(--inv-border); border-radius: 999px;
  background: var(--inv-surface); color: var(--inv-text);
  font: 600 13px/1 var(--inv-font-body); cursor: pointer; pointer-events: auto;
  animation: v3-fade-in 150ms linear both;
}
.v3-intro__skip:focus-visible { outline: 2px solid var(--inv-primary); outline-offset: 2px; }
body[data-intro-phase="done"] .v3-intro__skip { display: none; }

/* JS çalışıp açılışı başlatamazsa kapak 3 sn sonra kendiliğinden görünür (idle bekçisi). */
html.js body[data-engine="v3"][data-intro-phase="idle"] :is(.inv-cover__art, .inv-cover__content) {
  animation: v3-fade-in 200ms linear 3000ms both;
}
/* Atlandığında kapak içeriği son karesinde. */
body[data-engine="v3"][data-intro-skip][data-intro-phase="playing"] :is(.inv-cover__art, .inv-cover__content, .inv-cover__names, .inv-cover__eyebrow, .inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__badge, .inv-cover__corner) {
  animation: none;
}
/* v1/v2 kapak girişi (invitation-page.css .is-entering) v3'te yok: ?intro=off'ta açılış hiç oynamaz. */
body[data-engine="v3"] .inv-cover.is-entering :is(.inv-cover__names, .inv-cover__eyebrow, .inv-cover__date, .inv-cover__venue) { animation: none; }
/* #1605: okuma ipucu noktası yalnız opacity/transform ile nefes alır (CLS üretmez); azaltılmış harekette invitation-page.css durdurur. */

/* ---------- 4. Açılışlar (20 animasyon; sistem.md "animation:" alt başlıkları) ---------- */

/* slow-fade — kapak zemini 0-800, isim 400-1500 önce, tarih 1000-2300 sonra (kademe 600); transform yok; toplam 2500. */
body[data-animation="slow-fade"][data-intro-phase="playing"] .inv-cover__art { animation: v3-fade-in min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) both; }
body[data-animation="slow-fade"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-fade-in min(calc(1100ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(400ms * var(--v3-k, 1)) both; }
body[data-animation="slow-fade"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(1000ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1000ms * var(--v3-k, 1)) both; }

/* veil-lift — tül (surface .85) 0-1200 yukarı, 1200-2000 söner; isim 600-1400 12 px yükselir. */
body[data-animation="veil-lift"] .v3-intro__backdrop { transform-origin: top center; }
body[data-animation="veil-lift"][data-intro-phase="playing"] .v3-intro__backdrop { animation: v3-veil-lift min(calc(1200ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-in-out) both; }
body[data-animation="veil-lift"][data-intro-phase="playing"] .v3-intro__stage { animation: v3-fade-out min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) linear calc(1200ms * var(--v3-k, 1)) both; }
body[data-animation="veil-lift"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-rise-in min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(600ms * var(--v3-k, 1)) both; }
body[data-animation="veil-lift"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1200ms * var(--v3-k, 1)) both; }

/* ink-reveal — isim 480-1680 mürekkep gibi belirir; alt çizgi 1500-2100 çizilir, 2100-2400 söner; tarih 1800-2400. */
body[data-animation="ink-reveal"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-fade-in min(calc(1200ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(480ms * var(--v3-k, 1)) both; }
body[data-animation="ink-reveal"][data-intro-phase="playing"] .v3-intro__line { animation: v3-draw-x min(calc(600ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(1500ms * var(--v3-k, 1)) both; }
body[data-animation="ink-reveal"][data-intro-phase="playing"] .v3-intro__stage { animation: v3-fade-out min(calc(300ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) linear calc(2100ms * var(--v3-k, 1)) both; }
body[data-animation="ink-reveal"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(600ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1800ms * var(--v3-k, 1)) both; }

/* split-slide — iki panel (primary) 0-1000 iki yana; isim 500-1260; tarih 1000-1800. */
body[data-animation="split-slide"][data-intro-phase="playing"] .v3-intro__piece--start { animation: v3-slide-out-start min(calc(1000ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-in-out) both; }
body[data-animation="split-slide"][data-intro-phase="playing"] .v3-intro__piece--end { animation: v3-slide-out-end min(calc(1000ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-in-out) both; }
body[data-animation="split-slide"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-fade-in min(calc(760ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(500ms * var(--v3-k, 1)) both; }
body[data-animation="split-slide"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1000ms * var(--v3-k, 1)) both; }

/* lantern-glow — halka (accent .35) 0-1400 büyür, 1400-2200 .15'e iner ve kalır; içerik 400-1540. */
body[data-animation="lantern-glow"] .v3-intro__mark {
  width: min(78vw, 440px); height: min(78vw, 440px); margin: calc(min(78vw, 440px) / -2) 0 0 calc(min(78vw, 440px) / -2);
  top: 45%; opacity: .15;
}
body[data-animation="lantern-glow"][data-intro-phase="playing"] .v3-intro__mark { animation: v3-ring-grow min(calc(1400ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) both, v3-ring-dim min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) linear calc(1400ms * var(--v3-k, 1)) forwards; }
body[data-animation="lantern-glow"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-fade-in min(calc(1140ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(400ms * var(--v3-k, 1)) both; }
body[data-animation="lantern-glow"][data-intro-phase="playing"] :is(.inv-cover__art, .inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(1140ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(400ms * var(--v3-k, 1)) both; }

/* map-pin-drop — rota 0-300, iğne 300-1000 üst süs bölgesine (üst %22) düşer, rota örtüsü 800-1600 açılır; isim 700-1600; mekân 1500-2300; sahne 1900-2400 söner.
   İğne ve rota metin bandının dışında kalır; "Davetiyeyi oku" bağlantısı kapakta aşağıdadır, iğneye binmez. */
body[data-animation="map-pin-drop"] .v3-intro__line { left: 20%; width: 60%; top: 19%; height: 3px; border-radius: 3px; }
body[data-animation="map-pin-drop"] .v3-intro__line::after {
  content: ""; position: absolute; inset: -2px 0; background: var(--inv-bg); transform-origin: right center;
}
body[data-animation="map-pin-drop"] .v3-intro__mark { top: 19%; width: 26px; height: 26px; margin: -34px 0 0 -13px; border-radius: 50% 50% 50% 0; rotate: -45deg; background: var(--inv-primary); }
body[data-animation="map-pin-drop"][data-intro-phase="playing"] .v3-intro__line { animation: v3-fade-in min(calc(300ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) linear both; }
body[data-animation="map-pin-drop"][data-intro-phase="playing"] .v3-intro__line::after { animation: v3-wipe-x min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(800ms * var(--v3-k, 1)) both; }
body[data-animation="map-pin-drop"][data-intro-phase="playing"] .v3-intro__mark { animation: v3-pin-drop min(calc(700ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(300ms * var(--v3-k, 1)) both; }
body[data-animation="map-pin-drop"][data-intro-phase="playing"] .v3-intro__stage { animation: v3-fade-out min(calc(500ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) linear calc(1900ms * var(--v3-k, 1)) both; }
body[data-animation="map-pin-drop"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-fade-in min(calc(900ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(700ms * var(--v3-k, 1)) both; }
body[data-animation="map-pin-drop"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1500ms * var(--v3-k, 1)) both; }

/* Sahne SVG'leri (partials/v3-intro.blade.php): zarf, hediye kutusu, bilet. Parçalar kendi grubunda canlanır. */
.v3-intro__scene { inset: 0; width: 100%; height: 100%; }
.v3-intro__scene * { transform-box: fill-box; }
.v3-scene__paper { fill: var(--inv-surface); stroke: var(--inv-border); stroke-width: 2; }
.v3-scene__body { fill: var(--inv-primary); }
.v3-scene__shade { fill: var(--inv-surface); opacity: .16; }
.v3-scene__edge { fill: none; stroke: var(--inv-accent); stroke-width: 2; opacity: .8; }
.v3-scene__accent { fill: var(--inv-accent); }
.v3-scene__eyebrow, .v3-scene__names { font-family: var(--inv-font-display); text-anchor: middle; fill: var(--inv-text); }
.v3-scene__eyebrow { font-size: 13px; letter-spacing: .16em; text-transform: uppercase; }
.v3-scene__names { font-weight: 600; }
.v3-scene--ticket :is(.v3-scene__eyebrow, .v3-scene__names) { fill: var(--inv-surface); }
.v3-scene--ticket .v3-scene__perforation { stroke: var(--inv-surface); stroke-width: 3; stroke-dasharray: 6 8; fill: none; }
.v3-scene--ticket .v3-scene__notch { fill: var(--inv-surface); }
.v3-scene--ticket .v3-scene__star { fill: var(--inv-surface); }
.v3-scene--envelope .v3-scene__flap-closed { transform-origin: 50% 0; }
.v3-scene--envelope .v3-scene__flap-open { transform-origin: 50% 100%; }
.v3-scene--envelope .v3-scene__seal { transform-origin: 50% 50%; }
.v3-scene--envelope .v3-scene__seal-ring { fill: none; stroke: var(--inv-surface); stroke-width: 2; opacity: .6; }
.v3-scene--gift .v3-scene__box { transform-origin: 50% 100%; }

/* envelope-unseal — mühür 0-400 kırılır, kapak 400-1100 açılır (kapalı kapak 400-750 katlanır, açık kapak 750-1100 kalkar), kart 1100-2000 içeriden yükselir, sahne 2000-2600 söner (kart yerleşir, kapak isimleri devralır). */
body[data-animation="envelope-unseal"][data-intro-phase="playing"] .v3-intro__backdrop { animation: v3-fade-in 1ms linear both; }
body[data-animation="envelope-unseal"][data-intro-phase="playing"] .v3-intro__scene { animation: v3-fade-in 1ms linear both; }
body[data-animation="envelope-unseal"][data-intro-phase="playing"] .v3-scene__seal { animation: v3-seal-break min(calc(400ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-in-out) both; }
body[data-animation="envelope-unseal"][data-intro-phase="playing"] .v3-scene__flap-closed { animation: v3-flap-fold min(calc(350ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-in) calc(400ms * var(--v3-k, 1)) both; }
body[data-animation="envelope-unseal"][data-intro-phase="playing"] .v3-scene__flap-open { animation: v3-flap-unfold min(calc(350ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(750ms * var(--v3-k, 1)) both; }
body[data-animation="envelope-unseal"][data-intro-phase="playing"] .v3-scene__card { --lift: -170px; animation: v3-lift min(calc(900ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(1100ms * var(--v3-k, 1)) both; }
body[data-animation="envelope-unseal"][data-intro-phase="playing"] .v3-intro__stage { animation: v3-fade-out min(calc(600ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) linear calc(2000ms * var(--v3-k, 1)) both; }
body[data-animation="envelope-unseal"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-fade-in min(calc(700ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(1100ms * var(--v3-k, 1)) both; }
body[data-animation="envelope-unseal"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(700ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1800ms * var(--v3-k, 1)) both; }

/* curtain-part — iki perde 0-1300 iki yana; isim 700-1540; tarih 1400-2200. */
body[data-animation="curtain-part"] .v3-intro__piece { width: 51%; }
body[data-animation="curtain-part"][data-intro-phase="playing"] .v3-intro__piece--start { animation: v3-slide-out-start min(calc(1300ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-in-out) both; }
body[data-animation="curtain-part"][data-intro-phase="playing"] .v3-intro__piece--end { animation: v3-slide-out-end min(calc(1300ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-in-out) both; }
body[data-animation="curtain-part"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-fade-in min(calc(840ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(700ms * var(--v3-k, 1)) both; }
body[data-animation="curtain-part"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1400ms * var(--v3-k, 1)) both; }

/* door-open — kanatlar 200-1500 dış kenardan açılır, iç ışık 600-1400, isim 1000-1800 (scale .96→1), kanatlar 1800-2600 söner. */
body[data-animation="door-open"] .v3-intro__piece { z-index: 1; backface-visibility: hidden; }
body[data-animation="door-open"] .v3-intro__mark { inset: 0; width: auto; height: auto; margin: 0; border-radius: 0; background: color-mix(in srgb, var(--inv-accent) 22%, transparent); }
body[data-animation="door-open"][data-intro-phase="playing"] .v3-intro__piece--start { animation: v3-door-start min(calc(1300ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-in-out) calc(200ms * var(--v3-k, 1)) both; }
body[data-animation="door-open"][data-intro-phase="playing"] .v3-intro__piece--end { animation: v3-door-end min(calc(1300ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-in-out) calc(200ms * var(--v3-k, 1)) both; }
body[data-animation="door-open"][data-intro-phase="playing"] .v3-intro__mark { animation: v3-fade-in min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(600ms * var(--v3-k, 1)) both; }
body[data-animation="door-open"][data-intro-phase="playing"] .v3-intro__stage { animation: v3-fade-out min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) linear calc(1800ms * var(--v3-k, 1)) both; }
body[data-animation="door-open"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-grow-in min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(1000ms * var(--v3-k, 1)) both; }
body[data-animation="door-open"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1800ms * var(--v3-k, 1)) both; }

/* page-turn — kapak sayfası 200-1400 sol kenardan çevrilir; isim 900-1680; tarih 1600-2400. */
body[data-animation="page-turn"] .v3-intro__piece--start { width: 100%; transform-origin: left center; backface-visibility: hidden; background: var(--inv-surface); }
body[data-animation="page-turn"][data-intro-phase="playing"] .v3-intro__piece--start { animation: v3-page-flip min(calc(1200ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-in-out) calc(200ms * var(--v3-k, 1)) both; }
body[data-animation="page-turn"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-fade-in min(calc(780ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(900ms * var(--v3-k, 1)) both; }
body[data-animation="page-turn"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1600ms * var(--v3-k, 1)) both; }

/* petal-drift — 10 yaprak (390'da 5) 0-2800 süzülür, 2400-2800 söner; isim 500-1940. */
body[data-animation="petal-drift"] .v3-intro__particle { width: 12px; height: 16px; border-radius: 60% 0; }
body[data-animation="petal-drift"][data-intro-phase="playing"] .v3-intro__particle { animation: v3-petal-drift calc(2800ms * var(--v3-k, 1)) var(--ease-out) both; }
body[data-animation="petal-drift"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-fade-in min(calc(1440ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(500ms * var(--v3-k, 1)) both; }
body[data-animation="petal-drift"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1400ms * var(--v3-k, 1)) both; }

/* polaroid-drop — 4 polaroid (390'da 2) 250 ms arayla düşer (≤ 6°); isim 800-1580; tarih 1600-2300; sahne 1900-2300 kalkar. */
body[data-animation="polaroid-drop"] .v3-intro__particle {
  left: min(var(--px), calc(100% - 96px)); top: calc(var(--py) * .3 + 8%); width: 76px; height: 92px; border-radius: 3px;
  padding: 6px 6px 20px; box-sizing: border-box; background: linear-gradient(145deg, var(--inv-accent), var(--inv-primary)) content-box, var(--inv-surface) padding-box;
  box-shadow: 0 2px 8px color-mix(in srgb, var(--inv-text) 18%, transparent); --tilt: -4deg;
}
body[data-animation="polaroid-drop"] .v3-intro__particle:nth-child(2n) { --tilt: 5deg; }
body[data-animation="polaroid-drop"][data-intro-phase="playing"] .v3-intro__particle:nth-child(1) { animation: v3-polaroid-drop calc(700ms * var(--v3-k, 1)) var(--ease-out) both; }
body[data-animation="polaroid-drop"][data-intro-phase="playing"] .v3-intro__particle:nth-child(2) { animation: v3-polaroid-drop calc(700ms * var(--v3-k, 1)) var(--ease-out) calc(250ms * var(--v3-k, 1)) both; }
body[data-animation="polaroid-drop"][data-intro-phase="playing"] .v3-intro__particle:nth-child(3) { animation: v3-polaroid-drop calc(700ms * var(--v3-k, 1)) var(--ease-out) calc(500ms * var(--v3-k, 1)) both; }
body[data-animation="polaroid-drop"][data-intro-phase="playing"] .v3-intro__particle:nth-child(4) { animation: v3-polaroid-drop calc(700ms * var(--v3-k, 1)) var(--ease-out) calc(750ms * var(--v3-k, 1)) both; }
body[data-animation="polaroid-drop"][data-intro-phase="playing"] .v3-intro__stage { animation: v3-fade-out min(calc(400ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) linear calc(1900ms * var(--v3-k, 1)) both; }
body[data-animation="polaroid-drop"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-fade-in min(calc(780ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(800ms * var(--v3-k, 1)) both; }
body[data-animation="polaroid-drop"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(700ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1600ms * var(--v3-k, 1)) both; }

/* ribbon-unfurl — kurdele 0-1000 yukarıdan açılır; isim 600-1400; uç süsü 1200-2000 (sahne 1600-2000 kalkar). */
body[data-animation="ribbon-unfurl"] .v3-intro__line { left: 0; top: 0; width: 10px; height: 100%; transform-origin: top center; background: var(--inv-primary); }
body[data-animation="ribbon-unfurl"] .v3-intro__mark { left: 5px; top: auto; bottom: 10px; width: 16px; height: 16px; margin: 0 0 0 -8px; border-radius: 3px; }
body[data-animation="ribbon-unfurl"][data-intro-phase="playing"] .v3-intro__line { animation: v3-unfurl-y min(calc(1000ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) both; }
body[data-animation="ribbon-unfurl"][data-intro-phase="playing"] .v3-intro__mark { animation: v3-fade-in min(calc(400ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1200ms * var(--v3-k, 1)) both; }
body[data-animation="ribbon-unfurl"][data-intro-phase="playing"] .v3-intro__stage { animation: v3-fade-out min(calc(400ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) linear calc(1600ms * var(--v3-k, 1)) both; }
body[data-animation="ribbon-unfurl"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-fade-in min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(600ms * var(--v3-k, 1)) both; }
body[data-animation="ribbon-unfurl"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1200ms * var(--v3-k, 1)) both; }

/* ticket-tear — bilet 0-500 yükselir; delik çizgisinde sol yarı translateX ile ayrılır 800-1500; isim 300-1400; tarih 1200-2000; sahne 1400-2000 söner. */
body[data-animation="ticket-tear"][data-intro-phase="playing"] .v3-intro__backdrop { animation: v3-fade-in 1ms linear both; }
body[data-animation="ticket-tear"][data-intro-phase="playing"] .v3-intro__scene { animation: v3-fade-in 1ms linear both; }
body[data-animation="ticket-tear"][data-intro-phase="playing"] .v3-scene__ticket { animation: v3-scene-in min(calc(500ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) both; }
body[data-animation="ticket-tear"][data-intro-phase="playing"] .v3-scene__main { animation: v3-tear-main min(calc(700ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(800ms * var(--v3-k, 1)) both; }
body[data-animation="ticket-tear"][data-intro-phase="playing"] .v3-scene__stub { animation: v3-tear-stub min(calc(700ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(800ms * var(--v3-k, 1)) both; }
body[data-animation="ticket-tear"][data-intro-phase="playing"] .v3-intro__stage { animation: v3-fade-out min(calc(600ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) linear calc(1400ms * var(--v3-k, 1)) both; }
body[data-animation="ticket-tear"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-fade-in min(calc(1100ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(300ms * var(--v3-k, 1)) both; }
body[data-animation="ticket-tear"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1200ms * var(--v3-k, 1)) both; }

/* star-twinkle — 16 yıldız (390'da 8) dört dalgada tek parlama, sonra .6'da kalır; isim 600-1680; tarih 1700-2400. */
body[data-animation="star-twinkle"] .v3-intro__particle { width: 6px; height: 6px; border-radius: 50%; opacity: .6; }
body[data-animation="star-twinkle"][data-intro-phase="playing"] .v3-intro__particle:nth-child(4n + 1) { animation: v3-star-twinkle calc(600ms * var(--v3-k, 1)) var(--ease-out) both; }
body[data-animation="star-twinkle"][data-intro-phase="playing"] .v3-intro__particle:nth-child(4n + 2) { animation: v3-star-twinkle calc(600ms * var(--v3-k, 1)) var(--ease-out) calc(400ms * var(--v3-k, 1)) both; }
body[data-animation="star-twinkle"][data-intro-phase="playing"] .v3-intro__particle:nth-child(4n + 3) { animation: v3-star-twinkle calc(600ms * var(--v3-k, 1)) var(--ease-out) calc(800ms * var(--v3-k, 1)) both; }
body[data-animation="star-twinkle"][data-intro-phase="playing"] .v3-intro__particle:nth-child(4n + 4) { animation: v3-star-twinkle calc(600ms * var(--v3-k, 1)) var(--ease-out) calc(1200ms * var(--v3-k, 1)) both; }
body[data-animation="star-twinkle"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-fade-in min(calc(1080ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(600ms * var(--v3-k, 1)) both; }
body[data-animation="star-twinkle"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(700ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1700ms * var(--v3-k, 1)) both; }

/* confetti-burst — 40 parça (390'da 20) 300-2000 saçılır, 1800-2400 söner; isim 200-1680 (scale .92→1, yay). */
body[data-animation="confetti-burst"] .v3-intro__particle { width: 8px; height: 12px; }
body[data-animation="confetti-burst"][data-intro-phase="playing"] .v3-intro__particle { animation: v3-confetti-burst calc(2100ms * var(--v3-k, 1)) var(--ease-out) calc(300ms * var(--v3-k, 1)) both; }
body[data-animation="confetti-burst"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-pop-in min(calc(1480ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-spring) calc(200ms * var(--v3-k, 1)) both; }
body[data-animation="confetti-burst"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1600ms * var(--v3-k, 1)) both; }

/* balloon-rise — 8 balon (390'da 4, her biri ≥ 64 px) alttan yükselir (gecikme 0-600, süre 1800), 2400'de ekrandan çıkmış olur; --ease-spring; isim 600-1600; tarih 1600-2400. */
body[data-animation="balloon-rise"] .v3-intro__particle { top: 100%; width: 64px; height: 80px; border-radius: 50% 50% 46% 46%; box-shadow: inset -8px -10px 0 color-mix(in srgb, var(--inv-text) 12%, transparent); }
body[data-animation="balloon-rise"] .v3-intro__particle::after { content: ""; position: absolute; left: 50%; top: 100%; width: 2px; height: 40px; background: var(--inv-text); opacity: .35; }
body[data-animation="balloon-rise"][data-intro-phase="playing"] .v3-intro__particle:nth-child(3n + 1) { animation: v3-balloon-rise calc(1800ms * var(--v3-k, 1)) var(--ease-spring) both; }
body[data-animation="balloon-rise"][data-intro-phase="playing"] .v3-intro__particle:nth-child(3n + 2) { animation: v3-balloon-rise calc(1800ms * var(--v3-k, 1)) var(--ease-spring) calc(300ms * var(--v3-k, 1)) both; }
body[data-animation="balloon-rise"][data-intro-phase="playing"] .v3-intro__particle:nth-child(3n) { animation: v3-balloon-rise calc(1800ms * var(--v3-k, 1)) var(--ease-spring) calc(600ms * var(--v3-k, 1)) both; }
body[data-animation="balloon-rise"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-rise-in-16 min(calc(1000ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(600ms * var(--v3-k, 1)) both; }
body[data-animation="balloon-rise"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(800ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1600ms * var(--v3-k, 1)) both; }

/* gift-unwrap — kutu 0-400 belirir, kurdele 400-900 çözülür (fiyonk uçar), kapak 900-1500 translate+rotate ile yana kalkar, kart 1000-1700 kutudan çıkar, sahne 1750-2200 söner; isim 900-1540. */
body[data-animation="gift-unwrap"][data-intro-phase="playing"] .v3-intro__backdrop { animation: v3-fade-in 1ms linear both; }
body[data-animation="gift-unwrap"][data-intro-phase="playing"] .v3-intro__scene { animation: v3-fade-in 1ms linear both; }
body[data-animation="gift-unwrap"][data-intro-phase="playing"] .v3-scene__box { animation: v3-box-in min(calc(400ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) both; }
body[data-animation="gift-unwrap"][data-intro-phase="playing"] .v3-scene__bow { animation: v3-bow-away min(calc(500ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-in-out) calc(400ms * var(--v3-k, 1)) both; }
body[data-animation="gift-unwrap"][data-intro-phase="playing"] .v3-scene__lid { animation: v3-lid-off min(calc(600ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(900ms * var(--v3-k, 1)) both; }
body[data-animation="gift-unwrap"][data-intro-phase="playing"] .v3-scene__card { --lift: -130px; animation: v3-lift min(calc(700ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(1000ms * var(--v3-k, 1)) both; }
body[data-animation="gift-unwrap"][data-intro-phase="playing"] .v3-intro__stage { animation: v3-fade-out min(calc(450ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) linear calc(1750ms * var(--v3-k, 1)) both; }
body[data-animation="gift-unwrap"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-fade-in min(calc(640ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(900ms * var(--v3-k, 1)) both; }
body[data-animation="gift-unwrap"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(700ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1500ms * var(--v3-k, 1)) both; }

/* car-arrival — araba 0-1600 soldan gelir, 1600-1900 durur (390'da %80 genişlik); isim 900-1940; tarih 1900-2800. */
body[data-animation="car-arrival"] .v3-intro__mark { left: 10%; top: auto; bottom: 8%; width: min(80%, 360px); height: 56px; margin: 0; border-radius: 28px 28px 10px 10px; background: var(--inv-primary); }
body[data-animation="car-arrival"][data-intro-phase="playing"] .v3-intro__mark { animation: v3-car-drive calc(1900ms * var(--v3-k, 1)) var(--ease-out) both; }
body[data-animation="car-arrival"][data-intro-phase="playing"] .v3-intro__stage { animation: v3-fade-out min(calc(400ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) linear calc(2400ms * var(--v3-k, 1)) both; }
body[data-animation="car-arrival"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-fade-in min(calc(1040ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-out) calc(900ms * var(--v3-k, 1)) both; }
body[data-animation="car-arrival"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(900ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1900ms * var(--v3-k, 1)) both; }

/* neon-flicker — yazı opaklıkla yanar (tek sönme-yanma, ≤ 3 Hz), 600'de tam; parlama statik; tarih 1400-2000. */
body[data-animation="neon-flicker"][data-intro-phase="playing"] :is(.inv-cover__names, .inv-cover__eyebrow) { animation: v3-neon-on min(calc(600ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) linear both; }
body[data-animation="neon-flicker"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) { animation: v3-fade-in min(calc(600ms * var(--v3-k, 1)), var(--v3-stage-max, 9999ms)) var(--ease-standard) calc(1400ms * var(--v3-k, 1)) both; }

/* #1493: lace-bonnet and tulip-dinner (envelope-pocket): the envelope pocket must not cover the cover for good once the intro ends:
   it fades out with an opacity transition only (with ?intro=off the intro is already done, the envelope is never drawn). The scroll hint link carries its own background. */
body[data-theme="lace-bonnet"] .inv-cover__art::before, body[data-theme="lace-bonnet"] .inv-cover__art::after,
body[data-theme="tulip-dinner"] .inv-cover__art::before, body[data-theme="tulip-dinner"] .inv-cover__art::after { transition: opacity 400ms var(--ease-standard); }
body[data-theme="lace-bonnet"][data-intro-phase="done"] .inv-cover__art::before, body[data-theme="lace-bonnet"][data-intro-phase="done"] .inv-cover__art::after,
body[data-theme="tulip-dinner"][data-intro-phase="done"] .inv-cover__art::before, body[data-theme="tulip-dinner"][data-intro-phase="done"] .inv-cover__art::after { opacity: 0; }

/* ---------- 5. Kaydırma (scroll-reveal; §3.1/6, §3.2 yoğunluk varsayılanları) ----------
   v3'te v2'nin [data-reveal] geçişi kapalı; v3-motion.js yalnız tam harekette ve intro açıkken body'ye
   data-scroll-reveal="on" yazar, bölüm %15 görününce data-revealed ekler (bir kez). */
body[data-engine="v3"] [data-reveal] > * { opacity: 1; transform: none; transition: none; }
body[data-scroll-reveal="on"] [data-section]:not([data-section="cover"], [data-section="names"]):not([data-revealed]) > * { opacity: 0; }
body[data-scroll-reveal="on"][data-intensity="low"] [data-section][data-revealed] > * { animation: v3-reveal-low var(--v3-scroll-ms) var(--ease-out) both; }
body[data-scroll-reveal="on"][data-intensity="medium"] [data-section][data-revealed] > * { animation: v3-reveal-medium var(--v3-scroll-ms) var(--ease-out) both; }
body[data-scroll-reveal="on"][data-intensity="high"] [data-section][data-revealed] > * { animation: v3-reveal-high var(--v3-scroll-ms) var(--ease-spring) both; }
/* Animasyona özgü kaydırma: kayma yok / yandan / ölçek / kurdele. */
body[data-scroll-reveal="on"][data-animation="slow-fade"] [data-section][data-revealed] > *,
body[data-scroll-reveal="on"][data-animation="ink-reveal"] [data-section][data-revealed] > * { animation-name: v3-fade-in; }
body[data-scroll-reveal="on"][data-animation="split-slide"] [data-section][data-revealed]:nth-of-type(odd) > * { animation-name: v3-reveal-side-start; }
body[data-scroll-reveal="on"][data-animation="split-slide"] [data-section][data-revealed]:nth-of-type(even) > *,
body[data-scroll-reveal="on"][data-animation="page-turn"] [data-section][data-revealed] > * { animation-name: v3-reveal-side; }
body[data-scroll-reveal="on"][data-animation="lantern-glow"] [data-section][data-revealed] > * { animation-name: v3-reveal-scale; }
body[data-scroll-reveal="on"][data-animation="ribbon-unfurl"] [data-section][data-revealed] > * { animation-name: v3-reveal-unfurl; transform-origin: top center; }
body[data-scroll-reveal="on"][data-animation="car-arrival"] [data-section][data-revealed] > * { animation-name: v3-reveal-side-start; }
/* Çocuk gecikmesi en çok 4 öğe × 80 ms. */
body[data-scroll-reveal="on"] [data-section][data-revealed] > :nth-child(2) { animation-delay: 80ms; }
body[data-scroll-reveal="on"] [data-section][data-revealed] > :nth-child(3) { animation-delay: 160ms; }
body[data-scroll-reveal="on"] [data-section][data-revealed] > :nth-child(n + 4) { animation-delay: 240ms; }

/* ---------- 6. Mikro etkileşim (§3.2: hover translateY(-2px), basma scale(.97) 100 ms; odakta transform yok) ---------- */
body[data-engine="v3"] .inv-btn { transition: transform var(--v3-micro-ms) var(--ease-standard), opacity var(--v3-micro-ms) var(--ease-standard); }
body[data-engine="v3"] .inv-btn:hover { transform: translateY(-2px); }
body[data-engine="v3"] .inv-btn:active { transform: scale(.97); transition-duration: 100ms; }
body[data-engine="v3"] .inv-btn:focus-visible:not(:hover) { transform: none; }
body[data-animation="slow-fade"] .inv-btn:hover { transform: none; opacity: .9; }
body[data-animation="slow-fade"] .inv-btn:active { transform: scale(.98); }
body[data-animation="split-slide"] .inv-btn:hover { transform: translateX(2px); }
body[data-animation="neon-flicker"] .inv-btn:hover { transform: none; animation: v3-neon-hover 200ms linear both; }

/* ---------- 7. Azaltılmış hareket (html[data-motion="reduce"]; §3.1/5) ----------
   Açılış: ≤ 300 ms (--v3-reduce-ms) yalnız opaklık; sahne parçaları oynamaz; kaydırma ve mikro transform yok. */
html[data-motion="reduce"] body[data-engine="v3"][data-intro-phase="playing"] :is(.inv-cover__art, .inv-cover__names, .inv-cover__eyebrow) {
  animation: v3-fade-in calc(var(--v3-reduce-ms) - 50ms) linear both;
}
html[data-motion="reduce"] body[data-engine="v3"][data-intro-phase="playing"] :is(.inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) {
  animation: v3-fade-in calc(var(--v3-reduce-ms) - 50ms) linear 50ms both;
}
html[data-motion="reduce"] body[data-engine="v3"][data-intro-phase="playing"] :is(.v3-intro__stage, .v3-intro__stage > *, .v3-intro__particle),
html[data-motion="reduce"] body[data-engine="v3"][data-intro-phase="playing"] .v3-intro__line::after {
  animation: none;
}
/* Yeniden çizilen yedi açılış: azaltılmış harekette tüm kapak 200 ms opaklıkla gelir (sistem-v4 §3). */
html[data-motion="reduce"] body[data-engine="v3"][data-intro-phase="playing"]:is([data-animation="slow-fade"], [data-animation="map-pin-drop"], [data-animation="envelope-unseal"], [data-animation="polaroid-drop"], [data-animation="ticket-tear"], [data-animation="balloon-rise"], [data-animation="gift-unwrap"]) :is(.inv-cover__art, .inv-cover__names, .inv-cover__eyebrow, .inv-cover__date, .inv-cover__venue, .inv-cover__monogram, .inv-cover__corner) {
  animation: v3-fade-in 200ms linear both;
}
html[data-motion="reduce"] body[data-engine="v3"] [data-section] > * { opacity: 1; animation: none; }
html[data-motion="reduce"] body[data-engine="v3"] .inv-btn,
html[data-motion="reduce"] body[data-engine="v3"] .inv-btn:hover,
html[data-motion="reduce"] body[data-engine="v3"] .inv-btn:active { transform: none; transition: none; animation: none; }
