:root{
  --blush:#f7dfe3; --cream:#fff8f0; --lav:#e6dcf3; --rose:#b96f80; --rose-d:#8e4a5c;
  --gold:#c9a66b; --ink:#5a3a46; --glass:rgba(255,250,246,.62);
  --serif:"Cormorant Garamond",Georgia,"Times New Roman",serif;
  --sans:"Nunito Sans",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
}
*{box-sizing:border-box;margin:0}
html,body{height:100%}
body{
  font-family:var(--sans);color:var(--ink);line-height:1.65;
  background:radial-gradient(120% 80% at 20% 0%,var(--lav) 0,transparent 55%),
             radial-gradient(100% 80% at 90% 100%,var(--blush) 0,transparent 60%),var(--cream);
  background-attachment:fixed;overflow-x:hidden;
}
.sky{position:fixed;inset:0;pointer-events:none;overflow:hidden;z-index:0}
.star{position:absolute;width:3px;height:3px;border-radius:50%;background:var(--gold);box-shadow:0 0 8px 2px rgba(201,166,107,.5);animation:twinkle var(--d,4s) ease-in-out infinite}
@keyframes twinkle{0%,100%{opacity:.15;transform:scale(.7)}50%{opacity:.9;transform:scale(1.2)}}
.petal{position:absolute;top:-30px;width:12px;height:16px;border-radius:80% 0 80% 0;background:linear-gradient(135deg,#f3c4cd,#e2a0b0);opacity:.7;animation:fall var(--d,14s) linear infinite;animation-delay:var(--dl,0s)}
@keyframes fall{to{transform:translate(var(--x,40px),110vh) rotate(540deg)}}
.bit{position:absolute;left:50%;top:45%;width:8px;height:12px;border-radius:2px;animation:pop 1.6s ease-out forwards}
@keyframes pop{to{transform:translate(var(--x),var(--y)) rotate(var(--r));opacity:0}}

#app{position:relative;z-index:1;min-height:100%;display:grid;place-items:center;padding:max(24px,env(safe-area-inset-top)) 22px max(24px,env(safe-area-inset-bottom))}
.scene{width:100%;max-width:560px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:22px;animation:enter .9s ease both}
.scene[hidden]{display:none}
@keyframes enter{from{opacity:0;transform:translateY(14px);filter:blur(6px)}to{opacity:1;transform:none;filter:none}}
h1,h2{font-family:var(--serif);font-weight:600;color:var(--rose-d);line-height:1.15;font-size:clamp(2rem,8vw,2.8rem);outline:none}
.big{font-size:clamp(2.6rem,12vw,4.2rem);font-style:italic;font-weight:500;background:linear-gradient(120deg,var(--rose-d),var(--gold) 70%);-webkit-background-clip:text;background-clip:text;color:transparent}
.sub{font-size:1.05rem;opacity:.85}
.body{font-family:var(--serif);font-size:clamp(1.25rem,4.6vw,1.45rem);line-height:1.6;max-width:34em}
.sign{font-family:var(--serif);font-style:italic;font-size:1.35rem;color:var(--rose)}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}

.btn{font:600 1rem var(--sans);color:#fff;background:linear-gradient(135deg,var(--rose),var(--rose-d));border:0;border-radius:999px;padding:14px 30px;min-height:48px;cursor:pointer;box-shadow:0 8px 24px rgba(142,74,92,.28);transition:transform .2s,box-shadow .2s}
.btn:hover{transform:translateY(-2px);box-shadow:0 12px 28px rgba(142,74,92,.34)}
.btn:active{transform:scale(.97)}
.btn.ghost{background:var(--glass);color:var(--rose-d);box-shadow:inset 0 0 0 1.5px rgba(185,111,128,.5)}
:focus-visible{outline:3px solid var(--gold);outline-offset:3px}
.row{display:flex;flex-wrap:wrap;gap:12px;justify-content:center}

/* The glowing heart seal */
.seal{width:120px;height:120px;border-radius:50%;border:0;cursor:pointer;background:radial-gradient(circle,#fff 0,var(--blush) 55%,transparent 72%);display:grid;place-items:center;animation:glow 3.2s ease-in-out infinite}
@keyframes glow{0%,100%{filter:drop-shadow(0 0 10px rgba(226,160,176,.5));transform:scale(1)}50%{filter:drop-shadow(0 0 28px rgba(226,160,176,.95));transform:scale(1.06)}}
.heart{position:relative;width:38px;height:38px;background:linear-gradient(135deg,#e6919f,var(--rose-d));transform:rotate(-45deg);border-radius:4px}
.heart::before,.heart::after{content:"";position:absolute;width:38px;height:38px;border-radius:50%;background:inherit}
.heart::before{top:-19px;left:0}.heart::after{left:19px;top:0}

/* Cards */
.cards{display:grid;gap:14px;width:100%}
.card{perspective:900px;background:none;border:0;padding:0;cursor:pointer;font:inherit;color:inherit;text-align:center}
.inner{position:relative;display:grid;min-height:150px;transition:transform .7s cubic-bezier(.3,.7,.2,1);transform-style:preserve-3d}
.card[aria-pressed="true"] .inner{transform:rotateY(180deg)}
.face{grid-area:1/1;backface-visibility:hidden;-webkit-backface-visibility:hidden;border-radius:22px;padding:22px 20px;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:8px;background:var(--glass);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid rgba(201,166,107,.4);box-shadow:0 10px 30px rgba(142,74,92,.12)}
.back{transform:rotateY(180deg);background:linear-gradient(160deg,rgba(255,250,246,.9),rgba(247,223,227,.85))}
.card:hover .inner{translate:0 -3px}
.card h3{font-family:var(--serif);font-size:1.6rem;color:var(--rose-d)}
.card p{font-size:.98rem}
.card .hint{font-size:.85rem;opacity:.7}
.card img{width:100%;max-height:160px;object-fit:cover;border-radius:14px}

/* Letter */
.letter{width:100%;text-align:left;background:var(--glass);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid rgba(201,166,107,.45);border-radius:20px;padding:28px 24px;box-shadow:0 14px 40px rgba(142,74,92,.14);max-height:62vh;overflow-y:auto;font-family:var(--serif);font-size:clamp(1.15rem,4.2vw,1.3rem);line-height:1.65}
#letter-text{white-space:pre-line;display:inline}
.caret{display:inline-block;width:2px;height:1.1em;background:var(--rose);vertical-align:text-bottom;margin-left:2px;animation:blink 1s steps(1) infinite}
@keyframes blink{50%{opacity:0}}

@media (min-width:760px){
  .scene{max-width:760px}
  .cards{grid-template-columns:repeat(3,1fr)}
  .inner{min-height:210px}
  .letter{padding:40px 46px}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
  .petal,.bit{display:none}
}
