:root{--bg:#fcf9ea;--bg-alt:#f8f2dc;--text:#4a4542;--muted:#a8a29a;--accent:#f5b66b;--accent-deep:#ef9a3c;--petal:#fdd77e;--leaf:#6aa36f;--line:#efe6cc;--font-hand:"Gaegu", "Noto Sans KR", sans-serif;--max-width:480px;--font:"Pretendard", "Noto Sans KR", system-ui, sans-serif;--font-en:"Montserrat", "Noto Sans KR", sans-serif}html[lang=vi]{--font-hand:"Patrick Hand", "Be Vietnam Pro", sans-serif;--font:"Be Vietnam Pro", system-ui, sans-serif;--font-en:"Montserrat", "Be Vietnam Pro", sans-serif}html[lang=vi] .cover-title{letter-spacing:.02em;font-size:2.2rem}html[lang=vi] body{word-break:normal}*{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{color:var(--text);font-family:var(--font);word-break:keep-all;background:#ece6d2;font-size:15px;line-height:1.8}body.lock{overflow:hidden}#app{max-width:var(--max-width);background:var(--bg);min-height:100vh;margin:0 auto;overflow:hidden}img{max-width:100%;display:block}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0}a{color:inherit}.pre{white-space:pre-line}.muted{color:var(--muted)}.small{font-size:.8rem}.placeholder{background:repeating-linear-gradient(45deg,#f5e9e6,#f5e9e6 10px,#f9f0ee 10px 20px)}.section{text-align:center;padding:72px 24px}.section:nth-of-type(2n){background:var(--bg-alt)}.sec-title{margin-bottom:32px}.sec-title .flower{width:22px;height:22px;color:var(--accent);margin:0 auto 10px}.sec-title .en{font-family:var(--font-en);letter-spacing:.3em;color:var(--accent-deep);font-size:.8rem;font-weight:600}.sec-title h2{margin-top:6px;font-size:1.15rem;font-weight:600}.fade{opacity:0;transition:opacity .8s,transform .8s;transform:translateY(24px)}.fade.in{opacity:1;transform:none}.btn{background:var(--accent);color:#fff;border-radius:999px;padding:12px 28px;font-weight:500;text-decoration:none;display:inline-block}.btn.small{padding:6px 14px;font-size:.8rem}.btn.outline{color:var(--accent-deep);border:1px solid var(--accent);background:#fff}.btn.kakao{color:#3a1d1d;background:#fee500}.link-btn{color:var(--accent-deep);margin-left:4px;font-size:.75rem;text-decoration:underline}.cover{text-align:center;background:var(--bg);padding:56px 24px 64px;position:relative;overflow:hidden}.cover-eyebrow{font-family:var(--font-hand);color:var(--muted);align-items:center;gap:6px;font-size:1.5rem;display:inline-flex}.cover-eyebrow .bud{width:20px;height:26px}.cover-title{font-family:var(--font-hand);letter-spacing:.06em;color:var(--accent-deep);margin:2px 0 48px;font-size:2.6rem;font-weight:700;line-height:1.2}.cover-photo{background:#fbe7b5;border-radius:58% 42% 52% 48%/46% 54%;width:72%;margin:0 auto;padding:8px}.cover-photo .cover-img{aspect-ratio:1;object-fit:cover;border-radius:inherit;width:100%}.cover-when{margin-top:44px;font-size:1.1rem;line-height:1.7}.cover-parents{letter-spacing:.04em;margin-top:40px;font-size:1.05rem}.cover-parents .role{font-family:var(--font-en);color:var(--muted);margin-right:6px}.cover-parents .name{font-family:var(--font-hand);color:var(--accent-deep);margin-right:18px;font-size:1.2rem;font-weight:700}.cover-parents .name:last-child{margin-right:0}.deco{pointer-events:none;width:34px;height:34px;animation:4s ease-in-out infinite sway;position:absolute}@keyframes sway{50%{transform:rotate(var(--r,10deg)) translateY(-4px)}}.greeting-parents{margin-top:28px}.greeting-parents b{font-weight:600}.tl{padding:8px 0;list-style:none;position:relative}.tl:before{content:"";border-left:2px dashed var(--accent);opacity:.5;position:absolute;top:0;bottom:0;left:50%}.tl-item{align-items:center;gap:28px;margin-bottom:36px;display:flex;position:relative}.tl-item:after{content:"";background:var(--accent);border:3px solid var(--bg);border-radius:50%;width:12px;height:12px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tl-item.right{flex-direction:row-reverse}.tl-photo,.tl-body{flex:1;min-width:0}.tl-img{aspect-ratio:1;object-fit:cover;border-radius:50%;width:100%}.tl-item.left .tl-body{text-align:left}.tl-item.right .tl-body{text-align:right}.tl-label{font-family:var(--font-en);color:var(--accent-deep);font-size:.9rem;font-weight:600}.tl-date{font-family:var(--font-en);color:var(--muted);font-size:.75rem}.tl-text{margin-top:4px;font-size:.85rem}.cal-when{margin-bottom:24px}.cal{background:#fff;border-radius:16px;padding:24px 16px;box-shadow:0 4px 18px #e085851f}.cal-month{font-family:var(--font-en);letter-spacing:.1em;margin-bottom:12px;font-weight:600}.cal-grid{font-family:var(--font-en);grid-template-columns:repeat(7,1fr);row-gap:6px;font-size:.85rem;display:grid}.cal-head{color:var(--muted);margin-bottom:6px;font-size:.75rem}.cal-grid span{place-items:center;height:34px;display:grid}.cal-grid .sun{color:var(--accent-deep)}.cal-grid .sat{color:#7aa3cc}.cal-grid .today{background:var(--accent);color:#fff;border-radius:50%;width:34px;margin:0 auto;font-weight:700}.cal-grid .bday{color:var(--accent-deep);font-weight:700;position:relative}.cal-grid .bday:after{content:"♥";color:var(--accent-deep);font-size:.6rem;position:absolute;bottom:-6px}.cal-legend{color:var(--muted);justify-content:center;align-items:center;gap:6px;margin-top:14px;font-size:.75rem;display:flex}.cal-legend .dot{border-radius:50%;width:10px;height:10px;display:inline-block}.cal-legend .dot.party{background:var(--accent)}.cal-legend .dot.birth{border:1.5px solid var(--accent-deep);background:0 0;margin-left:8px}.countdown{justify-content:center;gap:10px;margin-top:28px;display:flex}.countdown div{background:#fff;border-radius:12px;width:62px;padding:10px 0;box-shadow:0 2px 10px #0000000a}.countdown b{font-family:var(--font-en);color:var(--accent-deep);font-size:1.3rem;display:block}.countdown small{font-family:var(--font-en);color:var(--muted);letter-spacing:.1em;font-size:.6rem}.dday{margin-top:18px}.dday b{color:var(--accent-deep)}.fam{justify-content:center;align-items:center;gap:12px;display:flex}.fam-card{width:130px}.fam-img{object-fit:cover;border:4px solid #fff;border-radius:50%;width:110px;height:110px;margin:0 auto 10px;box-shadow:0 4px 14px #e085852e}.fam-role{color:var(--muted);font-size:.8rem}.fam-name{font-weight:600}.fam-op{font-family:var(--font-en);color:var(--accent);font-size:1.8rem;font-weight:300}.fam-op.eq{margin:12px 0}.fam-contact{justify-content:center;gap:8px;margin-top:6px;display:flex}.fam-contact a{background:var(--bg-alt);border-radius:50%;place-items:center;width:30px;height:30px;font-size:.85rem;text-decoration:none;display:grid}.acc-list{text-align:left;gap:10px;display:grid}.acc{background:#fff;border-radius:12px;overflow:hidden}.acc summary{cursor:pointer;padding:14px 44px 14px 18px;font-weight:500;list-style:none;position:relative}.acc summary::-webkit-details-marker{display:none}.acc summary:after{content:"+";color:var(--accent-deep);font-size:1.2rem;transition:transform .2s;position:absolute;top:50%;right:18px;transform:translateY(-50%)}.acc[open] summary:after{transform:translateY(-50%)rotate(45deg)}.acc>p,.acc .account{border-top:1px solid var(--line);padding:14px 18px 18px;font-size:.9rem}.qna-img{aspect-ratio:1;object-fit:cover;border-radius:12px;width:calc(100% - 36px);max-width:280px;margin:-4px auto 18px;display:block}.q,.a{font-family:var(--font-en);color:var(--accent-deep);font-weight:700}.account{justify-content:space-between;align-items:center;gap:12px;display:flex}.acc-owner{color:var(--muted);font-size:.8rem}.acc-btns{flex-shrink:0;gap:6px;display:flex}.kakaopay{color:#3a1d1d;background:#fee500;font-weight:700}.g-grid{grid-template-columns:repeat(3,1fr);gap:4px;display:grid}.g-item{aspect-ratio:1;border-radius:6px;width:100%;min-width:0;padding:0;overflow:hidden}.g-img{object-fit:cover;width:100%;height:100%;transition:transform .3s}.g-item:not(:disabled):active .g-img{transform:scale(1.05)}.lightbox{z-index:100;background:#000000eb;place-items:center;display:grid;position:fixed;inset:0}.lightbox[hidden]{display:none}.lightbox img{max-width:100%;max-height:80vh}.lb-nav{color:#fff;padding:12px;font-size:2.4rem;position:absolute;top:50%;transform:translateY(-50%)}.lb-nav.prev{left:4px}.lb-nav.next{right:4px}.lb-count{color:#ccc;font-family:var(--font-en);font-size:.85rem;position:absolute;bottom:24px}.lightbox .modal-close{color:#fff}.video-wrap{aspect-ratio:16/9;border-radius:12px;overflow:hidden}.video-wrap iframe{border:0;width:100%;height:100%}.loc-venue{font-size:1.05rem;font-weight:600}.loc-venue small{color:var(--muted);font-weight:400}.loc-addr{font-size:.9rem}.loc-tel{color:var(--muted);font-size:.85rem}.loc-map{border-radius:12px;margin-top:20px;overflow:hidden}.loc-map.embed{aspect-ratio:4/3;position:relative}.loc-map.embed iframe{left:0;top:calc(-1 * var(--map-crop));width:100%;height:calc(100% + var(--map-crop));--map-crop:150px;border:0;position:absolute}.btn.gmap{margin:16px 0 32px;display:block}.nav-btns{grid-template-columns:repeat(3,1fr);gap:8px;margin:20px 0 32px;display:grid}.nav-btns a{border:1px solid var(--line);background:#fff;border-radius:10px;padding:10px 0;font-size:.85rem;text-decoration:none}.transport{text-align:left}.transport dt{color:var(--accent-deep);margin-top:18px;font-weight:600}.transport dd{border-bottom:1px solid var(--line);padding-bottom:14px;font-size:.9rem}.info-card{background:#fff;border-radius:14px;margin-bottom:12px;padding:22px 20px;font-size:.9rem}.info-title{color:var(--accent-deep);margin-bottom:6px;font-weight:600}.info-card .btn{margin-top:12px}.accounts .muted,.rsvp .muted{margin-bottom:24px;font-size:.9rem}.gb-list{text-align:left;gap:10px;margin-bottom:24px;list-style:none;display:grid}.gb-list>.muted{text-align:center}.gb-item{background:#fff;border-radius:12px;padding:14px 16px;font-size:.9rem}.gb-head{align-items:center;gap:8px;margin-bottom:4px;display:flex}.gb-head small{color:var(--muted);font-family:var(--font-en);font-size:.7rem}.gb-del{color:var(--muted);margin-left:auto}.footer{text-align:center;background:var(--bg-alt);padding:48px 24px 64px}.share-btns{gap:10px;margin-bottom:24px;display:grid}.modal{z-index:90;background:#3c282873;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.modal[hidden]{display:none}.modal-box{width:100%;max-width:var(--max-width);max-height:90vh;padding:32px 24px calc(28px + env(safe-area-inset-bottom));background:#fff;border-radius:20px 20px 0 0;animation:.3s up;position:relative;overflow-y:auto}@keyframes up{0%{transform:translateY(100%)}}.modal-box h3{text-align:center;margin-bottom:20px;font-weight:600}.modal-close{color:var(--muted);font-size:1.6rem;position:absolute;top:10px;right:14px}.label{margin:14px 0 6px;font-size:.85rem;font-weight:600}.choice{gap:8px;display:flex}.choice label{flex:1}.choice input{opacity:0;position:absolute}.choice span{text-align:center;border:1px solid var(--line);border-radius:10px;padding:10px 0;font-size:.85rem;display:block}.choice input:checked+span{border-color:var(--accent);background:var(--bg-alt);color:var(--accent-deep);font-weight:600}.field{margin-top:14px;font-size:.85rem;font-weight:600;display:block}.field input,.field textarea{border:1px solid var(--line);width:100%;font:inherit;resize:none;border-radius:10px;margin-top:6px;padding:11px 12px;font-size:16px;font-weight:400;display:block}.field input:focus,.field textarea:focus{outline:2px solid var(--accent);border-color:#0000}.modal-box .btn{width:100%;margin-top:24px}.row{gap:8px;display:flex}.bgm-btn{top:12px;right:max(12px, calc(50% - var(--max-width) / 2 + 12px));z-index:50;color:#fff;background:#5a5a5abf;border-radius:50%;place-items:center;width:40px;height:40px;display:grid;position:fixed}.bgm-btn svg{width:20px;height:20px}.lang-btn{top:12px;left:max(12px, calc(50% - var(--max-width) / 2 + 12px));z-index:50;color:#fff;background:#5a5a5abf;border-radius:20px;height:40px;padding:0 14px;font-size:.8rem;font-weight:600;position:fixed}.bgm-btn:not(.playing) .wave,.bgm-btn.playing .mute{display:none}@keyframes spin{to{transform:rotate(360deg)}}.toast{z-index:200;color:#fff;opacity:0;pointer-events:none;background:#322828d9;border-radius:999px;padding:10px 20px;font-size:.85rem;transition:opacity .25s,transform .25s;position:fixed;bottom:40px;left:50%;transform:translate(-50%,20px)}.toast.show{opacity:1;transform:translate(-50%)}.cover-eyebrow{animation:.8s ease-out .1s backwards drop}.cover-eyebrow .bud{transform-origin:50% 100%;animation:2.4s ease-in-out infinite wiggle}.cover-eyebrow .bud:last-child{animation-delay:-1.2s}.cover-title .char{animation:.6s cubic-bezier(.34,1.56,.64,1) backwards popIn;animation-delay:calc(.4s + var(--i) * 70ms);display:inline-block}.cover-photo{animation:1s cubic-bezier(.34,1.4,.64,1) .9s backwards photoIn,9s ease-in-out 2s infinite blob}.cover-when{animation:.8s ease-out 1.5s backwards rise}.cover-parents{animation:.8s ease-out 1.8s backwards rise}.deco svg{animation:.5s cubic-bezier(.34,1.56,.64,1) backwards popIn;animation-delay:calc(1s + var(--i) * .12s);display:block}@keyframes drop{0%{opacity:0;transform:translateY(-16px)}}@keyframes rise{0%{opacity:0;transform:translateY(16px)}}@keyframes popIn{0%{opacity:0;transform:scale(.3)translateY(10px)}}@keyframes photoIn{0%{opacity:0;transform:scale(.85)}}@keyframes wiggle{50%{transform:rotate(-12deg)}}@keyframes blob{0%,to{border-radius:58% 42% 52% 48%/46% 54%}33%{border-radius:46% 54% 44% 56%/55% 45%}66%{border-radius:53% 47% 58% 42%/42% 58% 48% 52%}}.petals{width:min(100%, var(--max-width));pointer-events:none;z-index:40;position:fixed;top:0;bottom:0;left:50%;overflow:hidden;transform:translate(-50%)}.petal{background:var(--petal);border-radius:80% 0;animation-name:fall,flutter;animation-timing-function:linear,ease-in-out;animation-iteration-count:infinite,infinite;animation-direction:normal,alternate;position:absolute;top:-20px}@keyframes fall{to{margin-left:var(--drift);top:105%}}@keyframes flutter{0%{transform:rotate(-30deg)scaleX(1)}to{transform:rotate(40deg)scaleX(.6)}}.sec-title .flower{transition:transform 1s cubic-bezier(.34,1.56,.64,1);transform:rotate(-180deg)scale(.3)}.sec-title.in .flower{transform:none}.tl:before{transform-origin:top;transition:transform 2.4s ease-out;transform:scaleY(0)}.tl.in:before{transform:scaleY(1)}.tl-item.left.fade{transform:translate(-36px)}.tl-item.right.fade{transform:translate(36px)}.tl-item.fade.in{transform:none}.tl-item:after{animation:2s ease-out infinite pulse}@keyframes pulse{0%{box-shadow:0 0 #f5b66b99}to{box-shadow:0 0 0 12px #f5b66b00}}.cal-grid .today{animation:1.6s ease-in-out infinite heartbeat}@keyframes heartbeat{0%,60%,to{transform:scale(1)}20%{transform:scale(1.15)}40%{transform:scale(.97)}}.countdown b.bump{animation:.35s ease-out bump}@keyframes bump{40%{transform:translateY(-4px)scale(1.12)}}.g-grid .g-item{opacity:0;transition:opacity .5s,transform .5s;transition-delay:calc(var(--i) * 60ms);transform:scale(.9)}.g-grid.in .g-item{opacity:1;transform:none}.btn,.nav-btns a{transition:transform .15s}.btn:active,.nav-btns a:active{transform:scale(.95)}.confetti{pointer-events:none;z-index:300;width:100%;height:100%;position:fixed;inset:0}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}.fade,.g-grid .g-item{opacity:1!important;transform:none!important}.tl:before,.sec-title .flower{transform:none!important}}
