.draw-heart{font-size:32px;animation:heartPulse 2s ease-in-out infinite}@keyframes heartPulse{50%{transform:scale(1.15);opacity:.65}}.opening-copy.is-leaving{animation:openingCopyOut .45s ease both}.go-scene.play .one{animation:doOneSequence 3.2s .25s both}.go-scene.play .two{animation:doTwoSequence 2.4s 1.05s both}.go-scene.play .taxi{animation:taxiDrive 3s 1.85s cubic-bezier(.45,.02,.35,1) both}.go-scene.play .taxi img{animation:taxiBob .34s 1.85s ease-in-out 8 alternate}.go-scene.play .taxi::before,.go-scene.play .taxi::after{content:"";position:absolute;z-index:-1;width:10px;height:10px;border-radius:50%;background:var(--beige);opacity:0;animation:dustPuff .65s ease-out 3}.go-scene.play .taxi::before{left:-5px;bottom:18px;animation-delay:2.05s}.go-scene.play .taxi::after{left:8px;bottom:11px;animation-delay:2.28s}.go-scene.play .go-text{animation:goPop .7s 2.85s both}.go-scene.play .go-joke{animation:fadeUp .5s 3.45s both}#opening::after{content:"";position:absolute;left:50%;bottom:max(20px,env(safe-area-inset-bottom));width:min(190px,50vw);height:1px;background:var(--gold);opacity:0;transform:translateX(-50%) scaleX(0);transform-origin:center}#opening.is-ending::after{animation:openingLine .65s ease both}#opening.is-ending>*{animation:openingFadeOut .72s ease both}body.intro-locked #days-together{opacity:0;transform:translateY(18px)}body.intro-transition #days-together{opacity:1;transform:translateY(0);transition:opacity .75s ease,transform .75s ease}@keyframes openingCopyOut{to{opacity:0;transform:translateY(-8px)}}@keyframes doOneSequence{0%{opacity:0;transform:translateY(12px)}16%,68%{opacity:1;transform:translateY(0)}82%,100%{opacity:1;transform:translateY(-48px)}}@keyframes doTwoSequence{0%{opacity:0;transform:translateY(12px)}21%,58%{opacity:1;transform:translateY(0)}78%,100%{opacity:1;transform:translateY(-48px)}}@keyframes fadeUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}@keyframes taxiDrive{0%{left:-38%;transform:translateY(0) rotate(0)}42%{left:40%;transform:translateY(-2px) rotate(-1deg)}58%{left:46%;transform:translateY(0) rotate(0)}100%{left:130%;transform:translateY(-1px) rotate(0)}}@keyframes taxiBob{to{transform:translateY(-2px)}}@keyframes dustPuff{0%{opacity:0;transform:translate(0,0) scale(.4)}30%{opacity:.55}100%{opacity:0;transform:translate(-22px,-8px) scale(1.4)}}@keyframes openingLine{0%{opacity:0;transform:translateX(-50%) scaleX(0)}45%{opacity:.75;transform:translateX(-50%) scaleX(1)}100%{opacity:0;transform:translateX(-50%) scaleX(1)}}@keyframes openingFadeOut{to{opacity:0;transform:translateY(-12px)}}@keyframes goPop{0%{opacity:0;transform:scale(.7)}70%{opacity:1;transform:scale(1.08)}100%{opacity:1;transform:scale(1)}}.secret-heart:hover{animation:wiggle .35s linear 2}@keyframes wiggle{25%{transform:rotate(-12deg)}75%{transform:rotate(12deg)}}

.story-ending .secret-heart{animation:secretEasterPulse 2.8s ease-in-out infinite}#secret-message.is-reacting{animation:secretReaction .3s ease both}#secret-login.is-unlocking{animation:secretLoginUnlock .38s ease both}#secret-content.is-unlocked{animation:secretContentReveal .5s ease both}#secret-content.is-unlocked #future-card.is-available{animation:futureCardUnlock .65s ease both}@keyframes secretEasterPulse{0%,100%{transform:translateY(0) scale(1);box-shadow:0 5px 18px #c7a76c24}50%{transform:translateY(-2px) scale(1.045);box-shadow:0 7px 24px #c7a76c52}}@keyframes secretReaction{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}@keyframes secretLoginUnlock{to{opacity:0;transform:translateY(-7px) scale(.99)}}@keyframes secretContentReveal{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:none}}@keyframes futureCardUnlock{0%{opacity:.55;transform:scale(.985)}60%{transform:scale(1.012)}100%{opacity:1;transform:none}}

.secret-invite-arrow{animation:secretArrowNudge 1.5s ease-in-out infinite}@keyframes secretArrowNudge{0%,100%{transform:translateX(0)}50%{transform:translateX(4px)}}

@media (prefers-reduced-motion:reduce){.story-ending .secret-heart,.secret-invite-arrow{animation:none!important}}

/* Days Together: fixed-width, top-to-bottom reels keep the unit and layout still. */
.quiz-card.is-changing{animation:quizQuestionOut .22s ease both}.quiz-card.is-entering{animation:quizQuestionIn .34s ease both}.quiz-option.is-wrong{animation:quizWrong .32s ease}.quiz-success.is-visible{animation:quizGranted .7s ease both}#quiz-protected.is-revealed{animation:quizReveal .7s ease both}@keyframes quizQuestionOut{to{opacity:0;transform:translateY(-7px)}}@keyframes quizQuestionIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes quizWrong{25%{transform:translateX(-4px)}50%{transform:translateX(4px)}75%{transform:translateX(-2px)}}@keyframes quizGranted{0%{opacity:0;transform:translateY(8px) scale(.97)}65%{opacity:1;transform:translateY(0) scale(1.02)}100%{opacity:1;transform:none}}@keyframes quizReveal{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
.pottery-hearts i{animation:potteryHeart .8s ease-out both}.pottery-hearts i:nth-child(1){transform:translateX(-22px);animation-delay:.02s}.pottery-hearts i:nth-child(2){transform:translateX(-2px);animation-delay:.12s}.pottery-hearts i:nth-child(3){transform:translateX(18px);animation-delay:.2s}@keyframes potteryHeart{0%{opacity:0;margin-top:6px}35%{opacity:.9}100%{opacity:0;margin-top:-30px}}
.place-routes.is-drawing .place-route-reveal{animation:placeRouteDraw 1.8s cubic-bezier(.45,.05,.3,1) forwards}.place-marker.route-arriving{animation:placeMarkerArrive .34s var(--arrival-delay,0s) ease-out both}.place-marker::before{animation:placePulse 2.4s ease-out infinite}@keyframes placeRouteDraw{to{stroke-dashoffset:0}}@keyframes placeMarkerArrive{from{opacity:0;transform:scale(.78)}to{opacity:1;transform:scale(1)}}@keyframes placePulse{0%,45%{transform:scale(.82);opacity:.3}75%,100%{transform:scale(1.35);opacity:0}}
.holding-hands.is-visible .hands-intro{animation:handsTextIn .55s ease .05s both}.holding-hands.is-visible .hand-photo{animation:handPhotoReveal 1s cubic-bezier(.25,.65,.3,1) both}.holding-hands.is-visible .hand-photo:nth-child(1){animation-delay:.5s}.holding-hands.is-visible .hand-photo:nth-child(2){animation-delay:.68s}.holding-hands.is-visible .hand-photo:nth-child(3){animation-delay:.84s}.holding-hands.is-visible .hand-photo:nth-child(4){animation-delay:1s}.holding-hands.is-visible .hands-reflection{animation:handsTextIn .6s ease 1.42s both}.holding-hands.is-visible .hands-choice{animation:handsTextIn .5s ease 1.95s both}.holding-hands.is-connected .hand-connection{animation:handConnectionShow .2s ease both}.holding-hands.is-connected .hand-connection::before{animation:leftHandMeet .65s ease .08s both}.holding-hands.is-connected .hand-connection::after{animation:rightHandMeet .65s ease .08s both}.holding-hands.is-connected .hand-connection i{animation:handLineDraw .55s ease .2s both}.holding-hands.is-connected .hand-connection span{animation:handHeartMeet .55s ease .48s both}.read-love-letter.is-visible{animation:handsTextIn .45s ease both}#love-letter.is-revealed{animation:loveLetterReveal .65s ease both}@keyframes handsTextIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes handPhotoReveal{from{opacity:0;filter:blur(5px);transform:scale(.975)}to{opacity:1;filter:blur(0);transform:scale(1)}}@keyframes handConnectionShow{to{opacity:1}}@keyframes leftHandMeet{to{left:64px}}@keyframes rightHandMeet{to{right:64px}}@keyframes handLineDraw{to{transform:translateX(-50%) scaleX(1)}}@keyframes handHeartMeet{0%{opacity:0;transform:scale(.75)}45%{opacity:1;transform:scale(1.08)}100%{opacity:.9;transform:scale(1)}}@keyframes loveLetterReveal{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.holding-hands.is-visible .hands-intro,.holding-hands.is-visible .hand-photo,.holding-hands.is-visible .hands-reflection,.holding-hands.is-visible .hands-choice{animation-delay:0s!important;filter:none!important}#love-letter.is-revealed{transform:none}}
.love-letter-paper.is-closing{animation:letterClose .8s cubic-bezier(.45,.05,.3,1) both}.love-letter-paper.is-returning{animation:letterReturn .5s ease both}.post-letter-prompt.is-visible{animation:letterAfterthought .5s ease both}.post-letter-prompt.is-leaving{animation:letterAfterthoughtOut .3s ease both}#postscript.is-revealed{animation:postscriptReveal .65s ease both}#postscript.is-hiding{animation:postscriptHide .4s ease both}@keyframes letterClose{to{opacity:0;transform:translateY(-8px) scale(.985);filter:blur(.4px);visibility:hidden}}@keyframes letterReturn{from{opacity:0;transform:translateY(8px) scale(.985)}to{opacity:1;transform:none}}@keyframes letterAfterthought{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes letterAfterthoughtOut{to{opacity:0;transform:translateY(-6px);visibility:hidden}}@keyframes postscriptReveal{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}@keyframes postscriptHide{to{opacity:0;transform:translateY(12px)}}
.story-ending.is-visible .ending-the-end{animation:endingIntro .45s ease both}.story-ending.is-striking .ending-the-end span::after{animation:endingStrike .48s ease-out both}.story-ending.is-continued .ending-the-end{animation:endingEndOut .35s ease both}.story-ending.is-continued .ending-continued{visibility:visible;animation:endingContinueIn .55s ease both}@keyframes endingIntro{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}@keyframes endingStrike{to{transform:scaleX(1)}}@keyframes endingEndOut{to{opacity:0;transform:translateY(-6px)}}@keyframes endingContinueIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.memory-next .memory-placeholder b{animation:memoryNextFloat 3s ease-in-out infinite}@keyframes memoryNextFloat{0%,100%{transform:translateY(0);opacity:.72}50%{transform:translateY(-3px);opacity:1}}
.counter{display:inline-flex;align-items:baseline;position:relative;white-space:nowrap}.counter strong.counter-reels{display:inline-grid;grid-template-columns:repeat(var(--digit-count),.62em);height:1.05em;overflow:hidden;font-variant-numeric:tabular-nums;opacity:0}.counter strong.counter-reduced{opacity:0}.counter strong.counter-ready{opacity:1;transition:opacity .35s ease}.counter-digit{display:block;position:relative;height:1.05em;overflow:hidden;isolation:isolate}.counter-digit-current,.counter-digit-next{position:absolute;inset:0;display:grid;place-items:center;line-height:1.05;will-change:transform,opacity;backface-visibility:hidden}.counter-digit-next{transform:translateY(-112%);opacity:.2;filter:blur(.65px)}.counter-digit.is-rolling .counter-digit-current{animation:counterFallOut .09s ease-in both}.counter-digit.is-rolling .counter-digit-next{animation:counterFallIn .09s ease-out both}.counter-landed{animation:counterSoftBounce .34s ease-out}.counter-landing-heart{position:absolute;left:calc(100% + .12em);top:.12em;font:700 .25em Georgia,serif;color:var(--gold);pointer-events:none;animation:counterHeart .7s ease-out both}@keyframes counterFallIn{from{transform:translateY(-112%);opacity:.15;filter:blur(.7px)}65%{opacity:1;filter:blur(0)}to{transform:translateY(0);opacity:1;filter:blur(0)}}@keyframes counterFallOut{from{transform:translateY(0);opacity:1;filter:blur(0)}to{transform:translateY(105%);opacity:0;filter:blur(.8px)}}@keyframes counterSoftBounce{0%,100%{transform:translateY(0)}45%{transform:translateY(-.045em)}}@keyframes counterHeart{0%{opacity:0;transform:translateY(.2em) scale(.8)}30%{opacity:.8}100%{opacity:0;transform:translateY(-.55em) scale(1)}}@media (prefers-reduced-motion:reduce){.counter strong.counter-ready{transition:opacity .35s ease}.counter-landed,.counter-landing-heart{animation:none}}
