:root{--pink:#f7a8c4;--deep:#e0567f;--cream:#fff8f3;--text:#6b4450;--mint:#bfe8dc}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:Nunito,sans-serif;color:var(--text);background:linear-gradient(180deg,#ffeef4,#fff8f3 40%,#eef9f5);min-height:100vh;overflow-x:hidden}
h1,h2{font-family:"Baloo 2",cursive}

/* Sứa bay nền */
.jellies{position:fixed;inset:0;pointer-events:none;z-index:0}
.jelly{position:absolute;bottom:-80px;font-size:28px;opacity:.5;animation:float linear infinite}
.jelly.j{width:34px;height:46px;background:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 60 80'><path d='M6 32C6 14 17 4 30 4s24 10 24 28c0 3-3 4-6 4H12c-3 0-6-1-6-4z' fill='%23f7a8c4'/><ellipse cx='22' cy='16' rx='5' ry='7' fill='%23fff' opacity='.6'/><circle cx='22' cy='26' r='2.5' fill='%236b4450'/><circle cx='38' cy='26' r='2.5' fill='%236b4450'/><path d='M27 30q3 3 6 0' stroke='%236b4450' stroke-width='1.8' fill='none' stroke-linecap='round'/><g stroke='%23f59ab8' stroke-width='3' fill='none' stroke-linecap='round'><path d='M14 37q-4 10 2 20t-2 18'/><path d='M25 37q4 10-2 20t2 16'/><path d='M35 37q-4 10 2 20t-2 16'/><path d='M46 37q4 10-2 20t2 18'/></g></svg>") center/contain no-repeat;opacity:.7}
.jicon{display:inline-block;width:.9em;height:1.2em;vertical-align:-.25em;background:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 60 80'><path d='M6 32C6 14 17 4 30 4s24 10 24 28c0 3-3 4-6 4H12c-3 0-6-1-6-4z' fill='%23f7a8c4'/><ellipse cx='22' cy='16' rx='5' ry='7' fill='%23fff' opacity='.6'/><circle cx='22' cy='26' r='2.5' fill='%236b4450'/><circle cx='38' cy='26' r='2.5' fill='%236b4450'/><path d='M27 30q3 3 6 0' stroke='%236b4450' stroke-width='1.8' fill='none' stroke-linecap='round'/><g stroke='%23f59ab8' stroke-width='3' fill='none' stroke-linecap='round'><path d='M14 37q-4 10 2 20t-2 18'/><path d='M25 37q4 10-2 20t2 16'/><path d='M35 37q-4 10 2 20t-2 16'/><path d='M46 37q4 10-2 20t2 18'/></g></svg>") center/contain no-repeat}
@keyframes float{to{transform:translateY(-120vh) translateX(30px)}}

/* Intro */
.intro{position:fixed;inset:0;z-index:10;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:24px;background:radial-gradient(circle,#fff 0,#ffe1ec 70%);transition:opacity .8s}
.intro.hide{opacity:0;pointer-events:none}
.intro-to{font-family:"Dancing Script";font-size:28px;color:var(--deep);text-align:center;padding:0 20px}
.intro-hint{font-weight:700;animation:pulse 1.5s infinite}
@keyframes pulse{50%{opacity:.4}}
.egg{width:190px;border:0;background:none;cursor:pointer;animation:wobble 2.2s ease-in-out infinite;transform-origin:50% 95%}
.egg svg{width:100%;display:block;overflow:visible;filter:drop-shadow(0 8px 14px #f07aa355)}
.egg g{transition:transform 1s cubic-bezier(.5,-.3,.3,1.3),opacity .8s;transform-box:fill-box;transform-origin:center}
.crack{stroke-dasharray:260;stroke-dashoffset:260;transition:stroke-dashoffset .4s}
.egg:hover .crack{stroke-dashoffset:170}
.egg.open{animation:none}
.egg.open .crack{opacity:0}
.egg.open .egg-top{transform:translate(-40px,-110px) rotate(-35deg)}
.egg.open .egg-bottom{transform:translateY(40px);opacity:0}
@keyframes wobble{0%,60%,100%{transform:rotate(0)}70%{transform:rotate(-7deg)}80%{transform:rotate(6deg)}90%{transform:rotate(-3deg)}}
.egg:focus-visible{outline:3px dashed var(--deep);outline-offset:8px}

main{position:relative;z-index:1;max-width:760px;margin:auto;padding:30px 18px}
.hero{text-align:center;padding:30px 0 50px}
.baby{width:220px;animation:bounce 2.5s ease-in-out infinite;filter:drop-shadow(0 10px 15px #f7a8c480)}
@keyframes bounce{50%{transform:translateY(-12px)}}
.hello{font-family:"Dancing Script";font-size:26px;color:var(--deep)}
h1 .nick{display:block;font-size:64px;color:var(--deep);line-height:1;text-shadow:3px 3px 0 #fff,5px 5px 0 var(--pink)}
h1 .full{display:block;font-size:22px;letter-spacing:1px;margin-top:8px}
.age{font-size:20px;margin-top:6px}.age b{font-size:36px;color:var(--deep)}
.born{margin-top:6px;opacity:.8}
.countdown{display:flex;justify-content:center;gap:10px;margin-top:22px}
.countdown div{background:#fff;border-radius:18px;padding:10px 14px;min-width:66px;box-shadow:0 6px 0 var(--pink)}
.countdown b{display:block;font-size:26px;color:var(--deep);font-family:"Baloo 2"}
.countdown small{font-size:12px}

.block{margin:40px 0;text-align:center}
h2{font-size:34px;color:var(--deep)}
.sub{margin-bottom:20px;opacity:.8}

/* Scrapbook */
.album{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:26px 18px;padding:10px}
.polaroid{background:#fff;padding:10px 10px 36px;box-shadow:0 8px 20px #0000001a;position:relative;cursor:zoom-in;transition:transform .3s}
.polaroid:nth-child(odd){transform:rotate(-3deg)}.polaroid:nth-child(even){transform:rotate(2.5deg)}
.polaroid:hover{transform:rotate(0) scale(1.05);z-index:2}
.polaroid::before{content:"";position:absolute;top:-10px;left:50%;width:60px;height:20px;margin-left:-30px;background:#f7a8c4aa;transform:rotate(-4deg)}
.polaroid:nth-child(3n)::before{background:#bfe8dcbb}
.polaroid img{width:100%;aspect-ratio:1;object-fit:cover;background:#ffe1ec}
.polaroid p{font-family:"Dancing Script";font-size:18px;position:absolute;bottom:6px;left:0;right:0}
.lightbox{position:fixed;inset:0;background:#000c;z-index:20;display:flex;align-items:center;justify-content:center;padding:20px}
.lightbox img{max-width:100%;max-height:90vh;border:8px solid #fff;border-radius:6px}

/* Thiệp */
.card{background:var(--cream);border:3px dashed var(--pink);border-radius:30px;padding:30px 22px;line-height:1.8;box-shadow:0 10px 0 #fbd3e0}
.guest{font-family:"Dancing Script";font-size:30px;color:var(--deep)}
.info{display:grid;gap:12px;margin:20px 0}
.info div{background:#fff;border-radius:16px;padding:10px}
.info span{display:block;font-size:14px;opacity:.7}
.btns{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
.btn{display:inline-block;border:0;background:var(--deep);color:#fff;font:700 16px Nunito;padding:12px 24px;border-radius:99px;text-decoration:none;cursor:pointer;box-shadow:0 5px 0 #b83d62;transition:transform .15s}
.btn:active{transform:translateY(3px);box-shadow:0 2px 0 #b83d62}
.btn.ghost{background:#fff;color:var(--deep);box-shadow:0 5px 0 var(--pink)}
.sign{margin-top:18px;font-family:"Dancing Script";font-size:22px}

/* Form */
.form{display:grid;gap:14px;text-align:left;background:#fff;padding:24px;border-radius:26px;box-shadow:0 8px 0 var(--mint)}
.form label{display:grid;gap:6px;font-weight:700}
.form input,.form select,.form textarea{font:16px Nunito;padding:12px;border:2px solid #fbd3e0;border-radius:14px;color:var(--text)}
.form input:focus,.form select:focus,.form textarea:focus{outline:none;border-color:var(--deep)}
.msg{text-align:center;font-weight:700}
.wishes{display:grid;gap:12px;margin-top:24px}
.wish{background:#fff;border-radius:18px;padding:14px 18px;text-align:left;border-left:6px solid var(--pink)}
.wish b{color:var(--deep)}

.music{position:fixed;right:16px;bottom:16px;z-index:5;width:52px;height:52px;border-radius:50%;border:0;background:#fff;font-size:24px;box-shadow:0 4px 12px #0003;cursor:pointer}
.music.on{animation:spin 3s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
footer{text-align:center;padding:30px;opacity:.7}
.confetti{position:fixed;top:-20px;width:10px;height:14px;z-index:30;pointer-events:none;animation:fall 3s linear forwards}
@keyframes fall{to{transform:translateY(110vh) rotate(720deg)}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* Tên khách nổi bật */
.intro-to small,.guest small{display:block;font-size:22px}
.gname{display:block;position:relative;width:fit-content;margin:6px auto;padding:4px 26px;font-family:"Baloo 2";font-weight:800;font-size:44px;line-height:1.2;color:#fff;background:linear-gradient(135deg,#f7a8c4,#e0567f);border-radius:99px;box-shadow:0 6px 0 #b83d62,0 10px 25px #e0567f66;animation:pop .8s cubic-bezier(.3,1.6,.5,1) both}
.gname::before,.gname::after{content:"✨";position:absolute;top:-14px;font-size:22px;animation:twinkle 1.4s infinite}
.gname::before{left:-10px}.gname::after{right:-10px;animation-delay:.7s}
@keyframes pop{from{transform:scale(0)}}
@keyframes twinkle{50%{transform:scale(.5);opacity:.4}}
.guest .gname{font-size:34px}
@media(max-width:420px){.gname{font-size:34px}}

/* Thư của Sứa */
.letter{position:relative;max-width:560px;margin:auto;text-align:left;cursor:pointer;background:#fffdf8 repeating-linear-gradient(transparent 0 35px,#fbd3e0 35px 36px);background-position:0 40px;padding:40px 30px 26px 46px;border-radius:6px 6px 22px 22px;box-shadow:0 12px 30px #e0567f26;font:21px/36px "Patrick Hand",Nunito,cursive;color:#6b4450;transform:rotate(-1deg);min-height:330px}
.letter::before{content:"";position:absolute;left:30px;top:0;bottom:0;border-left:2px solid #f7a8c4aa}
.letter::after{content:"";position:absolute;top:-14px;left:50%;width:110px;height:28px;margin-left:-55px;background:#bfe8dccc;transform:rotate(3deg)}
.letter-body p:first-child{color:var(--deep);font-size:24px}
.letter-body p:last-child::after{content:"|";margin-left:2px;animation:pulse .8s infinite}
.letter.done .letter-body p::after{content:none}
.letter-sign{white-space:pre-line;text-align:right;margin-top:10px;color:var(--deep);opacity:0;transition:opacity .8s}
.letter.done .letter-sign{opacity:1}
.letter-skip{position:absolute;bottom:6px;right:16px;font:12px Nunito;opacity:.5}
.letter.done .letter-skip{display:none}
.stamp{position:absolute;top:14px;right:16px;font-size:34px;border:2px dashed var(--pink);border-radius:8px;padding:2px 6px;transform:rotate(8deg);background:#fff}
.letter:focus-visible{outline:3px dashed var(--deep);outline-offset:6px}
@media(max-width:480px){.letter{font-size:19px;padding:40px 18px 26px 38px;background-position:0 40px}.letter::before{left:24px}}
