:root{
  --wine:#2b0a1f; --wine2:#4a1031; --rose:#ff4f87; --rose2:#ff8db4; --deep:#d81b60;
  --gold:#f4d6a4; --ink:#fff; --soft:rgba(255,255,255,.78);
  --glass:rgba(255,255,255,.10); --glass-b:rgba(255,255,255,.22);
  --serif:"Cormorant Garamond",Georgia,serif; --sans:"Nunito",system-ui,-apple-system,"Segoe UI",sans-serif; --script:"Great Vibes","Brush Script MT",cursive;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{height:100%}
body{margin:0;min-height:100%;min-height:100dvh;font:17px/1.55 var(--sans);color:var(--ink);background:var(--wine);overflow-x:hidden;
  padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)}
[hidden]{display:none!important}
button,input,textarea{font:inherit;color:inherit}
:focus-visible{outline:3px solid var(--gold);outline-offset:3px}

/* ---------- background ---------- */
.bg{position:fixed;inset:0;z-index:0;overflow:hidden;background:
  radial-gradient(120% 90% at 15% 0%,#7a1850 0%,transparent 55%),
  radial-gradient(100% 80% at 100% 100%,#9c1f55 0%,transparent 55%),
  linear-gradient(165deg,var(--wine2),var(--wine))}
.orb{position:absolute;border-radius:50%;filter:blur(60px);opacity:.5;animation:drift 18s ease-in-out infinite alternate}
.o1{width:46vmax;height:46vmax;background:#ff4f87;left:-18vmax;top:-14vmax;opacity:.28}
.o2{width:40vmax;height:40vmax;background:#f4a261;right:-16vmax;bottom:-12vmax;opacity:.16;animation-delay:-6s}
.o3{width:30vmax;height:30vmax;background:#9b5de5;right:10vmax;top:20vh;opacity:.14;animation-delay:-11s}
@keyframes drift{to{transform:translate3d(6vmax,4vmax,0) scale(1.1)}}
#hearts,#sparkles{position:absolute;inset:0;pointer-events:none}
.heart{position:absolute;bottom:-60px;line-height:1;opacity:0;will-change:transform,opacity;animation:floatUp linear forwards}
@keyframes floatUp{0%{transform:translate3d(0,0,0) rotate(0);opacity:0}10%{opacity:.75}90%{opacity:.5}100%{transform:translate3d(var(--dx),-112vh,0) rotate(var(--rot));opacity:0}}
.sparkle{position:absolute;width:var(--s);height:var(--s);background:radial-gradient(circle,#fff 0%,rgba(255,255,255,0) 70%);border-radius:50%;opacity:0;animation:twinkle var(--d) ease-in-out infinite;animation-delay:var(--dl)}
@keyframes twinkle{0%,100%{opacity:0;transform:scale(.4)}50%{opacity:.9;transform:scale(1)}}
#confetti{position:fixed;inset:0;width:100%;height:100%;z-index:60;pointer-events:none}

/* ---------- chrome ---------- */
.topbar{position:fixed;z-index:20;top:env(safe-area-inset-top);left:0;right:0;display:flex;justify-content:space-between;align-items:center;gap:.5rem;padding:.7rem max(.9rem,env(safe-area-inset-left))}
.progress{display:flex;align-items:center;gap:.6rem;padding:.35rem .8rem;border-radius:99px;background:var(--glass);border:1px solid var(--glass-b);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);font-weight:700;font-size:.85rem}
.ph-row{display:flex;gap:3px}
.ph-row i{font-style:normal;font-size:.95rem;filter:grayscale(1) brightness(1.6);opacity:.4;transition:.4s}
.ph-row i.on{filter:none;opacity:1;transform:scale(1.15)}
.music{min-height:40px;padding:.3rem .9rem;border-radius:99px;background:var(--glass);border:1px solid var(--glass-b);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);cursor:pointer;font-weight:700;font-size:.85rem}
.music.hint{animation:pulse 1.6s ease-in-out 3}
@keyframes pulse{50%{box-shadow:0 0 0 8px rgba(255,141,180,.28)}}
.love,.toast{position:fixed;z-index:30;left:50%;transform:translateX(-50%);padding:.45rem 1.1rem;border-radius:99px;background:rgba(43,10,31,.82);border:1px solid var(--glass-b);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);font-weight:700;white-space:nowrap;max-width:92vw;overflow:hidden;text-overflow:ellipsis}
.love{top:calc(env(safe-area-inset-top) + 58px);color:var(--gold);animation:pop .5s cubic-bezier(.2,1.4,.4,1)}
.toast{bottom:calc(env(safe-area-inset-bottom) + 64px);animation:pop .45s cubic-bezier(.2,1.4,.4,1)}
@keyframes pop{from{opacity:0;transform:translateX(-50%) scale(.7)}}

/* ---------- stage & cards ---------- */
.stage{position:relative;z-index:2;min-height:100dvh;display:grid;place-items:center;padding:76px 1rem 70px}
.screen{width:min(100%,600px);display:none}
.screen.is-active{display:block;animation:enter .6s cubic-bezier(.2,.8,.2,1)}
.screen.back.is-active{animation-name:enterBack}
@keyframes enter{from{opacity:0;transform:translateY(22px) scale(.98)}}
@keyframes enterBack{from{opacity:0;transform:translateX(-22px)}}
.card{position:relative;padding:clamp(1.25rem,5vw,2.25rem);border-radius:32px;background:linear-gradient(160deg,rgba(255,255,255,.17),rgba(255,255,255,.06));border:1px solid var(--glass-b);box-shadow:0 30px 80px rgba(10,0,8,.45),inset 0 1px 0 rgba(255,255,255,.25);backdrop-filter:blur(18px) saturate(1.2);-webkit-backdrop-filter:blur(18px) saturate(1.2);text-align:center}
.card.small{max-width:440px}
.display{font:600 clamp(2.1rem,8.5vw,3.3rem)/1.08 var(--serif);margin:.2rem 0 .6rem;letter-spacing:.2px;min-height:1.1em;text-wrap:balance;text-shadow:0 2px 18px rgba(255,79,135,.35)}
.display.sm{font-size:1.9rem}.display.big{font-size:clamp(2.4rem,10vw,3.6rem);letter-spacing:1.5px;color:var(--gold)}
.lead{font-size:1.18rem;color:var(--soft);margin:.2rem 0 1.4rem;min-height:1.6em;text-wrap:balance}
.sub{margin:1.3rem 0 .6rem;font:600 1.35rem var(--serif);color:var(--gold)}
.typing::after{content:"";display:inline-block;width:2px;height:.9em;margin-left:3px;background:var(--gold);vertical-align:-.1em;animation:caret .8s steps(1) infinite}
@keyframes caret{50%{opacity:0}}
.fine{font-size:.85rem;color:var(--soft);margin:.6rem 0}
.err{min-height:1.4em;margin:.5rem 0 0;color:#ffd0dc;font-weight:700}
.hint{font-size:.9rem;color:var(--soft);margin:.9rem 0 0}

.mascot{width:min(52vw,190px);height:auto;display:block;margin:-.3rem auto .4rem;filter:drop-shadow(0 12px 22px rgba(224,36,94,.5))}
.mascot-body{transform-origin:50% 100%;animation:beat 1.6s ease-in-out infinite}
@keyframes beat{0%,100%{transform:scale(1)}14%{transform:scale(1.07)}28%{transform:scale(1)}42%{transform:scale(1.05)}}

/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;min-height:56px;padding:.7rem 1.5rem;border-radius:999px;border:1px solid var(--glass-b);background:var(--glass);font-weight:800;font-size:1.05rem;cursor:pointer;transition:transform .2s,box-shadow .2s,background .2s;touch-action:manipulation;user-select:none;-webkit-user-select:none}
.btn:active{transform:scale(.97)}
.btn.primary,.btn.yes{background:linear-gradient(135deg,var(--rose2),var(--deep));border-color:transparent;box-shadow:0 10px 30px rgba(255,79,135,.45),inset 0 1px 0 rgba(255,255,255,.4)}
.btn.primary:hover,.btn.yes:hover{box-shadow:0 14px 38px rgba(255,79,135,.65),inset 0 1px 0 rgba(255,255,255,.4);transform:translateY(-2px)}
.btn.ghost{background:transparent;color:var(--soft);min-height:50px;font-weight:700}
.btn[disabled]{opacity:.6;cursor:wait}
.choices{display:flex;flex-direction:column;align-items:center;gap:.9rem;margin-top:.5rem}
.btn.yes{font-size:1.2rem;min-width:min(100%,300px);transform:scale(var(--yes-scale,1));transition:transform .4s cubic-bezier(.2,1.4,.4,1),box-shadow .2s}
.btn.yes:hover{transform:scale(calc(var(--yes-scale,1) * 1.03)) translateY(-2px)}
.no-slot{display:flex;justify-content:center}
.btn.no{background:rgba(20,0,14,.55);min-width:120px}
.btn.no.fleeing{position:fixed;z-index:45;margin:0;transition:left .28s cubic-bezier(.3,1.4,.5,1),top .28s cubic-bezier(.3,1.4,.5,1),transform .3s;transform:scale(var(--no-scale,1)) rotate(var(--no-rot,0deg))}
.btn.no.surrender{background:linear-gradient(135deg,var(--rose2),var(--deep));border-color:transparent}
.no-msg{min-height:1.7em;margin:1rem 0 0;font-weight:800;color:var(--gold)}
.no-msg.shake{animation:shake .4s}
@keyframes shake{25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}
.nav{display:flex;gap:.6rem;justify-content:space-between;align-items:center;margin-top:1.3rem;flex-wrap:wrap}
.nav .primary{flex:1 1 220px}

/* ---------- activity cards ---------- */
.acts{display:grid;grid-template-columns:repeat(2,1fr);gap:.8rem;text-align:center}
.act{position:relative;display:flex;flex-direction:column;align-items:center;gap:.15rem;padding:1rem .6rem .9rem;min-height:128px;border-radius:24px;border:1.5px solid var(--glass-b);background:linear-gradient(160deg,rgba(255,255,255,.14),rgba(255,255,255,.04));cursor:pointer;transition:transform .25s cubic-bezier(.2,1.4,.4,1),border-color .2s,background .2s,box-shadow .2s;touch-action:manipulation}
.act:hover{transform:translateY(-3px)}
.act .ic{font-size:2.3rem;line-height:1.2;filter:drop-shadow(0 4px 8px rgba(0,0,0,.3))}
.act .nm{font:700 1.35rem var(--serif);letter-spacing:.2px}
.act .tg{font-size:.78rem;color:var(--soft)}
.act .ck{position:absolute;top:8px;right:8px;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;font-size:.8rem;background:var(--deep);transform:scale(0);transition:transform .3s cubic-bezier(.2,1.6,.4,1)}
.act[aria-pressed="true"]{border-color:var(--gold);background:linear-gradient(160deg,rgba(255,79,135,.5),rgba(216,27,96,.3));box-shadow:0 0 0 3px rgba(244,214,164,.25),0 14px 34px rgba(255,79,135,.35);transform:translateY(-2px) scale(1.02)}
.act[aria-pressed="true"] .ck{transform:scale(1)}
.act:last-child:nth-child(odd){grid-column:1/-1}
.act:last-child:nth-child(odd){min-height:104px}

/* ---------- date + time ---------- */
.days{display:flex;gap:.55rem;overflow-x:auto;padding:.5rem .15rem .9rem;margin:0 -.4rem;scroll-snap-type:x proximity;scrollbar-width:thin;scrollbar-color:var(--rose) transparent}
.day{flex:0 0 74px;scroll-snap-align:start;padding:.7rem .3rem;border-radius:20px;border:1.5px solid var(--glass-b);background:var(--glass);cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:0;line-height:1.2;transition:.2s}
.day .w{font-size:.78rem;color:var(--soft);font-weight:700}.day .d{font:700 1.7rem var(--serif)}.day .m{font-size:.75rem;color:var(--soft)}
.day[aria-checked="true"]{background:linear-gradient(160deg,var(--rose2),var(--deep));border-color:var(--gold);transform:translateY(-2px);box-shadow:0 10px 24px rgba(255,79,135,.4)}
.day[aria-checked="true"] .w,.day[aria-checked="true"] .m{color:#fff}
.datepick{display:inline-flex;align-items:center;gap:.6rem;flex-wrap:wrap;justify-content:center;font-size:.9rem;color:var(--soft)}
input[type=date],input[type=text],textarea{background:rgba(255,255,255,.94);color:#3a0c27;border:2px solid transparent;border-radius:16px;padding:.7rem .9rem;min-height:48px;width:100%}
input[type=date]{width:auto;color-scheme:light}
input::placeholder,textarea::placeholder{color:#8f6a7c}
input:focus,textarea:focus{outline:none;border-color:var(--rose);box-shadow:0 0 0 4px rgba(255,79,135,.3)}
.slots{display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem}
.slot{min-height:50px;border-radius:16px;border:1.5px solid var(--glass-b);background:var(--glass);font-weight:800;cursor:pointer;transition:.2s;touch-action:manipulation}
.slot:hover:not([disabled]){transform:translateY(-2px);border-color:var(--rose2)}
.slot[aria-checked="true"]{background:linear-gradient(135deg,var(--rose2),var(--deep));border-color:var(--gold);box-shadow:0 8px 22px rgba(255,79,135,.45);transform:scale(1.04)}
.slot[disabled]{opacity:.28;cursor:not-allowed;text-decoration:line-through}

/* ---------- message form ---------- */
.field{display:block;text-align:left;margin-top:1rem}
.field span{display:block;margin-bottom:.4rem;font:600 1.25rem var(--serif);color:var(--gold)}
textarea{resize:vertical;min-height:130px;line-height:1.5}
.count{text-align:right;font-size:.78rem;color:var(--soft);margin:.2rem .2rem 0}

/* ---------- confirmation ---------- */
.seal{width:84px;height:84px;margin:-.2rem auto .4rem;border-radius:50%;display:grid;place-items:center;font-size:2.4rem;background:radial-gradient(circle at 30% 25%,#ff8db4,#c2185b);box-shadow:0 0 0 6px rgba(244,214,164,.25),0 14px 34px rgba(255,79,135,.5);animation:stamp .8s cubic-bezier(.2,1.6,.4,1)}
@keyframes stamp{from{transform:scale(2.4) rotate(-20deg);opacity:0}}
.ticket{margin:1.2rem 0;padding:1rem 1.1rem;border-radius:22px;border:1.5px dashed rgba(244,214,164,.55);background:rgba(0,0,0,.18);text-align:left;display:grid;gap:.7rem}
.ticket div{display:grid;grid-template-columns:96px 1fr;gap:.6rem;align-items:baseline}
.ticket dt{color:var(--soft);font-size:.85rem}
.ticket dd{margin:0;font-weight:800;font-size:1.05rem;overflow-wrap:anywhere}
.ticket dd.quote{font-style:italic;font-weight:600;white-space:pre-wrap}
.script{font:400 clamp(2rem,9vw,2.9rem)/1.2 var(--script);color:var(--gold);margin:.6rem 0;text-shadow:0 2px 20px rgba(255,79,135,.5)}

/* ---------- misc ---------- */
.foot{position:fixed;z-index:15;left:0;right:0;bottom:calc(env(safe-area-inset-bottom) + 10px);text-align:center;pointer-events:none}
.leave{pointer-events:auto;min-height:36px;padding:.25rem .9rem;background:none;border:0;color:rgba(255,255,255,.55);font-size:.8rem;cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.leave:hover{color:#fff}
.overlay{position:fixed;inset:0;z-index:70;display:grid;place-items:center;padding:1rem;background:rgba(20,0,14,.6);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.pop-heart{position:fixed;z-index:80;pointer-events:none;line-height:1;transform:translate(-50%,-50%);animation:popHeart .9s ease-out forwards}
@keyframes popHeart{to{transform:translate(calc(-50% + var(--dx)),calc(-50% - 70px)) scale(1.5) rotate(var(--rot));opacity:0}}

@media (max-width:420px){.slots{grid-template-columns:repeat(3,1fr);gap:.4rem}.slot{font-size:.92rem}.ticket div{grid-template-columns:1fr;gap:0}}
@media (min-width:640px){.acts{grid-template-columns:repeat(3,1fr)}.act:last-child:nth-child(odd){grid-column:auto}.slots{grid-template-columns:repeat(4,1fr)}.choices{flex-direction:row;justify-content:center;gap:1.2rem}}
@media (min-width:640px){.acts .act:nth-child(7){grid-column:2}}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.heart,.sparkle{display:none}}
