:root{--cream:#FAF5EB;--beige:#F1E7D6;--gold:#C9A96E;--ink:#5A4636;--muted:#7A6655;--serif:'Cormorant Garamond',Georgia,serif;--sans:'Be Vietnam Pro',Arial,sans-serif;--script:'Great Vibes',cursive}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:90px}body{margin:0;background:var(--cream);color:var(--ink);font-family:var(--sans);font-size:15px;line-height:1.8}button,input,select,textarea{font:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}button{cursor:pointer}button:disabled{cursor:wait;opacity:.65}a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:3px solid #89682c;outline-offset:5px}button{color:inherit}img{max-width:100%;display:block}h1,h2,h3,p,figure{margin:0}h2{font-family:var(--serif);font-size:clamp(36px,4.5vw,55px);font-weight:500;line-height:1.2}h3{font-family:var(--serif);font-weight:500;font-size:29px;line-height:1.3}p{color:var(--muted)}.skip{position:fixed;left:10px;top:-90px;z-index:50;background:white;padding:12px}.skip:focus{top:10px}.topbar{height:82px;padding:0 5.5%;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #b99b6e35;position:absolute;top:0;width:100%;z-index:10}.monogram{font:30px var(--serif);letter-spacing:1px}.monogram span{font-style:italic;font-size:22px;color:#947447;padding:0 3px}nav{display:flex;align-items:center;gap:34px;font-size:12px}nav a:hover{color:#947447}.nav-rsvp{border-bottom:1px solid var(--gold);padding:9px 0}.hero{min-height:830px;height:100svh;position:relative;display:flex;justify-content:center;align-items:center;overflow:hidden;background:#eee5d5}.cover{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.hero:after{content:'';position:absolute;inset:19px;border:1px solid #bda1724d;pointer-events:none}.hero-grain{position:absolute;inset:0;background:linear-gradient(90deg,#faf5eb33,transparent,#faf5eb33)}.hero-content{position:relative;text-align:center;z-index:2;padding:105px 24px 90px;animation:fade-in 1.5s ease both}.eyebrow{font-size:10px;letter-spacing:3.4px;font-weight:500;text-transform:uppercase;color:#846e50}.tiny-ornament{color:#ad8c52;font-size:37px;margin:13px 0 4px}h1{font-family:var(--script);font-size:clamp(66px,7.8vw,116px);font-weight:400;line-height:1.05;display:flex;flex-direction:column;text-shadow:0 2px 20px #faf5eb80}h1 i{font-family:var(--serif);font-size:50px;font-weight:400;font-style:italic;color:#ad8c52;line-height:1.1;margin:3px 0}.hero-date{display:flex;justify-content:center;align-items:center;gap:24px;font:26px var(--serif);letter-spacing:6px;margin-top:32px}.line{width:42px;height:1px;background:var(--gold)}.hero-place{font-size:10px;letter-spacing:4px;text-transform:uppercase;margin-top:12px}.guest{font-family:var(--serif);font-size:23px;margin:24px 0 15px;max-width:560px;overflow-wrap:anywhere}.button{border:1px solid #947544;background:#987b49;color:#fffdf7;padding:15px 26px;min-height:50px;display:inline-flex;align-items:center;justify-content:center;gap:22px;font-size:12px;letter-spacing:.7px;transition:background .25s,transform .25s}.button:hover{background:#806334;transform:translateY(-2px)}.envelope-button{background:#faf5ebc9;color:var(--ink);min-width:214px}.envelope-button:hover{background:#fffaf0}.envelope{width:25px;height:18px;display:inline-grid;place-items:center;position:relative;border:1px solid #a0865d;font-size:13px;line-height:1}.envelope:before{content:'';position:absolute;width:16px;height:16px;border-bottom:1px solid #a0865d;border-right:1px solid #a0865d;transform:translateY(-8px) rotate(45deg);background:#f6eee0;transform-origin:bottom right;transition:transform .65s}.opened .envelope:before{transform:translateY(-8px) rotate(225deg);z-index:-1}.hero-note{font:italic 16px var(--serif);margin-top:16px}.scroll-cue{position:absolute;bottom:34px;text-align:center;z-index:3;font-size:20px;display:flex;flex-direction:column;gap:9px}.scroll-cue span{font-size:8px;letter-spacing:2px}.hero-side{position:absolute;right:36px;top:50%;writing-mode:vertical-rl;font-size:8px;letter-spacing:3px;color:#89765c}.section{max-width:1120px;margin:auto;padding:100px 40px}.section-heading{text-align:center;margin-bottom:45px}.section-heading h2{margin:12px 0 16px}.section-heading>p:last-child{font-size:13px}.invitation{text-align:center;padding-top:105px;padding-bottom:70px;max-width:780px}.invitation h2{margin-top:15px}.ornament{font:30px var(--serif);color:#ae8d54;margin:18px 0}.intro{font-size:14px;line-height:2.1}.text-link{display:inline-block;margin-top:26px;border-bottom:1px solid var(--gold);font-size:11px;padding-bottom:6px}.families{position:relative;padding-top:20px;padding-bottom:85px}.two-col{display:grid;grid-template-columns:1fr 1fr}.family{text-align:center;padding:28px 55px}.family:first-child{border-right:1px solid #c9a96e60}.family .eyebrow{margin-bottom:20px}.parent{font-family:var(--serif);font-size:25px;color:var(--ink);line-height:1.5}.family-address{font-size:12px;margin-top:17px;min-height:48px}.family h3{margin-top:25px;font-size:30px}.family small{font-size:11px}.joining{position:absolute;left:50%;top:45%;transform:translate(-50%,-50%);font:italic 30px var(--serif);color:#a88b58;background:var(--cream);padding:10px}.countdown-section{text-align:center;padding:65px 24px 60px;background:var(--beige);border-top:1px solid #c9a96e40;border-bottom:1px solid #c9a96e40}.countdown-section h2{margin:10px 0 28px;font-size:39px}.countdown{display:flex;justify-content:center;gap:40px}.countdown div{min-width:80px}.countdown strong{font:56px var(--serif);display:block;font-weight:400;line-height:1.1;font-variant-numeric:tabular-nums}.countdown span{font-size:10px;letter-spacing:2px;text-transform:uppercase}.countdown-section>p:last-child{font-size:11px;margin-top:25px}.couple-grid{display:grid;grid-template-columns:1fr 1fr;gap:65px;max-width:850px;margin:auto}.person:nth-child(2){padding-top:75px}.person-photo{aspect-ratio:4/5;position:relative;border-radius:180px 180px 0 0;overflow:hidden;background:var(--beige)}.person-photo img{width:100%;height:100%;object-fit:cover}.person .eyebrow{margin:24px 0 6px}.person h3{font-size:34px}.person>p:last-child{font-size:13px;margin-top:12px}.photo-label{position:absolute;bottom:15px;left:0;width:100%;text-align:center;font-size:10px;letter-spacing:1px;color:#6e5a41}.story-section{padding-top:30px}.timeline{position:relative;display:grid;grid-template-columns:repeat(3,1fr);gap:40px}.timeline:before{content:'';position:absolute;top:40px;left:0;right:0;height:1px;background:#c9a96e70}.milestone{position:relative}.milestone .eyebrow{margin-bottom:35px}.milestone:before{content:'';position:absolute;top:36px;left:0;width:8px;height:8px;border:1px solid #ae8d54;transform:rotate(45deg);background:var(--cream)}.milestone h3{font-size:27px;margin-bottom:15px}.milestone p:last-child{font-size:13px}.events-section{background:#f1e7d66b;max-width:none;padding-left:max(24px,calc((100% - 1040px)/2));padding-right:max(24px,calc((100% - 1040px)/2));border-block:1px solid #c9a96e40}.tabs{display:flex;justify-content:center;gap:0;margin-bottom:30px}.tab{border:1px solid #b69b6e;background:transparent;min-width:145px;min-height:48px;font-size:12px;padding:12px 20px}.tab[aria-selected=true]{background:var(--ink);color:var(--cream);border-color:var(--ink)}[hidden]{display:none!important}.event-layout{display:grid;grid-template-columns:1.2fr 1fr;border:1px solid #c9a96e70;background:var(--cream)}.event-list{padding:12px 35px}.event-card{padding:27px 0}.event-card+.event-card{border-top:1px solid #c9a96e60}.event-top{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}.event-top h3{font-size:28px}.event-top time{font:29px var(--serif);color:#8e6f3e;white-space:nowrap}.event-card p{font-size:12px}.event-card .lunar{font:italic 17px var(--serif);margin:3px 0 15px}.event-card .venue{font-weight:500;color:var(--ink)}.calendar-links{display:flex;gap:20px;margin-top:17px;flex-wrap:wrap}.calendar-links a,.calendar-links button{font-size:10px;background:none;border:0;border-bottom:1px solid #b29768;padding:4px 0}.map-area{display:flex;flex-direction:column;border-left:1px solid #c9a96e60;padding:12px}.map-area iframe{border:0;width:100%;height:100%;min-height:290px;flex:1;filter:saturate(.65)}.map-area>a{margin-top:12px;background:transparent;color:var(--ink)}.gallery{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.gallery button{padding:0;border:0;background:var(--beige);position:relative;overflow:hidden;aspect-ratio:3/4}.gallery button:first-child{grid-column:span 2;grid-row:span 2;aspect-ratio:auto}.gallery img{width:100%;height:100%;object-fit:cover;transition:transform .7s}.gallery button:hover img{transform:scale(1.04)}.gallery .photo-label{bottom:12px}.asset-note{text-align:center;font-size:11px;margin-top:20px;font-style:italic}.rsvp-section{display:grid;grid-template-columns:1fr 1.1fr;gap:80px;border-block:1px solid #c9a96e65;padding-block:65px}.rsvp-intro{padding:30px 0}.rsvp-intro h2{margin-top:20px}.rsvp-intro>p{font-size:13px}.rsvp-intro .eyebrow{font-size:10px}.rsvp-date{font:30px var(--serif)!important;letter-spacing:6px;margin-top:40px}form{display:grid;gap:17px}label{display:flex;flex-direction:column;font-size:11px;gap:7px}label>span[aria-hidden]{display:none}input,select,textarea{border:1px solid #c8b898;border-radius:0;background:#fffaf2;color:var(--ink);padding:12px;width:100%;font-size:13px;min-height:48px}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:#85745e}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:15px}label small{font-size:10px}.consent{display:flex;flex-direction:row;align-items:flex-start;gap:10px;line-height:1.6}.consent input{width:17px;min-width:17px;min-height:17px;margin-top:3px;accent-color:#8b7044}.honey{display:none}#form-status{font-size:12px;overflow-wrap:anywhere}.guestbook{text-align:center;max-width:760px;margin:auto}.empty-note{font-family:var(--serif);font-size:24px;font-style:italic;line-height:1.5}.wish{padding:25px;border-bottom:1px solid #c9a96e50}.wish p{font:italic 23px var(--serif);white-space:pre-wrap;overflow-wrap:anywhere}.wish strong{display:block;font-size:11px;margin-top:13px}.gifts-section{padding-top:40px}.gift-card{max-width:720px;margin:auto;background:#f1e7d66b;border:1px solid #c9a96e80;padding:32px;display:grid;grid-template-columns:1fr 230px;gap:30px;align-items:center}.bank-name{font:32px var(--serif);font-weight:600}.bank-branch{font-size:11px;margin-bottom:26px}.account-holder{font-size:12px;letter-spacing:1px}.account-number{font:29px var(--serif);letter-spacing:2px;margin:7px 0 18px;color:var(--ink)}.copy-button{font-size:11px;border:1px solid #ad9261;background:var(--cream);min-height:44px;padding:10px 18px}.qr-wrap{background:white;border:1px solid var(--gold);border-radius:12px;padding:14px;text-align:center}.qr-image-button{border:0;padding:0;background:white;width:100%}.qr-image-button img{width:100%;aspect-ratio:1;object-fit:contain}.qr-placeholder{min-height:185px;display:grid;place-content:center;gap:10px;background:#fafafa;border:1px dashed #c9a96e;border-radius:8px;padding:18px;font-size:11px}.qr-placeholder span{font:30px var(--serif)}.download-qr{display:block;font-size:10px;text-decoration:underline;padding-top:10px}.qr-hint{font-size:10px;margin-top:8px}footer{text-align:center;background:var(--beige);padding:70px 24px 80px}.script{font:80px var(--script);color:var(--ink);line-height:1.2}footer>p:nth-child(2){font-size:12px;margin:18px auto;max-width:450px}.footer-names{font:23px var(--serif);color:var(--ink)}footer>a{display:inline-block;font-size:10px;margin-top:30px;border-bottom:1px solid var(--gold)}.music-toggle{position:fixed;bottom:max(22px,env(safe-area-inset-bottom));right:22px;z-index:20;background:#faf5ebed;color:var(--ink);border:1px solid #bba06f;border-radius:50%;width:49px;height:49px;box-shadow:0 4px 20px #5a463618;font-size:24px}.music-indicator{position:absolute;bottom:10px;right:10px;width:6px;height:6px;border-radius:50%;background:#aa9b86}.music-toggle[aria-pressed=true] .music-indicator{background:#5a7d53}#toast{position:fixed;bottom:85px;left:50%;transform:translate(-50%,12px);max-width:calc(100% - 32px);width:max-content;background:var(--ink);color:var(--cream);padding:12px 22px;font-size:12px;opacity:0;pointer-events:none;transition:.25s;z-index:50}#toast.visible{opacity:1;transform:translate(-50%,0)}#lightbox{border:0;background:#211a14f2;color:white;width:100vw;max-width:none;height:100dvh;max-height:none;padding:60px 65px;margin:0}#lightbox::backdrop{background:#211a14f2}#lightbox[open]{display:flex;justify-content:center;align-items:center}#lightbox figure{text-align:center;max-width:100%;max-height:100%}#lightbox img{max-height:calc(100dvh - 150px);object-fit:contain;margin:auto}#lightbox figcaption{font-size:12px;margin-top:15px}#lightbox button{position:absolute;border:0;background:#ffffff18;color:#fff;min-width:44px;min-height:44px;font-size:32px}.lightbox-close{right:20px;top:16px}.lightbox-prev{left:12px;top:48%}.lightbox-next{right:12px;top:48%}.reveal{opacity:1}.js-reveal .reveal:not(.visible){opacity:0;transform:translateY(22px)}.reveal{transition:opacity .8s,transform .8s}.petals{position:absolute;inset:0;pointer-events:none}.petal{position:absolute;top:-30px;width:9px;height:15px;border-radius:80% 0 80% 20%;background:#d9bd9266;animation:petal-fall 18s linear infinite}.noscript{padding:30px;text-align:center}@keyframes fade-in{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@keyframes petal-fall{to{transform:translate3d(70px,110vh,0) rotate(300deg)}}
@media(min-width:1500px){.hero-content{padding-top:120px}.hero{min-height:950px}}@media(max-width:760px){.topbar{height:68px;padding:0 25px}.monogram{font-size:27px}nav{gap:20px}nav>a:not(.nav-rsvp){display:none}.nav-rsvp{font-size:10px}.hero{min-height:760px;height:100svh}.hero:after{inset:10px}.hero-content{padding:110px 20px 100px}.eyebrow{font-size:9px;letter-spacing:2.8px}h1{font-size:76px}h1 i{font-size:36px;margin:7px 0}.tiny-ornament{margin:10px 0}.hero-date{font-size:24px;letter-spacing:4px;margin-top:24px}.guest{font-size:21px;margin:22px 0 15px}.hero-side{display:none}.hero-note{font-size:14px}.scroll-cue{bottom:25px}.section{padding:70px 24px}.invitation{padding-bottom:35px}.families{padding-top:0;padding-bottom:60px}.family{padding:25px 15px}.family .eyebrow{letter-spacing:2px}.parent{font-size:21px}.family-address{font-size:11px;min-height:66px;line-height:1.8}.family h3{font-size:25px}.joining{top:41%;font-size:23px;padding:7px}.countdown{gap:19px}.countdown div{min-width:57px}.countdown strong{font-size:44px}.countdown span{font-size:9px}.countdown-section h2{font-size:34px}.countdown-section{padding:48px 20px}.couple-grid{gap:24px}.person:nth-child(2){padding-top:45px}.person h3{font-size:28px}.person>p:last-child{font-size:12px}.photo-label{font-size:9px}.timeline{grid-template-columns:1fr;gap:34px;padding-left:28px}.timeline:before{top:0;bottom:0;left:4px;width:1px;height:auto}.milestone:before{top:5px;left:-28px}.milestone .eyebrow{margin-bottom:9px}.milestone h3{font-size:28px;margin-bottom:10px}.event-layout{grid-template-columns:1fr}.event-list{padding:0 22px}.event-card{padding:25px 0}.event-top h3{font-size:26px}.map-area{border-left:0;border-top:1px solid #c9a96e60}.map-area iframe{height:240px;min-height:240px;flex:auto}.gallery{grid-template-columns:repeat(2,1fr);gap:10px}.gallery button:first-child{aspect-ratio:4/3;grid-row:auto}.gallery button:last-child{grid-column:span 2;aspect-ratio:16/9}.rsvp-section{grid-template-columns:1fr;gap:25px;margin:0 24px;padding:45px 0}.rsvp-intro{text-align:center;padding:0}.rsvp-intro h2 br{display:none}.rsvp-date{font-size:25px!important;margin-top:20px}.gift-card{grid-template-columns:1fr;padding:25px;gap:25px;text-align:center}.qr-wrap{max-width:250px;width:100%;margin:auto}.bank-branch{margin-bottom:18px}.gift-card .account-number{font-size:30px}.tabs .tab{min-width:0;flex:1;max-width:220px;font-size:11px;padding:12px}.gifts-section{padding-top:15px}.guestbook-section{padding-bottom:50px}.music-toggle{right:16px;bottom:16px}.script{font-size:68px}.section-heading{margin-bottom:30px}#lightbox{padding:65px 48px}.hero.opened{min-height:760px}.intro{font-size:13px}.petal:nth-child(n+6){display:none}}
.hero{height:auto;min-height:max(830px,100svh)}
@media(max-width:760px){.hero,.hero.opened{height:auto;min-height:max(760px,100svh)}.hero-content{width:100%}h1{font-size:clamp(55px,16.4vw,76px)}h1>span{white-space:nowrap}.rsvp-intro h2 br:after{content:' '}.rsvp-intro h2 br{display:initial}}
@media(max-width:360px){.family{padding-inline:9px}.parent{font-size:19px}.family h3{font-size:23px}.countdown{gap:12px}.hero{min-height:740px}.event-top{align-items:flex-start}.event-top h3{font-size:23px}.form-row{grid-template-columns:1fr}.section{padding-inline:20px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}.js-reveal .reveal:not(.visible){opacity:1;transform:none}.petals{display:none}}
.family .parents{min-height:80px;display:flex;flex-direction:column;justify-content:center}.family .parents:empty{visibility:hidden}.family .parent{overflow-wrap:anywhere}.family h3{overflow-wrap:anywhere}.timeline{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}@media(max-width:760px){.family .parents{min-height:72px}.timeline{grid-template-columns:1fr}}
/* Dùng chữ số cùng chiều cao và độ rộng trên mọi mẫu, kể cả font serif. */
body,body *{font-variant-numeric:lining-nums tabular-nums;font-feature-settings:"lnum" 1,"tnum" 1}
body,body *{font-variant-numeric:lining-nums tabular-nums!important;font-feature-settings:"lnum" 1,"tnum" 1!important}

@font-face{font-family:'Wedding Digits';src:url('/template/fonts/wedding-digits.ttf') format('truetype');font-style:normal;font-weight:100 900;font-display:swap;unicode-range:U+0030-0039}@font-face{font-family:'Wedding Digits';src:url('/template/fonts/wedding-digits.ttf') format('truetype');font-style:italic;font-weight:100 900;font-display:swap;unicode-range:U+0030-0039}
:root{--serif:'Wedding Digits','Cormorant Garamond',Georgia,serif;--sans:'Wedding Digits','Be Vietnam Pro',Arial,sans-serif;--script:'Wedding Digits','Great Vibes',cursive}

/* Shared rows keep both families aligned, including a single parent. */
#family-grid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch}#family-grid>.family{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:subgrid;grid-row:span 5;row-gap:0;align-items:start}#family-grid>.family .parents{min-height:85px;display:flex;flex-direction:column;justify-content:center;align-self:stretch;margin:0}#family-grid>.family .parent{margin:0}#family-grid>.family .family-address{align-self:start;margin-top:17px}#family-grid>.family h3{align-self:start}#family-grid>.family small{align-self:start}

#family-grid>.family .parents{box-sizing:border-box;flex-shrink:0;justify-content:center;align-items:center;width:100%}#family-grid>.family .parents>.parent{width:100%;flex-shrink:0}#family-grid>.family .parents[data-parent-count="1"]{justify-content:center}

#family-grid>.family{grid-row:span 3}
