*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{background:#080612;overflow:hidden;font-family:'Comfortaa',sans-serif;color:#fff}
::-webkit-scrollbar{width:0}

/* ─── ENTRANCE ─── */
#entrance{position:fixed;inset:0;z-index:500;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:24px;background:radial-gradient(ellipse at 30% 20%,#1a0a1e 0%,#0d0a1a 40%,#080612 100%);transition:opacity .6s ease,visibility .6s ease}
#entrance.hidden{opacity:0;visibility:hidden;pointer-events:none}
#fake404{position:fixed;inset:0;z-index:499;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;background:#fff;color:#222;font-family:Arial,Helvetica,sans-serif;opacity:0;visibility:hidden;transition:opacity .8s ease,visibility .8s ease}
#fake404.show{opacity:1;visibility:visible}
#fake404 .code{font-size:clamp(100px,20vw,180px);font-weight:900;color:#e0e0e0;line-height:1;letter-spacing:-.05em}
#fake404 .msg{font-size:clamp(16px,3vw,22px);color:#999;margin-top:8px}
#fake404 .oops{font-size:clamp(14px,2.5vw,18px);color:#666;margin-top:16px}
#fake404 .fix{font-size:clamp(12px,2vw,15px);color:#999;font-style:italic}
#fake404 .url{font-size:13px;color:#bbb;margin-top:24px;font-family:monospace}
#fake404 .spinner{margin-top:32px;width:28px;height:28px;border:3px solid #e0e0e0;border-top-color:#999;border-radius:50%;animation:spin404 .8s linear infinite;opacity:0;transition:opacity .3s}
#fake404 .spinner.on{opacity:1}
@keyframes spin404{to{transform:rotate(360deg)}}
#entrance .gift{font-size:80px;margin-bottom:20px;animation:giftBounce 2s ease-in-out infinite;filter:drop-shadow(0 0 30px rgba(255,107,138,.4))}
#entrance h1{font-family:'Unbounded',sans-serif;font-size:clamp(28px,6vw,52px);font-weight:700;letter-spacing:-.02em;text-shadow:0 0 60px rgba(255,107,138,.3);margin-bottom:8px}
#entrance .sub{font-size:clamp(16px,3vw,22px);color:rgba(255,200,221,.7);font-style:italic;letter-spacing:.05em;margin-bottom:48px}
#entrance button{background:linear-gradient(135deg,#ff6b8a,#b8a0e8);border:none;color:#fff;font-family:'Comfortaa',sans-serif;font-size:20px;font-weight:600;padding:18px 48px;border-radius:60px;cursor:pointer;letter-spacing:.08em;transition:all .4s cubic-bezier(.175,.885,.32,1.275);box-shadow:0 10px 40px rgba(255,107,138,.3);display:none}
#entrance button.unlocked{display:inline-block;animation:popIn .5s cubic-bezier(.175,.885,.32,1.275)}
#entrance button:not(.runaway-done):hover{transform:scale(1.08);background:linear-gradient(135deg,#ff8fab,#c9b1ff);box-shadow:0 20px 60px rgba(255,107,138,.4),0 0 80px rgba(255,107,138,.2)}
#entrance button.runaway-active{position:fixed;transition:left .3s cubic-bezier(.68,-.55,.27,1.55),top .3s cubic-bezier(.68,-.55,.27,1.55),transform .3s ease;z-index:600}
#runaway-msg{position:fixed;z-index:601;pointer-events:none;font-family:'Caveat',cursive;font-size:clamp(22px,4vw,32px);color:rgba(255,200,221,.95);text-shadow:0 0 20px rgba(255,107,138,.4);opacity:0;transition:opacity .3s ease,transform .3s ease;transform:translate(-50%,-120%) scale(.8);white-space:nowrap}
#runaway-msg.visible{opacity:1;transform:translate(-50%,-120%) scale(1);animation:msgPop .35s cubic-bezier(.175,.885,.32,1.275)}
.pin-wrap{display:flex;flex-direction:column;align-items:center;gap:16px;margin-bottom:32px}
.pin-digits{display:flex;gap:12px;justify-content:center}
.pin-digits input{width:48px;height:56px;border-radius:14px;border:2px solid rgba(255,107,138,.3);background:rgba(255,255,255,.06);color:#fff;font-family:'Unbounded',sans-serif;font-size:24px;text-align:center;outline:none;transition:border-color .3s,box-shadow .3s,transform .2s;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.pin-digits input:focus{border-color:rgba(255,107,138,.7);box-shadow:0 0 20px rgba(255,107,138,.25);transform:scale(1.08)}
.pin-digits input.correct{border-color:rgba(107,255,138,.6);box-shadow:0 0 20px rgba(107,255,138,.3)}
.pin-digits input.wrong{animation:pinShake .4s ease}
.pin-hint{font-size:14px;color:rgba(255,200,221,.4);letter-spacing:.1em;font-style:italic}
@keyframes pinShake{0%,100%{transform:translateX(0)}20%,60%{transform:translateX(-6px)}40%,80%{transform:translateX(6px)}}

/* ─── MAIN SCROLL CONTAINER ─── */
#main{height:100vh;height:100dvh;overflow-y:auto;scroll-snap-type:y proximity;-webkit-overflow-scrolling:touch;display:none;opacity:0;transition:opacity .8s ease;scroll-behavior:smooth}
#main.show{display:block;opacity:1}

/* ─── SNAP SECTIONS ─── */
.snap{min-height:100vh;min-height:100dvh;scroll-snap-align:start;display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;overflow:hidden;padding:60px 24px}
.snap .inner{opacity:0;transform:translateY(50px) scale(.94);transition:opacity .8s ease,transform .8s cubic-bezier(.16,1,.3,1);max-width:900px;width:100%;text-align:center}
.snap.visible .inner{opacity:1;transform:translateY(0) scale(1)}

/* ─── SECTION: GALLERY (masonry, no center) ─── */
#gallery{justify-content:flex-start;padding:0;scroll-snap-align:start;min-height:100vh;min-height:100dvh;height:100vh;height:100dvh;overflow:hidden}
#gallery .inner{max-width:100%;height:100%;display:flex;flex-direction:column}
#gallery .section-title{padding:48px 24px 0;margin-bottom:24px;flex-shrink:0}
#gallery .gallery-scroll{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:0 24px 60px;scrollbar-width:none}
#gallery .gallery-scroll::-webkit-scrollbar{display:none}

/* ─── HEADINGS ─── */
.section-title{font-family:'Unbounded',sans-serif;font-size:clamp(22px,5vw,38px);margin-bottom:40px;background:linear-gradient(135deg,#ffc2d1,#c9b1ff);-webkit-background-clip:text;-webkit-text-fill-color:transparent;font-weight:600}

/* ─── HERO ─── */
.hero-name{font-family:'Unbounded',sans-serif;font-size:clamp(40px,9vw,80px);font-weight:700;line-height:1.05;margin-bottom:20px;background:linear-gradient(135deg,#ffc2d1 0%,#ff6b8a 40%,#c9b1ff 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-size:200% 200%;animation:gradientShift 4s ease-in-out infinite}
.hero-sub{font-size:clamp(18px,3.5vw,28px);color:rgba(255,200,221,.8);font-style:italic;max-width:520px;line-height:1.6;margin:0 auto}
.arrow-down{margin-top:60px;animation:bounce 2s ease-in-out infinite;font-size:24px;opacity:.4}


[data-section=counter] .inner {
  max-width: clamp(320px,80%,1200px);
}

/* ─── COUNTER ─── */
.counter-row{display:flex;justify-content:center;gap:clamp(24px,6vw,64px);flex-wrap:wrap}
.counter-item .num{font-family:'Unbounded',sans-serif;font-size:clamp(28px,2.8vw,52px);font-weight:700;background:linear-gradient(135deg,#ff6b8a,#c9b1ff);-webkit-background-clip:text;-webkit-text-fill-color:transparent;line-height:1.2;font-variant-numeric:tabular-nums;letter-spacing:.05em;min-width:8em;display:inline-block;text-align:center;transition:transform .5s cubic-bezier(.175,.885,.32,1.275),opacity .3s ease}
.counter-item .num.to-inf{animation:toInfinity .8s cubic-bezier(.175,.885,.32,1.275) forwards}
.counter-item .lbl{font-size:clamp(14px,2vw,17px);color:rgba(255,200,221,.45);letter-spacing:.12em;margin-top:8px;font-style:italic}

/* ─── ENVELOPE ─── */
.envelope{max-width:620px;width:100%;margin:0 auto;background:linear-gradient(145deg,rgba(40,20,50,.8),rgba(25,15,35,.9));border:1px solid rgba(255,107,138,.2);border-radius:20px;overflow:hidden;box-shadow:0 20px 60px rgba(0,0,0,.4),inset 0 1px 0 rgba(255,107,138,.1)}
.envelope-flap{cursor:pointer;padding:28px;text-align:center;background:linear-gradient(135deg,rgba(255,107,138,.08),rgba(183,148,244,.04));border-bottom:1px solid rgba(255,107,138,.1);transition:background .5s ease}
.envelope-flap:hover{background:linear-gradient(135deg,rgba(255,107,138,.12),rgba(183,148,244,.06))}
.envelope-icon{font-size:40px;margin-bottom:10px;transition:transform .6s cubic-bezier(.175,.885,.32,1.275)}
.envelope.open .envelope-icon{transform:scale(1.25) rotateZ(8deg)}
.envelope-hint{font-size:16px;color:rgba(255,200,221,.5);letter-spacing:.15em;font-style:italic}
.envelope-body{max-height:0;overflow:hidden;transition:max-height .9s cubic-bezier(.16,1,.3,1),opacity .5s ease .1s;opacity:0}
.envelope.open .envelope-body{max-height:700px;opacity:1}
.envelope-body-inner{padding:clamp(28px,5vw,52px)}
.letter-text{font-family:'Caveat',cursive;font-size:clamp(20px,3vw,26px);line-height:1.8;color:rgba(255,220,230,.85)}
.letter-sign{font-family:'Caveat',cursive;text-align:right;margin-top:32px;font-size:24px;color:rgba(255,107,138,.7)}

/* ─── TYPEWRITER ─── */
.typewriter-text{font-family:'Caveat',cursive;font-size:clamp(26px,4.5vw,40px);color:rgba(255,200,221,.8);line-height:1.7;max-width:600px}
.typewriter-cursor{animation:blink 1s step-end infinite}

/* ─── HEARTS GAME ─── */
#hearts-game{position:relative;min-height:100vh;min-height:100dvh;overflow:hidden;background:radial-gradient(circle at 50% 50%,rgba(255,107,138,.08) 0%,transparent 60%);padding:40px 24px}
#hearts-game .inner{position:relative;z-index:3}
#hearts-game .section-title{font-size:clamp(18px,4vw,30px);background:linear-gradient(135deg,#ff6b8a,#ffc2d1,#c9b1ff);-webkit-background-clip:text;-webkit-text-fill-color:transparent}
.hearts-game-field{position:relative;width:100%;max-width:800px;height:60vh;height:60dvh;margin:24px auto 0;border-radius:24px;background:rgba(255,107,138,.04);border:1px solid rgba(255,107,138,.15);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:0 8px 60px rgba(0,0,0,.3),inset 0 1px 0 rgba(255,200,221,.08),0 0 80px rgba(255,107,138,.06);overflow:hidden}
.hearts-game-area{position:absolute;inset:0;overflow:hidden;z-index:1}
.hearts-game-overlay{position:absolute;inset:0;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;padding:24px;pointer-events:none}
.pop-heart{position:absolute;font-size:48px;cursor:pointer;user-select:none;animation:heartFloat 6s linear forwards;filter:drop-shadow(0 0 12px rgba(255,107,138,.5))}
.pop-heart::after{content:'';position:absolute;inset:-16px}
@media(hover:hover){.pop-heart::after{inset:-24px}}
.pop-heart.popped{animation:heartPop .4s ease-out forwards;pointer-events:none}
#hearts-score{font-family:'Unbounded',sans-serif;font-size:clamp(18px,3vw,24px);background:linear-gradient(135deg,#ffc2d1,#c9b1ff);-webkit-background-clip:text;-webkit-text-fill-color:transparent;margin-top:16px}
#hearts-compliment{font-family:'Caveat',cursive;font-size:clamp(24px,4vw,36px);color:rgba(255,200,221,.9);min-height:2.4em;margin-top:20px;transition:opacity .3s ease;text-shadow:0 0 20px rgba(255,107,138,.3)}
#hearts-complete{display:none;animation:popIn .6s cubic-bezier(.175,.885,.32,1.275);flex-direction:column;align-items:center;justify-content:center;height:100%}
#hearts-complete .trophy{font-size:64px;margin-bottom:16px}
#hearts-complete .msg{font-family:'Caveat',cursive;font-size:clamp(22px,3.5vw,32px);color:rgba(255,200,221,.85);line-height:1.6;text-align:center}
.hearts-progress{display:flex;gap:6px;justify-content:center;margin-top:12px}
.hearts-progress .pip{width:12px;height:12px;border-radius:50%;background:rgba(255,200,221,.15);border:1px solid rgba(255,107,138,.2);transition:all .4s cubic-bezier(.175,.885,.32,1.275)}
.hearts-progress .pip.filled{background:linear-gradient(135deg,#ff6b8a,#c9b1ff);box-shadow:0 0 10px rgba(255,107,138,.4);transform:scale(1.2)}
@keyframes heartFloat{0%{opacity:0;transform:translateY(60vh) rotate(0deg) scale(.5)}5%{opacity:1;transform:translateY(55vh) rotate(5deg) scale(1)}50%{transform:translateY(25vh) rotate(-10deg) scale(1.05)}100%{opacity:0;transform:translateY(-5vh) rotate(15deg) scale(.8)}}
@keyframes heartPop{0%{transform:scale(1);opacity:1}50%{transform:scale(1.8);opacity:.8}100%{transform:scale(0);opacity:0}}

/* ─── CAT GAME (inside heart mosaic) ─── */
.cat-game-wrap{position:relative;width:100%}
.cat-game-field{width:100%;aspect-ratio:1/1;border-radius:16px;background:transparent;position:relative;overflow:hidden;touch-action:none}
.cat-game-field .cat-cursor{position:absolute;width:clamp(48px,12vw,72px);height:auto;transition:left .6s cubic-bezier(.4,.0,.2,1),top .6s cubic-bezier(.4,.0,.2,1);z-index:3;pointer-events:none}
#nyanRainbow{position:absolute;z-index:1;pointer-events:none;opacity:0;transition:opacity .3s}
#nyanRainbow.visible{opacity:.5}
#nyanRainbow .r-stripe{height:5px;border-radius:2px;margin-left:auto}
#nyanRainbow .r-stripe:nth-child(1){width:60%}
#nyanRainbow .r-stripe:nth-child(2){width:75%}
#nyanRainbow .r-stripe:nth-child(3){width:90%}
#nyanRainbow .r-stripe:nth-child(4){width:70%}
#nyanRainbow .r-stripe:nth-child(5){width:85%}
#nyanRainbow .r-stripe:nth-child(6){width:100%}
.cat-game-field .cake-item{position:absolute;font-size:clamp(32px,7vw,48px);z-index:2;animation:cakeAppear .4s cubic-bezier(.175,.885,.32,1.275);pointer-events:none;transform:translate(-50%,-50%)}
@keyframes cakeAppear{0%{transform:translate(-50%,-50%) scale(0) rotate(-30deg);opacity:0}100%{transform:translate(-50%,-50%) scale(1) rotate(0deg);opacity:1}}
@keyframes cakeFlingRight{0%{transform:translate(-50%,-50%) scale(1);opacity:1}30%{transform:translate(-50%,-50%) scale(1.3);opacity:1}100%{transform:translate(calc(-50% + 120px),-50%) rotate(40deg) scale(.3);opacity:0}}
@keyframes cakeFlingLeft{0%{transform:translate(-50%,-50%) scale(1);opacity:1}30%{transform:translate(-50%,-50%) scale(1.3);opacity:1}100%{transform:translate(calc(-50% - 120px),-50%) rotate(-40deg) scale(.3);opacity:0}}
.cake-item.fling-right{animation:cakeFlingRight .45s ease-out forwards}
.cake-item.fling-left{animation:cakeFlingLeft .45s ease-out forwards}
.cat-game-field .catch-burst{position:absolute;z-index:4;pointer-events:none}
.catch-burst .particle{position:absolute;width:8px;height:8px;border-radius:50%;animation:burstOut .7s ease-out forwards}
@keyframes burstOut{0%{transform:translate(0,0) scale(1);opacity:1}100%{transform:translate(var(--tx),var(--ty)) scale(0);opacity:0}}
#cat-compliment{font-family:'Caveat',cursive;font-size:clamp(22px,4.5vw,36px);color:rgba(255,200,221,.95);position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:10;text-align:center;pointer-events:none;text-shadow:0 0 30px rgba(183,148,244,.5),0 2px 10px rgba(0,0,0,.5);opacity:0;transition:opacity .4s ease;white-space:nowrap}
#cat-compliment.visible{opacity:1;animation:complimentPop .5s cubic-bezier(.175,.885,.32,1.275)}
@keyframes complimentPop{0%{transform:translate(-50%,-50%) scale(.5);opacity:0}60%{transform:translate(-50%,-50%) scale(1.1)}100%{transform:translate(-50%,-50%) scale(1);opacity:1}}

/* ─── MASONRY GALLERY ─── */
.masonry{columns:3 220px;column-gap:14px;max-width:900px;margin:0 auto;width:100%}
@media(max-width:600px){.masonry{columns:2;column-gap:10px}}
.masonry-item{break-inside:avoid;margin-bottom:14px;border-radius:12px;overflow:hidden;cursor:zoom-in;position:relative;opacity:0;transform:translateY(20px) scale(.97);transition:opacity .6s ease,transform .6s cubic-bezier(.16,1,.3,1)}
.masonry-item.loaded{opacity:1;transform:translateY(0) scale(1)}
.masonry-item .img-wrap{position:relative;overflow:hidden;border-radius:12px}
.masonry-item img{width:100%;display:block;transition:transform .5s cubic-bezier(.16,1,.3,1)}
.masonry-item:hover img{transform:scale(1.08)}
.masonry-item .hover-overlay{position:absolute;inset:0;background:linear-gradient(180deg,transparent 40%,rgba(255,107,138,.12) 100%);opacity:0;transition:opacity .4s ease;border-radius:12px;pointer-events:none}
.masonry-item:hover .hover-overlay{opacity:1}
.masonry-item .hover-heart{position:absolute;bottom:10px;right:12px;font-size:16px;opacity:0;transition:opacity .4s ease .05s;text-shadow:0 0 12px rgba(255,107,138,.5);pointer-events:none}
.masonry-item:hover .hover-heart{opacity:1}
.masonry-item .play-badge{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:48px;height:48px;background:rgba(0,0,0,.5);border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:18px;pointer-events:none;backdrop-filter:blur(4px);border:1px solid rgba(255,255,255,.2);transition:opacity .3s ease}
.masonry-item:hover .play-badge{opacity:.7}
.masonry-item video{transition:transform .5s cubic-bezier(.16,1,.3,1)}
.masonry-item:hover video{transform:scale(1.08)}

/* ─── LIGHTBOX ─── */
#lightbox{position:fixed;inset:0;z-index:9999999999;background:rgba(4,3,10,.85);backdrop-filter:blur(30px);-webkit-backdrop-filter:blur(30px);display:none;align-items:center;justify-content:center;cursor:zoom-out;padding:24px;opacity:0;transition:opacity .4s ease}
#lightbox.active{display:flex;animation:lbFadeIn .4s ease-out forwards}
#lightbox.closing{opacity:0;transition:opacity .3s ease}
#lightbox img{max-width:90vw;max-height:90vh;object-fit:contain;border-radius:12px;box-shadow:0 30px 100px rgba(0,0,0,.6),0 0 0 1px rgba(255,255,255,.05);animation:lbZoomIn .5s cubic-bezier(.16,1,.3,1)}
#lightbox video{animation:lbZoomIn .5s cubic-bezier(.16,1,.3,1)}
#lightbox .close-btn{position:absolute;top:20px;right:24px;width:44px;height:44px;border-radius:50%;border:1px solid rgba(255,255,255,.15);background:rgba(255,255,255,.08);backdrop-filter:blur(12px);color:rgba(255,255,255,.7);font-size:22px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .3s ease}
#lightbox .close-btn:hover{background:rgba(255,107,138,.2);border-color:rgba(255,107,138,.4)}

/* ─── WISHES ─── */
.wish-card{background:rgba(255,255,255,.03);border:1px solid rgba(255,107,138,.1);border-radius:16px;padding:20px 24px;backdrop-filter:blur(10px);display:flex;align-items:center;gap:16px;transition:transform .3s ease,box-shadow .3s ease;opacity:0;transform:translateY(20px)}
.wish-card.visible{opacity:1;transform:translateY(0)}
.wish-card:hover{transform:translateX(6px)!important;box-shadow:0 4px 24px rgba(255,107,138,.15)}
.wish-card .emoji{font-size:28px;flex-shrink:0}
.wish-card p{font-size:17px;color:rgba(255,220,230,.75);font-style:italic;text-align:left;line-height:1.6}

/* ─── FINALE ─── */
.finale-heart{font-size:180px;margin-bottom:28px;animation:heartbeat 1.2s ease-in-out infinite;color:#ff6b8a;-webkit-text-fill-color:#ff6b8a;filter:drop-shadow(0 0 30px rgba(255,107,138,.5))}
.finale-title{font-family:'Unbounded',sans-serif;font-size:clamp(28px,6vw,52px);margin-bottom:20px;background:linear-gradient(135deg,#ffc2d1,#ff6b8a,#c9b1ff);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-size:200% 200%;animation:gradientShift 3s ease-in-out infinite}
.finale-sub{font-size:clamp(18px,3vw,24px);color:rgba(255,200,221,.55);font-style:italic;margin-bottom:48px}
.footer-text{font-size:13px;color:rgba(255,200,221,.2);letter-spacing:.15em}
@media(max-width:600px){.finale-heart{font-size:80px;margin-bottom:16px}.finale-title{font-size:clamp(20px,5vw,32px);margin-bottom:12px}.finale-sub{font-size:clamp(14px,2.5vw,18px);margin-bottom:28px}.footer-text{font-size:11px}}

/* ─── HEART MOSAIC ─── */
#heart-mosaic{min-height:100vh;scroll-snap-align:start;display:flex;align-items:center;justify-content:center;position:relative;overflow:visible;background:radial-gradient(circle at 50% 50%,rgba(255,107,138,.1) 0%,transparent 60%)}
.heart-container{position:relative;width:90vh;height:90vh;margin:0 auto;display:flex;align-items:center;justify-content:center}
.heart-photo{position:absolute;width:280px;height:280px;border-radius:10px;overflow:hidden;box-shadow:0 4px 20px rgba(0,0,0,.4),0 0 15px rgba(255,107,138,.2);transition:transform .3s ease;will-change:transform,left,top,opacity}
.heart-photo img{width:100%;height:100%;object-fit:cover}
.heart-photo:hover{z-index:10}
@media(max-width:768px){.heart-container{width:95vw;height:95vw}.heart-photo{width:100px;height:100px}.heart-center-text h2{font-size:clamp(16px,4vw,28px)}.heart-center-text p{font-size:clamp(13px,2.5vw,20px)}#heartPlayBtn{width:56px!important;height:56px!important}#heartPlayBtn span{font-size:22px!important}#heartVidWrap{width:min(70vw,300px)!important;height:min(70vw,300px)!important}}
.heart-center-text{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;opacity:0;z-index:5;pointer-events:none}
.heart-center-text h2{font-family:'Unbounded',sans-serif;font-size:clamp(18px,4vw,32px);font-weight:600;line-height:1.3;background:linear-gradient(135deg,#ffc2d1,#ff6b8a,#c9b1ff);-webkit-background-clip:text;-webkit-text-fill-color:transparent;filter:drop-shadow(0 2px 8px rgba(0,0,0,.7))}
.heart-center-text p{font-family:'Caveat',cursive;font-size:clamp(14px,2.5vw,20px);margin-top:8px;background:linear-gradient(135deg,#ffc2d1,#c9b1ff);-webkit-background-clip:text;-webkit-text-fill-color:transparent;filter:drop-shadow(0 2px 6px rgba(0,0,0,.7))}

/* ─── SCROLL DOTS ─── */
.scroll-dots{position:fixed;right:clamp(12px,2vw,24px);top:50%;transform:translateY(-50%);display:flex;flex-direction:column;align-items:center;gap:12px;z-index:99999}
.scroll-dots a{display:block;width:8px;height:8px;border-radius:50%;background:rgba(255,200,221,.2);transition:all .4s cubic-bezier(.16,1,.3,1);text-decoration:none}
.scroll-dots a.active{width:12px;height:12px;background:linear-gradient(135deg,#ff6b8a,#c9b1ff);box-shadow:0 0 12px rgba(255,107,138,.5)}

/* ─── FLOATING HEARTS ─── */
.floating-hearts{position:fixed;inset:0;pointer-events:none;z-index:1;overflow:hidden}
.floating-hearts span{position:absolute;bottom:-30px;color:#ff6b8a}

/* ─── SHOOTING STARS ─── */
.star{position:absolute;height:2px;border-radius:2px;box-shadow:0 0 6px rgba(255,200,220,.6),0 0 20px rgba(255,107,138,.3);pointer-events:none}

/* ─── SPARKLE ─── */
.sparkle{position:absolute;color:#ffc2d1;animation:sparkleFade .9s ease-out forwards;text-shadow:0 0 8px rgba(255,107,138,.6);pointer-events:none}

/* ─── CONFETTI CANVAS ─── */
#confetti{position:fixed;inset:0;pointer-events:none;z-index:1000;display:none}

/* ─── RIPPLE ─── */
.ripple{position:absolute;border-radius:50%;border:1px solid rgba(255,107,138,.25);animation:rippleExpand 3s ease-out forwards;transform:translate(-50%,-50%);pointer-events:none}

/* ─── RADIAL BGS ─── */
.bg-hero{background:radial-gradient(circle at 50% 40%,rgba(255,107,138,.1) 0%,transparent 60%)}
.bg-counter{background:radial-gradient(circle at 50% 50%,rgba(183,148,244,.06) 0%,transparent 60%)}
.bg-letter{background:radial-gradient(circle at 40% 60%,rgba(255,107,138,.06) 0%,transparent 50%)}
.bg-quote{background:radial-gradient(circle at 60% 40%,rgba(201,177,255,.07) 0%,transparent 50%)}
.bg-gallery{background:radial-gradient(circle at 50% 30%,rgba(255,107,138,.05) 0%,transparent 60%)}
.bg-wishes{background:radial-gradient(circle at 30% 50%,rgba(255,200,221,.06) 0%,transparent 50%)}
.bg-finale{background:radial-gradient(circle at 50% 50%,rgba(255,107,138,.12) 0%,transparent 55%)}

/* ─── BUTTON GAME ─── */
#btn-game{background:radial-gradient(circle at 50% 50%,rgba(255,107,138,.08) 0%,transparent 60%)}
.btn-game-grid{display:flex;flex-wrap:wrap;gap:14px;justify-content:center;align-content:center;max-width:700px;min-height:320px;margin:24px auto 0;perspective:800px;position:relative}
.btn-game-grid .g-btn{font-family:'Comfortaa',sans-serif;font-size:clamp(13px,2.2vw,16px);padding:14px 22px;border:1px solid rgba(255,107,138,.25);border-radius:14px;background:rgba(255,255,255,.04);color:rgba(255,220,230,.85);cursor:pointer;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);transition:transform .3s ease,box-shadow .3s ease,background .3s ease,opacity .4s ease;user-select:none}
.btn-game-grid .g-btn:hover{transform:translateY(-3px) scale(1.04);box-shadow:0 8px 28px rgba(255,107,138,.2);background:rgba(255,107,138,.08)}
.btn-game-grid .g-btn:active{transform:scale(.96)}
.btn-game-grid .g-btn.poof{animation:btnPoof .5s ease-out forwards;pointer-events:none}
.btn-game-grid .g-btn.correct-flash{animation:btnCorrect .6s ease forwards;background:linear-gradient(135deg,rgba(107,255,138,.15),rgba(183,148,244,.1));border-color:rgba(107,255,138,.5);box-shadow:0 0 20px rgba(107,255,138,.3)}
.btn-game-grid .g-btn.shuffle-anim{animation:btnShuffle .5s cubic-bezier(.36,.07,.19,.97)}
@keyframes btnPoof{0%{transform:scale(1);opacity:1}30%{transform:scale(1.2);opacity:.8}100%{transform:scale(0) rotate(20deg);opacity:0}}
@keyframes btnCorrect{0%{transform:scale(1)}40%{transform:scale(1.15)}100%{transform:scale(1)}}
@keyframes btnShuffle{0%{transform:translate(0,0) scale(1)}25%{transform:translate(var(--sx),var(--sy)) scale(.85);opacity:.5}75%{transform:translate(calc(var(--sx)*-0.5),calc(var(--sy)*-0.5)) scale(.9);opacity:.7}100%{transform:translate(0,0) scale(1);opacity:1}}
.poof-text{position:absolute;font-family:'Unbounded',sans-serif;font-size:clamp(28px,5vw,42px);background:linear-gradient(135deg,#ffc2d1,#c9b1ff);-webkit-background-clip:text;-webkit-text-fill-color:transparent;pointer-events:none;animation:poofTextAnim .8s ease-out forwards;z-index:10}
@keyframes poofTextAnim{0%{opacity:0;transform:translate(-50%,-50%) scale(.3) rotate(-10deg)}30%{opacity:1;transform:translate(-50%,-50%) scale(1.2) rotate(5deg)}100%{opacity:0;transform:translate(-50%,-50%) scale(.6) translateY(-40px)}}
#btn-game-status{font-family:'Caveat',cursive;font-size:clamp(20px,3.5vw,30px);color:rgba(255,200,221,.7);margin-top:20px;min-height:1.5em;transition:opacity .3s}
#btn-game-round{font-family:'Unbounded',sans-serif;font-size:clamp(14px,2vw,18px);background:linear-gradient(135deg,#ffc2d1,#c9b1ff);-webkit-background-clip:text;-webkit-text-fill-color:transparent;margin-top:8px}
.btn-game-complete{animation:popIn .6s cubic-bezier(.175,.885,.32,1.275)}
#btn-game-lock-msg{position:absolute;bottom:20px;left:50%;transform:translateX(-50%);font-family:'Caveat',cursive;font-size:clamp(16px,2.5vw,22px);color:rgba(255,107,138,.5);white-space:nowrap;opacity:0;transition:opacity .5s;pointer-events:none}
#btn-game.completed #btn-game-lock-msg{display:none}
.locked-after-btngame{display:none!important}
#btn-game.completed~.locked-after-btngame{display:flex!important}

/* ─── OUTRO ─── */
#outro{min-height:100vh;min-height:100dvh;display:flex;align-items:center;justify-content:center;background:radial-gradient(ellipse at 50% 50%,rgba(255,107,138,.08) 0%,rgba(183,148,244,.04) 40%,#080612 100%);position:relative;overflow:hidden}
.outro-content{text-align:center;opacity:0;transform:translateY(40px) scale(.95);transition:opacity 1.2s ease,transform 1.2s cubic-bezier(.16,1,.3,1)}
#outro.visible .outro-content{opacity:1;transform:translateY(0) scale(1)}
.outro-glow{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:min(500px,80vw);height:min(500px,80vw);background:radial-gradient(circle,rgba(255,107,138,.12) 0%,rgba(183,148,244,.06) 40%,transparent 70%);border-radius:50%;animation:outroGlowPulse 4s ease-in-out infinite;pointer-events:none}
.outro-emoji{font-size:clamp(48px,10vw,72px);margin-bottom:24px;animation:outroFloat 3s ease-in-out infinite;filter:drop-shadow(0 0 20px rgba(255,200,221,.3))}
.outro-title{font-family:'Unbounded',sans-serif;font-size:clamp(36px,8vw,64px);font-weight:700;margin-bottom:28px;background:linear-gradient(135deg,#ffc2d1 0%,#ff6b8a 30%,#c9b1ff 70%,#ffc2d1 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-size:300% 300%;animation:outroGradient 6s ease-in-out infinite}
.outro-line{font-family:'Caveat',cursive;font-size:clamp(22px,4vw,34px);color:rgba(255,200,221,.7);line-height:1.6;opacity:0;transform:translateY(15px);transition:opacity .8s ease,transform .8s ease}
#outro.visible .outro-line:nth-child(4){transition-delay:.4s;opacity:1;transform:translateY(0)}
#outro.visible .outro-line:nth-child(5){transition-delay:.7s;opacity:1;transform:translateY(0)}
.outro-divider{font-size:14px;color:rgba(255,107,138,.3);letter-spacing:12px;margin:32px 0;opacity:0;transition:opacity 1s ease 1s}
#outro.visible .outro-divider{opacity:1}
.outro-whisper{font-family:'Comfortaa',sans-serif;font-size:clamp(16px,3vw,22px);color:rgba(255,200,221,.5);font-style:italic;letter-spacing:.08em;margin-bottom:40px;opacity:0;transform:translateY(10px);transition:opacity 1s ease 1.3s,transform 1s ease 1.3s}
#outro.visible .outro-whisper{opacity:1;transform:translateY(0)}
.outro-heart-beat{font-size:48px;color:#ff6b8a;animation:heartbeat 1.2s ease-in-out infinite;margin-bottom:32px;opacity:0;transition:opacity .8s ease 1.6s;filter:drop-shadow(0 0 20px rgba(255,107,138,.4))}
#outro.visible .outro-heart-beat{opacity:1}
.outro-footer{font-size:12px;color:rgba(255,200,221,.15);letter-spacing:.2em;text-transform:lowercase;opacity:0;transition:opacity 1s ease 2s}
#outro.visible .outro-footer{opacity:1}
@keyframes outroGlowPulse{0%,100%{transform:translate(-50%,-50%) scale(1);opacity:.7}50%{transform:translate(-50%,-50%) scale(1.15);opacity:1}}
@keyframes outroFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-12px)}}
@keyframes outroGradient{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}

/* ─── ANIMATIONS ─── */
@keyframes fadeSlideUp{from{opacity:0;transform:translateY(40px)}to{opacity:1;transform:translateY(0)}}
@keyframes pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}}
@keyframes giftBounce{0%,100%{transform:scale(1) rotate(0)}25%{transform:scale(1.1) rotate(-5deg)}50%{transform:scale(1.05) rotate(0)}75%{transform:scale(1.1) rotate(5deg)}}
@keyframes heartbeat{0%,100%{transform:scale(1)}15%{transform:scale(1.3)}30%{transform:scale(1)}45%{transform:scale(1.18)}60%{transform:scale(1)}}
@keyframes bounce{0%,100%{transform:translateY(0)}50%{transform:translateY(10px)}}
@keyframes floatUp{0%{transform:translateY(0) rotate(0);opacity:0}10%{opacity:0.25}90%{opacity:0.25}100%{transform:translateY(-100vh) rotate(360deg);opacity:0}}
@keyframes sparkleFade{0%{opacity:1;transform:scale(1) translateY(0)}100%{opacity:0;transform:scale(.3) translateY(-30px)}}
@keyframes blink{0%,100%{opacity:1}50%{opacity:0}}
@keyframes popIn{0%{opacity:0;transform:scale(.5) translateY(20px)}100%{opacity:1;transform:scale(1) translateY(0)}}
@keyframes msgPop{0%{opacity:0;transform:translate(-50%,-120%) scale(.3)}50%{transform:translate(-50%,-120%) scale(1.1)}100%{opacity:1;transform:translate(-50%,-120%) scale(1)}}
@keyframes gradientShift{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
@keyframes rippleExpand{0%{width:10px;height:10px;opacity:.5}100%{width:400px;height:400px;opacity:0}}
@keyframes toInfinity{0%{transform:scale(1) rotateX(0);opacity:1}40%{transform:scale(1.3) rotateX(90deg);opacity:0}60%{transform:scale(1.5) rotateX(-90deg);opacity:0}100%{transform:scale(1) rotateX(0);opacity:1}}
@keyframes lbFadeIn{from{opacity:0}to{opacity:1}}
@keyframes lbZoomIn{from{opacity:0;transform:scale(.8) translateY(20px)}to{opacity:1;transform:scale(1) translateY(0)}}
@keyframes shimmer{0%{background-position:0% 50%}100%{background-position:200% 50%}}