@import "https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,500;0,600;0,700;1,500&family=Outfit:wght@300;400;500;600;700&display=swap";:root{--rose:#ff6b9d;--rose-deep:#e11d70;--rose-soft:#ff6b9d59;--wine:#4a0e2a;--night:#0b0612;--night-mid:#1a0b18;--glass:#ffffff14;--glass-strong:#ffffff1f;--glass-border:#ffffff38;--glass-shine:#ffffff73;--text:#ffffffe0;--text-muted:#ffffff9e;--text-bright:#fff7fb;--glow:0 0 40px #ff6b9d59;--shadow:0 24px 60px #00000073;--radius:24px;--font-display:"Cormorant Garamond", Georgia, serif;--font-body:"Outfit", system-ui, sans-serif}*,:before,:after{box-sizing:border-box}html,body,#root{width:100%;min-height:100%;margin:0}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}body{font-family:var(--font-body);color:var(--text);background:var(--night);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;overscroll-behavior-x:none;overflow-x:hidden}#root{min-height:100dvh}button,input{-webkit-tap-highlight-color:transparent;font-family:inherit}button{touch-action:manipulation}img{max-width:100%;height:auto;display:block}.app-shell{min-height:100dvh;color:var(--text);padding:max(20px, env(safe-area-inset-top)) max(16px, env(safe-area-inset-right)) max(40px, env(safe-area-inset-bottom)) max(16px, env(safe-area-inset-left));background:radial-gradient(80% 50% at 20% 10%,#ff508c38,#0000 55%),radial-gradient(70% 45% at 85% 20%,#b428642e,#0000 50%),radial-gradient(60% 40% at 50% 100%,#ff78a01f,#0000 55%),linear-gradient(165deg,#1a0a16 0%,#0b0612 45%,#120818 100%);flex-direction:column;justify-content:center;align-items:center;width:100%;display:flex;position:relative;overflow-x:hidden}.app-shell.reveal{padding-top:max(72px, calc(env(safe-area-inset-top) + 56px));padding-bottom:max(48px, env(safe-area-inset-bottom));justify-content:flex-start}.floaters{pointer-events:none;z-index:0;position:fixed;inset:0;overflow:hidden}.floater{opacity:0;will-change:transform, opacity;animation-name:bubble-rise;animation-timing-function:linear;animation-iteration-count:infinite;position:absolute;bottom:-40px}.floater.heart{color:#ff6b9d;filter:drop-shadow(0 0 6px #ff6b9d80)}.floater.star{filter:drop-shadow(0 0 8px #ffdc8c8c)}@keyframes bubble-rise{0%{opacity:0;transform:translate(0,0)scale(.85)}8%{opacity:.85}50%{opacity:.7;transform:translate(18px,-50vh)scale(1)}to{opacity:0;transform:translate(-12px,-110vh)scale(1.05)}}.back-btn{top:max(14px, env(safe-area-inset-top));left:max(14px, env(safe-area-inset-left));z-index:40;border:1px solid var(--glass-border);-webkit-backdrop-filter:blur(16px);min-height:44px;color:var(--text-bright);cursor:pointer;background:#ffffff14;border-radius:999px;align-items:center;gap:8px;padding:10px 16px;font-size:14px;font-weight:500;transition:transform .2s,background .2s,box-shadow .2s;display:inline-flex;position:fixed;box-shadow:0 8px 24px #00000040}.back-btn:hover{box-shadow:var(--glow);background:#ffffff24;transform:translateY(-1px)}.back-btn:active{transform:translateY(0)}.glass-card{z-index:2;border-radius:var(--radius);border:1px solid var(--glass-border);width:min(100%,440px);box-shadow:var(--shadow), inset 0 1px 0 var(--glass-shine), 0 0 0 1px #ff6b9d14;-webkit-backdrop-filter:blur(22px)saturate(1.35);text-align:center;background:linear-gradient(145deg,#ffffff29,#ffffff0a);padding:clamp(28px,5vw,40px) clamp(22px,4vw,36px);position:relative;overflow:hidden}.glass-card:before{content:"";pointer-events:none;opacity:.55;background:linear-gradient(120deg,#0000 30%,#ffffff1f 48%,#0000 62%);position:absolute;inset:0}.glass-card>*{z-index:1;position:relative}.display-title{font-family:var(--font-display);color:var(--text-bright);letter-spacing:-.02em;margin:0 0 8px;font-size:clamp(2rem,6vw,2.75rem);font-weight:600;line-height:1.1}.display-title.accent{background:linear-gradient(120deg,#fff 20%,#ff9ec0 55%,#ff6b9d 100%);color:#0000;-webkit-background-clip:text;background-clip:text}.subtitle{color:var(--text-muted);margin:0;font-size:.98rem;font-weight:300}.hero-emoji{filter:drop-shadow(0 12px 24px #ff6b9d59);margin:28px 0 12px;font-size:clamp(3.5rem,10vw,4.5rem);line-height:1;animation:2.2s ease-in-out infinite soft-bounce}.hero-emoji.flicker{animation:2.2s ease-in-out infinite soft-bounce,1.4s ease-in-out infinite candle-flicker}@keyframes soft-bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}@keyframes candle-flicker{0%,to{filter:drop-shadow(0 0 8px #ffb45066)}50%{filter:drop-shadow(0 0 18px #ff8c3cbf)}}.wish-copy{max-width:28ch;color:var(--text);margin:18px auto 0;font-weight:300;line-height:1.55}.date-input{width:min(100%,260px);color:var(--text-bright);letter-spacing:.12em;text-align:center;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);appearance:none;background:#ffffff0f;border:1px solid #fff3;border-radius:14px;outline:none;margin:22px auto 8px;padding:14px 16px;font-size:16px;transition:border-color .25s,box-shadow .25s,transform .25s;box-shadow:inset 0 1px #ffffff1f}.date-input::placeholder{color:#ffffff59;letter-spacing:.08em}.date-input:focus{border-color:var(--rose);transform:scale(1.03);box-shadow:0 0 0 3px #ff6b9d33,0 0 28px #ff6b9d59}.date-input.shake{border-color:#ff6b7a;animation:.45s shake}@keyframes shake{0%,to{transform:translate(0)}20%{transform:translate(-8px)}40%{transform:translate(8px)}60%{transform:translate(-6px)}80%{transform:translate(6px)}}.error-text{color:#ff9aa8;min-height:1.25rem;margin:4px 0 0;font-size:.85rem}.btn-primary{cursor:pointer;color:#fff;background:linear-gradient(135deg,#ff7eb3 0%,#e11d70 55%,#c2185b 100%);border:none;border-radius:999px;min-height:48px;margin-top:18px;padding:13px 28px;font-size:1rem;font-weight:600;transition:transform .2s,box-shadow .2s,filter .2s;box-shadow:0 10px 28px #e11d7073,inset 0 1px #ffffff59}.btn-primary:hover{transform:translateY(-2px)scale(1.02);box-shadow:0 14px 36px #e11d708c,0 0 30px #ff6b9d66}.btn-primary:active{transform:translateY(0)scale(.99)}.reveal-wrap{z-index:2;flex-direction:column;align-items:center;gap:36px;width:min(100%,980px);display:flex;position:relative}.reveal-header{text-align:center}.reveal-header h1{font-family:var(--font-display);color:var(--text-bright);letter-spacing:-.02em;margin:0 0 8px;font-size:clamp(2.1rem,6vw,3.2rem)}.reveal-header h1.jitter{animation:.35s linear infinite jitter}.reveal-header .since{color:var(--rose);letter-spacing:.04em;margin:0;font-weight:500}@keyframes jitter{0%{transform:translate(0)}25%{transform:translate(-2px,2px)}50%{transform:translate(2px,-2px)}75%{transform:translate(-2px,-2px)}to{transform:translate(0)}}.timer-grid{grid-template-columns:repeat(4,minmax(72px,1fr));gap:12px;width:min(100%,520px);display:grid}@media (width<=520px){.timer-grid{grid-template-columns:repeat(2,1fr)}}.timer-tile{border:1px solid var(--glass-border);-webkit-backdrop-filter:blur(16px);background:#ffffff14;border-radius:18px;padding:18px 12px;box-shadow:inset 0 1px #fff3,0 12px 28px #00000040}.timer-tile h2{font-family:var(--font-display);color:var(--text-bright);margin:0;font-size:clamp(1.6rem,4vw,2rem);font-weight:600}.timer-tile p{text-transform:uppercase;letter-spacing:.12em;color:var(--text-muted);margin:4px 0 0;font-size:.75rem}.mail-row{flex-wrap:wrap;justify-content:center;align-items:center;gap:14px 18px;width:100%;margin-top:4px;display:flex;position:relative}.mail-row p{color:var(--text-muted);text-align:center;margin:0;font-weight:300}.mail-trigger{cursor:pointer;background:0 0;border:none;flex-direction:column;align-items:center;gap:6px;padding:0;display:flex;position:static}.mail-hint{letter-spacing:.14em;text-transform:uppercase;color:#ff9ec0;opacity:.85;font-size:.7rem;animation:1.8s ease-in-out infinite hint-pulse}.mail-pill{-webkit-backdrop-filter:blur(16px);background:linear-gradient(135deg,#ffffff2e,#ff6b9d1f);border:1px solid #ffffff47;border-radius:999px;align-items:center;gap:10px;padding:10px 14px 10px 12px;transition:transform .2s,box-shadow .2s;display:inline-flex;box-shadow:0 10px 28px #e11d7047,inset 0 1px #fff6,0 0 22px #ff6b9d40}.mail-trigger:hover .mail-pill{transform:translateY(-2px)scale(1.03);box-shadow:0 14px 34px #e11d7066,0 0 30px #ff6b9d66,inset 0 1px #ffffff80}.arrow-chip{color:#fff;background:linear-gradient(145deg,#5b8cff,#3b6ef5);border-radius:10px;place-items:center;width:30px;height:30px;font-size:1rem;font-weight:700;animation:1.35s ease-in-out infinite arrow-glide;display:grid;box-shadow:0 6px 14px #3b6ef573,inset 0 1px #ffffff73}.mail-trigger .envelope{filter:drop-shadow(0 0 12px #ff6b9da6);font-size:1.45rem;line-height:1;animation:1.8s ease-in-out infinite envelope-glow}@keyframes arrow-glide{0%,to{transform:translate(0)}50%{transform:translate(7px)}}@keyframes envelope-glow{0%,to{filter:drop-shadow(0 0 8px #ff6b9d73);transform:translateY(0)scale(1)}50%{filter:drop-shadow(0 0 16px #ff6b9dd9);transform:translateY(-2px)scale(1.06)}}@keyframes hint-pulse{0%,to{opacity:.55}50%{opacity:1}}.story{border-radius:var(--radius);border:1px solid var(--glass-border);-webkit-backdrop-filter:blur(18px);text-align:center;background:#ffffff0f;width:100%;padding:clamp(24px,4vw,36px);box-shadow:inset 0 1px #ffffff26}.story h2{font-family:var(--font-display);color:var(--text-bright);text-shadow:0 0 18px #ff9ec073,0 0 40px #ff6b9d40;margin:0 0 28px;font-size:clamp(1.8rem,4vw,2.4rem)}.story-beat{max-width:42ch;margin:0 auto 26px}.story-beat:last-child{margin-bottom:0}.story-beat strong{font-family:var(--font-display);background:linear-gradient(120deg,#fff0f6 10%,#ff9ec0 55%,#ff6b9d 100%);color:#0000;filter:drop-shadow(0 0 14px #ff6b9d59);-webkit-background-clip:text;background-clip:text;margin-bottom:8px;font-size:1.4rem;font-weight:600;display:block}.story-beat p{color:#fff7fbc7;letter-spacing:.01em;margin:0;font-weight:300;line-height:1.7}.moments{text-align:center;width:100%}.moments h2{font-family:var(--font-display);color:var(--text-bright);text-shadow:0 0 16px #ff9ec066,0 0 36px #ff6b9d38;margin:0 0 8px;font-size:clamp(1.5rem,3.5vw,2rem)}.moments-sub{max-width:40ch;color:var(--text-muted);margin:0 auto 22px;font-size:.95rem;font-weight:300;line-height:1.5}.moments h2.bloom{animation:.8s bloom}@keyframes bloom{0%,to{transform:scale(1)}50%{transform:scale(1.08)}}.gallery{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px;display:grid}.gallery figure{background:#ffffff0a;border:1px solid #ffffff2e;border-radius:16px;margin:0;transition:transform .3s,box-shadow .3s;overflow:hidden;box-shadow:0 14px 30px #0000004d,inset 0 1px #fff3}.gallery figure.is-gif{border-color:#ff9ec073;box-shadow:0 14px 30px #0000004d,0 0 22px #ff6b9d38,inset 0 1px #fff3}.gallery figure:hover{transform:translateY(-4px)scale(1.015);box-shadow:0 20px 40px #0006,0 0 24px #ff6b9d40}.gallery img{object-fit:cover;width:100%;height:220px}.modal-backdrop{z-index:100;-webkit-backdrop-filter:blur(10px);padding:max(16px, env(safe-area-inset-top)) max(16px, env(safe-area-inset-right)) max(16px, env(safe-area-inset-bottom)) max(16px, env(safe-area-inset-left));-webkit-overflow-scrolling:touch;background:#08030ac7;justify-content:center;align-items:flex-start;animation:.25s fade-in;display:flex;position:fixed;inset:0;overflow-y:auto}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.letter{border:1px solid var(--glass-border);width:min(100%,440px);max-height:min(88svh,760px);box-shadow:var(--shadow), inset 0 1px 0 #ffffff59;-webkit-backdrop-filter:blur(24px);text-align:center;background:linear-gradient(160deg,#fff0f629,#ffffff0f);border-radius:22px;flex-direction:column;padding:36px 28px 28px;animation:.35s letter-pop;display:flex;position:relative;overflow:hidden}@keyframes letter-pop{0%{opacity:0;transform:scale(.92)translateY(12px)}to{opacity:1;transform:scale(1)translateY(0)}}.letter-close{color:#fff;cursor:pointer;background:linear-gradient(135deg,#ff7eb3,#e11d70);border:none;border-radius:50%;width:36px;height:36px;font-size:1rem;position:absolute;top:12px;right:12px;box-shadow:0 6px 16px #e11d7066}.letter h3{font-family:var(--font-display);color:var(--text-bright);text-shadow:0 0 18px #ff9ec059;flex-shrink:0;margin:8px 0 12px;font-size:1.9rem}.letter-body{text-align:left;-webkit-overflow-scrolling:touch;margin-bottom:8px;padding-right:4px;overflow-y:auto}.letter-body p{color:#fff7fbc7;margin:0 0 14px;font-size:.95rem;font-weight:300;line-height:1.65}.letter-body p:first-child{font-family:var(--font-display);color:#ff9ec0;font-size:1.2rem;font-weight:600}.letter-finale{flex-shrink:0;place-items:center;min-height:88px;margin:6px 0 2px;display:grid;position:relative}.orbit-hearts{pointer-events:none;width:150px;height:150px;animation:8s linear infinite orbit-spin;position:absolute}.orbit-heart{filter:drop-shadow(0 0 8px #ff6b9d8c);font-size:.95rem;position:absolute;top:50%;left:50%}.orbit-heart.h1{transform:rotate(0)translate(58px)rotate(0)}.orbit-heart.h2{transform:rotate(60deg)translate(58px)rotate(-60deg)}.orbit-heart.h3{transform:rotate(120deg)translate(58px)rotate(-120deg)}.orbit-heart.h4{transform:rotate(180deg)translate(58px)rotate(-180deg)}.orbit-heart.h5{transform:rotate(240deg)translate(58px)rotate(-240deg)}.orbit-heart.h6{transform:rotate(300deg)translate(58px)rotate(-300deg)}@keyframes orbit-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.letter-last-line{z-index:1;max-width:18ch;font-family:var(--font-display);color:var(--text-bright);text-align:center;text-shadow:0 0 16px #ff9ec073;margin:0;font-size:1.15rem;font-weight:600;line-height:1.35;position:relative}.letter .signoff{font-family:var(--font-display);color:#ff9ec0;flex-shrink:0;margin:8px 0 4px;font-size:1.25rem;font-style:italic}.letter .btn-primary{flex-shrink:0;align-self:center;width:min(100%,220px)}@media (width<=768px){.glass-card{border-radius:20px;width:100%;padding:24px 18px}.reveal-wrap{gap:28px;width:100%}.reveal-header h1{padding:0 8px;font-size:clamp(1.7rem,8vw,2.3rem)}.timer-grid{gap:10px;width:100%}.timer-tile{padding:14px 8px}.gallery{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.gallery img{height:170px}.story{padding:20px 16px}.story-beat{max-width:100%}.mail-pill{min-height:48px;padding:12px 16px}.letter{width:100%;max-height:calc(100dvh - 32px - env(safe-area-inset-top) - env(safe-area-inset-bottom));margin:auto 0;padding:32px 18px 22px}.letter-body p{font-size:.92rem}.orbit-hearts{width:130px;height:130px}.orbit-heart.h1{transform:rotate(0)translate(48px)rotate(0)}.orbit-heart.h2{transform:rotate(60deg)translate(48px)rotate(-60deg)}.orbit-heart.h3{transform:rotate(120deg)translate(48px)rotate(-120deg)}.orbit-heart.h4{transform:rotate(180deg)translate(48px)rotate(-180deg)}.orbit-heart.h5{transform:rotate(240deg)translate(48px)rotate(-240deg)}.orbit-heart.h6{transform:rotate(300deg)translate(48px)rotate(-300deg)}.letter-finale{min-height:78px}.moments-sub{padding:0 8px}}@media (width<=380px){.gallery img{height:150px}.display-title{font-size:1.85rem}}@media (prefers-reduced-motion:reduce){.floater,.hero-emoji,.orbit-hearts,.arrow-chip,.mail-trigger .envelope,.mail-hint{animation:none!important}}
