
/* Concept: tấm thiệp 20/10 đặt trên sân bóng chuyền hơi. Hồng cánh sen là màu chủ đạo, quả bóng cam chỉ xuất hiện như một nét hài. */
:root{
  --bg:#F8F1F6; --surface:#FFFFFF; --ink:#2B1331; --muted:#6C5572; --line:#E6D4E1;
  --rose:#C2255C; --rose-ink:#FFFFFF; --gold:#D98A00; --court:#F1DFEA; --ball:#E8590C; --focus:#0B5FD1;
  --f-display:'Baloo 2','Be Vietnam Pro',system-ui,sans-serif;
  --f-body:'Be Vietnam Pro',system-ui,-apple-system,'Segoe UI',sans-serif;
}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){
  --bg:#1A0E21; --surface:#271632; --ink:#F8EAF4; --muted:#BFA6C6; --line:#43294F;
  --rose:#FF7AA5; --rose-ink:#2B0A18; --gold:#F5B84A; --court:#2C1838; --focus:#8EC0FF; color-scheme:dark}}
:root[data-theme="dark"]{
  --bg:#1A0E21; --surface:#271632; --ink:#F8EAF4; --muted:#BFA6C6; --line:#43294F;
  --rose:#FF7AA5; --rose-ink:#2B0A18; --gold:#F5B84A; --court:#2C1838; --focus:#8EC0FF; color-scheme:dark}
*{box-sizing:border-box}
body{background:var(--bg);color:var(--ink);font-family:var(--f-body);font-size:16px;line-height:1.6;
  padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));padding-block:0}
.wrap{max-width:1180px;margin:0 auto}
h1,h2,h3{font-family:var(--f-display);line-height:1.05;margin:0;text-wrap:balance;color:var(--ink)}
:focus-visible{outline:3px solid var(--focus);outline-offset:3px;border-radius:6px}
.eyebrow{font-size:.8rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-weight:600}
button{font:inherit;color:inherit}

.hero{display:grid;grid-template-columns:1.1fr .9fr;gap:32px;align-items:center;padding-block:40px 28px}
.hero h1{font-size:clamp(1.6rem,3.6vw,2.5rem);font-weight:800;line-height:1.2}
.hero h1 em{font-style:normal;color:var(--rose)}
.hero .big{font-family:var(--f-display);font-weight:800;color:var(--rose);font-size:clamp(4.5rem,16vw,10rem);line-height:.9;display:flex;align-items:center;gap:.06em;margin-bottom:6px}
.ball{width:.7em;height:.7em;animation:bounce 1.7s cubic-bezier(.3,0,.4,1) infinite}
@keyframes bounce{0%,100%{transform:translateY(0) scale(1)}45%,50%{transform:translateY(-.2em)}92%{transform:translateY(0) scale(1.06,.94)}}
.lead{font-size:1.15rem;max-width:34em;margin:14px 0 0;color:var(--muted)}
.cta{display:inline-block;margin-top:22px;background:var(--rose);color:var(--rose-ink);font-weight:600;padding:12px 22px;border-radius:12px;text-decoration:none;border:0;cursor:pointer}
.cta:hover{filter:brightness(1.07)}
.print{background:var(--surface);padding:10px;border-radius:6px;box-shadow:0 10px 30px rgba(43,19,49,.2);transform:rotate(-1.6deg)}
.print button{all:unset;display:block;cursor:zoom-in;width:100%}
.print img{display:block;width:100%;height:auto;border-radius:3px}
.court-line{height:0;border-top:3px solid var(--line);position:relative}
.court-line::after{content:"";position:absolute;left:50%;top:-9px;height:15px;width:3px;background:var(--line)}

section{padding-block:44px}
.sec-head{display:flex;flex-direction:column;gap:6px;margin-bottom:22px}
.sec-head h2{font-size:clamp(2rem,5vw,3rem);font-weight:800}
.sec-head p{margin:0;color:var(--muted);max-width:44em}

/* Wish picker */
.wishes{display:flex;flex-wrap:wrap;gap:8px}
.chip{border:2px solid var(--line);background:var(--surface);color:var(--ink);border-radius:999px;padding:8px 16px;font-size:.95rem;font-weight:500;cursor:pointer}
.chip[aria-pressed="true"]{background:var(--rose);color:var(--rose-ink);border-color:var(--rose)}
.chip small{opacity:.75;margin-left:4px;font-variant-numeric:tabular-nums}
.tools{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}
.ghost{background:transparent;border:2px solid var(--line);border-radius:12px;padding:9px 16px;font-weight:600;cursor:pointer}
.ghost:hover{border-color:var(--rose)}
.controls{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:center;margin:18px 0 22px}
.status{color:var(--muted);font-size:.95rem;font-variant-numeric:tabular-nums}

/* Members */
.members{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,210px),1fr));gap:16px}
@media(max-width:520px){.members{grid-template-columns:1fr 1fr;gap:10px}.m{padding:12px 8px 14px}.m .av{width:84px}.m b{font-size:1.15rem}.m .wish{font-size:.9rem}}
.m{display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;background:var(--court);border:2px dashed var(--rose);border-radius:16px;padding:14px 14px 16px;min-width:0}
.m .top{all:unset;display:flex;flex-direction:column;align-items:center;gap:8px;cursor:pointer;width:100%}
.m .top:focus-visible{outline:3px solid var(--focus);outline-offset:4px;border-radius:12px}
.bow{width:46px;height:26px;color:var(--rose)}
.m .av{width:104px;aspect-ratio:1;border-radius:50%;overflow:hidden;border:3px solid var(--surface);box-shadow:0 0 0 3px var(--rose);background:var(--surface)}
.m img{width:100%;height:100%;object-fit:cover;display:block}
.m b{font-family:var(--f-display);font-size:1.3rem;font-weight:800}
.m .hint{font-size:.9rem;font-weight:600;color:var(--rose)}
.m .wish{display:none;margin:0;font-size:.98rem;line-height:1.45}
.m .zoom{display:none;background:transparent;border:2px solid var(--line);border-radius:10px;padding:5px 12px;font-size:.85rem;font-weight:600;cursor:pointer}
.m .zoom:hover{border-color:var(--rose)}
.m.open{background:var(--surface);border-style:solid}
.m.open .bow,.m.open .hint{display:none}
.m.open .wish{display:block;animation:pop .35s cubic-bezier(.2,1.4,.4,1)}
.m.open .zoom{display:inline-block}
@keyframes pop{from{transform:scale(.85);opacity:0}to{transform:scale(1);opacity:1}}

/* Lucky ball */
.lucky{display:flex;flex-direction:column;align-items:center;gap:18px;text-align:center}
.bigball{all:unset;cursor:pointer;width:clamp(150px,34vw,230px);aspect-ratio:1;border-radius:50%;display:block;filter:drop-shadow(0 14px 14px rgba(43,19,49,.28))}
.bigball:focus-visible{outline:4px solid var(--focus);outline-offset:6px}
.bigball svg{width:100%;height:100%;display:block}
.bigball.hop{animation:hop .7s cubic-bezier(.3,0,.3,1)}
@keyframes hop{0%{transform:translateY(0) rotate(0) scale(1,1)}30%{transform:translateY(-70px) rotate(140deg)}55%{transform:translateY(0) rotate(250deg) scale(1.1,.88)}72%{transform:translateY(-22px) rotate(320deg) scale(1)}100%{transform:translateY(0) rotate(360deg)}}
.lucky .msg{min-height:5.2em;max-width:30em;margin:0;font-family:var(--f-display);font-weight:600;font-size:clamp(1.3rem,3.2vw,1.9rem);line-height:1.25;text-wrap:balance}
.lucky .note{margin:0;color:var(--muted);font-size:.9rem}

/* Song */
.song{display:grid;grid-template-columns:auto 1fr auto;gap:18px;align-items:center;background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:20px 24px}
.disc{width:64px;height:64px;border-radius:50%;background:conic-gradient(var(--rose),var(--gold),var(--rose));display:grid;place-items:center;animation:spin 6s linear infinite}
.disc::after{content:"";width:18px;height:18px;border-radius:50%;background:var(--surface)}
@keyframes spin{to{transform:rotate(360deg)}}
.song h3{font-size:1.6rem;font-weight:800}
.song p{margin:2px 0 0;color:var(--muted)}
.song a{white-space:nowrap}

/* Album */
.filters{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px}
.count{color:var(--muted);margin:0 0 14px;font-variant-numeric:tabular-nums}
.grid{columns:2;column-gap:12px}
@media(min-width:640px){.grid{columns:3}}
@media(min-width:1000px){.grid{columns:4}}
.tile{all:unset;display:block;width:100%;margin:0 0 12px;break-inside:avoid;cursor:zoom-in;border-radius:10px;overflow:hidden;background:var(--court);line-height:0}
.tile img{width:100%;height:auto;display:block;transition:transform .25s}
.tile:hover img{transform:scale(1.03)}
.tile:focus-visible{outline:3px solid var(--focus);outline-offset:2px}

footer{padding-block:36px 56px;color:var(--muted);font-size:.92rem;border-top:3px solid var(--line);margin-top:20px}

dialog{border:0;padding:0;background:transparent;max-width:100vw;max-height:100vh;width:100%;height:100%;color:#fff}
dialog::backdrop{background:rgba(15,5,20,.93)}
.lb{height:100%;display:grid;grid-template-rows:1fr auto;gap:10px;padding:max(12px,env(safe-area-inset-top,0px)) max(12px,env(safe-area-inset-right,0px)) max(12px,env(safe-area-inset-bottom,0px)) max(12px,env(safe-area-inset-left,0px))}
.lb .stage{position:relative;display:flex;align-items:center;justify-content:center;min-height:0}
.lb img{max-width:100%;max-height:100%;object-fit:contain;border-radius:6px}
.lb .bar{display:flex;justify-content:space-between;align-items:center;gap:12px;font-size:1rem;line-height:1.4}
.lb .bar p{margin:0;min-width:0}
.lb button{background:rgba(255,255,255,.16);color:#fff;border:0;border-radius:999px;width:46px;height:46px;font-size:1.4rem;cursor:pointer;flex:none}
.lb button:hover{background:rgba(255,255,255,.3)}
.lb .prev,.lb .next{position:absolute;top:50%;transform:translateY(-50%)}
.lb .prev{left:4px}.lb .next{right:4px}
.lb .close{position:absolute;top:0;right:0;z-index:2}
.lb button:focus-visible{outline:3px solid #fff}

@media(max-width:820px){
  .hero{grid-template-columns:1fr;gap:24px;padding-block:28px 20px}
  .song{grid-template-columns:auto 1fr}.song .play{grid-column:1/-1}
  .print{transform:rotate(-1deg)}
}
@media (prefers-reduced-motion: reduce){.ball,.disc,.bigball.hop,.m.open .wish{animation:none}.tile img{transition:none}}

/* Music toggle */
.music{position:fixed;right:max(16px,calc(env(safe-area-inset-right,0px) + 12px));bottom:calc(env(safe-area-inset-bottom,0px) + 16px);z-index:20;display:flex;align-items:center;gap:8px;background:var(--rose);color:var(--rose-ink);border:0;border-radius:999px;padding:11px 18px;font-weight:600;cursor:pointer;box-shadow:0 8px 20px rgba(43,19,49,.3)}
.music[aria-pressed="true"] .eq i{animation:eq .8s ease-in-out infinite alternate}
.eq{display:inline-flex;gap:2px;align-items:flex-end;height:14px}
.eq i{width:3px;height:5px;background:currentColor;border-radius:2px}
.eq i:nth-child(2){animation-delay:.2s}.eq i:nth-child(3){animation-delay:.4s}
@keyframes eq{to{height:14px}}
.music:disabled,.song .play:disabled{opacity:.6;cursor:not-allowed}
.song .play{white-space:nowrap}
[hidden]{display:none!important}
/* Password gate */
.gate{position:fixed;inset:0;z-index:50;display:grid;place-items:center;background:var(--bg);padding:24px max(16px,env(safe-area-inset-left,0px))}
.gate form{background:var(--surface);border:2px solid var(--rose);border-radius:20px;padding:28px 24px;width:min(100%,380px);display:flex;flex-direction:column;gap:12px;text-align:center}
.gate h2{font-size:2rem;font-weight:800}
.gate p{margin:0;color:var(--muted)}
.gate input{font:inherit;font-size:1.1rem;padding:12px 14px;border:2px solid var(--line);border-radius:12px;background:var(--bg);color:var(--ink);text-align:center;letter-spacing:.15em}
.gate input:focus{border-color:var(--rose);outline:none}
.gate .err{color:var(--rose);font-weight:600;min-height:1.4em}
body.locked .wrap,body.locked .music{display:none}
@media (prefers-reduced-motion: reduce){.music[aria-pressed="true"] .eq i{animation:none}}
.yt{margin-top:16px;position:relative;width:100%;max-width:720px;aspect-ratio:16/9;border-radius:14px;overflow:hidden;background:var(--court)}
.yt iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.yt-link{display:inline-block;margin-top:10px;color:var(--rose);font-weight:600}
