@import url('https://fonts.googleapis.com/css2?family=Baloo+2:wght@500;600;700;800&family=Be+Vietnam+Pro:wght@400;500;600;700;800;900&display=swap');
:root{--pink:#e72c8a;--deep:#c41972;--ink:#864463;--cream:#fffde8;--paper:#fffdf8}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:75px}body{margin:0;background:radial-gradient(ellipse at 24% 20%,#f8c9de 0,transparent 49%),linear-gradient(145deg,#f9d9ea,#fce1ee 60%,#f8d1e5);color:var(--ink);font-family:'Be Vietnam Pro','Segoe UI',Tahoma,Arial,sans-serif;min-height:100vh;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}button,input,textarea{font:inherit}a{color:inherit}button,a{-webkit-tap-highlight-color:transparent}h1,h2,.brand,.poster-hello,.hand-label,.poster-head p,.section-tabs a,.map-link,.button-primary,.button-outline{font-family:'Baloo 2','Be Vietnam Pro','Segoe UI',Tahoma,Arial,sans-serif}.topbar{height:62px;z-index:30;position:sticky;top:0;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:0 clamp(16px,4vw,52px);background:#fff1f8e8;backdrop-filter:blur(12px);border-bottom:5px solid #fff9f1;box-shadow:0 4px 5px #e889af20}.brand{display:flex;align-items:center;gap:12px;color:#db2b80;text-decoration:none;font-size:21px;white-space:nowrap}.brand-cap{font-size:36px;line-height:1;display:inline-block;transform:rotate(-15deg);color:#df3184}.topbar nav{display:flex;gap:clamp(14px,2.6vw,40px)}.topbar nav a{font-size:12px;text-decoration:none;font-weight:800;color:#d53e88;font-family:'Be Vietnam Pro','Segoe UI',Tahoma,Arial,sans-serif}.topbar nav a:hover{color:#a70750}.pill{text-decoration:none;border:2px solid #ee7caf;border-radius:30px;padding:6px 14px;color:#cf2779;font-size:11px;font-weight:900;white-space:nowrap}main{position:relative;overflow:hidden}.ambient{position:absolute;z-index:0;color:#e56aa5;font-family:cursive;font-size:48px;pointer-events:none;animation:drift 7s ease-in-out infinite}.a1{top:65px;left:2%}.a2{top:170px;left:5%;font-size:64px}.a3{right:5%;top:1020px}.side-note{position:absolute;z-index:1;color:#e44a91;top:450px;background:#fff9f1b9;padding:22px 17px;font-size:20px;line-height:1.5;font-weight:800;box-shadow:0 3px 6px #e778a323;clip-path:polygon(0 7%,5% 4%,12% 0,22% 4%,36% 2%,50% 5%,66% 1%,78% 4%,95% 0,100% 8%,98% 95%,83% 100%,63% 97%,47% 100%,30% 96%,10% 99%,0 94%)}.left-note{left:0;transform:rotate(-12deg)}.right-note{right:0;top:525px;transform:rotate(8deg);text-align:center}.side-letter{position:absolute;right:3.6%;top:220px;color:#d92c88;font-size:22px;line-height:1.55;transform:rotate(-13deg);font-family:cursive}.poster-wrap{position:relative;max-width:960px;margin:28px auto 0;padding:0 18px;z-index:2}.poster{position:relative;isolation:isolate;background:#fffde6;background-image:radial-gradient(#f7d7b8 0.75px,transparent 1.1px);background-size:10px 10px;min-height:635px;padding:22px 38px 20px;filter:drop-shadow(0 7px 5px #dd83a02c);clip-path:polygon(0 2%,2% 2%,2% 0,5% 0,5% 1%,8% 1%,8% 0,11% 0,11% 1%,14% 1%,14% 0,17% 0,17% 1%,20% 1%,20% 0,23% 0,23% 1%,26% 1%,26% 0,29% 0,29% 1%,32% 1%,32% 0,35% 0,35% 1%,38% 1%,38% 0,41% 0,41% 1%,44% 1%,44% 0,47% 0,47% 1%,50% 1%,50% 0,53% 0,53% 1%,56% 1%,56% 0,59% 0,59% 1%,62% 1%,62% 0,65% 0,65% 1%,68% 1%,68% 0,71% 0,71% 1%,74% 1%,74% 0,77% 0,77% 1%,80% 1%,80% 0,83% 0,83% 1%,86% 1%,86% 0,89% 0,89% 1%,92% 1%,92% 0,95% 0,95% 1%,98% 1%,98% 0,100% 0,100% 98%,98% 98%,98% 100%,95% 100%,95% 99%,92% 99%,92% 100%,89% 100%,89% 99%,86% 99%,86% 100%,83% 100%,83% 99%,80% 99%,80% 100%,77% 100%,77% 99%,74% 99%,74% 100%,71% 100%,71% 99%,68% 99%,68% 100%,65% 100%,65% 99%,62% 99%,62% 100%,59% 100%,59% 99%,56% 99%,56% 100%,53% 100%,53% 99%,50% 99%,50% 100%,47% 100%,47% 99%,44% 99%,44% 100%,41% 100%,41% 99%,38% 99%,38% 100%,35% 100%,35% 99%,32% 99%,32% 100%,29% 100%,29% 99%,26% 99%,26% 100%,23% 100%,23% 99%,20% 99%,20% 100%,17% 100%,17% 99%,14% 99%,14% 100%,11% 100%,11% 99%,8% 99%,8% 100%,5% 100%,5% 99%,2% 99%,2% 98%,0 98%)}.poster-hello{position:absolute;top:15px;left:10%;font-size:36px;font-weight:800;line-height:1.02;letter-spacing:-1.5px;color:#ef2288;text-shadow:3px 3px #ffe72b,-3px -3px #ffe72b,5px 5px #ffa4d4;transform:rotate(-10deg);text-align:center;z-index:3}.poster-hello span{color:#ffcf00}.poster-head{position:relative;z-index:4;margin-left:29%;text-align:center;padding-top:38px}.poster h1{font-size:clamp(65px,8.3vw,103px);font-weight:800;line-height:.8;letter-spacing:-4px;color:#e32282;text-shadow:4px 4px #ffa6d2,7px 7px #fff9fc,-3px -3px #ffbcdd;margin:0 0 24px;transform:rotate(-3deg)}.poster h1 span{display:block}.poster h1 span:last-child{margin-left:34px}.poster-head p{font-size:29px;color:#c51a76;font-weight:1000;margin:0 0 4px 30%;white-space:nowrap}.poster-inner{display:grid;grid-template-columns:52% 48%;align-items:end;min-height:385px;margin-top:-8px}.portrait-area{position:relative;align-self:end;height:438px;z-index:2}.portrait{display:block;position:absolute;height:100%;max-width:98%;object-fit:contain;object-position:bottom;bottom:0;left:2%;filter:drop-shadow(3px 3px 0 white) drop-shadow(-3px -3px 0 white) drop-shadow(0 7px 4px #c95f8c60);animation:drift 5s ease-in-out infinite}.poster-facts{display:flex;flex-direction:column;gap:27px;padding:20px 0 10px 3px;position:relative;z-index:5}.fact{position:relative;background:#fffefa;border-radius:26px 34px 25px 29px;padding:22px 16px 10px;min-height:85px;box-shadow:1px 3px 0 #faedd0}.hand-label{position:absolute;top:-17px;left:5px;transform:rotate(-8deg);color:#e92889;text-shadow:2px 2px #ffd824;font-weight:800;font-size:24px;background:#fff46f9c;padding:0 8px;border-radius:14px}.fact>div{display:flex;align-items:center;gap:14px;color:#d41978;font-size:20px;line-height:1.1}.fact-icon{color:#e7358d;font-size:35px;min-width:43px;text-align:center}.fact strong{font-weight:1000}.fact small{font-size:12px;display:block;margin-top:5px}.sticker{position:absolute;z-index:3;display:flex;flex-direction:column;align-items:center;font-size:57px;line-height:1;transform:rotate(-12deg);filter:drop-shadow(2px 2px #fff) drop-shadow(-2px -2px #fff);animation:wobble 7s ease-in-out infinite}.sticker small{font-family:'Baloo 2',sans-serif;color:#d92383;font-weight:800;background:#fffd82;padding:2px 5px;border:2px solid #d92383;border-radius:4px;font-size:14px;line-height:1.2}.graduation-cap{left:5%;top:37%}.scroll-sticker{left:7%;top:21%;font-size:45px}.scroll-sticker small{font-size:11px}.robe{left:6%;bottom:55px;font-size:66px;transform:rotate(8deg)}.robe small{font-size:13px}.top-medal{right:6%;top:10%}.low-medal{right:3%;top:42%}.doodle{position:absolute;z-index:3;color:#ef398e;font-size:46px;animation:twinkle 4s ease-in-out infinite}.s1{left:28%;top:25%}.s2{right:25%;top:20%}.s3{right:7%;bottom:20%}.poster-bottom-heart{position:absolute;bottom:-16px;left:48%;font-size:85px;color:#ffd0e3;transform:rotate(-16deg)}.paper-panel{position:relative;z-index:2;max-width:925px;margin:24px auto 36px;background:#fffefeeb;padding:32px 40px 38px;border-radius:27px;box-shadow:0 6px 6px #ec9bbb21}.section-tabs{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:0 15px 26px}.section-tabs a{display:flex;justify-content:center;align-items:center;gap:10px;min-height:63px;border-radius:15px;text-decoration:none;background:#fff;border:1px solid #f8deeb;color:#e36e9e;text-align:center;font-size:12px;line-height:1.3;font-weight:1000}.section-tabs a:first-child{background:#fff0f7;border-color:#fa9ccc;color:#d32a80;box-shadow:0 0 0 1px #ffd0e7}.section-tabs a span{font-size:30px;color:#ed4b96}.info-grid{display:grid;grid-template-columns:1fr 1fr;gap:26px;align-items:stretch}.info-card{background:#fff8fb;border:2px solid #ffd6e7;border-radius:16px;padding:18px 30px 12px;position:relative;min-height:293px}.info-card h2,.letter h2{font-size:18px;color:#d92881;margin:0 0 12px;white-space:nowrap}.info-card h2 span,.letter h2 span{display:inline-block;background:#ffe4f0;padding:2px 9px;border-radius:18px}.info-card dl{margin:0}.info-card dl>div{display:flex;gap:15px;align-items:center;padding:8px 0;border-bottom:1px solid #efdfe4}.info-card dt{display:grid;place-items:center;flex:0 0 39px;height:39px;background:#ffe5f1;border:1px solid #f7bad5;border-radius:50%;font-size:22px;color:#e12c81}.info-card dd{font-size:13px;color:#cb3382;font-weight:900;margin:0}.info-card dd small{display:block;font-size:11px}.info-card dd em{display:block;color:#77636a;font-size:11px;font-style:normal;font-weight:600}.map-link{display:inline-block;text-decoration:none;color:#d72e83;margin-top:8px;font-weight:900;font-size:12px}.card-side-text{display:block;font-size:13px;color:#e64c91;font-style:italic;transform:rotate(-6deg);margin-top:6px}.letter{background:#fffef0;position:relative;padding:27px 34px;min-height:290px;box-shadow:4px 5px 2px #e6e2d5;transform:rotate(1deg)!important;font-size:13px;line-height:1.52;color:#555}.letter p{margin:9px 0}.letter-tape{position:absolute;right:14px;top:-10px;height:29px;width:50px;background:#f7a4ccbd;transform:rotate(20deg)}.letter-sticker{position:absolute;bottom:3px;right:13px;font-size:58px}.signature{color:#e3358b;text-align:right;padding-right:55px;font-weight:900;font-style:italic}.rsvp-section{max-width:770px;margin:24px auto 55px;padding:32px;background:#fff8fd;border:2px solid #ffc7e0;border-radius:28px;text-align:center;box-shadow:0 10px 30px #ce71972b}.rsvp-heart{font-size:36px;color:var(--pink)}.rsvp-section h2{font-size:clamp(25px,3.5vw,36px);color:#d4227b;line-height:1.22;margin:8px 0}.rsvp-section p{line-height:1.65;font-size:15px}.choice-buttons{display:grid;grid-template-columns:1fr 1fr;gap:13px;margin:25px 0}.button-primary,.button-outline{cursor:pointer;border-radius:16px;padding:16px 18px;font-size:17px;font-weight:1000;transition:transform .2s,box-shadow .2s}.button-primary{background:#e62c88;color:#fff;border:2px solid #e62c88;box-shadow:0 4px 0 #b11668}.button-outline{background:#fff;color:#d62c80;border:2px solid #f3bdd4}.button-primary:hover,.button-outline:hover{transform:translateY(-3px);box-shadow:0 6px 12px #d642873c}.button-primary:active,.button-outline:active{transform:translateY(2px)}.subnote{font-size:11px!important;color:#9e7182}footer{background:#f9dceb;color:#d33584;display:flex;justify-content:center;align-items:center;gap:20px;padding:22px;font-size:17px;font-weight:900;font-style:italic}footer a{font-size:12px;text-decoration:none}dialog{border:2px solid #f1a5c7;max-width:520px;width:calc(100% - 28px);border-radius:24px;padding:25px;box-shadow:0 20px 65px #50203c65;background:#fff9fc;color:var(--ink)}dialog::backdrop{background:#53233899;backdrop-filter:blur(3px)}dialog h2{color:var(--deep);font-size:26px;margin-top:5px}dialog form>label{display:block;color:var(--deep);font-weight:900;margin:14px 0}dialog input:not([type=radio]),dialog textarea{width:100%;border:2px solid #f1bad3;border-radius:13px;padding:13px;color:var(--ink);background:#fff;margin-top:5px;outline-color:var(--pink)}dialog textarea{resize:vertical}fieldset{border:1px solid #f4cbdc;border-radius:15px;margin:12px 0;padding:10px}legend{color:var(--deep);font-weight:900}.radio-choice{display:block;margin:9px}.close-btn{position:absolute;top:10px;right:13px;border:0;background:transparent;color:var(--deep);font-size:30px;cursor:pointer}.submit-btn{width:100%;font-size:16px;margin-top:10px}.captcha{min-height:10px}.opening{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:15px;background:linear-gradient(145deg,#ffe2ef,#fff9d0);text-align:center;padding:25px;transition:opacity .6s,visibility .6s}.opening.hidden{opacity:0;visibility:hidden;pointer-events:none}.opening h2{font-size:clamp(24px,6vw,40px);color:#cf257b}.opening .envelope{font-size:86px;animation:drift 3s infinite}.opening button{min-width:210px}.reveal{opacity:0;transform:translateY(22px);transition:opacity .7s ease,transform .7s ease}.reveal.visible{opacity:1;transform:translateY(0)}.confetti{position:fixed;z-index:150;pointer-events:none;font-size:22px;animation:confetti-fall 1.4s ease-in forwards}@keyframes drift{50%{translate:0 -9px}}@keyframes wobble{50%{rotate:6deg;translate:0 -5px}}@keyframes twinkle{50%{opacity:.4;scale:1.14}}@keyframes confetti-fall{to{transform:translate(var(--dx),var(--dy)) rotate(540deg);opacity:0}}@media(max-width:1060px){.side-note,.side-letter{display:none}}@media(max-width:760px){.topbar{height:58px;padding:0 10px;gap:5px}.brand{font-size:13px;gap:3px}.brand-cap{font-size:23px}.topbar nav{gap:11px}.topbar nav a{font-size:16px}.topbar nav a span{display:none}.pill{font-size:10px;padding:5px}.poster-wrap{margin:13px auto 0;padding:0 10px}.poster{padding:18px 10px 20px;min-height:0}.poster-hello{left:6%;top:25px;font-size:23px}.poster-head{margin-left:20%;padding-top:42px}.poster h1{font-size:clamp(45px,10vw,79px);letter-spacing:-2px;margin-bottom:13px}.poster h1 span:last-child{margin-left:0}.poster-head p{font-size:clamp(16px,4vw,25px);margin:0;text-align:right}.poster-inner{grid-template-columns:45% 55%;min-height:300px;margin:20px 0 0}.portrait-area{height:300px}.portrait{max-width:110%;height:100%;left:-8%;object-position:bottom}.poster-facts{padding:14px 0 10px;gap:23px}.fact{padding:17px 7px 8px;min-height:70px}.hand-label{font-size:16px;top:-12px;left:0}.fact>div{gap:3px;font-size:clamp(10px,2.6vw,15px)}.fact-icon{font-size:22px;min-width:24px}.fact small{font-size:9px}.sticker{font-size:31px}.graduation-cap{left:2%;top:40%}.scroll-sticker{top:24%;left:3%}.robe{bottom:15px;left:2%;font-size:35px}.robe small,.graduation-cap small{font-size:8px}.top-medal{right:4%;top:10%}.low-medal{right:1%;top:37%}.doodle{font-size:26px}.paper-panel{margin:12px 10px 28px;padding:17px 12px;border-radius:20px}.section-tabs{gap:6px;margin:0 0 18px}.section-tabs a{gap:2px;flex-direction:column;padding:5px 2px;min-height:62px;font-size:9px}.section-tabs a span{font-size:21px}.info-grid{grid-template-columns:1fr;gap:24px}.info-card,.letter{padding:18px;min-height:0}.letter{transform:none!important}.choice-buttons{grid-template-columns:1fr}.rsvp-section{margin:12px 12px 35px;padding:19px}.rsvp-section h2{font-size:27px}footer{flex-wrap:wrap;font-size:12px}.ambient{font-size:27px}.a2{left:0;top:250px}}@media(max-width:420px){.poster-hello{font-size:19px}.poster-head{margin-left:19%}.poster h1{font-size:47px}.poster-inner{grid-template-columns:43% 57%;min-height:280px}.portrait-area{height:278px}.fact{min-height:69px}.fact>div{font-size:11px}.hand-label{font-size:15px}.portrait{left:-12%}}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.reveal{opacity:1;transform:none}}

/* Vietnamese text stability + original scrapbook details: no simulated handwritten italics */
.card-side-text{font-family:'Be Vietnam Pro','Segoe UI',Tahoma,Arial,sans-serif!important;font-style:normal!important;font-weight:700!important;letter-spacing:0!important;line-height:1.65!important;transform:rotate(-4deg);font-size:13px!important;}
.guest-fact strong{font-family:'Be Vietnam Pro','Segoe UI',Tahoma,Arial,sans-serif;overflow-wrap:anywhere;line-height:1.3;}
