:root{--pink-50:#fff8fa;--pink-100:#fff0f4;--pink-200:#fbd8e2;--pink-300:#f7bfd0;--pink-400:#eaa5ba;--rose:#c77995;--rose-dark:#9f526d;--ink:#4a3038;--muted:#8a6b74;--gold:#c7a35b;--white:#fff;--shadow:0 18px 45px rgba(118,63,83,.12);--safe-bottom:env(safe-area-inset-bottom,0px)}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;min-height:100vh;overflow-x:hidden;background:radial-gradient(circle at 20% 0%,rgba(248,187,208,.35),transparent 30%),linear-gradient(180deg,var(--pink-50),#fff);color:var(--ink);font-family:"DM Sans",system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}body.locked{overflow:hidden}button,input{font:inherit}button{-webkit-tap-highlight-color:transparent}a{color:inherit}.loading-screen{position:fixed;inset:0;z-index:9999;display:grid;place-content:center;text-align:center;padding:24px;background:linear-gradient(180deg,#fff8fa,#fde9ef);transition:opacity .5s ease,visibility .5s ease}.loading-screen.hide{opacity:0;visibility:hidden}.loader-heart{font-size:42px;color:var(--rose);animation:pulse 1.15s ease-in-out infinite}.en.small-title{margin:12px 0 4px;font-family:"Playfair Display",serif;font-size:18px}.id{margin-top:5px;color:var(--muted);font-size:.86rem;font-style:italic;line-height:1.65}.ambient{position:fixed;border-radius:999px;filter:blur(60px);pointer-events:none;z-index:-2}.ambient-a{width:220px;height:220px;top:12%;left:-80px;background:rgba(247,191,208,.34)}.ambient-b{width:260px;height:260px;right:-120px;top:58%;background:rgba(255,223,231,.45)}.floating-hearts{position:fixed;inset:0;pointer-events:none;overflow:hidden;z-index:40}.floating-heart{position:absolute;bottom:-20px;color:rgba(199,121,149,.22);font-size:14px;animation:floatUp linear forwards}.gate-section{min-height:100svh;display:grid;place-items:center;padding:28px 20px calc(28px + var(--safe-bottom));position:relative}.gate-shell{width:min(100%,430px);min-height:min(720px,calc(100svh - 56px));position:relative;display:grid;place-items:center;padding:38px 24px;overflow:hidden;border:1px solid rgba(199,121,149,.15);border-radius:38px;background:linear-gradient(180deg,rgba(255,255,255,.92),rgba(255,247,250,.88));box-shadow:var(--shadow)}.gate-shell:before,.gate-shell:after{content:"";position:absolute;width:150px;height:150px;border:1px solid rgba(199,121,149,.1);border-radius:50%}.gate-shell:before{left:-70px;top:-40px}.gate-shell:after{right:-75px;bottom:-45px}.mini-sparkle{position:absolute;top:18px;right:24px;color:var(--rose);opacity:.65;animation:twinkle 2s ease-in-out infinite}.gift-stage,.password-stage{width:100%;text-align:center;position:relative;z-index:2}.hidden{display:none!important}.gift-icon{width:114px;height:124px;position:relative;margin:0 auto 28px;transition:transform .6s cubic-bezier(.2,.8,.2,1)}.gift-icon.opening{transform:translateY(-8px) scale(1.04)}.gift-box,.gift-lid{position:absolute;left:14px;right:14px;background:linear-gradient(135deg,#f7bfd0,#e79ab4);border:2px solid rgba(160,81,109,.15);box-shadow:0 16px 35px rgba(163,92,116,.18)}.gift-box{bottom:5px;height:70px;border-radius:12px 12px 18px 18px}.gift-lid{top:32px;height:26px;border-radius:12px;transform-origin:12% 90%;transition:transform .65s cubic-bezier(.2,.8,.2,1);z-index:3}.gift-icon.opening .gift-lid{transform:translate(-7px,-26px) rotate(-18deg)}.gift-ribbon-v,.gift-ribbon-h{position:absolute;background:rgba(255,255,255,.82);z-index:4}.gift-ribbon-v{width:15px;top:33px;bottom:5px;left:50%;transform:translateX(-50%)}.gift-ribbon-h{height:12px;left:14px;right:14px;top:39px}.gift-bow{position:absolute;width:36px;height:24px;top:12px;border:8px solid #eba5bc;z-index:5}.gift-bow-left{left:24px;border-radius:70% 30% 60% 40%;transform:rotate(22deg)}.gift-bow-right{right:24px;border-radius:30% 70% 40% 60%;transform:rotate(-22deg)}.eyebrow{margin:0 0 12px;color:var(--rose);font-size:.7rem;font-weight:700;letter-spacing:.18em}.display-title,.hero-title,.section-title{font-family:"Playfair Display",Georgia,serif}.display-title{margin:0;font-size:clamp(2.25rem,10vw,4.1rem);line-height:.98}.display-title span{display:block;margin-top:12px;color:var(--rose);font-family:"Great Vibes",cursive;font-size:.78em;font-weight:400;line-height:1.1}.translation{margin:12px auto 0;max-width:320px;color:var(--muted);font-size:.86rem;font-style:italic;line-height:1.6}.primary-btn{width:auto;min-width:210px;margin-top:30px;padding:15px 22px 13px;border:0;border-radius:999px;color:white;background:linear-gradient(135deg,var(--rose-dark),var(--rose));box-shadow:0 14px 30px rgba(159,82,109,.25);cursor:pointer;transition:transform .2s ease,box-shadow .2s ease}.primary-btn:active{transform:scale(.98);box-shadow:0 9px 22px rgba(159,82,109,.2)}.primary-btn span{display:block;font-weight:700}.primary-btn small{display:block;margin-top:2px;opacity:.8;font-size:.72rem}.primary-btn.full{width:100%}.lock-orbit{width:82px;height:82px;margin:0 auto 24px;display:grid;place-items:center;border:1px solid rgba(199,121,149,.3);border-radius:50%;color:var(--rose);font-size:34px;animation:orbitPulse 2.2s ease-in-out infinite}.section-title.compact{margin-bottom:0}.password-card{margin-top:28px;padding:24px;border:1px solid rgba(199,121,149,.15);border-radius:24px;background:rgba(255,255,255,.78);box-shadow:0 15px 35px rgba(118,63,83,.08);text-align:left}.password-card label{display:block;margin-bottom:12px}.password-card label .en{display:block;font-weight:700}.password-card label .id{display:block;margin-top:2px}.password-card input{width:100%;height:56px;border:1px solid rgba(199,121,149,.25);outline:none;border-radius:16px;background:#fff;color:var(--ink);font-size:1.05rem;letter-spacing:.16em;text-align:center;transition:border-color .2s ease,box-shadow .2s ease}.password-card input:focus{border-color:var(--rose);box-shadow:0 0 0 4px rgba(199,121,149,.10)}.hint{margin:8px 0 0;color:#a18790;font-size:.72rem}.password-message{min-height:20px;margin:9px 0 -6px;color:var(--rose-dark);font-size:.8rem;text-align:center}.story-content{opacity:0;transform:translateY(12px);pointer-events:none;transition:opacity .8s ease,transform .8s ease}.story-content.unlocked{opacity:1;transform:none;pointer-events:auto}.section-pad{width:min(100%,720px);margin:0 auto;padding:88px 22px}.hero{min-height:100svh;display:flex;flex-direction:column;justify-content:center;text-align:center}.photo-placeholder{position:relative;display:grid;place-content:center;overflow:hidden;border:1px dashed rgba(159,82,109,.28);background:linear-gradient(135deg,rgba(247,191,208,.25),rgba(255,255,255,.8));color:rgba(159,82,109,.62);text-align:center}.photo-placeholder span{padding:0 14px;font-size:.7rem;font-weight:800;letter-spacing:.08em}.photo-placeholder small{display:block;margin-top:5px;color:#a98c96;font-size:.62rem}.hero-photo{width:min(78vw,310px);margin:0 auto 34px;aspect-ratio:4/5;border-radius:34px 34px 120px 120px;box-shadow:var(--shadow)}.hero-title{margin:0;font-size:clamp(2.2rem,11vw,4.5rem);line-height:1.02}.hero-title span{display:block;margin-top:7px;color:var(--rose);font-family:"Great Vibes",cursive;font-size:.82em;font-weight:400}.hero-translation{margin-top:13px}.name-card{width:fit-content;margin:30px auto 0;padding:14px 22px;border-radius:999px;background:rgba(255,255,255,.72);box-shadow:0 12px 30px rgba(118,63,83,.08)}.name-card strong,.name-card span,.name-card small{display:block}.name-card strong{font-family:"Playfair Display",serif;font-size:1.05rem}.name-card span{margin-top:3px;color:var(--rose-dark);font-size:.78rem;font-weight:600}.name-card small{margin-top:1px;color:var(--muted);font-size:.68rem}.scroll-cue{margin:40px auto 0;text-decoration:none;color:var(--muted);font-size:.78rem}.scroll-cue span,.scroll-cue small,.scroll-cue b{display:block}.scroll-cue small{margin-top:2px;font-size:.68rem;font-style:italic}.scroll-cue b{margin-top:7px;color:var(--rose);font-size:1.25rem;animation:bounce 1.7s ease-in-out infinite}.story-section{position:relative}.story-section+.story-section{border-top:1px solid rgba(199,121,149,.07)}.section-number{width:38px;height:38px;display:grid;place-items:center;margin-bottom:24px;border:1px solid rgba(199,121,149,.25);border-radius:50%;color:var(--rose);font-family:"Playfair Display",serif;font-size:.8rem}.section-number.gold{color:var(--gold);border-color:rgba(199,163,91,.35)}.gold-text{color:var(--gold)}.section-title{margin:0;font-size:clamp(2rem,10vw,4rem);line-height:1.03}.story-copy{margin-top:32px}.story-copy p.en{margin:24px 0 0;color:var(--ink);font-family:"Playfair Display",serif;font-size:1.15rem;line-height:1.75}.story-copy p.id{margin-top:5px}.story-copy.centered{text-align:center}.photo-row{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:38px}.polaroid{padding:9px 9px 14px;border-radius:8px;background:#fff;box-shadow:0 15px 30px rgba(118,63,83,.12)}.tilt-left{transform:rotate(-3deg)}.tilt-right{transform:rotate(3deg)}.photo-placeholder.square{aspect-ratio:1;border-radius:4px}.polaroid p{margin:10px 4px 0;color:var(--muted);font-family:"Great Vibes",cursive;font-size:1.35rem}.chat-card{margin-top:34px;padding:18px;border-radius:28px;background:#f1ecee;box-shadow:var(--shadow)}.chat-header{display:flex;align-items:center;gap:10px;padding:4px 4px 16px}.avatar-dot{width:36px;height:36px;display:grid;place-items:center;border-radius:50%;color:#fff;background:var(--rose);font-weight:700}.chat-header strong,.chat-header small{display:block}.chat-header strong{font-size:.86rem}.chat-header small{color:var(--muted);font-size:.68rem}.bubble{width:88%;margin-top:10px;padding:13px 15px;border-radius:16px;font-size:.83rem;line-height:1.5}.bubble span,.bubble small{display:block}.bubble small{margin-top:4px;opacity:.65;font-size:.66rem;font-style:italic}.bubble-left{margin-right:auto;border-bottom-left-radius:6px;background:#fff}.bubble-right{margin-left:auto;border-bottom-right-radius:6px;color:#fff;background:#cc8aa2}.love-quote{margin:34px 0 0;padding:26px 22px;border-left:2px solid var(--rose);border-radius:0 20px 20px 0;background:rgba(255,255,255,.58)}.love-quote .en{margin:0;font-family:"Playfair Display",serif;font-size:1.2rem;line-height:1.65}.love-quote .id{margin:8px 0 0}.milestone-chip{width:fit-content;margin-top:26px;padding:9px 15px;border-radius:999px;color:var(--rose-dark);background:var(--pink-100);font-size:.75rem;font-weight:700;letter-spacing:.06em}.distance-section{overflow:hidden}.distance-map{display:grid;grid-template-columns:1fr 78px 1fr;align-items:center;margin-top:38px}.place-card{padding:18px 10px;border:1px solid rgba(199,121,149,.13);border-radius:22px;background:rgba(255,255,255,.75);text-align:center}.place-card strong,.place-card small{display:block}.place-card strong{margin-top:7px;font-family:"Playfair Display",serif;font-size:.92rem}.place-card small{margin-top:3px;color:var(--muted);font-size:.7rem}.pin{color:var(--rose)}.route{position:relative;height:1px;border-top:1px dashed rgba(199,121,149,.45)}.route span{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);padding:6px;color:var(--rose);background:var(--pink-50)}.memory-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:34px}.photo-placeholder.memory{min-height:155px;border-radius:22px}.photo-placeholder.memory.tall{grid-row:span 2}.airport-ticket{display:grid;grid-template-columns:1fr auto auto;gap:14px;align-items:center;margin-top:34px;padding:18px;border-radius:22px;background:#fff;box-shadow:var(--shadow)}.airport-ticket>div:first-child small,.airport-ticket>div:first-child strong,.airport-ticket>div:first-child span{display:block}.airport-ticket small{color:var(--muted);font-size:.62rem;letter-spacing:.12em}.airport-ticket strong{margin-top:3px;font-family:"Playfair Display",serif;font-size:.9rem}.airport-ticket span{margin-top:2px;color:var(--muted);font-size:.7rem}.plane{color:var(--rose);font-size:1.5rem}.ticket-date{padding-left:12px;border-left:1px dashed rgba(159,82,109,.2);text-align:center}.ticket-date strong,.ticket-date span{display:block}.ticket-date strong{color:var(--rose-dark);font-size:1.4rem}.ticket-date span{font-size:.58rem;font-weight:700}.wide-photo{min-height:240px;margin-top:32px;border-radius:28px}.promise-section{background:linear-gradient(180deg,rgba(255,255,255,0),rgba(251,247,237,.8),rgba(255,255,255,0))}.ring-mark{width:72px;height:72px;display:grid;place-items:center;margin-top:32px;border:1px solid rgba(199,163,91,.35);border-radius:50%;color:var(--gold);font-size:2.2rem;animation:orbitPulse 2.6s ease-in-out infinite}.promise-polaroid{box-shadow:0 15px 30px rgba(126,103,56,.1)}.trait-grid{display:grid;gap:12px;margin-top:34px}.trait-card{padding:20px;border:1px solid rgba(199,121,149,.12);border-radius:22px;background:rgba(255,255,255,.72)}.trait-card>span{color:var(--rose)}.trait-card h3{margin:8px 0 0;font-family:"Playfair Display",serif;font-size:1rem}.trait-card p{margin:5px 0 0;color:var(--muted);font-size:.76rem;font-style:italic}.counter-section{text-align:center}.counter-card{padding:40px 22px;border-radius:30px;background:linear-gradient(145deg,#fff,#fff1f5);box-shadow:var(--shadow)}.counter-card span,.counter-card strong,.counter-card small{display:block}.counter-card span{color:var(--rose);font-family:"Playfair Display",serif;font-size:clamp(3.8rem,20vw,7rem);line-height:1}.counter-card strong{margin-top:10px;font-family:"Playfair Display",serif;font-size:1rem}.counter-card small{margin-top:5px;color:var(--muted);font-size:.75rem;font-style:italic}.letter-section{padding-top:110px;padding-bottom:110px}.letter-paper{position:relative;padding:36px 24px 42px;border:1px solid rgba(126,92,66,.10);border-radius:26px;background:linear-gradient(rgba(255,255,255,.92),rgba(255,253,249,.96)),repeating-linear-gradient(0deg,transparent 0 31px,rgba(150,110,90,.06) 31px 32px);box-shadow:0 24px 55px rgba(90,67,58,.13)}.letter-paper:before{content:"♥";position:absolute;right:20px;top:16px;color:rgba(199,121,149,.28);font-size:24px}.script-title{margin:0 0 28px;color:var(--rose-dark);font-family:"Great Vibes",cursive;font-size:2.35rem}.letter-copy .en{margin:22px 0 0;font-family:"Playfair Display",serif;font-size:1rem;line-height:1.8}.letter-copy .id{margin-top:4px}.letter-sign{margin:36px 0 0;font-family:"Great Vibes",cursive;font-size:1.8rem}.ending-section{min-height:100svh;display:flex;flex-direction:column;justify-content:center;text-align:center}.ending-heart{color:var(--rose);font-size:44px;animation:pulse 1.3s ease-in-out infinite}.ending-section h2{margin:18px 0 0;font-family:"Playfair Display",serif;font-size:clamp(2.25rem,10vw,4.7rem);line-height:1.05}.ending-section h2 span{color:var(--rose);font-family:"Great Vibes",cursive;font-weight:400}.ending-translation{max-width:340px}.ending-signature{margin-top:38px;color:var(--rose-dark);font-family:"Great Vibes",cursive;font-size:2rem}.music-btn{position:fixed;right:18px;bottom:calc(18px + var(--safe-bottom));z-index:100;width:52px;height:52px;border:1px solid rgba(255,255,255,.7);border-radius:50%;color:#fff;background:rgba(159,82,109,.86);box-shadow:0 12px 28px rgba(93,53,67,.22);backdrop-filter:blur(10px);cursor:pointer}.music-btn.playing{animation:rotateSlow 7s linear infinite}.progress-bar{position:fixed;top:0;left:0;right:0;z-index:120;height:3px;background:rgba(255,255,255,.18)}.progress-bar span{display:block;width:0;height:100%;background:linear-gradient(90deg,#e79ab4,#c77995)}.reveal{opacity:0;transform:translateY(28px);transition:opacity .8s ease,transform .8s cubic-bezier(.2,.8,.2,1)}.reveal.is-visible{opacity:1;transform:none}.shake{animation:shake .45s ease}@keyframes pulse{0%,100%{transform:scale(1);opacity:.72}50%{transform:scale(1.14);opacity:1}}@keyframes twinkle{0%,100%{transform:scale(.75) rotate(0deg);opacity:.35}50%{transform:scale(1.15) rotate(45deg);opacity:1}}@keyframes orbitPulse{0%,100%{box-shadow:0 0 0 0 rgba(199,121,149,.06)}50%{box-shadow:0 0 0 14px rgba(199,121,149,.06)}}@keyframes bounce{0%,100%{transform:translateY(0)}50%{transform:translateY(8px)}}@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-7px)}50%{transform:translateX(7px)}75%{transform:translateX(-4px)}}@keyframes rotateSlow{to{transform:rotate(360deg)}}@keyframes floatUp{0%{transform:translateY(0) scale(.85) rotate(0);opacity:0}10%{opacity:.7}100%{transform:translateY(-115vh) scale(1.3) rotate(30deg);opacity:0}}@media(min-width:640px){.section-pad{padding-left:36px;padding-right:36px}.trait-grid{grid-template-columns:1fr 1fr}.photo-row{gap:22px}.letter-paper{padding:50px 48px 56px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}
