@import url("template-journeys.css?v=20260811-1");

/* Template variations are intentionally independent from invitation content. */
body.template-royal-cream{--bg:#f4ead8;color:#413628;background:#f4ead8}
body.template-royal-cream .ambient{background:radial-gradient(circle at 18% 10%,#fff 0,transparent 30%),radial-gradient(circle at 90% 70%,#d9be8350,transparent 31%)}
body.template-royal-cream .light-beams{background:linear-gradient(112deg,transparent 38%,#b9965226 47%,transparent 56%)}
body.template-royal-cream .hero{min-height:min(100svh,920px)}
body.template-royal-cream .hero:before{border-color:#fff9e8b8}
body.template-royal-cream .hero-inner{padding:54px 40px;border:1px solid #b9965266;background:#fffdf4b8;box-shadow:0 25px 70px #76582620;text-shadow:none}
body.template-royal-cream .hero h1,body.template-royal-cream .date-line{color:#5c4b31}
body.template-royal-cream .section p,body.template-royal-cream footer,body.template-royal-cream .family-card small{color:#685a49}
body.template-royal-cream .section-label,body.template-royal-cream .detail-list small{color:#9b7a3b}
body.template-royal-cream .glass-card,body.template-royal-cream .family-card,body.template-royal-cream .count-grid div{background:#fffdf6;box-shadow:0 17px 44px #87662a18;border-color:#b9965244;backdrop-filter:none}
body.template-royal-cream .hero .names,body.template-royal-cream .section h2,body.template-royal-cream .couple-name,body.template-royal-cream footer .names{font-family:"Cormorant Garamond",serif;font-style:italic;text-shadow:none}
body.template-royal-cream .names{font-size:clamp(54px,10vw,112px)}
body.template-royal-cream .opening{background:radial-gradient(circle,#ead7aa,#5c4930 160%)}
body.template-royal-cream .opening-card{background:#fffdf4dd;color:#493c2b;text-shadow:none}
body.template-royal-cream .opening-card small{color:#685a49}
body.template-royal-cream input,body.template-royal-cream select,body.template-royal-cream textarea{color:#423728;background:#fffdf8;border-color:#b9965270}

body.template-garden{--bg:#173a2a;background:#173a2a}
body.template-garden .ambient{background:radial-gradient(circle at 15% 15%,#92b27c42,transparent 32%),radial-gradient(circle at 85% 70%,#e4d6a53b,transparent 28%)}
body.template-garden .hero:before{border-radius:48% 52% 43% 57% / 14% 16% 10% 12%;border-color:#d8c89288}
body.template-garden .hero-bloom{background:radial-gradient(circle,#d8c89236,transparent 68%)}
body.template-garden .section h2{font-family:"Cormorant Garamond",serif;font-style:italic}
body.template-garden .family-card,body.template-garden .glass-card,body.template-garden .count-grid div{border-radius:5px;background:linear-gradient(145deg,#ffffff13,#163725b8);border-color:#d8c89254}
body.template-garden .gallery-item{border-radius:4px}
body.template-garden .btn.primary{background:#d8c892;color:#173a2a;box-shadow:0 12px 30px #0003}

body.template-minimal{--bg:#f5f4f0;background:#f5f4f0;color:#292929}
body.template-minimal .ambient,body.template-minimal .light-beams,body.template-minimal #petalCanvas,body.template-minimal #sparkleCanvas{display:none}
body.template-minimal .hero{min-height:88svh;background-color:#e9e7e0;background-blend-mode:multiply}
body.template-minimal .hero:before{inset:30px;border-color:#2c2c2c66}
body.template-minimal .hero:after{opacity:.08;filter:grayscale(1)}
body.template-minimal .hero-inner{padding:36px;background:#f7f6f1d9;text-shadow:none}
body.template-minimal .hero h1,body.template-minimal .date-line,body.template-minimal .section p,body.template-minimal footer,body.template-minimal .family-card small{color:#474640}
body.template-minimal .eyebrow,body.template-minimal .section-label{color:#6d6c65}
body.template-minimal .names,body.template-minimal .section h2,body.template-minimal .couple-name,body.template-minimal footer .names{font-family:"Cormorant Garamond",serif;font-style:normal;color:#252525;text-shadow:none}
body.template-minimal .names{font-size:clamp(48px,9vw,108px);letter-spacing:0}
body.template-minimal .glass-card,body.template-minimal .family-card,body.template-minimal .count-grid div{background:#fff;border-color:#29292925;box-shadow:none;backdrop-filter:none;border-radius:0}
body.template-minimal .gallery-item{border-radius:0;box-shadow:none;filter:grayscale(.22)}
body.template-minimal .btn.primary{background:#292929;box-shadow:none}
body.template-minimal .btn.outline{color:#292929;border-color:#29292988;background:transparent}
body.template-minimal .opening{background:#242424}
body.template-minimal .opening-card{border-color:#ffffff55;background:#292929;color:#fff}
body.template-minimal input,body.template-minimal select,body.template-minimal textarea{color:#292929;background:#fff;border-color:#29292933}

@media(max-width:640px){body.template-royal-cream .hero-inner{padding:40px 22px}body.template-minimal .hero:before{inset:12px}}

/* The following rules reshape the shared content into four distinct invitation layouts. */
body.template-royal-cream .hero{display:block;min-height:760px;padding:clamp(42px,8vw,100px) max(6vw,36px) 80px}
body.template-royal-cream .hero-inner{width:min(630px,100%);margin-left:auto;text-align:left}
body.template-royal-cream .hero .names{max-width:520px;margin:34px 0 20px;text-align:left}
body.template-royal-cream .hero .date-line{margin:20px 0 28px}
body.template-royal-cream .families-section{display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,1.1fr);column-gap:clamp(36px,7vw,110px);max-width:1160px;text-align:left;align-items:center}
body.template-royal-cream .families-section>.divider,body.template-royal-cream .families-section>.section-label,body.template-royal-cream .families-section>h2{grid-column:1}
body.template-royal-cream .families-section>.divider{justify-content:flex-start;margin:0 0 17px}
body.template-royal-cream .families-section .family-grid{grid-column:2;grid-row:1 / span 3;margin:0;grid-template-columns:1fr;gap:18px}
body.template-royal-cream .families-section .ampersand{display:none}
body.template-royal-cream .family-card{min-height:205px;text-align:center}
body.template-royal-cream .details{max-width:1240px}
body.template-royal-cream .ceremony-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:0;max-width:1000px}
body.template-royal-cream .ceremony-card{border-radius:0!important;border-right:0!important}
body.template-royal-cream .ceremony-card:last-child{border-right:1px solid #b9965244!important}
body.template-royal-cream .gallery{grid-template-columns:repeat(5,minmax(0,1fr));grid-auto-rows:180px}

body.template-garden .hero{place-items:end start;min-height:92svh;padding:clamp(40px,8vw,110px)}
body.template-garden .hero-inner{max-width:570px;padding:35px;text-align:left;border-left:3px solid var(--accent);background:#173a2ac9}
body.template-garden .hero .names{margin:18px 0;text-align:left;font-size:clamp(57px,9vw,110px)}
body.template-garden .hero .date-line{margin:24px 0 0}
body.template-garden .families-section{max-width:1050px}
body.template-garden .family-grid{grid-template-columns:1fr 1fr;gap:34px;position:relative}
body.template-garden .family-grid .ampersand{position:absolute;left:50%;top:50%;z-index:1;transform:translate(-50%,-50%);width:66px;height:66px;display:grid;place-items:center;border:1px solid #d8c89288;border-radius:50%;background:#173a2a}
body.template-garden .groom-side{transform:translateY(-35px)}
body.template-garden .bride-side{transform:translateY(35px)}
body.template-garden .formal-invitation-card{max-width:920px;display:grid;grid-template-columns:160px 1fr;column-gap:28px;text-align:left;align-items:center}
body.template-garden .formal-ornament{grid-row:1 / span 4;align-self:center;font-size:92px}
body.template-garden .formal-couple-names{margin:8px 0}
body.template-garden .ceremony-grid{max-width:1050px;grid-template-columns:1.15fr .85fr}
body.template-garden .gallery{grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-rows:200px;max-width:980px;margin-inline:auto}
body.template-garden .gallery-item:nth-child(5n+1){grid-column:span 1;grid-row:span 2}
body.template-garden .gallery-item:nth-child(4n+2){grid-column:span 2}

body.template-minimal .hero{display:flex;align-items:flex-end;justify-content:center;padding:70px max(5vw,25px)}
body.template-minimal .hero-inner{width:min(1100px,100%);display:grid;grid-template-columns:1fr minmax(290px,500px);gap:30px;align-items:end;text-align:left;background:transparent;padding:0}
body.template-minimal .hero .eyebrow,body.template-minimal .hero h1{grid-column:1;margin:0}
body.template-minimal .hero .names{grid-column:1;grid-row:2 / span 2;align-self:center;margin:0;line-height:.88}
body.template-minimal .hero .date-line{grid-column:2;grid-row:2;margin:0;padding:16px 0;border-top:1px solid #29292966;border-bottom:1px solid #29292966;text-align:right}
body.template-minimal .hero .btn{grid-column:2;grid-row:3;justify-self:end;margin-top:0}
body.template-minimal .families-section{max-width:1280px;padding-inline:clamp(22px,6vw,90px)}
body.template-minimal .families-section>h2{font:500 clamp(31px,4vw,54px)/1.1 "Cormorant Garamond",serif}
body.template-minimal .family-grid{grid-template-columns:1fr 1fr;gap:0;margin-top:45px;border-top:1px solid #29292932;border-bottom:1px solid #29292932}
body.template-minimal .family-grid .ampersand{display:none}
body.template-minimal .family-card{min-height:290px;border:0!important;border-radius:0!important;text-align:left;place-items:start;align-content:center;padding:42px 8%;background:transparent!important}
body.template-minimal .bride-side{border-left:1px solid #29292932!important;text-align:right;place-items:end}
body.template-minimal .intro{max-width:760px;text-align:left}
body.template-minimal .intro .divider{justify-content:flex-start;margin-left:0}
body.template-minimal .intro .lead{margin-left:0;font-size:clamp(19px,2.2vw,28px);line-height:1.65}
body.template-minimal .wedding-calendar-section{max-width:940px;border-top:1px solid #29292932}
body.template-minimal .wedding-calendar-shell{max-width:540px}
body.template-minimal .formal-invitation-section{max-width:none;padding-inline:0;background:#e8e6df}
body.template-minimal .formal-invitation-card{max-width:840px;border:0!important;background:transparent!important;box-shadow:none!important}
body.template-minimal .ceremony-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;background:#29292930}
body.template-minimal .ceremony-card{background:#f5f4f0!important;text-align:left;padding:46px 10%;border:0!important}
body.template-minimal .gallery{grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;max-width:none;margin-top:45px}
body.template-minimal .gallery-item:nth-child(5n+1){grid-column:span 2;grid-row:span 1}
body.template-minimal .rsvp{max-width:760px}

@media(max-width:760px){
 body.template-royal-cream .hero{display:grid;padding:28px 18px}body.template-royal-cream .hero-inner{margin:auto;text-align:center}body.template-royal-cream .hero .names{text-align:center}body.template-royal-cream .families-section{display:block;text-align:center}body.template-royal-cream .families-section>.divider{justify-content:center}body.template-royal-cream .families-section .family-grid{margin-top:32px}body.template-royal-cream .gallery{grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:145px}
 body.template-garden .hero{place-items:center;padding:28px 18px}body.template-garden .hero-inner{text-align:center}body.template-garden .hero .names{text-align:center}body.template-garden .groom-side,body.template-garden .bride-side{transform:none}body.template-garden .formal-invitation-card{display:block;text-align:center}body.template-garden .formal-ornament{display:block;font-size:52px}body.template-garden .gallery{grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:145px}body.template-garden .gallery-item:nth-child(4n+2){grid-column:span 1}
 body.template-minimal .hero{display:grid;place-items:center;padding:40px 22px}body.template-minimal .hero-inner{display:block;text-align:center}body.template-minimal .hero .eyebrow,body.template-minimal .hero h1{margin-bottom:14px}body.template-minimal .hero .names{margin:28px 0}body.template-minimal .hero .date-line{text-align:center}body.template-minimal .hero .btn{margin-top:22px}body.template-minimal .family-grid{grid-template-columns:1fr}.template-minimal .bride-side{border-left:0!important;border-top:1px solid #29292932!important;text-align:left;place-items:start}.template-minimal .family-card{min-height:0;padding:35px 8%}.template-minimal .intro{text-align:center}.template-minimal .intro .divider{justify-content:center;margin-inline:auto}.template-minimal .intro .lead{margin-inline:auto}.template-minimal .ceremony-grid{grid-template-columns:1fr}.template-minimal .gallery{grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:142px}
}

/* Nang Thong desktop cover: size the polaroids from the 720px invitation
   canvas, so the right photo cannot enter the centered names lane. */
@media(min-width:761px){
    body.template-terracotta .cover-nang-thong .polaroid-card{
        width:min(27%,190px);
        padding:8px 8px 22px;
    }
    body.template-terracotta .cover-nang-thong .polaroid-card img{
        height:auto;
        aspect-ratio:3 / 4;
    }
    body.template-terracotta .cover-nang-thong .polaroid-left{
        left:5%;
        top:20%;
    }
    body.template-terracotta .cover-nang-thong .polaroid-right{
        right:5%;
        bottom:5%;
    }
    body.template-terracotta .cover-nang-thong h1{
        width:68%;
        max-width:68%;
        font-size:clamp(36px,5.2vw,54px);
        line-height:.9;
        text-align:center;
    }
}

/* Keep the wedding date readable as its own line below the couple names. */
body.template-terracotta .cover-nang-thong .cover-date{
    position:relative;
    z-index:3;
    display:inline-block;
    margin:8px 0 0;
    padding:6px 12px;
    border:1px solid #8a493566;
    background:#f8dbb5a8;
    color:#793924!important;
    -webkit-text-fill-color:#793924!important;
    font:800 clamp(10px,1.45vw,12px)/1 Montserrat,sans-serif;
    letter-spacing:.18em;
    text-shadow:none!important;
}

/* Separate opening canvases for the four selected invitation designs. */
.template-cover{position:relative;width:min(100%,720px);min-height:100svh;margin:auto;padding:clamp(46px,8vw,86px) clamp(28px,7vw,76px);overflow:hidden;background:#fbf8ef;color:#80653a;text-align:center;font-family:"Cormorant Garamond",serif}.template-cover h1{margin:8px 0 38px;font:500 clamp(28px,4vw,42px)/1.15 "Cormorant Garamond",serif;letter-spacing:.05em}.template-cover .cover-kicker{margin:0;color:#b69058;font:700 10px/1.4 Montserrat,sans-serif;letter-spacing:.27em}.template-cover .cover-date{position:absolute;bottom:34px;left:25px;right:25px;margin:0;color:#9b8153;font:700 10px Montserrat,sans-serif;letter-spacing:.18em}.template-cover .cover-date span{margin-inline:9px;color:#c6a05b}.portrait-piece{position:absolute;display:grid;grid-template-columns:160px 1fr;gap:18px;align-items:center;width:calc(50% + 90px);text-align:left}.portrait-piece img{width:160px;height:210px;object-fit:cover;border:7px solid #fffdf5;box-shadow:0 13px 28px #8c6d3a35;border-radius:50%}.portrait-piece div{display:grid;gap:7px}.portrait-piece small,.twin-portraits small,.round-portraits b,.arch-portrait small{font:700 9px Montserrat,sans-serif;letter-spacing:.19em;color:#b08e58}.portrait-piece b,.twin-portraits b,.arch-portrait b{font:500 clamp(25px,4vw,40px)/1.05 "Cormorant Garamond",serif;color:#8d6c38}.cover-to-duyen{min-height:940px}.cover-to-duyen .groom-piece{top:28%;left:6%}.cover-to-duyen .bride-piece{right:4%;bottom:20%;grid-template-columns:1fr 160px;text-align:right}.cover-to-duyen .bride-piece img{grid-column:2}.portrait-path{position:absolute;top:49%;left:26%;right:26%;height:65px;border-top:1px dashed #c3a165;transform:rotate(8deg);font-size:20px;color:#bc995a}.portrait-path::after{content:"";position:absolute;right:0;top:-1px;width:13px;height:13px;border-radius:50%;background:#d0a84f}.cover-co-lau{min-height:880px;background:linear-gradient(#f8f0dd 0 16%,#fffdf6 16%)}.cover-co-lau h1{margin-bottom:48px}.twin-portraits{display:grid;grid-template-columns:1fr 1fr;gap:30px}.twin-portraits article{display:grid;gap:13px;text-align:left}.twin-portraits article:last-child{text-align:right}.twin-portraits img{width:100%;height:330px;object-fit:cover;border:1px solid #d9c49a;box-shadow:0 14px 30px #6c52261f}.twin-portraits small{color:#b5755c}.twin-portraits b{font-size:31px}.cover-lien-chi{min-height:980px;background:#faf8ed;color:#5c887f}.cover-lien-chi .cover-kicker{color:#5c887f;border-bottom:1px solid #83a79d;padding-bottom:13px}.cover-lien-chi>em{display:block;margin:8px 0 50px;color:#a8aaa1;font:italic 20px "Cormorant Garamond",serif}.round-portraits{display:grid;grid-template-columns:1fr 1fr;gap:38px}.round-portraits article{display:grid;justify-items:center;gap:12px}.round-portraits article:nth-child(2){margin-top:46px}.round-portraits img{width:175px;height:175px;border:8px double #c8d5c8;border-radius:50%;object-fit:cover;box-shadow:0 12px 26px #6e856630}.round-portraits small{font:700 10px Montserrat,sans-serif;letter-spacing:.2em;color:#5c887f}.round-portraits b{color:#bb8578}.floral-line{display:block;margin:36px auto;color:#6e988d;font-size:34px;letter-spacing:.6em}.cover-lien-chi .cover-date{color:#5c887f}.cover-seoul{min-height:980px;text-align:left;background:#fbfaf4}.cover-seoul .cover-kicker{padding-bottom:15px;border-bottom:1px solid #dfcfad}.arch-portrait{position:absolute;display:grid;grid-template-columns:155px 1fr;gap:22px;align-items:center;width:70%}.arch-portrait img{width:155px;height:235px;object-fit:cover;border:6px solid #fff;box-shadow:0 14px 28px #7a663a28;border-radius:90px 90px 2px 2px}.arch-portrait div{display:grid;gap:8px}.groom-arch{top:25%;left:6%}.bride-arch{right:5%;bottom:19%;grid-template-columns:1fr 155px;text-align:right}.bride-arch img{grid-column:2}.cover-seoul .cover-date{text-align:center}.template-cover~main .families-section{padding-top:86px}
@media(max-width:600px){.template-cover{width:100%;min-height:100svh;padding:54px 25px}.template-cover h1{font-size:26px}.cover-to-duyen{min-height:860px}.portrait-piece{width:78%;grid-template-columns:118px 1fr;gap:12px}.portrait-piece img{width:118px;height:162px;border-width:5px}.cover-to-duyen .groom-piece{top:23%;left:7%}.cover-to-duyen .bride-piece{right:6%;bottom:17%;grid-template-columns:1fr 118px}.portrait-piece b{font-size:27px}.twin-portraits{gap:16px}.twin-portraits img{height:260px}.twin-portraits b{font-size:25px}.round-portraits{gap:16px}.round-portraits img{width:130px;height:130px}.round-portraits article:nth-child(2){margin-top:35px}.arch-portrait{width:88%;grid-template-columns:118px 1fr;gap:13px}.arch-portrait img{width:118px;height:190px}.bride-arch{grid-template-columns:1fr 118px}.arch-portrait b{font-size:26px}.cover-seoul{min-height:860px}}

/* Premium art direction: each design owns a distinct type system, frame language and motion. */
body.template-bordeaux{--paper:#251018;--ink:#fff7ed;--metal:#edc986;background:var(--paper)}
body.template-bordeaux .opening{background:radial-gradient(circle at 50% 30%,#8d294b,#210b15 62%)}
body.template-bordeaux .opening-card{border-radius:48% 48% 8px 8px;background:#2a101bd9;border-color:#edc98688}
body.template-bordeaux .opening-card::before{border-radius:46% 46% 6px 6px}
body.template-bordeaux .template-cover{background:linear-gradient(150deg,#fffdf7,#f7ecdc 60%,#ead9c0);isolation:isolate}
body.template-bordeaux .template-cover::before{content:"";position:absolute;inset:18px;border:1px solid #c49b5b66;pointer-events:none}
body.template-bordeaux .template-cover::after{content:"TO DUYEN";position:absolute;right:-35px;bottom:90px;color:#b1854b16;font:700 100px/1 "Cormorant Garamond",serif;letter-spacing:.18em;transform:rotate(-90deg);pointer-events:none}
body.template-bordeaux .cover-kicker{color:#8b2744}.template-bordeaux .portrait-piece img{outline:1px solid #c9a560;outline-offset:7px;filter:sepia(.08) contrast(1.04)}
body.template-bordeaux .portrait-path{border-color:#a97b36;animation:duyen-path 5s ease-in-out infinite}
body.template-bordeaux .families-section{background:linear-gradient(90deg,#2a101b,#48162a,#2a101b);max-width:none;padding-inline:max(22px,8vw)}
body.template-bordeaux .families-section .family-card{background:#ffffff0b;border-color:#edc9864d}
body.template-bordeaux .families-section .section-label,body.template-bordeaux .families-section h2{color:#f7dca4}
body.template-bordeaux .formal-invitation-card{border:1px solid #edc98670;background:linear-gradient(145deg,#401525,#210b14);box-shadow:0 25px 70px #09030680}
body.template-bordeaux .ceremony-card{border-radius:2px;background:linear-gradient(145deg,#4a1729,#210c16)}
body.template-bordeaux .gallery-item{border-radius:3px;border:1px solid #edc98635}

body.template-royal-cream{--paper:#fffaf0;--ink:#5e4930;--metal:#b18445;background:var(--paper)}
body.template-royal-cream .opening{background:radial-gradient(circle,#f9ebc8,#a77b3c 170%)}
body.template-royal-cream .opening-card{border-radius:2px;background:#fffdf6e8;box-shadow:0 30px 100px #6f4e1f4a;color:#564126}
body.template-royal-cream .opening-card::before{border-radius:0;border-color:#b1844566}
body.template-royal-cream .template-cover{background:linear-gradient(180deg,#fbf0d8 0 12%,#fffdf6 12% 88%,#f5e9d3);box-shadow:0 0 80px #8b682c1c}
body.template-royal-cream .template-cover::after{content:"";position:absolute;inset:28px 20px;border-top:1px solid #c5a56c66;border-bottom:1px solid #c5a56c66;pointer-events:none}
body.template-royal-cream .twin-portraits article{position:relative;padding:10px;background:#fff;box-shadow:0 18px 35px #85642a20}
body.template-royal-cream .twin-portraits article::before{content:"";position:absolute;inset:5px;border:1px solid #c5a56c66;pointer-events:none}
body.template-royal-cream .twin-portraits img{position:relative;z-index:1;filter:saturate(.85) contrast(1.05)}
body.template-royal-cream .twin-portraits small,body.template-royal-cream .twin-portraits b{position:relative;z-index:1}
body.template-royal-cream .count-grid div{border-radius:0;border-top:3px double #b18445}
body.template-royal-cream .wedding-calendar-shell{border:1px solid #b1844566!important;border-radius:0!important;box-shadow:10px 10px 0 #b1844514!important}
body.template-royal-cream .formal-invitation-card{border:1px solid #b1844566!important;border-radius:0!important;background:#fffdf6!important;box-shadow:14px 14px 0 #b1844514!important}
body.template-royal-cream .gallery-item{border-radius:0;filter:sepia(.08);border:6px solid #fff;outline:1px solid #c2a36966;outline-offset:-7px}

body.template-garden{--paper:#f6f5ea;--ink:#315e54;--leaf:#5a8874;background:#f6f5ea}
body.template-garden .opening{background:radial-gradient(circle at 50% 40%,#f6f2d9,#3f6d59 170%)}
body.template-garden .opening-card{border-radius:48% 48% 14px 14px;background:#f8f6eddf;color:#315e54;box-shadow:0 25px 75px #23493750}
body.template-garden .opening-card::before{border-radius:46% 46% 9px 9px;border-color:#4f7d6d77}
body.template-garden .template-cover{background:#fbfaf1;color:#356a60}
body.template-garden .template-cover::before,.template-garden .template-cover::after{content:"❀";position:absolute;color:#86a99155;font-size:130px;line-height:1;pointer-events:none}
body.template-garden .template-cover::before{top:4%;left:-35px;transform:rotate(-22deg)}body.template-garden .template-cover::after{right:-35px;bottom:4%;transform:rotate(24deg)}
body.template-garden .round-portraits img{outline:1px solid #587e70;outline-offset:9px;filter:saturate(.9) brightness(1.03)}
body.template-garden .round-portraits b{margin-top:4px;color:#3f7568;font:600 clamp(25px,3.2vw,38px)/1.05 "Cormorant Garamond",serif;letter-spacing:.02em;text-shadow:0 1px 0 #fff}
body.template-garden .round-portraits small{color:#b87e70;font:700 8px Montserrat,sans-serif;letter-spacing:.2em}
body.template-garden .floral-line{animation:floral-breathe 4s ease-in-out infinite}
/* Lien Chi cover: larger portraits + wedding motif cluster fills the empty middle. */
body.template-garden .cover-lien-chi .round-portraits{gap:clamp(30px,5vw,58px);align-items:center}
body.template-garden .cover-lien-chi .round-portraits img{width:clamp(175px,20vw,230px);height:clamp(175px,20vw,230px)}
body.template-garden .cover-lien-chi .round-portraits article:nth-child(2){margin-top:clamp(30px,5vw,60px)}
body.template-garden .cover-lien-chi .floral-line{position:relative;margin:clamp(40px,6vw,72px) auto clamp(30px,4vw,48px);min-height:104px;font-size:0;letter-spacing:0}
body.template-garden .cover-lien-chi .floral-line::before{content:"🍾  🥂";display:block;font-size:clamp(40px,6vw,60px);line-height:1;letter-spacing:.12em;filter:drop-shadow(0 6px 12px #5c887f33);animation:garden-cheers 3.6s ease-in-out infinite;transform-origin:bottom center}
body.template-garden .cover-lien-chi .floral-line::after{content:"🌿  ❦  🌿";display:block;margin-top:14px;font-size:clamp(20px,2.6vw,28px);line-height:1;letter-spacing:.34em;color:#7ba38f;animation:floral-breathe 4s ease-in-out infinite}
@keyframes garden-cheers{0%,100%{transform:rotate(-2deg) translateY(0)}50%{transform:rotate(2deg) translateY(-6px)}}
@media(max-width:600px){body.template-garden .cover-lien-chi .floral-line{min-height:88px;margin-top:34px}body.template-garden .cover-lien-chi .floral-line::before{font-size:44px}body.template-garden .cover-lien-chi .floral-line::after{font-size:20px;margin-top:10px}}
@media(prefers-reduced-motion:reduce){body.template-garden .cover-lien-chi .floral-line::before,body.template-garden .cover-lien-chi .floral-line::after{animation:none}}
/* Liên Chi album: desktop uses a clean editorial grid; photos never overlap. */
@media(min-width:761px){body.template-garden .gallery-showcase .gallery{grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-rows:220px;grid-auto-flow:dense;gap:18px;max-width:1120px}body.template-garden .gallery-showcase .gallery-item,body.template-garden .gallery-showcase .gallery-item:nth-child(n){grid-column:auto;grid-row:auto;aspect-ratio:auto;transform:none!important;border-radius:18px;border:6px solid #f7f6eb;outline:1px solid #6f957e55;outline-offset:-7px}body.template-garden .gallery-showcase .gallery-item:first-child{grid-column:span 2;grid-row:span 2}body.template-garden .gallery-showcase .gallery-item img{transform:none!important}body.template-garden .gallery-showcase .gallery-item:hover img{transform:scale(1.045)!important}}
/* Ten distinct wedding welcome scenes before the invitation opens. */
.opening-wedding-motif{position:relative;z-index:1;display:grid;place-items:center;min-height:82px;margin:-4px 0 10px;font-size:48px;line-height:1;letter-spacing:.12em;filter:drop-shadow(0 8px 14px #0003)}
.opening-wedding-motif::before,.opening-wedding-motif::after{display:block}.opening-wedding-motif::after{margin-top:-7px;font:700 9px/1.3 Montserrat,sans-serif;letter-spacing:.28em}
body.template-bordeaux .opening{background:radial-gradient(circle at 50% 34%,#9a264f 0,#4a1025 42%,#17050c 100%)}body.template-bordeaux .opening-card{border-radius:48% 48% 12px 12px;background:linear-gradient(160deg,#4c1127e8,#210711ed);border-color:#edc9868a}body.template-bordeaux .opening-wedding-motif::before{content:"🍷  🥂";animation:welcome-cheers 3.2s ease-in-out infinite}body.template-bordeaux .opening-wedding-motif::after{content:"RƯỢU HỒNG  •  TRĂM NĂM";color:#edc986}
body.template-royal-cream .opening{background:radial-gradient(circle at 50% 32%,#fff6dc,#c7974e 56%,#70451d 130%)}body.template-royal-cream .opening-card{border-radius:3px;background:#fffdf4ed;border:2px double #b58a49;color:#503c26;box-shadow:0 25px 90px #5f3d1f55}body.template-royal-cream .opening-wedding-motif::before{content:"💍  ✦  💍";animation:welcome-spark 2.8s ease-in-out infinite}body.template-royal-cream .opening-wedding-motif::after{content:"LỜI HẸN ƯỚC";color:#9b7130}
body.template-garden .opening{background:radial-gradient(circle at 50% 28%,#eef4e1,#87aa86 43%,#315e54 100%)}body.template-garden .opening-card{border-radius:52% 52% 16px 16px;background:#f8f8eddc;color:#315e54;border-color:#668c7a88}body.template-garden .opening-wedding-motif::before{content:"🌿  🥥  🌿";animation:welcome-leaves 4s ease-in-out infinite}body.template-garden .opening-wedding-motif::after{content:"TRẦU CAU  •  DUYÊN LÀNH";color:#668c7a}
body.template-minimal .opening{background:linear-gradient(135deg,#1d1d1b,#52514d 48%,#161615)}body.template-minimal .opening-card{border-radius:0;background:#f7f6f0ef;color:#242321;border:1px solid #242321;box-shadow:14px 14px 0 #0004}body.template-minimal .opening-wedding-motif::before{content:"◇  R  &  B  ◇";font:500 30px/1 "Cormorant Garamond",serif;letter-spacing:.22em;animation:welcome-slide 4s ease-in-out infinite}body.template-minimal .opening-wedding-motif::after{content:"SEOUL  •  MODERN WEDDING";color:#4a4944}
body.template-rose-noir .opening{background:radial-gradient(circle at 50% 28%,#b23557,#500e28 48%,#17030c 100%)}body.template-rose-noir .opening-card{border-radius:0;transform:rotate(-1.5deg);background:#330a1fe8;border-color:#e9bd70}body.template-rose-noir .opening-card>*{transform:rotate(1.5deg)}body.template-rose-noir .opening-wedding-motif::before{content:"🥂  ✦  🍷";animation:welcome-cheers 2.6s ease-in-out infinite}body.template-rose-noir .opening-wedding-motif::after{content:"VELVET TOAST";color:#efc26f}
body.template-ocean-pearl .opening{background:radial-gradient(circle at 50% 26%,#e9ffff,#87c9c2 45%,#12616a 105%)}body.template-ocean-pearl .opening-card{border-radius:42% 42% 24px 24px;background:#f5ffffdf;color:#15515b;border-color:#71b8b1}body.template-ocean-pearl .opening-wedding-motif::before{content:"🐚  ♡  🐚";animation:welcome-wave 4s ease-in-out infinite}body.template-ocean-pearl .opening-wedding-motif::after{content:"LỜI HỨA BÊN BIỂN";color:#227a81}
body.template-terracotta .opening{background:linear-gradient(135deg,#e8b983,#b65838 47%,#6d2e22)}body.template-terracotta .opening-card{border-radius:0;background:#fff2e4e8;color:#713823;border:2px solid #7e3d29;box-shadow:12px 12px 0 #713d2845}body.template-terracotta .opening-wedding-motif::before{content:"🍊  ❦  🍊";animation:welcome-warm 3.8s ease-in-out infinite}body.template-terracotta .opening-wedding-motif::after{content:"SẮC SON  •  HỶ SỰ";color:#984b32}
body.template-wisteria .opening{background:radial-gradient(circle at 50% 24%,#f7e8f4,#a881b0 44%,#4e3a68 110%)}body.template-wisteria .opening-card{border-radius:50% 50% 20px 20px;background:#fffaffea;color:#59446e;border-color:#a67bab}body.template-wisteria .opening-wedding-motif::before{content:"❀  💌  ❀";animation:welcome-petals 4.2s ease-in-out infinite}body.template-wisteria .opening-wedding-motif::after{content:"THƯ TÌNH MÙA HOA";color:#875c93}
body.template-emerald .opening{background:radial-gradient(circle at 50% 26%,#36a48b,#075044 52%,#022e2b)}body.template-emerald .opening-card{border-radius:0;background:#f4f0dfe9;color:#075044;border:2px double #cba45a}body.template-emerald .opening-wedding-motif::before{content:"💍  ✦  🥂";animation:welcome-spark 2.5s ease-in-out infinite}body.template-emerald .opening-wedding-motif::after{content:"NGỌC LỤC BẢO  •  VÀNG";color:#08705e}
body.template-midnight-silver .opening{background:radial-gradient(circle at 50% 26%,#5870ad,#19264d 51%,#080d20)}body.template-midnight-silver .opening-card{border-radius:28px;background:#121c3ce8;color:#e9efff;border-color:#c6d3ee7d;box-shadow:0 28px 90px #02040db0}body.template-midnight-silver .opening-wedding-motif::before{content:"☾  ✧  ♡";color:#e1e9ff;animation:welcome-moon 5s ease-in-out infinite}body.template-midnight-silver .opening-wedding-motif::after{content:"DƯỚI ÁNH TRĂNG";color:#c8d5f0}
@keyframes welcome-cheers{0%,100%{transform:rotate(-3deg) translateY(0)}50%{transform:rotate(3deg) translateY(-7px)}}@keyframes welcome-spark{50%{transform:scale(1.12) rotate(8deg);filter:drop-shadow(0 0 18px #efcf82)}}@keyframes welcome-leaves{50%{transform:translateY(-5px) rotate(3deg)}}@keyframes welcome-slide{50%{letter-spacing:.32em;opacity:.72}}@keyframes welcome-wave{50%{transform:translateY(-7px) rotate(-3deg)}}@keyframes welcome-warm{50%{transform:scale(1.08) rotate(5deg)}}@keyframes welcome-petals{50%{transform:translateY(-7px) rotate(-6deg)}}@keyframes welcome-moon{50%{transform:translateY(-6px) scale(1.08);filter:drop-shadow(0 0 18px #e5edff)}}
@media(max-width:640px){.opening-wedding-motif{min-height:68px;margin-bottom:6px;font-size:40px}.opening-wedding-motif::after{font-size:7px;letter-spacing:.2em}.template-minimal .opening-wedding-motif::before{font-size:25px}}
@media(prefers-reduced-motion:reduce){.opening-wedding-motif::before{animation:none!important}}

/*
 * Public invitations are designed on a single portrait canvas.  On larger
 * screens retain that same reading order and proportions instead of turning
 * individual chapters into unrelated desktop columns.
 */
@media(min-width:761px){
    body[class*="template-"] #mainContent{
        width:min(100%,720px);
        margin-inline:auto;
        overflow:clip;
    }

    body[class*="template-"] .template-scene,
    body.template-minimal .template-scene{
        display:block!important;
        width:100%!important;
        min-height:0!important;
        margin:0!important;
        transform:none!important;
    }

    body[class*="template-"] .template-scene>.journey-section,
    body.template-minimal .template-scene>.journey-section{
        width:100%!important;
        max-width:none!important;
        margin:0!important;
    }

    body.template-bordeaux .details,
    body.template-royal-cream .countdown,
    body.template-royal-cream .guest-guide,
    body.template-minimal .countdown,
    body.template-minimal .details,
    body.template-terracotta .countdown{
        display:block!important;
    }

    body.template-bordeaux .details .ceremony-grid,
    body.template-royal-cream .count-grid,
    body.template-royal-cream .guest-info-grid,
    body.template-minimal .count-grid,
    body.template-minimal .ceremony-grid,
    body.template-terracotta .count-grid{
        margin-top:32px!important;
    }

    body[class*="template-"] .gallery{
        grid-template-columns:repeat(2,minmax(0,1fr))!important;
        grid-auto-rows:145px!important;
    }

    body[class*="template-"] .gallery-item:nth-child(n){
        grid-column:auto!important;
        grid-row:auto!important;
        transform:none!important;
    }

    body[class*="template-"] .gallery-item:nth-child(5n+1){
        grid-column:span 2!important;
        grid-row:span 2!important;
    }
}
body.template-garden .families-section{max-width:none;background:linear-gradient(180deg,#eef1e5,#f7f6eb);padding-inline:max(22px,7vw)}
body.template-garden .family-card{background:#fffdf7!important;border:1px solid #698f7b55!important;box-shadow:0 18px 40px #315b4118!important}
body.template-garden .family-card::before{content:"";position:absolute;inset:9px;border:1px solid #75998535;pointer-events:none}
body.template-garden .formal-invitation-card{background:#f8f8ef!important;border:1px solid #668c7a55!important;box-shadow:none!important}
body.template-garden .ceremony-card{background:#f8f8ef!important;color:#315e54;border:1px solid #668c7a55!important}
body.template-garden .ceremony-card p,.template-garden .ceremony-card small{color:#567369!important}
body.template-garden .gallery-item{border-radius:40% 40% 4px 4px;border:8px solid #f7f6eb;outline:1px solid #6f957e55;outline-offset:-9px}

body.template-minimal{--paper:#f4f2ec;--ink:#242321;--rule:#292826;background:var(--paper)}
body.template-minimal .opening{background:#20201f}.template-minimal .opening-card{border-radius:0;border-width:1px;background:#242423;color:#f5f2ea;box-shadow:none}.template-minimal .opening-card::before{border-radius:0}.template-minimal .opening-card #openInvite{border-radius:0;background:#f5f2ea;color:#232321;box-shadow:none}
body.template-minimal .template-cover{background:#f7f6f1;color:#252422;text-align:left}.template-minimal .template-cover::before{content:"SEOUL / IVORY";position:absolute;top:31%;left:-64px;color:#22211e08;font:700 98px/1 Montserrat,sans-serif;letter-spacing:.16em;transform:rotate(-90deg);pointer-events:none}.template-minimal .template-cover::after{content:"";position:absolute;left:26px;right:26px;bottom:27px;border-bottom:1px solid #24232155}.template-minimal .arch-portrait img{filter:grayscale(.28) contrast(1.08);outline:1px solid #292826;outline-offset:6px}.template-minimal .cover-kicker{color:#292826;font-weight:800}.template-minimal .families-section{max-width:none;background:#e9e7e0;padding-inline:max(22px,8vw)}.template-minimal .family-card{background:transparent!important}.template-minimal .formal-invitation-section{background:#242321;color:#f5f2ea}.template-minimal .formal-invitation-card{color:#f5f2ea!important}.template-minimal .formal-invitation-card h2,.template-minimal .formal-invitation-card p,.template-minimal .formal-invitation-card .names{color:#f5f2ea!important}.template-minimal .ceremony-card{background:#fff!important}.template-minimal .gallery-item{filter:grayscale(1) contrast(1.13);outline:0}.template-minimal .gallery-item:hover img{filter:grayscale(0);transform:scale(1.03)}

body.invite-open .template-cover .cover-kicker,body.invite-open .template-cover h1,body.invite-open .template-cover .cover-date{animation:cover-copy-enter .9s cubic-bezier(.18,.82,.25,1) both}
body.invite-open .template-cover .portrait-piece,body.invite-open .template-cover .twin-portraits article,body.invite-open .template-cover .round-portraits article,body.invite-open .template-cover .arch-portrait{animation:portrait-enter 1.15s cubic-bezier(.18,.82,.25,1) both}
body.invite-open .template-cover .bride-piece,body.invite-open .template-cover .twin-portraits article:nth-child(2),body.invite-open .template-cover .round-portraits article:nth-child(2),body.invite-open .template-cover .bride-arch{animation-delay:.28s}
body.invite-open .template-cover .portrait-path,body.invite-open .template-cover .floral-line{animation:ornament-enter 1.2s .62s both}
@keyframes cover-copy-enter{from{opacity:0;transform:translateY(-17px);letter-spacing:.45em}to{opacity:1;transform:none}}
@keyframes portrait-enter{from{opacity:0;transform:translate3d(0,42px,0) scale(.9);filter:blur(7px)}to{opacity:1;transform:none;filter:none}}
@keyframes ornament-enter{from{opacity:0;transform:scaleX(.2)}to{opacity:1;transform:none}}
@keyframes duyen-path{50%{filter:drop-shadow(0 0 7px #c9a560);transform:rotate(8deg) translateX(8px)}}
@keyframes floral-breathe{50%{transform:scale(1.08) rotate(3deg);filter:drop-shadow(0 0 5px #648d7a)}}
@media(prefers-reduced-motion:reduce){body.invite-open .template-cover *{animation:none!important}}

/* Thư Vàng: original ivory pocket-card art direction, inspired by paper invitations rather than a copied layout. */
body.template-ivory-pocket{--paper:#f5eddd;--ink:#60482a;--metal:#c9a253;background:var(--paper)}
body.template-ivory-pocket .opening{background:radial-gradient(circle at 50% 26%,#fff8df 0,#d3b16f 44%,#61421f 110%)}
body.template-ivory-pocket .opening-card{border:2px double #af853f!important;border-radius:5px!important;background:linear-gradient(145deg,#fffdf6ee,#f4e5bfec)!important;color:#60482a;box-shadow:12px 16px 0 #60401d30,0 30px 80px #3f240d66!important}
body.template-ivory-pocket .opening-card::before{border:1px solid #ba965466!important;border-radius:2px!important;box-shadow:inset 0 0 0 6px #c9a25313!important}
body.template-ivory-pocket .opening-card strong{color:#75531f;text-shadow:0 1px #fff,0 2px 0 #c9a25355}
body.template-ivory-pocket .opening-card p,body.template-ivory-pocket .opening-card small{color:#73582d!important}
body.template-ivory-pocket .opening-card #openInvite{border-color:#f5ddb0!important;background:linear-gradient(135deg,#765321,#b89048)!important;box-shadow:0 12px 25px #61421f3d!important}
body.template-ivory-pocket .opening-wedding-motif::before{content:"✦  🎀  ✦";animation:welcome-spark 2.8s ease-in-out infinite}
body.template-ivory-pocket .opening-wedding-motif::after{content:"THƯ VÀNG  •  LỜI HẸN ƯỚC";color:#936d2b}
body.template-ivory-pocket .pocket-opening{isolation:isolate;display:grid;place-items:center;align-content:center;gap:clamp(22px,4vh,38px);padding:30px 20px;background:radial-gradient(circle at 50% 16%,#fffdf1 0,#ead39c 35%,#9b7130 78%,#4d3218 122%);color:#60482a}body.template-ivory-pocket .pocket-opening::before{content:"";position:absolute;inset:15px;border:1px solid #fff5cf66;box-shadow:inset 0 0 0 6px #653f191c;pointer-events:none}.pocket-opening-kicker,.pocket-opening-guest{position:relative;z-index:1;margin:0;color:#765724;font:700 9px Montserrat,sans-serif;letter-spacing:.34em;text-align:center}.pocket-opening-guest{max-width:88vw;color:#66451f;font:500 24px/1.1 "Great Vibes",cursive;letter-spacing:0}.pocket-sleeve{position:relative;z-index:1;width:min(360px,83vw);height:min(485px,57svh);filter:drop-shadow(0 24px 22px #4c2e1060);perspective:900px}.pocket-sleeve::before{content:"";position:absolute;inset:0;border:2px solid #a4772f;background:linear-gradient(135deg,#dbc18b,#fbefc8 45%,#d2ae68);box-shadow:inset 0 0 0 8px #fff6d3aa}.pocket-insert{position:absolute;z-index:1;left:9%;right:9%;bottom:10%;min-height:84%;display:grid;place-items:center;align-content:center;gap:20px;padding:42px 22px 34px;border:1px solid #a77d39;background:linear-gradient(145deg,#fffef9,#f8e8bf);box-shadow:0 0 0 6px #a77d391c;text-align:center;transition:transform 1.1s cubic-bezier(.22,.85,.23,1),opacity .45s ease}.pocket-insert::before{content:"";position:absolute;inset:9px;border:1px solid #b18b4c70}.pocket-insert p,.pocket-insert b,.pocket-insert span{position:relative;margin:0}.pocket-insert p{color:#a2772e;font:clamp(37px,9vw,52px)/.9 "Great Vibes",cursive}.pocket-insert b{color:#60482a;font:600 clamp(27px,6.8vw,38px)/1.06 "Cormorant Garamond",serif}.pocket-insert b span{display:block;color:#a2772e;font:400 35px/.6 "Great Vibes",cursive}.pocket-insert span{color:#7e5d2b;font:700 9px Montserrat,sans-serif;letter-spacing:.18em}.pocket-flap{position:absolute;z-index:2;left:0;right:0;bottom:0;height:56%;clip-path:polygon(0 0,50% 64%,100% 0,100% 100%,0 100%);background:linear-gradient(150deg,#e8d09b,#bf913d);border-bottom:2px solid #a4772f;transform-origin:bottom;transition:transform .75s cubic-bezier(.2,.8,.2,1)}.pocket-band{position:absolute;z-index:3;top:45%;left:-7%;right:-7%;height:45px;display:grid;place-items:center;background:linear-gradient(180deg,#d7b564,#9e722f 52%,#d9bb70);box-shadow:0 4px 8px #67431545;transition:opacity .28s ease}.pocket-band span{display:grid;place-items:center;width:54px;height:45px;border-radius:50%;background:radial-gradient(circle at 35% 28%,#efd999,#9a6a23);color:#fff5dd;font-size:18px}.pocket-open-button{position:relative;z-index:1;display:inline-flex;align-items:center;gap:11px;padding:0;border:0;background:transparent;color:#63441e;font:700 10px Montserrat,sans-serif;letter-spacing:.18em;cursor:pointer}.pocket-open-button i{display:grid;place-items:center;width:30px;height:30px;border:1px solid #8e672c;border-radius:50%;font:400 17px/1 Georgia,serif;animation:pocket-nudge 1.6s ease-in-out infinite}.pocket-opening.is-open .pocket-insert{transform:translateY(-55vh) rotate(-1.5deg);opacity:0}.pocket-opening.is-open .pocket-flap{transform:translateY(18%) scaleY(.82)}.pocket-opening.is-open .pocket-band{opacity:0}@keyframes pocket-nudge{50%{transform:translateY(5px)}}

/* Prevent long Vietnamese names from ever breaking into a vertical character column on the opening card. */
.pocket-opening #openingTitle{display:block!important;width:100%!important;max-width:100%!important;min-width:0!important;overflow-wrap:normal!important;word-break:normal!important;white-space:normal!important;letter-spacing:.01em!important}.pocket-opening #openingTitle.animated-couple-name{display:block!important}.pocket-opening #openingTitle .animated-name-word{display:inline!important;white-space:nowrap!important}.pocket-opening #openingTitle .animated-name-char{display:inline!important;transform:none!important;animation:none!important}.pocket-opening #openingTitle .animated-name-caret{display:none!important}.pocket-opening .pocket-insert{overflow:hidden}.pocket-opening .pocket-insert b{max-width:100%;text-wrap:balance}.pocket-opening .pocket-insert b span{display:inline!important;margin:0 .12em!important;font-size:.72em!important;line-height:1!important}
@media(max-width:480px){.pocket-opening{gap:20px!important;padding:23px 16px!important}.pocket-sleeve{width:min(340px,88vw)!important;height:min(450px,54svh)!important}.pocket-insert{left:8%!important;right:8%!important;bottom:9%!important;min-height:82%!important;padding:34px 18px 28px!important;gap:15px!important}.pocket-opening .pocket-insert p{font-size:44px!important}.pocket-opening .pocket-insert b{font-size:clamp(28px,9vw,35px)!important;line-height:1.03!important}.pocket-opening-guest{font-size:22px!important}.pocket-band{top:46%!important;left:-4%!important;right:-4%!important}.pocket-open-button{font-size:9px!important}}

/* Full-screen invitation poster: clean hierarchy inspired by premium mobile wedding invites. */
.invitation-poster{isolation:isolate;overflow:hidden;padding:0!important;background:var(--primary)!important}.poster-photo,.poster-vignette{position:absolute;inset:0}.poster-photo{z-index:0;background:var(--poster-image,linear-gradient(145deg,#877263,#291d25));background-position:center;background-size:cover}.poster-photo img{width:100%;height:100%;object-fit:cover;filter:contrast(.92) saturate(.8);opacity:.94}.poster-vignette{z-index:1;background:linear-gradient(180deg,#08100b38 0%,#16100a16 30%,#100c0dd6 100%)}.poster-content{position:relative;z-index:2;display:grid;place-items:center;align-content:center;gap:clamp(13px,2.3vh,24px);width:min(100%,590px);min-height:100svh;margin:auto;padding:clamp(68px,12vh,125px) clamp(26px,8vw,56px) clamp(36px,6vh,70px);color:#fff;text-align:center;text-shadow:0 2px 18px #09060880}.poster-content::before{content:"";position:absolute;inset:16px;border:1px solid #ffffff66;pointer-events:none}.poster-kicker{margin:0;color:#fff;font:700 clamp(9px,2.5vw,12px) Montserrat,sans-serif;letter-spacing:.34em}.poster-kicker::before,.poster-kicker::after{content:"";display:inline-block;width:clamp(35px,8vw,72px);height:1px;margin:0 13px 4px;background:#fff9}.poster-content h1{display:grid;gap:5px;max-width:100%;margin:clamp(35px,7vh,74px) 0 0;color:#fff;font:500 clamp(45px,12vw,79px)/.88 "Cormorant Garamond",serif;letter-spacing:.01em}.poster-content h1 span{max-width:100%;overflow-wrap:anywhere}.poster-content h1 i{font:400 clamp(34px,9vw,54px)/.55 "Great Vibes",cursive}.poster-date{margin:clamp(22px,4vh,45px) 0 0;font:600 clamp(19px,5.2vw,29px)/1 "Cormorant Garamond",serif;letter-spacing:.26em}.poster-time{margin:-8px 0 0;font:700 9px Montserrat,sans-serif;letter-spacing:.3em}.poster-guest{display:grid;gap:11px;max-width:100%;margin-top:auto;padding-top:clamp(45px,10vh,115px)}.poster-guest small{font:700 9px Montserrat,sans-serif;letter-spacing:.3em}.poster-guest strong{font:500 clamp(34px,9vw,58px)/.95 "Great Vibes",cursive}.poster-guest em{max-width:390px;font:400 clamp(14px,3.7vw,19px)/1.55 "Cormorant Garamond",serif}.poster-open-button{margin-top:clamp(12px,2vh,20px);min-width:min(310px,85vw);min-height:60px;border:2px solid #fff;border-radius:999px;background:#ffffff12;color:#fff;font:700 12px Montserrat,sans-serif;letter-spacing:.25em;cursor:pointer;backdrop-filter:blur(4px)}.invitation-poster.is-open{transition:opacity .7s ease,visibility .7s ease}.poster-royal-cream .poster-photo,.poster-ivory-pocket .poster-photo,.poster-hy-kim .poster-photo{background:linear-gradient(145deg,#fffdf8,#e9d8b3)}.poster-royal-cream .poster-vignette,.poster-ivory-pocket .poster-vignette,.poster-hy-kim .poster-vignette{background:linear-gradient(180deg,#fff9 0%,#fff3 45%,#5d42135c)}.poster-royal-cream .poster-content,.poster-ivory-pocket .poster-content,.poster-hy-kim .poster-content{color:#60482a;text-shadow:none}.poster-royal-cream .poster-content::before,.poster-ivory-pocket .poster-content::before,.poster-hy-kim .poster-content::before{border-color:#80602f77}.poster-royal-cream .poster-kicker,.poster-ivory-pocket .poster-kicker,.poster-hy-kim .poster-kicker,.poster-royal-cream .poster-content h1,.poster-ivory-pocket .poster-content h1,.poster-hy-kim .poster-content h1,.poster-royal-cream .poster-guest,.poster-ivory-pocket .poster-guest,.poster-hy-kim .poster-guest{color:#60482a}.poster-royal-cream .poster-kicker:before,.poster-royal-cream .poster-kicker:after,.poster-ivory-pocket .poster-kicker:before,.poster-ivory-pocket .poster-kicker:after,.poster-hy-kim .poster-kicker:before,.poster-hy-kim .poster-kicker:after{background:#80602f}.poster-royal-cream .poster-open-button,.poster-ivory-pocket .poster-open-button,.poster-hy-kim .poster-open-button{border-color:#9d7736;background:#765321;color:#fff}.poster-garden .poster-photo,.poster-ocean-pearl .poster-photo,.poster-emerald .poster-photo{background:linear-gradient(145deg,#315b41,#e9e5cc)}.poster-garden .poster-vignette,.poster-ocean-pearl .poster-vignette,.poster-emerald .poster-vignette{background:linear-gradient(180deg,#f5f3e91c,#123b2b22 35%,#16382dce)}.poster-rose-noir .poster-photo{background:linear-gradient(145deg,#7a1835,#21050f)}.poster-terracotta .poster-photo{background:linear-gradient(145deg,#d89a67,#713625)}.poster-wisteria .poster-photo{background:linear-gradient(145deg,#f4dfe9,#73577b)}.poster-midnight-silver .poster-photo{background:linear-gradient(145deg,#526897,#0b1128)}.poster-minimal .poster-photo{background:linear-gradient(145deg,#f7f5ef,#292827)}.poster-minimal .poster-vignette{background:#fff1}.poster-minimal .poster-content{color:#292827;text-shadow:none}.poster-minimal .poster-content::before{border-color:#29282766}.poster-minimal .poster-kicker,.poster-minimal .poster-content h1,.poster-minimal .poster-guest{color:#292827}.poster-minimal .poster-kicker:before,.poster-minimal .poster-kicker:after{background:#292827}.poster-minimal .poster-open-button{border-color:#292827;background:#292827;color:#fff}@media(max-width:480px){.poster-content{padding:82px 24px 37px}.poster-content::before{inset:11px}.poster-kicker{font-size:9px}.poster-kicker::before,.poster-kicker::after{width:26px;margin-inline:8px}.poster-content h1{font-size:clamp(44px,13vw,63px)}.poster-date{font-size:20px}.poster-guest{padding-top:45px}.poster-guest strong{font-size:39px}.poster-open-button{min-height:56px;font-size:11px}}

/* 12 genuinely different invitation-opening layouts. */
.poster-bordeaux .poster-content{justify-items:center}.poster-bordeaux .poster-photo{filter:saturate(.85)}.poster-bordeaux .poster-content::before{border-color:#fff9}.poster-bordeaux .poster-open-button{background:#ffffff0c}
/* Cỏ Lau: editorial split card and warm linen. */
.poster-royal-cream{background:#f6e9d1!important}.poster-royal-cream .poster-photo{inset:17% 11% 36%;border:10px solid #fff8;box-shadow:0 18px 35px #714d2722;background:#d4b182}.poster-royal-cream .poster-photo img{filter:sepia(.22) contrast(.95)}.poster-royal-cream .poster-content{padding-top:55px}.poster-royal-cream .poster-content h1{margin-top:22px;font-size:clamp(42px,11vw,67px)}.poster-royal-cream .poster-guest{padding-top:clamp(300px,48vh,440px)}.poster-royal-cream .poster-open-button{border-radius:2px;min-width:250px;background:#8e6330}
/* Liên Chi: ivory botanical medallion. */
.poster-garden{background:#f8f6ec!important}.poster-garden .poster-vignette{background:radial-gradient(circle at 50% 42%,transparent 0 24%,#f8f6ecb5 47%,#f8f6ec 76%)}.poster-garden .poster-photo{inset:25% 16% auto;height:auto;aspect-ratio:1;border:7px double #477563;border-radius:50%;background:#d9dfcf;box-shadow:0 0 0 12px #d4b26a22}.poster-garden .poster-content{color:#315e54;text-shadow:none}.poster-garden .poster-content::before{border-color:#527a6877}.poster-garden .poster-kicker,.poster-garden .poster-content h1,.poster-garden .poster-date,.poster-garden .poster-guest{color:#315e54}.poster-garden .poster-kicker:before,.poster-garden .poster-kicker:after{background:#6d9782}.poster-garden .poster-content h1{position:absolute;top:21%;width:90%;font-size:clamp(27px,7vw,42px);letter-spacing:.16em}.poster-garden .poster-date{position:absolute;top:59%;font-size:15px}.poster-garden .poster-guest{padding-top:clamp(380px,59vh,540px)}.poster-garden .poster-open-button{border-color:#3d705d;background:#3d705d}
/* Seoul Ivory: ultra-clean editorial typography. */
.poster-minimal .poster-content{justify-items:start;text-align:left;padding-inline:44px}.poster-minimal .poster-content::before{display:none}.poster-minimal .poster-kicker{order:1}.poster-minimal .poster-content h1{order:2;margin-top:10px;font-size:clamp(51px,13vw,75px);letter-spacing:-.03em}.poster-minimal .poster-date{order:3;margin-top:17px}.poster-minimal .poster-guest{order:4;justify-items:start;padding-top:auto;margin-top:auto}.poster-minimal .poster-open-button{order:5;align-self:stretch;width:100%;border-radius:0}
/* Long Phụng: red-gold ceremonial panel. */
.poster-rose-noir{background:#610d20!important}.poster-rose-noir .poster-content::before{inset:20px;border:2px double #e8bd72}.poster-rose-noir .poster-content::after{content:"囍";position:absolute;top:13%;left:50%;color:#e8bd7255;font:clamp(80px,21vw,150px)/1 serif;transform:translateX(-50%)}.poster-rose-noir .poster-content h1{margin-top:100px;color:#ffe6b1}.poster-rose-noir .poster-open-button{border-color:#e8bd72;color:#ffe3a2;background:#4a0616}
/* Thanh Điệp Xanh: fresh botanical card with soft waves. */
.poster-ocean-pearl{background:#dff1ed!important}.poster-ocean-pearl .poster-photo{inset:19% 13% 38%;border-radius:52% 52% 15px 15px;border:7px solid #fff;box-shadow:0 15px 30px #236d6830}.poster-ocean-pearl .poster-vignette{background:linear-gradient(180deg,#e6f7f355 0 37%,#0d69668f 100%)}.poster-ocean-pearl .poster-content h1{margin-top:22px}.poster-ocean-pearl .poster-guest{padding-top:clamp(310px,49vh,470px)}.poster-ocean-pearl .poster-open-button{border-color:#fff;background:#16736f}
/* Nắng Thông: film journal / Polaroid. */
.poster-terracotta{background:#d9a577!important}.poster-terracotta .poster-photo{inset:17% 12% 40%;border:11px solid #fff4e5;outline:1px solid #7c3b27;outline-offset:-17px;transform:rotate(-4deg);box-shadow:12px 14px 0 #713a2840}.poster-terracotta .poster-vignette{background:linear-gradient(180deg,#fff0 0 38%,#542016b8 100%)}.poster-terracotta .poster-content h1{margin-top:20px}.poster-terracotta .poster-guest{padding-top:clamp(310px,48vh,470px)}.poster-terracotta .poster-open-button{border-radius:4px;background:#7c3929}
/* Seoul Blush: soft studio and floating rounded image. */
.poster-wisteria{background:#f6e6ef!important}.poster-wisteria .poster-photo{inset:19% 16% 40%;border-radius:50% 50% 35px 35px;border:8px solid #fff;box-shadow:0 20px 40px #8d607628}.poster-wisteria .poster-vignette{background:linear-gradient(180deg,#fff0 0 36%,#69466799 100%)}.poster-wisteria .poster-content h1{margin-top:18px}.poster-wisteria .poster-guest{padding-top:clamp(320px,50vh,480px)}.poster-wisteria .poster-open-button{border-color:#fff;background:#8c658b}
/* Hoa Mộc Xanh: moss-green botanical monogram. */
.poster-emerald{background:#0d594a!important}.poster-emerald .poster-content::before{border-color:#d9b76c99;clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%)}.poster-emerald .poster-content h1{margin-top:44px;color:#f6e8bd}.poster-emerald .poster-kicker,.poster-emerald .poster-date,.poster-emerald .poster-guest{color:#e8d290}.poster-emerald .poster-open-button{border-color:#d9b76c;color:#f6e8bd;background:#0c4a3e}
/* Thư Tình: stationery letter opening. */
.poster-midnight-silver{background:#d8d4ca!important}.poster-midnight-silver .poster-photo{display:none}.poster-midnight-silver .poster-vignette{background:repeating-linear-gradient(-12deg,#fff8 0 1px,transparent 1px 5px)}.poster-midnight-silver .poster-content{width:min(86%,465px);min-height:82svh;margin-top:8svh;padding:60px 28px;color:#443934;background:#fffdf3;box-shadow:14px 17px 0 #675d5130;text-shadow:none;transform:rotate(-1.5deg)}.poster-midnight-silver .poster-content::before{border-color:#66584d66}.poster-midnight-silver .poster-kicker,.poster-midnight-silver .poster-content h1,.poster-midnight-silver .poster-date,.poster-midnight-silver .poster-guest{color:#443934}.poster-midnight-silver .poster-kicker:before,.poster-midnight-silver .poster-kicker:after{background:#7d4c4c}.poster-midnight-silver .poster-open-button{border-color:#7b3d44;background:#8e454c}
/* Hanji Mộc: Korean paper / letterpress. */
.poster-ivory-pocket{background:#f6edd9!important}.poster-ivory-pocket .poster-photo{display:none}.poster-ivory-pocket .poster-vignette{background:repeating-linear-gradient(0deg,#7c5b2c0b 0 1px,transparent 1px 5px)}.poster-ivory-pocket .poster-content{width:min(88%,490px);min-height:86svh;margin-top:7svh;padding:70px 30px;color:#60482a;background:#fffdf5;text-shadow:none}.poster-ivory-pocket .poster-content::before{inset:12px;border:2px double #9f7d42}.poster-ivory-pocket .poster-content h1{font-size:clamp(45px,12vw,71px)}.poster-ivory-pocket .poster-open-button{border-radius:3px;background:#705427}
/* Hỷ Kim: hotel art-deco. */
.poster-hy-kim{background:#fff9eb!important}.poster-hy-kim .poster-photo{display:none}.poster-hy-kim .poster-vignette{background:radial-gradient(circle at 50% 40%,#fff,transparent 35%),linear-gradient(145deg,#fff7e4,#d5b46d33)}.poster-hy-kim .poster-content{width:min(88%,500px);min-height:85svh;margin-top:7svh;color:#745a2b;background:#fffdf6;text-shadow:none}.poster-hy-kim .poster-content::before{inset:15px;border:2px double #a27c36}.poster-hy-kim .poster-content::after{content:"◇";position:absolute;top:16%;left:50%;color:#c9a45a33;font:170px/1 serif;transform:translateX(-50%)}.poster-hy-kim .poster-content h1{margin-top:110px}.poster-hy-kim .poster-open-button{border-radius:2px;background:#9a7634}

/* The same pocket journey is available for every design; palette and ornament adapt to its selected theme. */
body:not(.template-ivory-pocket) .pocket-opening{isolation:isolate;display:grid;place-items:center;align-content:center;gap:clamp(22px,4vh,38px);padding:30px 20px;background:radial-gradient(circle at 50% 16%,color-mix(in srgb,var(--accent) 42%,#fff) 0,color-mix(in srgb,var(--primary) 45%,#fff) 35%,var(--primary) 78%,color-mix(in srgb,var(--primary) 55%,#000) 122%);color:var(--primary)}body:not(.template-ivory-pocket) .pocket-opening::before{content:"";position:absolute;inset:15px;border:1px solid color-mix(in srgb,var(--accent) 60%,transparent);box-shadow:inset 0 0 0 6px color-mix(in srgb,var(--primary) 13%,transparent);pointer-events:none}body:not(.template-ivory-pocket) .pocket-opening-kicker{color:color-mix(in srgb,var(--primary) 78%,#000)}body:not(.template-ivory-pocket) .pocket-opening-guest{color:color-mix(in srgb,var(--primary) 85%,#000)}body:not(.template-ivory-pocket) .pocket-sleeve{position:relative;z-index:1;width:min(360px,83vw);height:min(485px,57svh);filter:drop-shadow(0 24px 22px color-mix(in srgb,var(--primary) 55%,transparent));perspective:900px}body:not(.template-ivory-pocket) .pocket-sleeve::before{content:"";position:absolute;inset:0;border:2px solid color-mix(in srgb,var(--primary) 72%,#000);background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 45%,#fff),color-mix(in srgb,var(--accent) 20%,#fff) 45%,color-mix(in srgb,var(--primary) 26%,#fff));box-shadow:inset 0 0 0 8px #fff9}body:not(.template-ivory-pocket) .pocket-insert{position:absolute;z-index:1;left:9%;right:9%;bottom:10%;min-height:84%;display:grid;place-items:center;align-content:center;gap:20px;padding:42px 22px 34px;border:1px solid color-mix(in srgb,var(--primary) 62%,transparent);background:linear-gradient(145deg,#fffefb,color-mix(in srgb,var(--accent) 35%,#fff));box-shadow:0 0 0 6px color-mix(in srgb,var(--primary) 12%,transparent);text-align:center;transition:transform 1.1s cubic-bezier(.22,.85,.23,1),opacity .45s ease}body:not(.template-ivory-pocket) .pocket-insert::before{content:"";position:absolute;inset:9px;border:1px solid color-mix(in srgb,var(--primary) 38%,transparent)}body:not(.template-ivory-pocket) .pocket-insert p,body:not(.template-ivory-pocket) .pocket-insert b,body:not(.template-ivory-pocket) .pocket-insert span{position:relative;margin:0}body:not(.template-ivory-pocket) .pocket-insert p{color:var(--primary);font:clamp(37px,9vw,52px)/.9 "Great Vibes",cursive}body:not(.template-ivory-pocket) .pocket-insert b{color:color-mix(in srgb,var(--primary) 76%,#000);font:600 clamp(27px,6.8vw,38px)/1.06 "Cormorant Garamond",serif}body:not(.template-ivory-pocket) .pocket-insert b span{display:block;color:var(--primary);font:400 35px/.6 "Great Vibes",cursive}body:not(.template-ivory-pocket) .pocket-insert span{color:color-mix(in srgb,var(--primary) 78%,#000);font:700 9px Montserrat,sans-serif;letter-spacing:.18em}body:not(.template-ivory-pocket) .pocket-flap{position:absolute;z-index:2;left:0;right:0;bottom:0;height:56%;clip-path:polygon(0 0,50% 64%,100% 0,100% 100%,0 100%);background:linear-gradient(150deg,color-mix(in srgb,var(--accent) 50%,#fff),color-mix(in srgb,var(--primary) 65%,#fff));border-bottom:2px solid color-mix(in srgb,var(--primary) 72%,#000);transform-origin:bottom;transition:transform .75s cubic-bezier(.2,.8,.2,1)}body:not(.template-ivory-pocket) .pocket-band{position:absolute;z-index:3;top:45%;left:-7%;right:-7%;height:45px;display:grid;place-items:center;background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 62%,#fff),var(--primary) 52%,color-mix(in srgb,var(--accent) 50%,#fff));box-shadow:0 4px 8px color-mix(in srgb,var(--primary) 35%,transparent);transition:opacity .28s ease}body:not(.template-ivory-pocket) .pocket-band span{display:grid;place-items:center;width:54px;height:45px;border-radius:50%;background:radial-gradient(circle at 35% 28%,color-mix(in srgb,var(--accent) 72%,#fff),var(--primary));color:#fff;font-size:18px}body:not(.template-ivory-pocket) .pocket-open-button{position:relative;z-index:1;display:inline-flex;align-items:center;gap:11px;padding:0;border:0;background:transparent;color:color-mix(in srgb,var(--primary) 82%,#000);font:700 10px Montserrat,sans-serif;letter-spacing:.18em;cursor:pointer}body:not(.template-ivory-pocket) .pocket-open-button i{display:grid;place-items:center;width:30px;height:30px;border:1px solid color-mix(in srgb,var(--primary) 65%,transparent);border-radius:50%;font:400 17px/1 Georgia,serif;animation:pocket-nudge 1.6s ease-in-out infinite}body:not(.template-ivory-pocket) .pocket-opening.is-open .pocket-insert{transform:translateY(-55vh) rotate(-1.5deg);opacity:0}body:not(.template-ivory-pocket) .pocket-opening.is-open .pocket-flap{transform:translateY(18%) scaleY(.82)}body:not(.template-ivory-pocket) .pocket-opening.is-open .pocket-band{opacity:0}
body.template-rose-noir .pocket-opening,body.template-emerald .pocket-opening,body.template-midnight-silver .pocket-opening{color:#fff}body.template-rose-noir .pocket-opening-kicker,body.template-rose-noir .pocket-opening-guest,body.template-rose-noir .pocket-open-button,body.template-emerald .pocket-opening-kicker,body.template-emerald .pocket-opening-guest,body.template-emerald .pocket-open-button,body.template-midnight-silver .pocket-opening-kicker,body.template-midnight-silver .pocket-opening-guest,body.template-midnight-silver .pocket-open-button{color:var(--accent)}

/* Different opening scenes, not one shared envelope recolored. */
.pocket-opening-royal-cream .pocket-sleeve{height:min(430px,54svh);transform:rotate(-2deg)}.pocket-opening-royal-cream .pocket-sleeve::before{border-radius:50% 50% 3px 3px}.pocket-opening-royal-cream .pocket-insert{transform:rotate(2deg);border-radius:2px}.pocket-opening-garden .pocket-sleeve::before{border-radius:50% 50% 12px 12px;background:linear-gradient(145deg,#d8e5d1,#fcf8e8 48%,#9fbd99)}.pocket-opening-garden .pocket-insert{border-radius:48% 48% 5px 5px}.pocket-opening-garden .pocket-band{height:32px;background:#5b896e}.pocket-opening-minimal .pocket-sleeve{width:min(330px,78vw);height:min(510px,60svh)}.pocket-opening-minimal .pocket-sleeve::before{border-radius:0;background:#252422;box-shadow:inset 0 0 0 9px #f4f1e8}.pocket-opening-minimal .pocket-insert{border-radius:0;background:#f8f6ef}.pocket-opening-minimal .pocket-flap{background:#242321}.pocket-opening-minimal .pocket-band{background:#f6f3eb}.pocket-opening-minimal .pocket-band span{border-radius:0;background:#242321}.pocket-opening-rose-noir .pocket-sleeve::before{background:linear-gradient(145deg,#801f3b,#3b0718);border-color:#e8bd72}.pocket-opening-rose-noir .pocket-insert{background:linear-gradient(145deg,#fff7e9,#efd08a);transform:rotate(45deg) scale(.86)}.pocket-opening-rose-noir .pocket-insert>*{transform:rotate(-45deg)}.pocket-opening-rose-noir .pocket-flap{background:#65112b}.pocket-opening-ocean-pearl .pocket-sleeve::before{border-radius:52% 52% 20px 20px;background:linear-gradient(145deg,#c9eeeb,#f7fffd 50%,#79bbb5)}.pocket-opening-ocean-pearl .pocket-insert{border-radius:50% 50% 50% 12px}.pocket-opening-terracotta .pocket-sleeve{transform:rotate(-4deg)}.pocket-opening-terracotta .pocket-sleeve::before{background:#e7bb85;border-color:#813b27}.pocket-opening-terracotta .pocket-insert{border:8px solid #fff8ec;outline:1px solid #873d29;outline-offset:-14px}.pocket-opening-wisteria .pocket-sleeve::before{border-radius:45% 45% 14px 14px;background:linear-gradient(145deg,#ebd8ea,#fffafe 50%,#b991b9)}.pocket-opening-wisteria .pocket-insert{border-radius:50% 50% 11px 11px}.pocket-opening-emerald .pocket-sleeve::before{background:linear-gradient(145deg,#0d725e,#03382f);border-color:#d5ad62}.pocket-opening-emerald .pocket-insert{clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);padding-inline:55px}.pocket-opening-midnight-silver .pocket-sleeve::before{border-radius:50%;background:radial-gradient(circle at 35% 25%,#8e9fc5,#15244a 64%,#070d22)}.pocket-opening-midnight-silver .pocket-insert{border-radius:50%;background:#eff3f8}.pocket-opening-midnight-silver .pocket-flap{border-radius:0 0 50% 50%;background:#18274c}.pocket-opening-ivory-pocket .pocket-sleeve::before{background:repeating-linear-gradient(0deg,#77552a0b 0 1px,transparent 1px 5px),#f6ecd8}.pocket-opening-hy-kim .pocket-sleeve::before{border:2px double #8f6b2b;border-radius:2px;background:#fff7e6}.pocket-opening-hy-kim .pocket-insert{border:2px double #9c7734;background:#fffaf0}.pocket-opening-hy-kim .pocket-band{height:24px;background:#c5a15d}.pocket-opening-hy-kim .pocket-band span{transform:rotate(45deg);border-radius:0;background:#8a672b}
body.template-ivory-pocket .cover-ivory-pocket{min-height:100svh;display:grid;place-items:center;align-content:center;gap:clamp(25px,4vh,45px);overflow:hidden;color:#60482a;background:radial-gradient(circle at 50% 15%,#fffef9 0,transparent 34%),repeating-linear-gradient(0deg,#6c4a2110 0 1px,transparent 1px 5px),linear-gradient(145deg,#eadbbd,#fffdf7 44%,#e7d4ad)}
body.template-ivory-pocket .cover-ivory-pocket::before{content:"";position:absolute;inset:17px;border:1px solid #a77d3d70;box-shadow:inset 0 0 0 8px #fff8;pointer-events:none}
body.template-ivory-pocket .cover-ivory-pocket::after{content:"WEDDING\A INVITATION";white-space:pre;position:absolute;right:-34px;bottom:10%;color:#6d4b1b0c;font:700 clamp(70px,12vw,160px)/.8 Cormorant Garamond,serif;letter-spacing:.12em;transform:rotate(-90deg);pointer-events:none}
.cover-ivory-pocket .cover-kicker{margin:0;color:#94703a;font-size:10px;letter-spacing:.42em}.pocket-card{position:relative;z-index:1;display:grid;place-items:center;width:min(440px,88vw);min-height:min(585px,68svh);padding:70px 35px 42px;overflow:hidden;border:2px double #a9823d;background:linear-gradient(145deg,#fffef9,#f7e9c7);box-shadow:13px 16px 0 #825e2828,0 25px 50px #64401734;text-align:center}.pocket-card::before,.pocket-card::after{content:"";position:absolute;pointer-events:none}.pocket-card::before{inset:12px;border:1px solid #b38b486e}.pocket-card::after{width:150%;height:120px;bottom:-82px;left:-25%;border-radius:50% 50% 0 0;background:#cda76018;border-top:1px solid #9a71383d}.pocket-card-rule{position:absolute;top:29px;left:35px;right:35px;height:1px;background:linear-gradient(90deg,transparent,#b68d48,#b68d48,transparent)}.pocket-script{margin:0;color:#9b7130;font:clamp(42px,10vw,63px)/.9 "Great Vibes",cursive;text-shadow:0 1px #fff}.pocket-seal{display:grid;place-items:center;width:45px;height:45px;margin:21px auto;color:#fff9e8;border:1px solid #9a7130;border-radius:50%;background:radial-gradient(circle at 35% 30%,#e8ce86,#96702e);box-shadow:0 0 0 5px #d6ba7840;font-size:17px}.pocket-names{max-width:100%;margin:0;color:#60482a;font:600 clamp(28px,7.2vw,43px)/1.08 "Cormorant Garamond",serif;letter-spacing:.025em}.pocket-names i{display:block;margin:.08em 0;color:#aa8139;font:400 42px/.55 "Great Vibes",cursive}.pocket-date{display:grid;gap:7px;margin-top:25px;color:#805c27;font:700 10px Montserrat,sans-serif;letter-spacing:.22em}.pocket-date b{font:500 25px/1 "Cormorant Garamond",serif;letter-spacing:.13em}.pocket-guest{margin:34px 0 0;color:#9b7741;font:700 8px Montserrat,sans-serif;letter-spacing:.29em}.pocket-ribbon{position:relative;z-index:2;display:flex;align-items:center;justify-content:center;width:min(500px,94vw);height:56px;margin-top:-69px;color:#fff5d6;filter:drop-shadow(0 5px 5px #5e3e1535)}.pocket-ribbon i{display:block;width:calc(50% - 28px);height:22px;background:linear-gradient(180deg,#cda75e,#9c722e 50%,#dcbf7a);box-shadow:inset 0 2px #fff5}.pocket-ribbon i:first-child{border-radius:4px 0 0 4px}.pocket-ribbon i:last-child{border-radius:0 4px 4px 0}.pocket-ribbon span{display:grid;place-items:center;width:58px;height:48px;border-radius:50% 48% 52% 50%;background:radial-gradient(circle at 35% 30%,#e8d08c,#96702e 72%);font-size:18px}body.template-ivory-pocket .cover-ivory-pocket .cover-date{margin:0;color:#845f2b;font:700 9px Montserrat,sans-serif;letter-spacing:.24em}body.template-ivory-pocket .cover-ivory-pocket .cover-date span{color:#b18445;padding:0 6px}body.template-ivory-pocket .families-section{max-width:none;background:linear-gradient(180deg,#f1e4ca,#fbf7ed);padding-inline:max(22px,8vw)}body.template-ivory-pocket .family-card,body.template-ivory-pocket .glass-card,body.template-ivory-pocket .count-grid div{border:1px solid #b48a4755!important;border-radius:2px!important;background:#fffdf7d9!important;box-shadow:10px 12px 0 #a47d3912!important;color:#60482a}body.template-ivory-pocket .section,body.template-ivory-pocket .section p,body.template-ivory-pocket footer{color:#684e2c!important;text-shadow:none}body.template-ivory-pocket .section h2,body.template-ivory-pocket .section-label,body.template-ivory-pocket .detail-list b{color:#9a7130!important}body.template-ivory-pocket .ceremony-card{border:1px solid #b48a4755;background:#fffdf7;color:#60482a}body.template-ivory-pocket .gallery-item{border:7px solid #fffdf6;border-radius:2px;outline:1px solid #b48a4766;outline-offset:-9px}
@media(max-width:640px){.cover-ivory-pocket .cover-kicker{font-size:8px}.pocket-card{width:min(380px,87vw);min-height:535px;padding:63px 24px 35px}.pocket-card-rule{left:24px;right:24px}.pocket-ribbon{margin-top:-63px}.pocket-names{font-size:clamp(28px,9vw,37px)}body.template-ivory-pocket .cover-ivory-pocket::before{inset:10px}}

/* Contrast repair for light-paper templates: do not inherit white wedding text. */
body.template-royal-cream .section,body.template-royal-cream .section p,body.template-royal-cream .family-card,body.template-royal-cream .family-card small,body.template-royal-cream .family-card b,body.template-royal-cream .detail-list span,body.template-royal-cream .detail-list p,body.template-royal-cream .guest-info-card,body.template-royal-cream .guest-info-card p{color:#5a4932!important;text-shadow:none}
body.template-royal-cream .family-card .couple-name,body.template-royal-cream .family-card .couple-name .shimmer{color:#9c7637!important;background:none!important;-webkit-text-fill-color:#9c7637!important;text-shadow:0 1px 0 #fff!important}
body.template-garden .section,body.template-garden .section p,body.template-garden .family-card,body.template-garden .family-card small,body.template-garden .family-card b,body.template-garden .detail-list span,body.template-garden .detail-list p,body.template-garden .guest-info-card,body.template-garden .guest-info-card p{color:#355e54!important;text-shadow:none!important}
body.template-garden .family-card .section-label{color:#a76f65!important;text-shadow:none!important}
body.template-garden .family-card .couple-name,body.template-garden .family-card .couple-name .shimmer{color:#4e806f!important;background:none!important;-webkit-text-fill-color:#4e806f!important;text-shadow:none!important}
body.template-garden .family-card .rel-line{color:#667b72!important}
body.template-minimal .section,body.template-minimal .section p,body.template-minimal .family-card,body.template-minimal .family-card small,body.template-minimal .family-card b,body.template-minimal .detail-list span,body.template-minimal .detail-list p,body.template-minimal .guest-info-card,body.template-minimal .guest-info-card p{color:#2b2a28!important;text-shadow:none!important}
body.template-minimal .family-card .couple-name,body.template-minimal .family-card .couple-name .shimmer{color:#181817!important;background:none!important;-webkit-text-fill-color:#181817!important;text-shadow:none!important}

/* Light-paper typography: keep every letter crisp instead of using dark, heavy shadows. */
body.template-royal-cream .ceremony-card,body.template-royal-cream .ceremony-card::before{backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
body.template-royal-cream .ceremony-card::before{background:linear-gradient(135deg,#fff 0%,transparent 38%,#b1844508 100%);box-shadow:none}
body.template-royal-cream .ceremony-card .icon{color:#a77c3d;text-shadow:none;filter:none}
body.template-royal-cream .ceremony-card h3{position:relative;color:#72562b;font:700 14px/1.25 Montserrat,sans-serif;letter-spacing:.18em;text-shadow:none;-webkit-text-stroke:0}
body.template-royal-cream .ceremony-card h3::after{content:"";display:block;width:34px;height:1px;margin:12px auto 0;background:linear-gradient(90deg,transparent,#b18445,transparent)}
body.template-royal-cream .ceremony-card .detail-list b{color:#9b7a3b;text-shadow:none}
body.template-royal-cream .ceremony-card .detail-list span{color:#493c2b!important;font:600 23px/1.2 "Cormorant Garamond",serif;text-shadow:none!important;-webkit-text-stroke:0}
body.template-royal-cream .ceremony-card .detail-list small{color:#8b795e!important;font-weight:500;text-shadow:none!important}

/* Names retain a premium entrance, but never finish with blur or a muddy 3D shadow. */
body.template-royal-cream .animated-couple-name,body.template-garden .animated-couple-name,body.template-minimal .animated-couple-name{filter:none}
body.template-royal-cream .animated-name-char,body.template-garden .animated-name-char,body.template-minimal .animated-name-char{background:none!important;-webkit-background-clip:initial!important;background-clip:initial!important;-webkit-text-fill-color:currentColor!important;-webkit-text-stroke:0!important;filter:none!important;text-shadow:none!important}
body.template-royal-cream .animated-name-char{color:#9b7130!important;text-shadow:0 1px 0 #fff!important}
body.template-garden .animated-name-char{color:#3d7567!important;text-shadow:0 1px 0 #fff!important}
body.template-minimal .animated-name-char{color:#252422!important;text-shadow:none!important}
body.template-royal-cream .animated-name-char.name-ampersand{color:#c39145!important}
body.template-garden .animated-name-char.name-ampersand{color:#b67f70!important}
body.template-minimal .animated-name-char.name-ampersand{color:#747069!important}
body.template-royal-cream .animated-name-drop.is-playing .animated-name-char,body.template-garden .animated-name-drop.is-playing .animated-name-char,body.template-minimal .animated-name-drop.is-playing .animated-name-char{animation:clean-letter-rise .7s cubic-bezier(.18,.82,.25,1.1) forwards;animation-delay:calc(.14s + var(--char-index) * 55ms)}
body.template-royal-cream .animated-name-type.is-playing .animated-name-char,body.template-garden .animated-name-type.is-playing .animated-name-char,body.template-minimal .animated-name-type.is-playing .animated-name-char{animation:clean-letter-reveal .46s cubic-bezier(.16,.8,.22,1) forwards;animation-delay:calc(.16s + var(--char-index) * 44ms)}
body.template-royal-cream .animated-couple-name.is-complete,body.template-garden .animated-couple-name.is-complete,body.template-minimal .animated-couple-name.is-complete{animation:none}
@keyframes clean-letter-rise{from{opacity:0;transform:translate3d(0,-24px,0) scale(.94)}72%{opacity:1;transform:translate3d(0,3px,0) scale(1.025)}to{opacity:1;transform:none}}
@keyframes clean-letter-reveal{from{opacity:0;transform:translate3d(10px,0,0)}to{opacity:1;transform:none}}

/* Final readability pass: content text must always be solid, high-contrast and shadow-free. */
body.template-royal-cream,body.template-garden,body.template-minimal{text-rendering:optimizeLegibility}
body.template-royal-cream .section p,body.template-royal-cream .section small,body.template-royal-cream .formal-invitation-card p,body.template-royal-cream .formal-invitation-card h2,body.template-royal-cream .count-grid span,body.template-royal-cream .count-grid strong,body.template-royal-cream .guest-info-card,body.template-royal-cream .guest-info-card *,body.template-royal-cream footer{color:#55452e!important;text-shadow:none!important;-webkit-text-stroke:0!important;filter:none!important}
body.template-royal-cream .section-label,body.template-royal-cream .formal-kicker,body.template-royal-cream .count-grid strong,body.template-royal-cream .guest-info-card strong,body.template-royal-cream .guest-info-card h3{color:#977034!important}
body.template-garden .section p,body.template-garden .section small,body.template-garden .formal-invitation-card p,body.template-garden .formal-invitation-card h2,body.template-garden .count-grid span,body.template-garden .count-grid strong,body.template-garden .guest-info-card,body.template-garden .guest-info-card *,body.template-garden footer{color:#355e54!important;text-shadow:none!important;-webkit-text-stroke:0!important;filter:none!important}
body.template-garden .section-label,body.template-garden .formal-kicker,body.template-garden .count-grid strong,body.template-garden .guest-info-card strong,body.template-garden .guest-info-card h3{color:#9c6d63!important}
body.template-minimal .section p,body.template-minimal .section small,body.template-minimal .formal-invitation-card p,body.template-minimal .formal-invitation-card h2,body.template-minimal .count-grid span,body.template-minimal .count-grid strong,body.template-minimal .guest-info-card,body.template-minimal .guest-info-card *,body.template-minimal footer{color:#2a2927!important;text-shadow:none!important;-webkit-text-stroke:0!important;filter:none!important}
body.template-minimal .section-label,body.template-minimal .formal-kicker,body.template-minimal .count-grid strong,body.template-minimal .guest-info-card strong,body.template-minimal .guest-info-card h3{color:#625e57!important}
body.template-royal-cream .section h2,body.template-garden .section h2,body.template-minimal .section h2{filter:none!important}
body.template-royal-cream .section h2{color:#8d662b!important;text-shadow:0 1px 0 #fff!important;-webkit-text-stroke:0!important}
body.template-garden .section h2{color:#376f62!important;text-shadow:0 1px 0 #fff!important;-webkit-text-stroke:0!important}
body.template-minimal .section h2{color:#292826!important;text-shadow:none!important;-webkit-text-stroke:0!important}

/* Tô Duyên portrait balance: make both portraits fill the tall cover without crowding names. */
body.template-bordeaux .cover-to-duyen .portrait-piece{grid-template-columns:205px minmax(0,1fr);width:min(70%,500px);gap:24px}
body.template-bordeaux .cover-to-duyen .portrait-piece img{width:205px;height:270px;border-width:7px}
body.template-bordeaux .cover-to-duyen .groom-piece{top:25%;left:5%}
body.template-bordeaux .cover-to-duyen .bride-piece{right:5%;bottom:14%;grid-template-columns:minmax(0,1fr) 205px}
body.template-bordeaux .cover-to-duyen .portrait-piece b{font-size:clamp(31px,4.6vw,43px);overflow-wrap:anywhere}
body.template-bordeaux .cover-to-duyen .portrait-piece b{font-family:"Great Vibes","Cormorant Garamond",serif;font-weight:400;font-style:normal;line-height:1.12;letter-spacing:.01em;color:#8b2744;text-shadow:0 1px 0 #fff8e9,0 5px 14px #8b274422}
body.template-bordeaux .cover-to-duyen .portrait-path{top:50%;left:29%;right:18%}
@media(max-width:600px){
 body.template-bordeaux .cover-to-duyen{min-height:max(860px,100svh)}
 body.template-bordeaux .cover-to-duyen .portrait-piece{grid-template-columns:clamp(138px,40vw,160px) minmax(0,1fr);width:91%;gap:14px}
 body.template-bordeaux .cover-to-duyen .portrait-piece img{width:clamp(138px,40vw,160px);height:clamp(188px,53vw,218px);border-width:5px}
 body.template-bordeaux .cover-to-duyen .groom-piece{top:21%;left:7%}
 body.template-bordeaux .cover-to-duyen .bride-piece{right:7%;bottom:13%;grid-template-columns:minmax(0,1fr) clamp(138px,40vw,160px)}
 body.template-bordeaux .cover-to-duyen .portrait-piece b{font-size:clamp(25px,7.5vw,32px);line-height:1}
 body.template-bordeaux .cover-to-duyen .portrait-piece b{font-size:clamp(30px,9vw,38px);line-height:1.08}
 body.template-bordeaux .cover-to-duyen .portrait-piece small{font-size:8px;letter-spacing:.14em}
 body.template-bordeaux .cover-to-duyen .portrait-path{top:50%;left:18%;right:18%}
}

/* Aspect-aware mobile album: preserve portrait/landscape rhythm without forced cropping. */
@media(max-width:760px){
 .gallery-showcase .gallery{grid-template-columns:repeat(2,minmax(0,1fr))!important;grid-auto-flow:dense!important;grid-auto-rows:auto!important;gap:10px!important}
 .gallery-showcase .gallery-item,.gallery-showcase .gallery-item:nth-child(n){grid-column:auto!important;grid-row:auto!important;width:100%;min-width:0;height:auto!important}
 .gallery-showcase .gallery-item.is-landscape{grid-column:1/-1!important;aspect-ratio:16/10!important}
 .gallery-showcase .gallery-item.is-portrait{aspect-ratio:3/4!important}
 .gallery-showcase .gallery-item.is-square{aspect-ratio:1!important}
 .gallery-showcase .gallery-item img{width:100%;height:100%;object-fit:cover;object-position:center;transform:translateZ(0)}
 body.template-royal-cream .gallery-showcase .gallery{gap:12px!important}
 body.template-garden .gallery-showcase .gallery{gap:12px!important}
 body.template-garden .gallery-showcase .gallery-item{border-width:5px}
 body.template-minimal .gallery-showcase .gallery{gap:2px!important}
}
@media(max-width:420px){
 .gallery-showcase .gallery{gap:7px!important}
 body.template-royal-cream .gallery-showcase .gallery,body.template-garden .gallery-showcase .gallery{gap:8px!important}
}
body.font-great-vibes{--wedding-font:"Great Vibes",cursive}
body.font-dancing-script{--wedding-font:"Dancing Script",cursive}
body.font-playfair{--wedding-font:"Playfair Display",serif}
body.font-cormorant{--wedding-font:"Cormorant Garamond",serif}
body.font-lora{--wedding-font:"Lora",serif}
body.font-mali{--wedding-font:"Mali",cursive}
body[class*="font-"] .opening-card strong,body[class*="font-"] .template-cover h1,body[class*="font-"] .template-cover .portrait-piece b,body[class*="font-"] .template-cover .twin-portraits b,body[class*="font-"] .template-cover .round-portraits b,body[class*="font-"] .template-cover .arch-portrait b,body[class*="font-"] .section h2,body[class*="font-"] .names,body[class*="font-"] .couple-name,body[class*="font-"] .animated-name-char,body[class*="font-"] .story-signature,body[class*="font-"] .formal-couple-names,body[class*="font-"] .footer-couple-names{font-family:var(--wedding-font)!important}
body.font-great-vibes .section h2,body.font-dancing-script .section h2{font-weight:400;letter-spacing:.01em}
body.font-playfair .section h2,body.font-lora .section h2{font-weight:600;letter-spacing:.02em}
body.font-mali .section h2{font-weight:500;letter-spacing:0}
body.template-bordeaux .cover-to-duyen .duyen-heart-seal{position:absolute;z-index:4;top:49.5%;left:54.5%;width:106px;height:92px;pointer-events:none;transform:translate(-50%,-50%);filter:drop-shadow(0 8px 15px #7e29402e)}
body.template-bordeaux .duyen-heart-seal::before,body.template-bordeaux .duyen-heart-seal::after{content:"";position:absolute;inset:10px;border:1px solid #c79b4b59;border-radius:50%;animation:duyen-heart-halo 3.2s ease-out infinite}
body.template-bordeaux .duyen-heart-seal::after{inset:19px;animation-delay:1.6s}
body.template-bordeaux .duyen-heart-seal .heart-outline,body.template-bordeaux .duyen-heart-seal .heart-solid{position:absolute;display:grid;place-items:center;width:56px;height:56px;font-family:Georgia,"Times New Roman",serif;font-style:normal;line-height:1;transform-origin:50% 70%}
body.template-bordeaux .duyen-heart-seal .heart-outline{top:13px;left:13px;color:#c49849;font-size:54px;transform:rotate(-10deg);text-shadow:0 1px 0 #fff9ed,0 0 12px #d5ac6266;animation:duyen-heart-outline 2.8s ease-in-out infinite}
body.template-bordeaux .duyen-heart-seal .heart-solid{right:13px;bottom:8px;color:#9b2949;font-size:42px;transform:rotate(9deg);text-shadow:0 2px 0 #f8d8cf,0 5px 13px #7d173e4d;animation:duyen-heart-beat 1.85s ease-in-out infinite}
body.template-bordeaux .duyen-heart-seal .heart-spark{position:absolute;color:#d2a451;font-style:normal;line-height:1;text-shadow:0 0 8px #e8c47d;font-family:Georgia,"Times New Roman",serif;animation:duyen-heart-spark 2.4s ease-in-out infinite}
body.template-bordeaux .duyen-heart-seal .spark-one{top:2px;right:11px;font-size:15px}
body.template-bordeaux .duyen-heart-seal .spark-two{bottom:3px;left:7px;font-size:11px;animation-delay:.8s}
body.template-bordeaux .duyen-heart-seal .spark-three{top:17px;left:3px;font-size:12px;animation-delay:1.35s}
body.invite-open.template-bordeaux .duyen-heart-seal{animation:duyen-heart-enter 1.15s .72s cubic-bezier(.18,.82,.25,1.18) both}
@keyframes duyen-heart-enter{from{opacity:0;transform:translate(-50%,-50%) scale(.25) rotate(-16deg);filter:blur(5px)}to{opacity:1;transform:translate(-50%,-50%);filter:drop-shadow(0 8px 15px #7e29402e)}}
@keyframes duyen-heart-beat{0%,100%{transform:rotate(9deg) scale(1)}12%{transform:rotate(9deg) scale(1.13)}24%{transform:rotate(9deg) scale(1)}36%{transform:rotate(9deg) scale(1.08)}48%{transform:rotate(9deg) scale(1)}}
@keyframes duyen-heart-outline{0%,100%{transform:rotate(-10deg) translateY(0)}50%{transform:rotate(-7deg) translateY(-3px)}}
@keyframes duyen-heart-halo{0%{opacity:.62;transform:scale(.52)}72%,100%{opacity:0;transform:scale(1.18)}}
@keyframes duyen-heart-spark{0%,100%{opacity:.28;transform:scale(.65) rotate(0)}50%{opacity:1;transform:scale(1.15) rotate(90deg)}}
@media(max-width:600px){body.template-bordeaux .cover-to-duyen .duyen-heart-seal{top:51.5%;left:52%;width:88px;height:76px}body.template-bordeaux .duyen-heart-seal .heart-outline,body.template-bordeaux .duyen-heart-seal .heart-solid{width:47px;height:47px}body.template-bordeaux .duyen-heart-seal .heart-outline{top:11px;left:10px;font-size:45px}body.template-bordeaux .duyen-heart-seal .heart-solid{right:10px;bottom:7px;font-size:35px}}
@media(prefers-reduced-motion:reduce){body.template-bordeaux .duyen-heart-seal,body.template-bordeaux .duyen-heart-seal::before,body.template-bordeaux .duyen-heart-seal::after,body.template-bordeaux .duyen-heart-seal i{animation:none!important}}

body.template-bordeaux .cover-to-duyen .duyen-heart-seal{z-index:12;top:50%;left:55%;width:118px;height:102px;border-radius:50%;background:radial-gradient(circle,#fffaf0e8 0 32%,#f4dbab73 33% 47%,transparent 68%);filter:drop-shadow(0 9px 17px #7e294052)}
body.template-bordeaux .cover-to-duyen .duyen-heart-seal .heart-outline{top:12px;left:12px;color:#bd8735;font-size:64px;-webkit-text-stroke:1px #a87326;text-shadow:0 2px 0 #fff,0 0 16px #d5ac62a8}
body.template-bordeaux .cover-to-duyen .duyen-heart-seal .heart-solid{right:10px;bottom:5px;color:#a51f47;font-size:51px;-webkit-text-stroke:1px #7d173e;text-shadow:0 2px 0 #ffdcd3,0 7px 16px #7d173e73}
body.template-bordeaux .cover-to-duyen .duyen-heart-seal::before,body.template-bordeaux .cover-to-duyen .duyen-heart-seal::after{border-color:#bc873b8c}
@media(max-width:600px){body.template-bordeaux .cover-to-duyen .duyen-heart-seal{top:50%;left:53%;width:98px;height:86px;background:radial-gradient(circle,#fffaf0f2 0 33%,#f4dbab80 34% 48%,transparent 69%)}body.template-bordeaux .cover-to-duyen .duyen-heart-seal .heart-outline{top:10px;left:9px;font-size:53px}body.template-bordeaux .cover-to-duyen .duyen-heart-seal .heart-solid{right:8px;bottom:4px;font-size:42px}}

body.template-bordeaux .cover-to-duyen .portrait-path{display:none}
body.template-bordeaux .cover-to-duyen .duyen-heart-seal{filter:none;background:radial-gradient(circle,#fffaf0f5 0 27%,#f4dbab52 28% 43%,transparent 64%)}
body.template-bordeaux .cover-to-duyen .duyen-heart-seal .heart-outline{text-shadow:0 1px 0 #fff}
body.template-bordeaux .cover-to-duyen .duyen-heart-seal .heart-solid{text-shadow:0 1px 0 #ffdcd3,0 3px 5px #7d173e38}
@media(max-width:600px){
 body.template-bordeaux .cover-to-duyen .duyen-heart-seal{top:50%;left:52%;width:88px;height:78px;filter:none;background:radial-gradient(circle,#fffaf0fa 0 29%,#efd49e4d 30% 44%,transparent 63%)}
 body.template-bordeaux .cover-to-duyen .duyen-heart-seal::before{inset:9px;border-color:#bc873b7d;animation-duration:3.8s}
 body.template-bordeaux .cover-to-duyen .duyen-heart-seal::after{display:none}
 body.template-bordeaux .cover-to-duyen .duyen-heart-seal .heart-outline{top:10px;left:8px;font-size:49px;-webkit-text-stroke:.6px #a87326;text-shadow:0 1px 0 #fff}
 body.template-bordeaux .cover-to-duyen .duyen-heart-seal .heart-solid{right:7px;bottom:5px;font-size:39px;-webkit-text-stroke:.6px #7d173e;text-shadow:0 1px 0 #ffdcd3,0 3px 4px #7d173e30}
 body.template-bordeaux .cover-to-duyen .duyen-heart-seal .heart-spark{text-shadow:none}
 body.invite-open.template-bordeaux .duyen-heart-seal{animation:none}
 }

/* Six contemporary cover systems: each changes composition, paper, frames and section rhythm. */
.cover-modern{width:min(100%,1180px);max-width:none;min-height:920px;display:grid;place-items:center;padding:70px 7%;isolation:isolate}.cover-modern .cover-kicker{position:absolute;top:58px;left:8%;right:8%;z-index:3}.cover-modern h1{position:absolute;z-index:4;bottom:112px;left:8%;right:8%;margin:0;text-wrap:balance}.cover-modern h1 span{padding-inline:.13em}.modern-portraits{position:relative;z-index:2;display:grid;grid-template-columns:1fr 90px 1fr;align-items:center;width:min(720px,100%)}.modern-portraits article{display:grid;gap:11px;text-align:center}.modern-portraits img{width:min(100%,265px);height:350px;margin:auto;object-fit:cover}.modern-portraits small{font:700 9px Montserrat,sans-serif;letter-spacing:.18em}.modern-portraits b{font:500 clamp(28px,4vw,44px)/1.05 "Cormorant Garamond",serif}.modern-monogram{display:grid;place-items:center;width:72px;height:72px;margin:auto;border-radius:50%;font:400 45px/1 "Great Vibes",cursive;z-index:4}.modern-orbit{position:absolute;z-index:1;width:min(86vw,680px);height:min(86vw,680px);border-radius:50%;pointer-events:none}.cover-modern .cover-date{z-index:5}.template-rose-noir .cover-modern{background:radial-gradient(circle at 50% 36%,#a53554 0,#55152c 43%,#1c0711 100%);color:#ffe8bd}.template-rose-noir .cover-modern::before,.template-rose-noir .cover-modern::after{content:"";position:absolute;border:1px solid #edc47c66;transform:rotate(45deg)}.template-rose-noir .cover-modern::before{width:65%;aspect-ratio:1;top:19%;left:17%}.template-rose-noir .cover-modern::after{width:47%;aspect-ratio:1;top:28%;left:26%;border-color:#ffffff2c}.template-rose-noir .modern-orbit{border:1px solid #edc47c55;box-shadow:0 0 0 18px #ffffff05,0 0 90px #f5c57638}.template-rose-noir .modern-portraits article:first-child{transform:translate(15px,-35px)}.template-rose-noir .modern-portraits article:last-child{transform:translate(-15px,35px)}.template-rose-noir .modern-portraits img{clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);border:8px solid #edc47c;outline:1px solid #fff6dc;outline-offset:8px}.template-rose-noir .modern-portraits small,.template-rose-noir .cover-kicker,.template-rose-noir .cover-date{color:#f4c875}.template-rose-noir .modern-portraits b{color:#fff1d4}.template-rose-noir .modern-monogram{background:#edc47c;color:#67152d;box-shadow:0 0 0 8px #edc47c38}.template-rose-noir .families-section{max-width:none;background:linear-gradient(90deg,#260914,#57172e,#260914);padding-inline:max(22px,8vw)}.template-rose-noir .family-card,.template-rose-noir .glass-card{background:#ffffff0b;border-color:#edc47c50}.template-rose-noir .gallery{grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:190px}.template-rose-noir .gallery-item:nth-child(3n+1){grid-row:span 2}.template-rose-noir .formal-invitation-card{background:linear-gradient(135deg,#67162f,#210811);border-color:#edc47c88}
.template-ocean-pearl{--paper:#eef9f7;--ink:#16535e;background:var(--paper)}.template-ocean-pearl .opening{background:radial-gradient(circle at 50% 28%,#d4eee8,#0e6070 160%)}.template-ocean-pearl .opening-card{color:#15515b;background:#f6ffffe8;border-color:#79b8b4;border-radius:30px}.template-ocean-pearl .cover-modern{background:linear-gradient(145deg,#e7f8f4,#b8e2da 48%,#cfeae5);color:#185664}.template-ocean-pearl .cover-modern::before{content:"";position:absolute;inset:0;background:repeating-radial-gradient(ellipse at 50% 104%,transparent 0 46px,#4da6a61c 47px 49px);pointer-events:none}.template-ocean-pearl .modern-orbit{border:2px solid #72b7b2;border-radius:48% 52% 50% 50% / 58% 42% 58% 42%;box-shadow:0 0 0 18px #fff8,0 22px 60px #267d7952;animation:ocean-drift 7s ease-in-out infinite}.template-ocean-pearl .modern-portraits{grid-template-columns:1fr 68px 1fr}.template-ocean-pearl .modern-portraits article:first-child{transform:translateY(-38px)}.template-ocean-pearl .modern-portraits article:last-child{transform:translateY(38px)}.template-ocean-pearl .modern-portraits img{border:9px solid #faffff;box-shadow:0 15px 30px #23756d35;border-radius:52% 48% 42% 58% / 58% 42% 58% 42%}.template-ocean-pearl .modern-portraits article:last-child img{border-radius:48% 52% 58% 42% / 42% 58% 42% 58%}.template-ocean-pearl .modern-portraits b,.template-ocean-pearl .cover-modern h1{color:#176777}.template-ocean-pearl .modern-monogram{color:#fff;background:#52a8a4;box-shadow:0 0 0 8px #fff8}.template-ocean-pearl .section,.template-ocean-pearl .section p,.template-ocean-pearl footer{color:#1b6268!important;text-shadow:none}.template-ocean-pearl .section h2,.template-ocean-pearl .section-label{color:#217982!important}.template-ocean-pearl .family-card,.template-ocean-pearl .glass-card,.template-ocean-pearl .count-grid div{background:#ffffffcf;border-color:#6db7ae55;box-shadow:0 16px 42px #267d791b}.template-ocean-pearl .family-grid{grid-template-columns:1fr 90px 1fr}.template-ocean-pearl .family-grid .ampersand{display:grid;place-items:center;width:62px;height:62px;margin:auto;border:1px solid #60aaa5;border-radius:50%;color:#3b9993;background:#fff}.template-ocean-pearl .gallery{grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-rows:195px}.template-ocean-pearl .gallery-item{border-radius:50% 50% 10px 10px;border:7px solid #fff}.template-ocean-pearl .gallery-item:nth-child(4n+2){border-radius:12px 12px 50% 50%}.template-ocean-pearl .formal-invitation-card{background:#e6f6f2;border-color:#62aaa466}
.template-terracotta{--paper:#f6ead8;--ink:#613525;background:var(--paper)}.template-terracotta .opening{background:linear-gradient(145deg,#e7b27e,#9f442d)}.template-terracotta .opening-card{background:#fff4e6e8;color:#713823;border-color:#9d4c33;border-radius:4px}.template-terracotta .cover-modern{align-items:start;background:#f4e2cb;color:#783d2c;text-align:left}.template-terracotta .cover-modern::before{content:"WEDDING\A EDITION";white-space:pre;position:absolute;top:22%;left:7%;color:#9b492817;font:800 clamp(58px,11vw,150px)/.8 Montserrat,sans-serif;letter-spacing:-.07em}.template-terracotta .modern-orbit{width:76%;height:54%;border-radius:0;background:#bb603d;right:-14%;top:16%;transform:rotate(-9deg)}.template-terracotta .modern-portraits{grid-template-columns:1fr 1fr;gap:18px;width:min(700px,100%);margin-top:95px}.template-terracotta .modern-monogram{position:absolute;left:50%;top:47%;transform:translate(-50%,-50%);background:#f5d190;color:#833d29;border-radius:0}.template-terracotta .modern-portraits article:first-child{transform:rotate(-5deg)}.template-terracotta .modern-portraits article:last-child{transform:translateY(55px) rotate(6deg)}.template-terracotta .modern-portraits img{height:315px;border:10px solid #fff8ed;box-shadow:10px 12px 0 #713d2830}.template-terracotta .modern-portraits b,.template-terracotta .cover-modern h1{color:#783d2c}.template-terracotta .cover-modern h1{bottom:86px;max-width:640px;font-size:clamp(43px,7vw,75px);text-align:left}.template-terracotta .families-section{max-width:none;background:#a54d32;color:#fff4e7;padding-inline:max(22px,8vw)}.template-terracotta .families-section .family-card{background:#ffffff10;border-color:#f1c77c66}.template-terracotta .families-section p,.template-terracotta .families-section h2{color:#fff4e7!important}.template-terracotta .section,.template-terracotta .section p,.template-terracotta footer{color:#693d2d!important;text-shadow:none}.template-terracotta .section h2,.template-terracotta .section-label{color:#a65035!important}.template-terracotta .glass-card,.template-terracotta .count-grid div{background:#fff7ec;border-color:#bb623f55;box-shadow:none;border-radius:2px}.template-terracotta .ceremony-grid{grid-template-columns:1.2fr .8fr}.template-terracotta .gallery{grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:175px;gap:15px}.template-terracotta .gallery-item{border:8px solid #fff6e9;border-radius:1px}.template-terracotta .gallery-item:nth-child(5n+1){grid-column:span 2;grid-row:span 2}
.template-wisteria{--paper:#f6f0fa;--ink:#59446e;background:var(--paper)}.template-wisteria .opening{background:radial-gradient(circle at 50% 30%,#f2d9ef,#5d4779 165%)}.template-wisteria .opening-card{background:#fffaffdf;color:#59446e;border-color:#9b78a7;border-radius:50% 50% 18px 18px}.template-wisteria .cover-modern{background:linear-gradient(155deg,#f9f2fb,#e4d8ee);color:#634c79}.template-wisteria .cover-modern::before,.template-wisteria .cover-modern::after{content:"❀  ❀  ❀";position:absolute;color:#9d77a54a;font-size:80px;letter-spacing:.12em;animation:wisteria-fall 8s ease-in-out infinite}.template-wisteria .cover-modern::before{top:8%;left:-4%;transform:rotate(15deg)}.template-wisteria .cover-modern::after{right:-6%;bottom:12%;transform:rotate(-18deg);animation-delay:-4s}.template-wisteria .modern-orbit{border:1px dashed #9d77a9;transform:rotate(25deg);border-radius:45% 55% 57% 43% / 38% 49% 51% 62%}.template-wisteria .modern-portraits article:first-child{transform:rotate(-7deg) translate(13px,-24px)}.template-wisteria .modern-portraits article:last-child{transform:rotate(7deg) translate(-13px,25px)}.template-wisteria .modern-portraits img{border:12px solid #fff;box-shadow:0 18px 35px #76548435;border-radius:5px}.template-wisteria .modern-monogram{background:#aa7ca8;color:#fff;transform:rotate(15deg);border-radius:7px}.template-wisteria .modern-portraits b,.template-wisteria .cover-modern h1{color:#654d7d}.template-wisteria .section,.template-wisteria .section p,.template-wisteria footer{color:#5f4c70!important;text-shadow:none}.template-wisteria .section h2,.template-wisteria .section-label{color:#825d93!important}.template-wisteria .family-card,.template-wisteria .glass-card,.template-wisteria .count-grid div{background:#fffaff;border-color:#a981b166;box-shadow:0 16px 42px #7654841b}.template-wisteria .family-grid{max-width:940px;gap:56px}.template-wisteria .family-grid .ampersand{color:#9c70a4}.template-wisteria .gallery{grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-rows:190px}.template-wisteria .gallery-item{border:9px solid #fff;border-radius:5px;box-shadow:0 9px 22px #76548426}.template-wisteria .gallery-item:nth-child(3n+2){transform:translateY(24px) rotate(2deg)}.template-wisteria .gallery-item:nth-child(3n+1){transform:rotate(-2deg)}
.template-emerald{--paper:#f2f2e8;--ink:#0c5447;background:var(--paper)}.template-emerald .opening{background:radial-gradient(circle,#1f8c75,#043d37 160%)}.template-emerald .opening-card{background:#f7f3dfeb;color:#075348;border-color:#d4ad62;border-radius:0}.template-emerald .cover-modern{background:linear-gradient(135deg,#064d42,#0b7060);color:#f9e9bd}.template-emerald .cover-modern::before,.template-emerald .cover-modern::after{content:"";position:absolute;inset:22px;border:1px solid #d9b76c88;clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%)}.template-emerald .cover-modern::after{inset:75px;border-color:#ffffff28}.template-emerald .modern-orbit{width:72%;height:72%;border:1px solid #d9b76c;border-radius:0;transform:rotate(45deg)}.template-emerald .modern-portraits{grid-template-columns:1fr 86px 1fr}.template-emerald .modern-portraits article:first-child{transform:translateX(16px)}.template-emerald .modern-portraits article:last-child{transform:translateX(-16px)}.template-emerald .modern-portraits img{width:min(100%,240px);height:310px;clip-path:polygon(50% 0,100% 15%,100% 85%,50% 100%,0 85%,0 15%);border:7px solid #d9b76c}.template-emerald .modern-portraits small,.template-emerald .cover-kicker,.template-emerald .cover-date{color:#d9b76c}.template-emerald .modern-portraits b,.template-emerald .cover-modern h1{color:#fff1c8}.template-emerald .modern-monogram{border-radius:0;background:#d9b76c;color:#075044;transform:rotate(45deg)}.template-emerald .modern-monogram::first-letter{transform:rotate(-45deg)}.template-emerald .families-section{max-width:none;background:#075044;padding-inline:max(22px,8vw)}.template-emerald .family-card,.template-emerald .glass-card{background:#ffffff0d;border-color:#d9b76c70}.template-emerald .section,.template-emerald .section p,.template-emerald footer{color:#0a594c!important;text-shadow:none}.template-emerald .section h2,.template-emerald .section-label{color:#0c7663!important}.template-emerald .family-grid{grid-template-columns:1fr 1fr;gap:2px}.template-emerald .family-grid .ampersand{display:none}.template-emerald .family-card{border-radius:0}.template-emerald .gallery{grid-template-columns:repeat(5,minmax(0,1fr));grid-auto-rows:165px;gap:8px}.template-emerald .gallery-item{clip-path:polygon(50% 0,100% 12%,100% 88%,50% 100%,0 88%,0 12%);border:0}.template-emerald .formal-invitation-card{background:#e6ebd9;border:2px double #a9833f}
.template-midnight-silver{--paper:#111a35;--ink:#e8efff;background:var(--paper)}.template-midnight-silver .opening{background:radial-gradient(circle at 50% 32%,#425c9d,#0b1023 68%)}.template-midnight-silver .opening-card{background:#151e3ee8;color:#edf2ff;border-color:#c7d5f088;border-radius:26px}.template-midnight-silver .cover-modern{background:radial-gradient(circle at 70% 17%,#596fa9 0 1px,transparent 2px),radial-gradient(circle at 18% 27%,#fff 0 1px,transparent 2px),radial-gradient(circle at 73% 70%,#dbe5ff 0 1px,transparent 2px),radial-gradient(circle at 48% 42%,#415b9b 0,#0b1128 67%);color:#edf2ff}.template-midnight-silver .cover-modern::before{content:"☾";position:absolute;top:6%;right:10%;color:#f4f6ff;font:200 clamp(120px,23vw,240px)/1 Georgia,serif;text-shadow:0 0 35px #d3ddff99}.template-midnight-silver .modern-orbit{border:1px solid #cbd8f255;box-shadow:0 0 0 26px #9fb4e10a;animation:moon-orbit 13s linear infinite}.template-midnight-silver .modern-portraits article:first-child{transform:translateY(-34px)}.template-midnight-silver .modern-portraits article:last-child{transform:translateY(34px)}.template-midnight-silver .modern-portraits img{border:2px solid #d7e2ff;outline:7px solid #d7e2ff24;outline-offset:6px;border-radius:50%;filter:saturate(.82) contrast(1.06)}.template-midnight-silver .modern-portraits b,.template-midnight-silver .cover-modern h1{color:#f4f6ff}.template-midnight-silver .modern-portraits small,.template-midnight-silver .cover-kicker,.template-midnight-silver .cover-date{color:#cbd8f2}.template-midnight-silver .modern-monogram{background:#d9e1f0;color:#172244;box-shadow:0 0 0 8px #d9e1f027}.template-midnight-silver .families-section{max-width:none;background:linear-gradient(90deg,#0d1530,#1c2b55,#0d1530);padding-inline:max(22px,8vw)}.template-midnight-silver .family-card,.template-midnight-silver .glass-card,.template-midnight-silver .count-grid div{background:#ffffff0a;border-color:#cbd8f24a}.template-midnight-silver .section,.template-midnight-silver .section p,.template-midnight-silver footer{color:#dbe6ff!important;text-shadow:none}.template-midnight-silver .section h2,.template-midnight-silver .section-label{color:#bfcfed!important}.template-midnight-silver .gallery{grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-rows:205px}.template-midnight-silver .gallery-item{border-radius:50%;border:5px solid #cbd8f23b;box-shadow:0 12px 30px #02040d99}.template-midnight-silver .gallery-item:nth-child(3n+2){border-radius:12px}.template-midnight-silver .formal-invitation-card{background:#131e3d;border-color:#bdcdef77}.template-midnight-silver .formal-invitation-card *{color:#e8efff!important}
@keyframes ocean-drift{50%{border-radius:58% 42% 45% 55% / 48% 58% 42% 52%;transform:rotate(4deg)}}@keyframes wisteria-fall{50%{translate:0 25px;rotate:6deg;opacity:.45}}@keyframes moon-orbit{to{transform:rotate(360deg)}}
@media(max-width:760px){.cover-modern{min-height:840px;padding:55px 20px}.cover-modern .cover-kicker{top:35px}.cover-modern h1{bottom:91px;font-size:clamp(33px,10vw,48px)}.modern-portraits{grid-template-columns:1fr 55px 1fr}.modern-portraits img{height:245px}.modern-monogram{width:48px;height:48px;font-size:33px}.template-rose-noir .modern-portraits article:first-child,.template-rose-noir .modern-portraits article:last-child,.template-ocean-pearl .modern-portraits article:first-child,.template-ocean-pearl .modern-portraits article:last-child{transform:translateY(0)}.template-terracotta .modern-portraits{margin-top:100px}.template-terracotta .modern-portraits img{height:235px}.template-terracotta .modern-portraits article:last-child{transform:translateY(35px) rotate(5deg)}.template-emerald .modern-portraits{grid-template-columns:1fr 55px 1fr}.template-emerald .modern-portraits img{height:230px}.template-emerald .modern-monogram{transform:rotate(45deg)}.template-rose-noir .gallery,.template-emerald .gallery{grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:150px}.template-ocean-pearl .gallery,.template-wisteria .gallery,.template-midnight-silver .gallery{grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:155px}.template-terracotta .gallery{grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:145px}.template-ocean-pearl .family-grid{grid-template-columns:1fr}.template-ocean-pearl .family-grid .ampersand{display:none}.template-terracotta .ceremony-grid{grid-template-columns:1fr}.template-midnight-silver .cover-modern::before{font-size:130px}.template-wisteria .modern-portraits article:first-child{transform:rotate(-4deg)}.template-wisteria .modern-portraits article:last-child{transform:rotate(4deg)}}
@media(prefers-reduced-motion:reduce){.template-ocean-pearl .modern-orbit,.template-wisteria .cover-modern::before,.template-wisteria .cover-modern::after,.template-midnight-silver .modern-orbit{animation:none}}

body.template-hy-kim{--paper:#fff8e9;--ink:#745a2b;background:#fff8e9}body.template-hy-kim .template-cover{background:radial-gradient(circle at 50% 15%,#fffdf6,#f1dfb6 52%,#cfad69);color:#745a2b}body.template-hy-kim .template-cover::before{content:"◇";position:absolute;inset:12%;display:grid;place-items:center;border:1px solid #9d7a3f66;color:#b9934e55;font-size:clamp(130px,23vw,290px);pointer-events:none}body.template-hy-kim .cover-modern h1,.template-hy-kim .modern-monogram{color:#745a2b}.template-hy-kim .modern-portraits article{border:1px solid #9d7a3f;outline:6px solid #fff7e4}.template-hy-kim .families-section{max-width:none;background:linear-gradient(180deg,#f3e3bf,#fffaf0);padding-inline:max(22px,8vw)}body.template-hy-kim .family-card,body.template-hy-kim .glass-card,body.template-hy-kim .count-grid div{background:#fffaf0!important;border:1px solid #a9844566!important;border-radius:0!important;box-shadow:8px 8px 0 #9d7a3f12!important}body.template-hy-kim .section,body.template-hy-kim .section p,body.template-hy-kim footer{color:#745a2b!important}body.template-hy-kim .section h2,body.template-hy-kim .section-label{color:#9d7736!important}/* Dedicated cover compositions for catalogue designs. */
.cover-long-phung,.cover-nang-thong,.cover-seoul-blush,.cover-hoa-moc,.cover-thu-tinh,.cover-hy-kim{min-height:100svh;display:grid;place-items:center;align-content:center;gap:24px;overflow:hidden;position:relative}.cover-long-phung{color:#f6d284;background:radial-gradient(circle at 50% 43%,#a52b3e,#5b0a1c 58%,#23030c)}.cover-long-phung:before,.cover-long-phung:after{content:"";position:absolute;width:64vmax;height:64vmax;border:1px solid #e5bb5e44;border-radius:50%}.cover-long-phung:before{left:-41vmax;top:-31vmax}.cover-long-phung:after{right:-41vmax;bottom:-35vmax}.long-phung-crest{display:flex;align-items:center;gap:clamp(16px,4vw,36px);font:clamp(40px,9vw,75px)/1 Cormorant Garamond,serif;color:#f5cd71}.long-phung-crest i{font-style:normal}.long-phung-crest span{display:grid;place-items:center;width:1.2em;height:1.2em;border:1px solid #f5cd71;border-radius:50%}.long-phung-title{margin:0;font:700 10px Montserrat,sans-serif;letter-spacing:.42em}.cover-long-phung h1{max-width:900px;margin:0;text-align:center;color:#fff1cd;font:500 clamp(42px,8vw,82px)/.9 "Cormorant Garamond",serif}.cover-long-phung h1 em{display:block;margin:.08em 0;color:#f2c56d;font:400 .75em/.4 "Great Vibes",cursive}.long-phung-rule{color:#f4cf79;font-size:23px;letter-spacing:.7em}.cover-long-phung .cover-date{color:#f9d98e}
.cover-nang-thong{background:linear-gradient(145deg,#f8e8cb,#c97a4d 110%);color:#6d3726}.cover-nang-thong:before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(35deg,transparent 0 32px,#72412a0c 33px 35px)}.polaroid-card{position:absolute;z-index:1;width:clamp(145px,21vw,215px);padding:9px 9px 28px;background:#fff9ef;box-shadow:0 14px 28px #66321c42;transform:rotate(-9deg)}.polaroid-card img{width:100%;height:clamp(160px,23vw,220px);object-fit:cover;display:block;background:#e4c19a}.polaroid-card small{display:block;margin-top:8px;text-align:center;font:500 17px "Great Vibes",cursive}.polaroid-left{left:max(7%,calc(50% - 340px));top:24%}.polaroid-right{right:max(7%,calc(50% - 340px));bottom:19%;transform:rotate(8deg)}.pine-stamp{position:relative;z-index:2;display:grid;place-items:center;width:93px;height:93px;border:2px dashed #7a412b;border-radius:50%;font:700 49px/1 Cormorant Garamond,serif}.pine-stamp span{font:700 7px Montserrat,sans-serif;letter-spacing:.12em}.cover-nang-thong h1{position:relative;z-index:2;max-width:80%;margin:0;text-align:center;font:600 clamp(36px,7vw,66px)/.95 "Cormorant Garamond",serif}.cover-nang-thong h1 i{color:#a65034;font:400 .85em "Great Vibes",cursive}.cover-nang-thong .cover-date{position:relative;z-index:2;color:#7b3d28}
.cover-seoul-blush{background:radial-gradient(circle at 18% 22%,#fff,#f2dce4 40%,#dfb8c6 120%);color:#523f48}.blush-portrait{position:absolute;width:clamp(145px,20vw,225px);height:clamp(205px,30vw,295px);overflow:hidden;background:#fff8;border-radius:50% 50% 30px 30px;box-shadow:0 22px 35px #8f5d6e28}.blush-portrait img{width:100%;height:100%;object-fit:cover}.blush-one{left:max(5%,calc(50% - 365px));top:18%;transform:rotate(-8deg)}.blush-two{right:max(5%,calc(50% - 365px));bottom:17%;transform:rotate(8deg)}.blush-script{position:relative;z-index:1;margin:0;color:#aa7188;font:clamp(42px,8vw,67px)/.9 "Great Vibes",cursive}.cover-seoul-blush h1{position:relative;z-index:1;max-width:76%;margin:0;text-align:center;font:500 clamp(34px,7vw,63px)/.98 "Cormorant Garamond",serif}.cover-seoul-blush h1 span{display:block;color:#bd8299;font-size:.4em}.cover-seoul-blush .cover-date{position:relative;z-index:1;color:#7c5666}
.cover-hoa-moc{background:radial-gradient(circle at 50% 38%,#fdf8e9,#b4c0a5 120%);color:#315647}.cover-hoa-moc:before{content:"";position:absolute;inset:16px;border:1px solid #426c5766}.moc-leaf{position:absolute;color:#466f59;font-size:clamp(150px,25vw,310px);opacity:.22}.leaf-a{left:-4%;top:8%;transform:rotate(-37deg)}.leaf-b{right:-5%;bottom:5%;transform:rotate(141deg)}.moc-monogram{position:relative;z-index:1;display:flex;align-items:center;justify-content:center;width:125px;height:125px;border:1px solid #54765f;border-radius:50%;background:#fff9;color:#365d4c;font:600 48px Cormorant Garamond,serif}.moc-monogram i{font:400 29px "Great Vibes",cursive}.cover-hoa-moc h1{position:relative;z-index:1;display:grid;margin:0;text-align:center;font:600 clamp(38px,7vw,67px)/.9 "Cormorant Garamond",serif}.cover-hoa-moc h1 small{font:400 44px/.5 "Great Vibes",cursive}.cover-hoa-moc .cover-date{position:relative;z-index:1;color:#476d5a}
.cover-thu-tinh{background:#d7d5cf;color:#392f2b}.cover-thu-tinh:before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(-12deg,#fff5 0 1px,transparent 1px 5px)}.letter-sheet{position:relative;z-index:1;display:grid;place-items:center;gap:25px;width:min(450px,85vw);min-height:500px;padding:55px 30px;background:linear-gradient(135deg,#fffdf4,#e6dcc5);box-shadow:15px 19px 0 #675b4e25,0 25px 50px #41372b35;transform:rotate(-2deg);text-align:center}.letter-sheet:before{content:"";position:absolute;inset:13px;border:1px solid #66574a5c}.letter-sheet>*{position:relative}.letter-to{justify-self:start;margin:0;font:500 28px "Great Vibes",cursive}.letter-sheet h1{margin:0;font:600 clamp(38px,7vw,65px)/.94 "Cormorant Garamond",serif}.letter-sheet h1 i{display:block;color:#9a5050;font:400 43px/.55 "Great Vibes",cursive}.letter-copy{margin:0;color:#62534a;font:500 17px/1.75 "Cormorant Garamond",serif}.letter-wax{display:grid;place-items:center;width:52px;height:52px;border-radius:50%;background:radial-gradient(circle at 32% 28%,#d17973,#7e2930);color:#ffe9da}.cover-thu-tinh .cover-date{position:relative;z-index:1;color:#5c4b43}
.cover-hy-kim{color:#745a2b;background:radial-gradient(circle at 50% 14%,#fffdf7,#ead9af 85%)}.hy-kim-frame{position:relative;z-index:1;display:grid;place-items:center;gap:24px;width:min(500px,87vw);min-height:540px;padding:55px 30px;border:2px double #a27c36;background:#fffdf5;box-shadow:0 18px 35px #745a2b26;text-align:center}.hy-kim-frame:before{content:"";position:absolute;inset:13px;border:1px solid #b5914e66}.hy-kim-frame>*{position:relative}.hy-kim-monogram{display:grid;place-items:center;width:113px;height:113px;border:1px solid #a27c36;transform:rotate(45deg);font:600 46px Cormorant Garamond,serif}.hy-kim-monogram i{font:400 27px "Great Vibes",cursive}.hy-kim-frame h1{display:grid;gap:5px;margin:0;font:600 clamp(37px,7vw,67px)/.9 "Cormorant Garamond",serif}.hy-kim-frame h1 span{font:400 42px/.55 "Great Vibes",cursive}.hy-kim-frame p{margin:0;font:700 10px Montserrat,sans-serif;letter-spacing:.23em}.cover-hy-kim .cover-date{color:#87662d}
@media(max-width:650px){.polaroid-card{width:125px}.polaroid-card img{height:140px}.polaroid-left{left:4%;top:22%}.polaroid-right{right:4%;bottom:18%}.blush-portrait{width:124px;height:185px}.blush-one{left:4%;top:18%}.blush-two{right:4%;bottom:18%}.letter-sheet{min-height:455px}.hy-kim-frame{min-height:465px}.cover-long-phung h1,.cover-nang-thong h1,.cover-seoul-blush h1{max-width:68%}}

/* Mobile opening correction: the former large padding above the guest block made
   Cỏ Lau overflow upward, while Liên Chi placed oversized names across the photo. */
.poster-royal-cream .poster-content,.poster-garden .poster-content{display:block;min-height:100svh;padding:0}
.poster-royal-cream .poster-kicker,.poster-garden .poster-kicker{position:absolute;top:clamp(42px,7svh,68px);left:20px;right:20px;margin:0}
.poster-royal-cream .poster-content h1,.poster-garden .poster-content h1{position:absolute;left:5%;right:5%;z-index:2;margin:0;text-align:center}
.poster-royal-cream .poster-content h1{top:clamp(78px,12svh,118px);font-size:clamp(32px,8vw,48px);line-height:.94;letter-spacing:.04em}
.poster-royal-cream .poster-date,.poster-garden .poster-date{position:absolute;z-index:2;margin:0;text-align:center}
.poster-royal-cream .poster-date{top:clamp(148px,21svh,194px);left:0;right:0;font-size:14px;letter-spacing:.21em}
.poster-royal-cream .poster-guest,.poster-garden .poster-guest{position:absolute;left:24px;right:24px;bottom:clamp(118px,17svh,156px);display:grid;gap:8px;margin:0;padding:0;color:inherit}
.poster-royal-cream .poster-guest strong,.poster-garden .poster-guest strong{font-size:clamp(34px,9.5vw,48px);line-height:1}
.poster-royal-cream .poster-open-button,.poster-garden .poster-open-button{position:absolute;z-index:3;bottom:clamp(27px,5svh,46px);left:50%;width:min(310px,78vw);min-width:0;margin:0;transform:translateX(-50%)}
.poster-royal-cream .poster-photo{inset:clamp(190px,28svh,245px) 11% clamp(250px,34svh,300px);border-width:8px}
.poster-garden .poster-photo{inset:clamp(155px,23svh,210px) 16% auto;width:auto;height:auto;aspect-ratio:1;overflow:hidden;clip-path:circle(50% at 50% 50%)}
.poster-garden .poster-photo img{width:100%;height:100%;border-radius:50%;object-fit:cover}
.poster-garden .poster-content h1{top:clamp(235px,34svh,300px);width:90%;font-size:clamp(25px,6.5vw,34px);line-height:1.05;letter-spacing:.045em;white-space:nowrap}
.poster-garden .poster-content h1 span,.poster-garden .poster-content h1 i{display:inline;white-space:nowrap}
.poster-garden .poster-content h1 i{margin-inline:.06em;font-size:.9em}
.poster-garden .poster-date{top:clamp(470px,66svh,565px);left:0;right:0;font-size:13px;letter-spacing:.22em}
.poster-garden .poster-guest{bottom:clamp(120px,17svh,155px)}
@media(max-width:480px){.poster-royal-cream .poster-kicker,.poster-garden .poster-kicker{top:38px}.poster-royal-cream .poster-content h1{top:72px;font-size:31px}.poster-royal-cream .poster-date{top:132px}.poster-royal-cream .poster-photo{inset:174px 10% 270px}.poster-garden .poster-photo{inset:144px 15% auto}.poster-garden .poster-content h1{top:220px;font-size:24px}.poster-garden .poster-date{top:445px}.poster-royal-cream .poster-guest,.poster-garden .poster-guest{bottom:112px}.poster-royal-cream .poster-guest strong,.poster-garden .poster-guest strong{font-size:36px}.poster-royal-cream .poster-open-button,.poster-garden .poster-open-button{bottom:24px;width:min(300px,82vw)}}

/* Nắng Thông: mobile Polaroid journal, balanced inside one viewport. */
.poster-terracotta .poster-content{display:block;min-height:100svh;padding:0;color:#fff7ea;text-shadow:0 2px 14px #55201588}
.poster-terracotta .poster-content::before{inset:13px;border-color:#fff2dc80}
.poster-terracotta .poster-kicker{position:absolute;z-index:2;top:clamp(37px,6svh,58px);left:20px;right:20px;margin:0;color:#fff6e9}
.poster-terracotta .poster-content h1{position:absolute;z-index:2;top:clamp(245px,36svh,335px);left:8%;right:8%;margin:0;text-align:center;color:#fff9ed;font-size:clamp(32px,8.5vw,47px);line-height:.95;letter-spacing:.03em}
.poster-terracotta .poster-date{position:absolute;z-index:2;top:clamp(324px,47svh,425px);left:0;right:0;margin:0;text-align:center;color:#ffe4c6;font-size:14px;letter-spacing:.22em}
.poster-terracotta .poster-time{position:absolute;z-index:2;top:clamp(352px,51svh,454px);left:0;right:0;margin:0;color:#fff1da;text-align:center}
.poster-terracotta .poster-photo{inset:clamp(80px,12svh,112px) 14% auto;height:clamp(210px,31svh,285px);border:10px solid #fff5e6;outline:1px solid #7c3b27;outline-offset:-17px;transform:rotate(-3deg);box-shadow:11px 13px 0 #6d332d65,0 18px 28px #55201555}
.poster-terracotta .poster-photo::after{content:"NẮNG THÔNG · WEDDING JOURNAL";position:absolute;bottom:9px;left:0;right:0;color:#703827;font:700 7px Montserrat,sans-serif;letter-spacing:.16em;text-align:center}
.poster-terracotta .poster-guest{position:absolute;z-index:2;bottom:clamp(112px,16svh,145px);left:22px;right:22px;display:grid;gap:8px;margin:0;padding:0;color:#fff8ed}
.poster-terracotta .poster-guest strong{font-size:clamp(35px,9.5vw,48px);line-height:1}
.poster-terracotta .poster-guest em{color:#fff4e6}
.poster-terracotta .poster-open-button{position:absolute;z-index:3;bottom:clamp(25px,4svh,42px);left:50%;width:min(305px,80vw);min-width:0;margin:0;transform:translateX(-50%);border:1px solid #ffe1bc;background:#7b3929;color:#fff9ed;box-shadow:0 0 0 5px #ffead044}
@media(max-width:480px){.poster-terracotta .poster-kicker{top:34px}.poster-terracotta .poster-photo{inset:76px 13% auto;height:205px}.poster-terracotta .poster-content h1{top:238px;font-size:31px}.poster-terracotta .poster-date{top:314px}.poster-terracotta .poster-time{top:342px}.poster-terracotta .poster-guest{bottom:108px}.poster-terracotta .poster-guest strong{font-size:36px}.poster-terracotta .poster-open-button{bottom:23px;width:min(300px,82vw)}}

/* Final mobile layout lock: Seoul Blush, Nắng Thông and Thanh Điệp Xanh.
   Keep every element in one opening screen instead of letting legacy rules crop the photo. */
@media(max-width:760px){
 .poster-wisteria .poster-content,.poster-terracotta .poster-content,.poster-ocean-pearl .poster-content{display:block!important;min-height:100svh!important;padding:0!important}
 .poster-wisteria .poster-kicker,.poster-terracotta .poster-kicker,.poster-ocean-pearl .poster-kicker{position:absolute!important;z-index:4;top:42px;left:18px;right:18px;margin:0!important}
 .poster-wisteria .poster-photo,.poster-terracotta .poster-photo,.poster-ocean-pearl .poster-photo{position:absolute!important;z-index:1;top:88px!important;right:13%!important;bottom:auto!important;left:13%!important;height:220px!important;overflow:hidden}
 .poster-wisteria .poster-photo{border:8px solid #fff!important;border-radius:50% 50% 34px 34px!important;box-shadow:0 18px 33px #8d607650!important}
 .poster-terracotta .poster-photo{border:10px solid #fff5e6!important;border-radius:0!important;outline:1px solid #7c3b27!important;outline-offset:-17px!important;transform:rotate(-3deg)!important;box-shadow:11px 13px 0 #6d332d65,0 18px 28px #55201555!important}
 .poster-ocean-pearl .poster-photo{border:7px solid #fff!important;border-radius:52% 52% 16px 16px!important;box-shadow:0 15px 30px #236d6840!important}
 .poster-wisteria .poster-photo img,.poster-terracotta .poster-photo img,.poster-ocean-pearl .poster-photo img{width:100%!important;height:100%!important;object-fit:cover!important}
 .poster-wisteria .poster-content h1,.poster-terracotta .poster-content h1,.poster-ocean-pearl .poster-content h1{position:absolute!important;z-index:3;top:327px!important;left:7%!important;right:7%!important;margin:0!important;text-align:center!important;font-size:34px!important;line-height:.96!important;letter-spacing:.025em!important}
 .poster-wisteria .poster-date,.poster-terracotta .poster-date,.poster-ocean-pearl .poster-date{position:absolute!important;z-index:3;top:402px!important;left:0;right:0;margin:0!important;text-align:center!important;font-size:14px!important;letter-spacing:.2em!important}
 .poster-wisteria .poster-time,.poster-terracotta .poster-time,.poster-ocean-pearl .poster-time{position:absolute!important;z-index:3;top:431px!important;left:0;right:0;margin:0!important;text-align:center!important}
 .poster-wisteria .poster-guest,.poster-terracotta .poster-guest,.poster-ocean-pearl .poster-guest{position:absolute!important;z-index:3;bottom:115px!important;left:20px!important;right:20px!important;display:grid!important;gap:8px!important;margin:0!important;padding:0!important}
 .poster-wisteria .poster-guest strong,.poster-terracotta .poster-guest strong,.poster-ocean-pearl .poster-guest strong{font-size:37px!important;line-height:1!important}
 .poster-wisteria .poster-open-button,.poster-terracotta .poster-open-button,.poster-ocean-pearl .poster-open-button{position:absolute!important;z-index:4;bottom:27px!important;left:50%!important;width:min(300px,82vw)!important;min-width:0!important;margin:0!important;transform:translateX(-50%)!important}
 .poster-wisteria .poster-vignette{background:linear-gradient(180deg,#f6e6ef33 0%,#7a507544 55%,#f7e8ef 100%)!important}
 .poster-terracotta .poster-vignette{background:linear-gradient(180deg,#54201618 0%,#6d2a2270 58%,#dca16d 100%)!important}
 .poster-ocean-pearl .poster-vignette{background:linear-gradient(180deg,#e7f8f333 0%,#1b777458 58%,#e0f2ed 100%)!important}
}
@media(max-width:480px){
 .poster-wisteria .poster-kicker,.poster-terracotta .poster-kicker,.poster-ocean-pearl .poster-kicker{top:35px}
 .poster-wisteria .poster-photo,.poster-terracotta .poster-photo,.poster-ocean-pearl .poster-photo{top:78px!important;height:200px!important}
 .poster-wisteria .poster-content h1,.poster-terracotta .poster-content h1,.poster-ocean-pearl .poster-content h1{top:298px!important;font-size:31px!important}
 .poster-wisteria .poster-date,.poster-terracotta .poster-date,.poster-ocean-pearl .poster-date{top:365px!important}
 .poster-wisteria .poster-time,.poster-terracotta .poster-time,.poster-ocean-pearl .poster-time{top:393px!important}
 .poster-wisteria .poster-guest,.poster-terracotta .poster-guest,.poster-ocean-pearl .poster-guest{bottom:108px!important}
 .poster-wisteria .poster-open-button,.poster-terracotta .poster-open-button,.poster-ocean-pearl .poster-open-button{bottom:23px!important}
}

/* Hanji Mộc: crimson diamond portrait composition, identical on desktop and mobile. */
body.template-ivory-pocket{background:#220713}
body.template-ivory-pocket .cover-hanji-moc{width:min(100%,720px);min-height:1350px;margin-inline:auto;padding:68px 46px 54px;overflow:hidden;isolation:isolate;color:#f5d690;background:radial-gradient(circle at 50% 43%,#a42656 0,#711633 36%,#420b20 70%,#230711 100%);box-shadow:0 0 70px #08010799}
body.template-ivory-pocket .cover-hanji-moc::before{content:"";z-index:0;position:absolute;top:215px;left:110px;width:500px;height:500px;border:1px solid #d7a24a99;transform:rotate(45deg);background:transparent;pointer-events:none}
body.template-ivory-pocket .cover-hanji-moc::after{content:"";z-index:0;position:absolute;left:48px;right:48px;top:405px;height:650px;border:1px solid #d7a24a78;border-radius:50%;pointer-events:none}
body.template-ivory-pocket .cover-hanji-moc .cover-kicker{position:relative;z-index:3;color:#f0c568;font-size:11px;letter-spacing:.42em}
body.template-ivory-pocket .cover-hanji-moc>h1{display:none}
body.template-ivory-pocket .cover-hanji-moc .portrait-piece{top:435px;bottom:auto;z-index:2;display:flex;flex-direction:column;width:280px;gap:25px;text-align:center}
body.template-ivory-pocket .cover-hanji-moc .groom-piece{left:35px;right:auto}
body.template-ivory-pocket .cover-hanji-moc .bride-piece{left:auto;right:35px}
body.template-ivory-pocket .cover-hanji-moc .portrait-piece img{order:0;width:265px;height:360px;margin-inline:auto;border:0;border-radius:0;outline:1px solid #f3c462;outline-offset:8px;box-shadow:0 18px 45px #15020c99;clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);filter:none}
body.template-ivory-pocket .cover-hanji-moc .portrait-piece div{order:1;display:flex;flex-direction:column;gap:10px;align-items:center}
body.template-ivory-pocket .cover-hanji-moc .portrait-piece small{color:#efc367;font-size:10px;letter-spacing:.2em}
body.template-ivory-pocket .cover-hanji-moc .portrait-piece b{color:#fff0c7;font:500 34px/1.05 "Cormorant Garamond",serif;text-shadow:0 3px 14px #18030b}
body.template-ivory-pocket .cover-hanji-moc .portrait-path{display:none}
body.template-ivory-pocket .cover-hanji-moc .duyen-heart-seal{z-index:12;top:615px;left:50%;width:94px;height:82px;background:#efc366;border:10px solid #96324f;border-radius:50%;box-shadow:0 0 0 1px #f0c46c;transform:translate(-50%,-50%)}
body.template-ivory-pocket .cover-hanji-moc .duyen-heart-seal::before,body.template-ivory-pocket .cover-hanji-moc .duyen-heart-seal::after,body.template-ivory-pocket .cover-hanji-moc .duyen-heart-seal .heart-outline,body.template-ivory-pocket .cover-hanji-moc .duyen-heart-seal .heart-spark{display:none}
body.template-ivory-pocket .cover-hanji-moc .duyen-heart-seal .heart-solid{inset:0;display:grid;width:auto;height:auto;color:#7b1738;font-size:0;transform:none;animation:none}
body.template-ivory-pocket .cover-hanji-moc .duyen-heart-seal .heart-solid::after{content:"&";font:400 47px/1 "Great Vibes",cursive}
body.template-ivory-pocket .cover-hanji-moc .cover-couple-name{position:absolute;z-index:5;left:55px;right:55px;bottom:145px;display:block;margin:0;color:#ffe8a8;font:400 61px/1.05 var(--wedding-font,"Great Vibes",cursive);text-align:center;text-shadow:0 4px 20px #18030c}
body.template-ivory-pocket .cover-hanji-moc .cover-date{z-index:5;bottom:50px;color:#efc367;font-size:11px;letter-spacing:.2em}
body.template-ivory-pocket .cover-hanji-moc+main{margin-top:0;border-top:96px solid #220713}
@media(max-width:760px){body.template-ivory-pocket .cover-hanji-moc{width:100%;min-height:860px;padding:54px 25px;box-shadow:none}body.template-ivory-pocket .cover-hanji-moc::before{top:18%;left:18%;width:64%;height:auto;aspect-ratio:1}body.template-ivory-pocket .cover-hanji-moc::after{left:11%;right:11%;top:35%;height:53%;border-color:#d7a24a55}body.template-ivory-pocket .cover-hanji-moc .portrait-piece{top:28%;width:43%;gap:14px}body.template-ivory-pocket .cover-hanji-moc .groom-piece{left:7%}body.template-ivory-pocket .cover-hanji-moc .bride-piece{left:auto;right:7%}body.template-ivory-pocket .cover-hanji-moc .portrait-piece img{width:100%;height:auto;aspect-ratio:3/4;outline-offset:5px}body.template-ivory-pocket .cover-hanji-moc .portrait-piece b{font-size:clamp(23px,7vw,32px)}body.template-ivory-pocket .cover-hanji-moc .duyen-heart-seal{top:48%;width:76px;height:68px;border-width:7px}body.template-ivory-pocket .cover-hanji-moc .duyen-heart-seal .heart-solid::after{font-size:38px}body.template-ivory-pocket .cover-hanji-moc .cover-couple-name{left:24px;right:24px;bottom:105px;font-size:clamp(39px,12vw,55px)}body.template-ivory-pocket .cover-hanji-moc .cover-date{bottom:35px;font-size:9px}.template-ivory-pocket .cover-hanji-moc~main .families-section{padding-top:86px}}

/* Couple portraits for the four ceremonial covers that previously had text only. */
.cover-couple-portraits{position:relative;z-index:2;display:flex;align-items:center;justify-content:center;gap:clamp(14px,3vw,28px)}
.cover-couple-portraits article{overflow:hidden;background:#ffffff1a}.cover-couple-portraits img{display:block;width:100%;height:100%;object-fit:cover}
.cover-long-phung{gap:clamp(16px,3vh,28px)}.long-phung-portraits article{width:clamp(118px,16vw,190px);height:clamp(160px,22vw,250px);border:5px solid #edc47c;outline:1px solid #fff0c2;outline-offset:5px;clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);box-shadow:0 12px 26px #27030e88}.long-phung-portraits article:first-child{transform:translateY(-12px)}.long-phung-portraits article:last-child{transform:translateY(12px)}.cover-long-phung h1{position:relative;z-index:3;font-size:clamp(36px,6vw,66px)}
.cover-hoa-moc{gap:20px}.hoa-moc-portraits article{width:clamp(112px,16vw,180px);height:clamp(145px,20vw,230px);border:7px solid #fffdf1;outline:1px solid #53755c;outline-offset:5px;border-radius:52% 48% 44% 56% / 58% 42% 58% 42%;box-shadow:0 15px 27px #1f4d3a42}.hoa-moc-portraits article:first-child{transform:rotate(-7deg) translateY(-7px)}.hoa-moc-portraits article:last-child{transform:rotate(7deg) translateY(7px)}.cover-hoa-moc .moc-monogram{position:absolute;z-index:4;width:58px;height:58px;font-size:24px;background:#fffdf4}.cover-hoa-moc .moc-monogram i{font-size:16px}.cover-hoa-moc h1{position:relative;z-index:3}
.cover-thu-tinh{gap:0;padding-top:clamp(42px,7vw,75px);padding-bottom:clamp(42px,7vw,75px)}.thu-tinh-portraits{position:absolute;top:9%;right:7%;gap:0}.thu-tinh-portraits article{width:clamp(102px,15vw,164px);height:clamp(132px,19vw,215px);padding:6px;background:#fffdf5;box-shadow:10px 13px 0 #4e403525}.thu-tinh-portraits article:first-child{transform:rotate(-9deg) translateX(18px)}.thu-tinh-portraits article:last-child{transform:rotate(8deg)}.letter-sheet{z-index:2;margin-top:clamp(80px,10vw,145px)}
.cover-hy-kim{gap:16px}.hy-kim-portraits article{width:clamp(110px,16vw,180px);height:clamp(145px,20vw,230px);border:2px double #a27c36;outline:5px solid #fff9e9;box-shadow:0 13px 25px #745a2b30}.hy-kim-portraits article:first-child{transform:translateY(-10px)}.hy-kim-portraits article:last-child{transform:translateY(10px)}.cover-hy-kim .hy-kim-frame{min-height:410px;padding:36px 28px}.cover-hy-kim .hy-kim-monogram{width:82px;height:82px;font-size:35px}.cover-hy-kim .hy-kim-monogram i{font-size:21px}
@media(max-width:600px){.cover-couple-portraits{gap:16px}.long-phung-portraits article{width:122px;height:166px;border-width:4px;outline-offset:4px}.cover-long-phung h1{font-size:clamp(34px,11vw,48px)}.hoa-moc-portraits article{width:116px;height:150px;border-width:5px;outline-offset:4px}.cover-thu-tinh{min-height:880px}.thu-tinh-portraits{top:8%;right:8%}.thu-tinh-portraits article{width:104px;height:135px;padding:5px}.letter-sheet{width:min(390px,87vw);min-height:430px;margin-top:140px;padding:45px 22px}.hy-kim-portraits article{width:112px;height:148px;outline-width:4px}.cover-hy-kim .hy-kim-frame{min-height:350px;padding:28px 22px}.cover-hy-kim .hy-kim-monogram{width:70px;height:70px;font-size:31px}}

/* Opening poster reset: each welcome view owns a readable, viewport-safe hierarchy. */
.invitation-poster{
    --poster-paper:#fffaf2;
    --poster-ink:#372127;
    --poster-muted:#6e5558;
    --poster-line:rgba(255,255,255,.6);
    --poster-action:#7a2640;
    --poster-action-ink:#fffaf0;
    --poster-shadow:rgba(30,8,16,.34);
    display:block;
    isolation:isolate;
    overflow:hidden;
    padding:0!important;
    background:var(--poster-paper)!important;
    color:var(--poster-ink);
}
.invitation-poster .poster-photo{background:linear-gradient(145deg,color-mix(in srgb,var(--primary) 62%,#fff),color-mix(in srgb,var(--primary) 82%,#111))}
.invitation-poster .poster-photo img{filter:contrast(.94) saturate(.88);opacity:.96}
.invitation-poster .poster-vignette{background:linear-gradient(180deg,rgba(19,10,13,.1) 0%,rgba(19,10,13,.03) 35%,rgba(19,10,13,.72) 100%)}
.invitation-poster .poster-content{
    position:relative;
    z-index:2;
    display:grid;
    width:min(100%,620px);
    min-height:100svh;
    margin:auto;
    padding:max(52px,env(safe-area-inset-top)) clamp(26px,7vw,56px) max(30px,env(safe-area-inset-bottom));
    color:inherit;
    text-align:center;
    text-shadow:none;
}
.invitation-poster .poster-content::before{inset:16px;border-color:var(--poster-line)}
.invitation-poster .poster-kicker{
    position:relative;
    z-index:2;
    margin:0;
    color:var(--poster-muted);
    font:700 clamp(8px,1.8vw,11px)/1.4 Montserrat,sans-serif;
    letter-spacing:.27em;
    text-shadow:none;
}
.invitation-poster .poster-kicker::before,.invitation-poster .poster-kicker::after{background:currentColor;opacity:.5}
.invitation-poster .poster-content h1{
    position:relative;
    z-index:2;
    display:block;
    max-width:min(100%,530px);
    margin:0 auto;
    color:var(--poster-ink);
    font:500 clamp(42px,10.4vw,74px)/.91 var(--wedding-font,"Cormorant Garamond",serif);
    letter-spacing:.005em;
    text-shadow:none;
}
.invitation-poster .poster-content h1 span{display:block;overflow-wrap:anywhere;text-wrap:balance}
.invitation-poster .poster-content h1 i{display:block;margin:.08em 0;color:var(--poster-muted);font:400 clamp(31px,7vw,50px)/.48 "Great Vibes",cursive}
.invitation-poster .poster-date,.invitation-poster .poster-time{position:relative;z-index:2;margin:0;color:var(--poster-muted);text-shadow:none}
.invitation-poster .poster-date{font:600 clamp(15px,3.7vw,22px)/1.2 "Cormorant Garamond",serif;letter-spacing:.19em}
.invitation-poster .poster-time{font:700 9px/1.4 Montserrat,sans-serif;letter-spacing:.24em}
.invitation-poster .poster-guest{position:relative;z-index:2;display:grid;gap:8px;max-width:100%;margin:0;padding:0;color:inherit}
.invitation-poster .poster-guest small{color:var(--poster-muted);font:700 8px/1.4 Montserrat,sans-serif;letter-spacing:.25em}
.invitation-poster .poster-guest strong{color:var(--poster-ink);font:400 clamp(31px,8.3vw,55px)/.98 "Great Vibes",cursive;overflow-wrap:anywhere}
.invitation-poster .poster-guest em{color:var(--poster-muted);font:500 clamp(12px,2.6vw,15px)/1.45 "Cormorant Garamond",serif}
.invitation-poster .poster-open-button{
    position:relative;
    z-index:4;
    min-width:min(272px,82vw);
    min-height:52px;
    margin:0 auto;
    padding:0 28px;
    border:1px solid color-mix(in srgb,var(--poster-action) 75%,#fff);
    border-radius:999px;
    background:var(--poster-action);
    box-shadow:0 10px 25px var(--poster-shadow),inset 0 1px rgba(255,255,255,.22);
    color:var(--poster-action-ink);
    font:700 10px/1 Montserrat,sans-serif;
    letter-spacing:.2em;
    text-shadow:none;
    transition:transform .22s ease,box-shadow .22s ease,background .22s ease;
}
@media(hover:hover){.invitation-poster .poster-open-button:hover{transform:translateY(-3px);box-shadow:0 15px 30px var(--poster-shadow),inset 0 1px rgba(255,255,255,.3)}}
.invitation-poster .poster-open-button:focus-visible{outline:3px solid var(--poster-action-ink);outline-offset:4px}

/* Full-bleed poster scenes. */
.poster-bordeaux,.poster-rose-noir,.poster-emerald,.poster-minimal{
    --poster-ink:#fff7ea;
    --poster-muted:#f1d2a7;
    --poster-line:rgba(255,237,205,.54);
    --poster-action:#fff8ea;
    --poster-action-ink:#461124;
    --poster-shadow:rgba(0,0,0,.42);
}
.poster-bordeaux{background:#3e1021!important}.poster-bordeaux .poster-photo{inset:0;filter:brightness(.68) saturate(.78)}.poster-bordeaux .poster-vignette{background:radial-gradient(circle at 50% 37%,transparent 0 15%,#4b1029aa 50%,#16030bd9 100%)}.poster-bordeaux .poster-content{grid-template-rows:auto 1fr auto auto minmax(116px,auto) auto;gap:clamp(12px,2.1vh,20px)}.poster-bordeaux .poster-content h1{align-self:end;color:#fff6e7}.poster-bordeaux .poster-guest{align-self:end}.poster-bordeaux .poster-kicker{color:#f0d097}.poster-bordeaux .poster-open-button{background:#f5d18a;color:#4b1425;border-color:#fff0c1}
.poster-rose-noir{background:#500b20!important;--poster-action:#e8bd72;--poster-action-ink:#450719}.poster-rose-noir .poster-photo{inset:0;filter:brightness(.46) saturate(.7)}.poster-rose-noir .poster-vignette{background:linear-gradient(180deg,#2e061066,#650d27a3 47%,#27030cd9)}.poster-rose-noir .poster-content{grid-template-rows:auto 1fr auto auto minmax(116px,auto) auto;gap:clamp(12px,2.1vh,20px)}.poster-rose-noir .poster-content::after{top:13%;z-index:0}.poster-rose-noir .poster-content h1{align-self:end;color:#ffe7b1}.poster-rose-noir .poster-kicker,.poster-rose-noir .poster-date,.poster-rose-noir .poster-time,.poster-rose-noir .poster-guest small,.poster-rose-noir .poster-guest em{color:#f1cb82}.poster-rose-noir .poster-guest strong{color:#fff1cf}
.poster-emerald{background:#06493f!important;--poster-action:#d4ad62;--poster-action-ink:#073f36}.poster-emerald .poster-photo{display:none}.poster-emerald .poster-vignette{background:radial-gradient(circle at 50% 40%,#287b6b55 0 20%,transparent 50%),linear-gradient(135deg,#052e2a,#0b6657)}.poster-emerald .poster-content{grid-template-rows:auto 1fr auto auto minmax(112px,auto) auto;gap:clamp(12px,2vh,20px)}.poster-emerald .poster-content h1{align-self:end;color:#fff0c6}.poster-emerald .poster-kicker,.poster-emerald .poster-date,.poster-emerald .poster-time,.poster-emerald .poster-guest small,.poster-emerald .poster-guest em{color:#e5c57b}.poster-emerald .poster-guest strong{color:#fff4d3}.poster-emerald .poster-content::before{inset:24px;clip-path:none}
.poster-minimal{background:#232321!important;--poster-muted:#d8d3c7;--poster-line:rgba(245,242,234,.38);--poster-action:#f7f5ec;--poster-action-ink:#272622}.poster-minimal .poster-photo{display:none}.poster-minimal .poster-vignette{background:linear-gradient(135deg,#1b1b1a,#4c4b46 52%,#1b1b19)}.poster-minimal .poster-content{justify-items:start;grid-template-rows:auto 1fr auto auto minmax(112px,auto) auto;gap:18px;padding-inline:clamp(30px,9vw,72px);text-align:left}.poster-minimal .poster-content h1{align-self:end;margin:0;color:#f6f3e9;text-align:left;font-size:clamp(49px,12vw,78px)}.poster-minimal .poster-content h1 i{text-align:left}.poster-minimal .poster-guest{justify-items:start;align-self:end;text-align:left}.poster-minimal .poster-content::before{display:block;inset:18px;border-left:0;border-right:0}.poster-minimal .poster-open-button{width:100%;border-radius:0}

/* Light-paper portrait scenes. */
.poster-royal-cream,.poster-garden,.poster-ocean-pearl,.poster-terracotta,.poster-wisteria{
    --poster-paper:#f9f3e7;
    --poster-ink:#523e2c;
    --poster-muted:#8b6a44;
    --poster-line:rgba(100,75,41,.36);
    --poster-action:#7d5b31;
    --poster-action-ink:#fffaf0;
    --poster-shadow:rgba(83,54,25,.2);
}
.poster-royal-cream .poster-content,.poster-garden .poster-content,.poster-ocean-pearl .poster-content,.poster-terracotta .poster-content,.poster-wisteria .poster-content{grid-template-rows:auto minmax(220px,1fr) auto auto minmax(105px,auto) auto;gap:clamp(10px,1.7vh,17px)}
.poster-royal-cream .poster-photo,.poster-garden .poster-photo,.poster-ocean-pearl .poster-photo,.poster-terracotta .poster-photo,.poster-wisteria .poster-photo{z-index:1;inset:clamp(116px,18svh,160px) 15% auto;height:clamp(205px,31svh,310px)}
.poster-royal-cream .poster-content h1,.poster-garden .poster-content h1,.poster-ocean-pearl .poster-content h1,.poster-terracotta .poster-content h1,.poster-wisteria .poster-content h1{align-self:end;font-size:clamp(34px,8.5vw,59px)}
.poster-royal-cream .poster-guest,.poster-garden .poster-guest,.poster-ocean-pearl .poster-guest,.poster-terracotta .poster-guest,.poster-wisteria .poster-guest{align-self:end}
.poster-royal-cream{--poster-paper:#f6ead3;--poster-ink:#554026;--poster-muted:#94703a;--poster-action:#805b2c}.poster-royal-cream .poster-photo{border:9px solid #fffaf0;box-shadow:0 17px 32px #6c4d2426}.poster-royal-cream .poster-vignette{background:linear-gradient(180deg,#fff6dfcc 0 22%,transparent 45%,#d7b46b44 100%)}.poster-royal-cream .poster-content::before{border-top:1px solid #9d793f66;border-bottom:1px solid #9d793f66;border-left:0;border-right:0}
.poster-garden{--poster-paper:#f4f5e8;--poster-ink:#315e54;--poster-muted:#527b69;--poster-line:#48736088;--poster-action:#3d705d}.poster-garden .poster-photo{border:7px double #4b7563;border-radius:50%;box-shadow:0 0 0 11px #cfae6830}.poster-garden .poster-vignette{background:radial-gradient(circle at 50% 42%,transparent 0 24%,#f4f5e8d9 67%,#eff1df 100%)}.poster-garden .poster-content h1{font-size:clamp(31px,7.4vw,51px);letter-spacing:.04em}.poster-garden .poster-open-button{border-radius:3px}
.poster-ocean-pearl{--poster-paper:#e4f3ef;--poster-ink:#175d64;--poster-muted:#28777b;--poster-line:#3e8f8c88;--poster-action:#14716d}.poster-ocean-pearl .poster-photo{border:7px solid #fbfffd;border-radius:53% 47% 18px 18px;box-shadow:0 16px 32px #236d6833}.poster-ocean-pearl .poster-vignette{background:linear-gradient(180deg,#e7f8f3cc 0 24%,transparent 52%,#a6d8d0a8 100%)}.poster-ocean-pearl .poster-content::before{border-radius:38% 38% 18px 18px}
.poster-terracotta{--poster-paper:#dfaa7c;--poster-ink:#6b3325;--poster-muted:#8d4933;--poster-line:#75382788;--poster-action:#783726}.poster-terracotta .poster-photo{border:10px solid #fff3e4;outline:1px solid #743423;outline-offset:-17px;box-shadow:11px 14px 0 #713b2840;transform:rotate(-4deg)}.poster-terracotta .poster-vignette{background:linear-gradient(180deg,#f6d5acbb 0 24%,transparent 51%,#bd6749a6 100%)}.poster-terracotta .poster-content::before{border-color:#713c2b70}.poster-terracotta .poster-open-button{border-radius:4px}
.poster-wisteria{--poster-paper:#f5e7ef;--poster-ink:#5e486f;--poster-muted:#87618c;--poster-line:#926f9b77;--poster-action:#856187}.poster-wisteria .poster-photo{border:8px solid #fff;border-radius:50% 50% 35px 35px;box-shadow:0 18px 38px #7f56772b}.poster-wisteria .poster-vignette{background:linear-gradient(180deg,#f8eff6cc 0 23%,transparent 50%,#cda9c6a6 100%)}.poster-wisteria .poster-content::before{border-radius:50% 50% 19px 19px}

/* Letterpress and art-deco scenes use solid paper instead of an empty media slot. */
.poster-midnight-silver,.poster-ivory-pocket,.poster-hy-kim{--poster-paper:#fffdf5;--poster-ink:#4c4036;--poster-muted:#7d6251;--poster-line:#715c4c88;--poster-action:#7d4146;--poster-action-ink:#fffaf3;--poster-shadow:rgba(64,45,31,.25)}
.poster-midnight-silver .poster-photo,.poster-ivory-pocket .poster-photo,.poster-hy-kim .poster-photo{display:none}.poster-midnight-silver .poster-content,.poster-ivory-pocket .poster-content,.poster-hy-kim .poster-content{width:min(86%,500px);min-height:calc(100svh - 12svh);margin-top:6svh;grid-template-rows:auto 1fr auto auto minmax(110px,auto) auto;gap:clamp(11px,2vh,20px);padding:clamp(48px,8vh,78px) clamp(24px,6vw,42px) clamp(28px,5vh,48px);background:var(--poster-paper);box-shadow:12px 15px 0 color-mix(in srgb,var(--poster-muted) 17%,transparent),0 23px 45px var(--poster-shadow)}
.poster-midnight-silver .poster-content h1,.poster-ivory-pocket .poster-content h1,.poster-hy-kim .poster-content h1{align-self:end}.poster-midnight-silver .poster-guest,.poster-ivory-pocket .poster-guest,.poster-hy-kim .poster-guest{align-self:end}.poster-midnight-silver{--poster-paper:#fffdf3;--poster-ink:#443934;--poster-muted:#76534b;--poster-line:#66584d88;--poster-action:#8e454c}.poster-midnight-silver .poster-vignette{background:repeating-linear-gradient(-12deg,#fff8 0 1px,transparent 1px 5px),#d8d4ca}.poster-midnight-silver .poster-content{transform:rotate(-1deg)}.poster-ivory-pocket{--poster-paper:#fffdf5;--poster-ink:#60482a;--poster-muted:#896a37;--poster-line:#9e7b3f88;--poster-action:#705427}.poster-ivory-pocket .poster-vignette{background:repeating-linear-gradient(0deg,#7c5b2c0b 0 1px,transparent 1px 5px),#f1e2bf}.poster-ivory-pocket .poster-content::before{border:2px double #9f7d42}.poster-ivory-pocket .poster-open-button{border-radius:3px}.poster-hy-kim{--poster-paper:#fffdf6;--poster-ink:#745a2b;--poster-muted:#977538;--poster-line:#a27c3688;--poster-action:#987536}.poster-hy-kim .poster-vignette{background:radial-gradient(circle at 50% 40%,#fff 0,transparent 36%),linear-gradient(145deg,#fff7e4,#d5b46d33)}.poster-hy-kim .poster-content{border:2px double #a27c36;box-shadow:0 20px 40px #745a2b26}.poster-hy-kim .poster-content::before{inset:13px;border:1px solid #b5914e66}.poster-hy-kim .poster-content::after{content:"◇";position:absolute;z-index:0;top:15%;left:50%;color:#c9a45a24;font:170px/1 Georgia,serif;transform:translateX(-50%)}.poster-hy-kim .poster-content>*{position:relative;z-index:1}.poster-hy-kim .poster-open-button{border-radius:2px}

@media(max-width:760px){
    .invitation-poster .poster-content{width:100%;min-height:100svh;margin:0;padding:max(38px,env(safe-area-inset-top)) 22px max(22px,env(safe-area-inset-bottom))}
    .invitation-poster .poster-content::before{inset:11px}
    .invitation-poster .poster-kicker{font-size:8px;letter-spacing:.21em}
    .invitation-poster .poster-kicker::before,.invitation-poster .poster-kicker::after{width:clamp(22px,7vw,38px);margin-inline:8px}
    .invitation-poster .poster-content h1{font-size:clamp(35px,10vw,55px)}
    .invitation-poster .poster-date{font-size:14px;letter-spacing:.15em}
    .invitation-poster .poster-time{font-size:8px;letter-spacing:.2em}
    .invitation-poster .poster-guest strong{font-size:clamp(30px,9vw,45px)}
    .invitation-poster .poster-guest em{font-size:12px}
    .invitation-poster .poster-open-button{min-width:min(292px,82vw);min-height:50px;font-size:9px}
    .poster-bordeaux .poster-content,.poster-rose-noir .poster-content,.poster-emerald .poster-content,.poster-minimal .poster-content{grid-template-rows:auto 1fr auto auto minmax(101px,auto) auto}
    .poster-royal-cream .poster-content,.poster-garden .poster-content,.poster-ocean-pearl .poster-content,.poster-terracotta .poster-content,.poster-wisteria .poster-content{grid-template-rows:auto minmax(196px,1fr) auto auto minmax(94px,auto) auto}
    .poster-royal-cream .poster-photo,.poster-garden .poster-photo,.poster-ocean-pearl .poster-photo,.poster-terracotta .poster-photo,.poster-wisteria .poster-photo{inset:clamp(94px,15svh,118px) 14% auto;height:clamp(190px,29svh,245px)}
    .poster-royal-cream .poster-content h1,.poster-garden .poster-content h1,.poster-ocean-pearl .poster-content h1,.poster-terracotta .poster-content h1,.poster-wisteria .poster-content h1{font-size:clamp(30px,8.5vw,43px)}
    .poster-minimal .poster-content{padding-inline:30px}.poster-minimal .poster-content h1{font-size:clamp(45px,13vw,67px)}
    .poster-midnight-silver .poster-content,.poster-ivory-pocket .poster-content,.poster-hy-kim .poster-content{width:min(88%,470px);min-height:86svh;margin-top:7svh;padding:clamp(44px,7vh,64px) 22px 28px}
}
@media(max-width:380px){.invitation-poster .poster-content{padding-inline:17px}.invitation-poster .poster-guest em{font-size:11px}.poster-royal-cream .poster-photo,.poster-garden .poster-photo,.poster-ocean-pearl .poster-photo,.poster-terracotta .poster-photo,.poster-wisteria .poster-photo{height:180px}.poster-royal-cream .poster-content h1,.poster-garden .poster-content h1,.poster-ocean-pearl .poster-content h1,.poster-terracotta .poster-content h1,.poster-wisteria .poster-content h1{font-size:29px}}
@media(prefers-reduced-motion:reduce){.invitation-poster .poster-open-button{transition:none}.poster-midnight-silver .poster-content{transform:none}}

/* Nắng Thông cover only: reserve the center lane for names on phones. */
@media(max-width:760px){
    body.template-terracotta .cover-nang-thong .polaroid-right{
        right:-3%;
        bottom:-14%;
        width:120px;
    }
    body.template-terracotta .cover-nang-thong h1{
        max-width:70%;
        margin-inline:auto;
        line-height:.88;
    }
    body.template-terracotta .cover-nang-thong .cover-date{
        margin-top:14px;
        padding:7px 13px;
        font-size:11px;
    }
    body.template-terracotta .blessing-stream,
    body.template-terracotta .invite-summary-toggle,
    body.template-terracotta .journey-hint{display:none!important}
}

/* Nắng Thông phone cover: fixed, non-overlapping journal composition. */
@media(max-width:760px){
    body.template-terracotta .cover-nang-thong{
        min-height:100svh;
        padding:0;
        display:block;
    }
    body.template-terracotta .cover-nang-thong .cover-kicker{
        position:absolute;
        z-index:4;
        top:8%;
        left:0;
        right:0;
        margin:0;
    }
    body.template-terracotta .cover-nang-thong .polaroid-card{
        width:112px;
        padding:7px 7px 20px;
        z-index:2;
    }
    body.template-terracotta .cover-nang-thong .polaroid-card img{
        height:142px;
    }
    body.template-terracotta .cover-nang-thong .polaroid-left{
        top:14%;
        left:5%;
        transform:rotate(-7deg);
    }
    body.template-terracotta .cover-nang-thong .polaroid-right{
        right:5%;
        bottom:5%;
        width:108px;
        transform:rotate(7deg);
    }
    body.template-terracotta .cover-nang-thong .pine-stamp{
        position:absolute;
        z-index:3;
        top:31%;
        left:50%;
        width:68px;
        height:68px;
        font-size:36px;
        transform:translateX(-50%);
    }
    body.template-terracotta .cover-nang-thong h1{
        position:absolute;
        z-index:4;
        top:42%;
        left:50%;
        width:78%;
        max-width:360px;
        margin:0;
        transform:translateX(-50%);
        font-size:clamp(39px,10.8vw,50px);
        line-height:.9;
        text-align:center;
    }
    body.template-terracotta .cover-nang-thong .cover-date{
        position:absolute;
        z-index:4;
        top:60%;
        left:50%;
        margin:0;
        transform:translateX(-50%);
        white-space:nowrap;
    }
}

/* Nắng Thông Save The Date: reference order is heading, names, photo, date. */
body.template-terracotta .cover-nang-thong{
    min-height:100svh!important;
    padding:0!important;
    display:block!important;
    overflow:hidden!important;
    background:
        radial-gradient(ellipse 84% 22% at 108% 24%,#f3b2c470 0 45%,transparent 46%),
        radial-gradient(ellipse 100% 18% at -8% 91%,#f2a9c06b 0 45%,transparent 46%),
        #fffdfc!important;
}
body.template-terracotta .cover-nang-thong::before{
    content:""!important;
    position:absolute!important;
    inset:auto -22% 5% auto!important;
    width:88%!important;
    height:20%!important;
    border:13px solid #f3adbe80!important;
    border-radius:55% 45% 50% 50%!important;
    background:none!important;
    transform:rotate(-17deg)!important;
}
body.template-terracotta .cover-nang-thong>.cover-kicker{
    position:absolute!important;
    z-index:5!important;
    top:7%!important;
    right:0!important;
    left:0!important;
    margin:0!important;
    color:#161313!important;
    -webkit-text-fill-color:#161313!important;
    font:400 clamp(36px,7vw,58px)/1 "Great Vibes",cursive!important;
    letter-spacing:0!important;
    text-transform:none!important;
}
body.template-terracotta .cover-nang-thong>.cover-kicker::after{display:none!important}
body.template-terracotta .cover-nang-thong>h1{
    position:absolute!important;
    z-index:5!important;
    top:16%!important;
    right:5%!important;
    left:5%!important;
    display:flex!important;
    align-items:center!important;
    justify-content:center!important;
    gap:clamp(10px,2.4vw,24px)!important;
    width:auto!important;
    max-width:none!important;
    margin:0!important;
    padding:0!important;
    transform:none!important;
    color:#302a29!important;
    -webkit-text-fill-color:#302a29!important;
    -webkit-text-stroke:0 transparent!important;
    font:400 clamp(27px,5.3vw,43px)/1 "Great Vibes",cursive!important;
    text-align:center!important;
    text-shadow:none!important;
    white-space:nowrap!important;
}
body.template-terracotta .cover-nang-thong>h1>span{display:block!important;white-space:nowrap!important}
body.template-terracotta .cover-nang-thong>h1>i{
    display:block!important;
    width:auto!important;
    min-width:0!important;
    height:auto!important;
    margin:0!important;
    padding:0!important;
    color:#9a8986!important;
    -webkit-text-fill-color:#9a8986!important;
    -webkit-text-stroke:0 transparent!important;
    font:400 .72em/1 "Great Vibes",cursive!important;
    text-shadow:none!important;
}
body.template-terracotta .cover-nang-thong>.polaroid-left{
    position:absolute!important;
    z-index:4!important;
    top:26%!important;
    right:50%!important;
    bottom:auto!important;
    left:auto!important;
    width:min(56vw,370px)!important;
    padding:7px!important;
    background:#fff!important;
    box-shadow:0 16px 30px #3d29262e!important;
    transform:translateX(50%)!important;
}
body.template-terracotta .cover-nang-thong>.polaroid-left img{
    width:100%!important;
    height:auto!important;
    aspect-ratio:3 / 4!important;
    object-fit:cover!important;
}
body.template-terracotta .cover-nang-thong>.polaroid-left small,
body.template-terracotta .cover-nang-thong>.polaroid-right,
body.template-terracotta .cover-nang-thong>.pine-stamp{display:none!important}
body.template-terracotta .cover-nang-thong>.cover-date{
    position:absolute!important;
    z-index:5!important;
    top:77%!important;
    right:50%!important;
    bottom:auto!important;
    left:auto!important;
    width:min(76%,500px)!important;
    margin:0!important;
    padding:clamp(11px,1.8vw,16px) 10px!important;
    border-top:1px solid #201c1b!important;
    border-bottom:1px solid #201c1b!important;
    border-right:0!important;
    border-left:0!important;
    background:#fffdfbd9!important;
    color:#211c1b!important;
    -webkit-text-fill-color:#211c1b!important;
    transform:translateX(50%)!important;
    font:400 clamp(27px,5.5vw,48px)/1 Montserrat,sans-serif!important;
    letter-spacing:.08em!important;
    text-align:center!important;
    text-shadow:none!important;
    white-space:nowrap!important;
}
@media(max-width:760px){
    body.template-terracotta .cover-nang-thong>h1{top:16%!important;font-size:clamp(26px,8vw,38px)!important;gap:10px!important}
    body.template-terracotta .cover-nang-thong>.polaroid-left{top:27%!important;width:56vw!important}
    body.template-terracotta .cover-nang-thong>.cover-date{top:77%!important;width:78%!important;font-size:clamp(24px,7.2vw,34px)!important}
}

/* Reset legacy absolute poster placements so every theme follows its scene grid. */
.poster-royal-cream .poster-content,.poster-garden .poster-content,.poster-ocean-pearl .poster-content,.poster-terracotta .poster-content,.poster-wisteria .poster-content{display:grid;align-items:stretch}
.poster-royal-cream .poster-kicker,.poster-garden .poster-kicker,.poster-ocean-pearl .poster-kicker,.poster-terracotta .poster-kicker,.poster-wisteria .poster-kicker,.poster-royal-cream .poster-content h1,.poster-garden .poster-content h1,.poster-ocean-pearl .poster-content h1,.poster-terracotta .poster-content h1,.poster-wisteria .poster-content h1,.poster-royal-cream .poster-date,.poster-garden .poster-date,.poster-ocean-pearl .poster-date,.poster-terracotta .poster-date,.poster-wisteria .poster-date,.poster-royal-cream .poster-time,.poster-garden .poster-time,.poster-ocean-pearl .poster-time,.poster-terracotta .poster-time,.poster-wisteria .poster-time,.poster-royal-cream .poster-guest,.poster-garden .poster-guest,.poster-ocean-pearl .poster-guest,.poster-terracotta .poster-guest,.poster-wisteria .poster-guest,.poster-royal-cream .poster-open-button,.poster-garden .poster-open-button,.poster-ocean-pearl .poster-open-button,.poster-terracotta .poster-open-button,.poster-wisteria .poster-open-button{position:relative;top:auto;right:auto;bottom:auto;left:auto;transform:none}
.poster-royal-cream .poster-content h1,.poster-garden .poster-content h1,.poster-ocean-pearl .poster-content h1,.poster-terracotta .poster-content h1,.poster-wisteria .poster-content h1{width:auto;text-align:center;white-space:normal}
@media(max-width:760px){.poster-royal-cream .poster-content,.poster-garden .poster-content,.poster-ocean-pearl .poster-content,.poster-terracotta .poster-content,.poster-wisteria .poster-content{display:grid!important}.poster-royal-cream .poster-kicker,.poster-garden .poster-kicker,.poster-ocean-pearl .poster-kicker,.poster-terracotta .poster-kicker,.poster-wisteria .poster-kicker,.poster-royal-cream .poster-content h1,.poster-garden .poster-content h1,.poster-ocean-pearl .poster-content h1,.poster-terracotta .poster-content h1,.poster-wisteria .poster-content h1,.poster-royal-cream .poster-date,.poster-garden .poster-date,.poster-ocean-pearl .poster-date,.poster-terracotta .poster-date,.poster-wisteria .poster-date,.poster-royal-cream .poster-time,.poster-garden .poster-time,.poster-ocean-pearl .poster-time,.poster-terracotta .poster-time,.poster-wisteria .poster-time,.poster-royal-cream .poster-guest,.poster-garden .poster-guest,.poster-ocean-pearl .poster-guest,.poster-terracotta .poster-guest,.poster-wisteria .poster-guest,.poster-royal-cream .poster-open-button,.poster-garden .poster-open-button,.poster-ocean-pearl .poster-open-button,.poster-terracotta .poster-open-button,.poster-wisteria .poster-open-button{position:relative!important;top:auto!important;right:auto!important;bottom:auto!important;left:auto!important;transform:none!important}.poster-royal-cream .poster-photo,.poster-garden .poster-photo,.poster-ocean-pearl .poster-photo,.poster-terracotta .poster-photo,.poster-wisteria .poster-photo{top:clamp(94px,15svh,118px)!important;right:14%!important;bottom:auto!important;left:14%!important;height:clamp(190px,29svh,245px)!important}.poster-royal-cream .poster-content h1,.poster-garden .poster-content h1,.poster-ocean-pearl .poster-content h1,.poster-terracotta .poster-content h1,.poster-wisteria .poster-content h1{width:auto!important;white-space:normal!important}}

/* Complete phone-first cover pass for all 12 catalogue designs. */
@media(max-width:650px){
    .template-cover{min-height:max(780px,100svh)}

    /* 1. To Duyen: larger portraits with an open central meeting point. */
    body.template-bordeaux .cover-to-duyen{min-height:max(880px,100svh)}
    body.template-bordeaux .cover-to-duyen .portrait-piece{grid-template-columns:clamp(146px,42vw,170px) minmax(0,1fr);width:92%;gap:12px}
    body.template-bordeaux .cover-to-duyen .portrait-piece img{width:clamp(146px,42vw,170px);height:clamp(202px,57vw,232px)}
    body.template-bordeaux .cover-to-duyen .groom-piece{top:19%;left:5%}
    body.template-bordeaux .cover-to-duyen .bride-piece{right:5%;bottom:11%;grid-template-columns:minmax(0,1fr) clamp(146px,42vw,170px)}
    body.template-bordeaux .cover-to-duyen .portrait-piece b{font-size:clamp(28px,8.2vw,37px);line-height:1.04}

    /* 2. Co Lau and 3. Lien Chi: balanced portrait pairs and readable labels. */
    .cover-co-lau{min-height:max(810px,100svh);padding-inline:20px}
    .cover-co-lau h1{margin-bottom:32px;font-size:30px}
    .twin-portraits{gap:14px}.twin-portraits article{padding:7px}.twin-portraits img{height:clamp(278px,70vw,322px)}
    .twin-portraits b{font-size:clamp(25px,7vw,33px);line-height:1.05}
    body.template-garden .cover-lien-chi{min-height:max(810px,100svh);padding-inline:18px}
    body.template-garden .cover-lien-chi .round-portraits{gap:18px}
    body.template-garden .cover-lien-chi .round-portraits img{width:clamp(154px,42vw,180px);height:clamp(154px,42vw,180px)}
    body.template-garden .cover-lien-chi .round-portraits b{font-size:clamp(26px,7.8vw,35px);line-height:1.02}
    body.template-garden .cover-lien-chi .round-portraits article:nth-child(2){margin-top:26px}

    /* 4. Seoul Ivory: photo arches lead, names remain in a separate safe column. */
    .cover-seoul{min-height:max(820px,100svh);padding-inline:18px}
    .arch-portrait{width:91%;grid-template-columns:clamp(142px,41vw,166px) minmax(0,1fr);gap:14px}
    .arch-portrait img{width:clamp(142px,41vw,166px);height:clamp(222px,61vw,254px)}
    .bride-arch{grid-template-columns:minmax(0,1fr) clamp(142px,41vw,166px)}
    .arch-portrait b{font-size:clamp(28px,8.3vw,38px);line-height:1.04}

    /* 5. Long Phung: bold diamond portraits while preserving its ceremonial centre. */
    .cover-long-phung{min-height:max(790px,100svh);gap:16px}
    .long-phung-portraits{gap:clamp(26px,8vw,42px)}
    .long-phung-portraits article{width:clamp(138px,38vw,166px);height:clamp(190px,52vw,230px)}
    .cover-long-phung h1{max-width:86%;font-size:clamp(42px,12vw,57px);line-height:.88}
    .cover-long-phung .cover-date{position:relative;bottom:auto;margin:2px 0 0;font-size:10px}

    /* 6. Thanh Diep Xanh: applies to the Ocean Pearl modern cover. */
    .template-ocean-pearl .cover-modern{min-height:max(800px,100svh);padding-inline:18px}
    .template-ocean-pearl .modern-portraits{grid-template-columns:1fr 46px 1fr;gap:4px}
    .template-ocean-pearl .modern-portraits img{height:clamp(255px,67vw,290px);border-width:7px}
    .template-ocean-pearl .modern-portraits b{font-size:clamp(25px,7.5vw,34px)}
    .template-ocean-pearl .cover-modern h1{bottom:84px;font-size:clamp(37px,10.6vw,49px);line-height:.92}

    /* 7. Nang Thong: exact cover sizing from well-known.zip. */
    .cover-nang-thong{min-height:max(790px,100svh);gap:18px}
    .template-terracotta .polaroid-card{width:clamp(140px,39vw,166px);padding:8px 8px 25px}
    .template-terracotta .polaroid-card img{height:clamp(170px,47vw,202px)}
    .template-terracotta .polaroid-left{top:14%;left:2%}.template-terracotta .polaroid-right{right:2%;bottom:12%}
    .cover-nang-thong h1{max-width:75%;font-size:clamp(40px,11.4vw,53px);line-height:.9}
    .cover-nang-thong .cover-date{position:relative;bottom:auto;margin:0;font-size:10px}

    /* 8. Seoul Blush: two larger memories, text protected in the centre. */
    .cover-seoul-blush{min-height:max(790px,100svh);gap:15px}
    .blush-portrait{width:clamp(144px,39vw,169px);height:clamp(216px,58vw,252px)}
    .blush-one{top:12%;left:3%;transform:rotate(-6deg)}.blush-two{right:3%;bottom:10%;transform:rotate(6deg)}
    .blush-script{max-width:72%;font-size:clamp(43px,12vw,57px);line-height:.86;text-align:center}
    .cover-seoul-blush h1{max-width:73%;font-size:clamp(38px,10.8vw,50px);line-height:.92}
    .cover-seoul-blush .cover-date{position:relative;bottom:auto;margin:0;font-size:10px;letter-spacing:.14em}

    /* 9. Hoa Moc: bigger organic frames, the monogram stays between them. */
    .cover-hoa-moc{min-height:max(790px,100svh);gap:18px}
    .hoa-moc-portraits{gap:clamp(20px,7vw,32px)}
    .hoa-moc-portraits article{width:clamp(137px,38vw,163px);height:clamp(181px,50vw,215px)}
    .cover-hoa-moc .moc-monogram{width:64px;height:64px;font-size:28px}
    .cover-hoa-moc h1{font-size:clamp(40px,11vw,51px);line-height:.9}
    .cover-hoa-moc .cover-date{position:relative;bottom:auto;margin:0;font-size:10px}

    /* 10. Thu Tinh: enlarged memories above a generous, legible letter. */
    .cover-thu-tinh{min-height:max(790px,100svh);align-content:end;gap:12px;padding:30px 0 20px}
    .thu-tinh-portraits{top:6%;right:6%;gap:9px}.thu-tinh-portraits article{width:clamp(122px,34vw,150px);height:clamp(169px,46vw,205px)}
    .letter-sheet{width:min(88vw,430px);min-height:clamp(470px,62svh,540px);margin-top:0;padding:47px 24px;gap:19px}
    .letter-sheet h1{font-size:clamp(40px,11.5vw,54px);line-height:.92}.letter-copy{font-size:clamp(16px,4.5vw,19px);line-height:1.6}
    .cover-thu-tinh .cover-date{position:relative;bottom:auto;margin:0;font-size:9px}

    /* 11. Hy Kim: a strong two-photo header and a breathable Art Deco card. */
    .cover-hy-kim{min-height:max(790px,100svh);gap:16px;padding:28px 0 20px}
    .hy-kim-portraits{gap:clamp(20px,6vw,31px)}.hy-kim-portraits article{width:clamp(140px,39vw,167px);height:clamp(190px,52vw,228px);padding:7px}
    .hy-kim-frame{width:min(89vw,440px);min-height:clamp(410px,54svh,485px);padding:38px 22px;gap:19px}
    .hy-kim-monogram{width:92px;height:92px;font-size:39px}.hy-kim-frame h1{font-size:clamp(41px,11.5vw,55px);line-height:.9}
    .cover-hy-kim .cover-date{position:relative;bottom:auto;margin:0;font-size:8px}

    /* 12. Ivory Pocket / Hanji Moc: keep both diamond photos large and the names clear below. */
    body.template-ivory-pocket .cover-hanji-moc{min-height:max(840px,100svh);padding-inline:18px}
    body.template-ivory-pocket .cover-hanji-moc .portrait-piece{top:25%;width:45%;gap:12px}
    body.template-ivory-pocket .cover-hanji-moc .groom-piece{left:4%}.template-ivory-pocket .cover-hanji-moc .bride-piece{right:4%}
    body.template-ivory-pocket .cover-hanji-moc .portrait-piece img{aspect-ratio:3/4.15}
    body.template-ivory-pocket .cover-hanji-moc .portrait-piece b{font-size:clamp(25px,7.3vw,33px)}
    body.template-ivory-pocket .cover-hanji-moc .cover-couple-name{bottom:94px;font-size:clamp(40px,12vw,54px);line-height:1.02}
    body.template-ivory-pocket .cover-hanji-moc .cover-date{bottom:28px}
}

@media(max-width:390px){
    .long-phung-portraits article{width:130px;height:182px}.cover-long-phung h1{font-size:40px}
    .twin-portraits img{height:265px}.arch-portrait img{width:136px;height:210px}.arch-portrait,.bride-arch{grid-template-columns:136px minmax(0,1fr)}.bride-arch{grid-template-columns:minmax(0,1fr) 136px}
    .template-ocean-pearl .modern-portraits img{height:242px}.polaroid-card{width:133px}.polaroid-card img{height:160px}
    .blush-portrait{width:136px;height:202px}.hoa-moc-portraits article{width:130px;height:172px}
    .thu-tinh-portraits article{width:116px;height:158px}.letter-sheet{min-height:450px}.hy-kim-portraits article{width:133px;height:182px}
}

/* Invitation opening: make the couple names the emotional focal point. */
.invitation-poster .poster-content h1{isolation:isolate;text-wrap:balance}
.invitation-poster .poster-content h1 span,.invitation-poster .poster-content h1 i{position:relative;z-index:1;animation:poster-name-rise .9s cubic-bezier(.16,.86,.25,1) both}
.invitation-poster .poster-content h1 i{animation-delay:.16s}.invitation-poster .poster-content h1 span:last-child{animation-delay:.28s}
.invitation-poster .poster-content h1::after{content:"✦";display:block;margin:.24em auto 0;color:var(--poster-muted);font:400 .26em/1 Georgia,serif;letter-spacing:.7em;opacity:.8;animation:poster-sparkle 3.4s ease-in-out infinite .8s}
.invitation-poster .poster-vignette::before,.invitation-poster .poster-vignette::after{position:absolute;z-index:1;display:grid;place-items:center;pointer-events:none;animation:poster-ornament-drift 7s ease-in-out infinite alternate}
.invitation-poster .poster-vignette::before{top:10%;left:7%;width:58px;height:58px}.invitation-poster .poster-vignette::after{right:7%;bottom:18%;width:70px;height:70px;animation-delay:-3s}

/* Each opening keeps its own wedding mood rather than using a shared sticker. */
.poster-bordeaux .poster-vignette::before,.poster-rose-noir .poster-vignette::before{content:"✦";color:#f3d58d88;font-size:24px}.poster-bordeaux .poster-vignette::after,.poster-rose-noir .poster-vignette::after{content:"❦";color:#f3d58d55;font:58px/1 "Great Vibes",cursive;transform:rotate(-18deg)}
.poster-royal-cream .poster-vignette::before,.poster-hy-kim .poster-vignette::before,.poster-ivory-pocket .poster-vignette::before{content:"◇";color:#a87c3770;font:52px/1 Georgia,serif}.poster-royal-cream .poster-vignette::after,.poster-hy-kim .poster-vignette::after,.poster-ivory-pocket .poster-vignette::after{content:"✦";color:#ad82495c;font-size:22px}
.poster-garden .poster-vignette::before,.poster-emerald .poster-vignette::before{content:"❦";color:#4a79635c;font:56px/1 "Great Vibes",cursive;transform:rotate(-25deg)}.poster-garden .poster-vignette::after,.poster-emerald .poster-vignette::after{content:"✦";color:#c79b4a7a;font-size:20px}
.poster-ocean-pearl .poster-vignette::before{content:"✦";color:#2e85847a;font-size:23px}.poster-ocean-pearl .poster-vignette::after{content:"○";color:#2c84835c;font:58px/1 Georgia,serif}
.poster-terracotta .poster-vignette::before{content:"✦";color:#73372770;font-size:21px}.poster-terracotta .poster-vignette::after{content:"❦";color:#7035264c;font:58px/1 "Great Vibes",cursive;transform:rotate(-20deg)}
.poster-wisteria .poster-vignette::before,.poster-wisteria .poster-vignette::after{content:"❀";color:#956e9a58;font:38px/1 Georgia,serif}.poster-midnight-silver .poster-vignette::before{content:"✦";color:#7f57506b;font-size:19px}.poster-midnight-silver .poster-vignette::after{content:"♡";color:#7f575051;font:47px/1 Georgia,serif}.poster-minimal .poster-vignette::before{content:"—";color:#f5f2e940;font:44px/1 Georgia,serif}.poster-minimal .poster-vignette::after{content:"✦";color:#f5f2e951;font-size:18px}

@keyframes poster-name-rise{from{opacity:0;filter:blur(5px);transform:translateY(17px) scale(.96)}to{opacity:1;filter:none;transform:none}}
@keyframes poster-sparkle{50%{opacity:.35;transform:scale(1.32) rotate(25deg)}}
@keyframes poster-ornament-drift{to{transform:translate3d(7px,-13px,0) rotate(13deg);opacity:.5}}

@media(max-width:760px){
    .invitation-poster .poster-content h1{max-width:92%;font-size:clamp(42px,11.6vw,54px);line-height:.86;letter-spacing:.008em;text-shadow:0 2px 0 #fff4,0 8px 19px color-mix(in srgb,var(--poster-muted) 24%,transparent)}
    .poster-bordeaux .poster-content h1,.poster-rose-noir .poster-content h1,.poster-emerald .poster-content h1,.poster-minimal .poster-content h1{font-size:clamp(45px,12.3vw,58px);text-shadow:0 2px 18px #12030a78,0 0 22px color-mix(in srgb,var(--poster-muted) 28%,transparent)}
    .poster-royal-cream .poster-content h1,.poster-garden .poster-content h1,.poster-ocean-pearl .poster-content h1,.poster-terracotta .poster-content h1,.poster-wisteria .poster-content h1{font-size:clamp(42px,11.6vw,53px)!important}
    .poster-midnight-silver .poster-content h1,.poster-ivory-pocket .poster-content h1,.poster-hy-kim .poster-content h1{font-size:clamp(45px,12.2vw,57px)}
    .invitation-poster .poster-content h1::after{margin-top:.2em;font-size:.24em}
    .invitation-poster .poster-vignette::before{top:8%;left:5%;width:44px;height:44px}.invitation-poster .poster-vignette::after{right:5%;bottom:15%;width:52px;height:52px}
    .poster-terracotta .poster-content h1,.poster-wisteria .poster-content h1,.poster-ocean-pearl .poster-content h1{font-size:clamp(43px,11.8vw,54px)!important}
    .poster-terracotta .poster-guest,.poster-wisteria .poster-guest,.poster-ocean-pearl .poster-guest{padding-top:4px!important}
}
@media(max-width:390px){.invitation-poster .poster-content h1{font-size:40px}.poster-bordeaux .poster-content h1,.poster-rose-noir .poster-content h1,.poster-emerald .poster-content h1,.poster-minimal .poster-content h1{font-size:43px}.poster-royal-cream .poster-content h1,.poster-garden .poster-content h1,.poster-ocean-pearl .poster-content h1,.poster-terracotta .poster-content h1,.poster-wisteria .poster-content h1{font-size:40px!important}}
@media(prefers-reduced-motion:reduce){.invitation-poster .poster-content h1 span,.invitation-poster .poster-content h1 i,.invitation-poster .poster-content h1::after,.invitation-poster .poster-vignette::before,.invitation-poster .poster-vignette::after{animation:none!important}}

/* Long Phung opening: the double-happiness mark is a deliberate focal point. */
.poster-rose-noir .poster-content::after{content:"囍"!important;position:absolute!important;z-index:4!important;top:13%!important;left:50%!important;display:block!important;color:#f5c76b!important;font:700 clamp(82px,22vw,142px)/1 serif!important;letter-spacing:0!important;opacity:1!important;text-shadow:none!important;transform:translateX(-50%) scale(.84);animation:double-happiness-rise 1s cubic-bezier(.16,.86,.25,1) .22s both!important}
.poster-rose-noir .poster-vignette::before{top:12%;left:auto;right:8%;font-size:19px;opacity:.8}.poster-rose-noir .poster-vignette::after{right:8%;bottom:13%;font-size:43px;opacity:.45}
@keyframes double-happiness-rise{from{opacity:0;filter:blur(5px);transform:translateX(-50%) translateY(14px) scale(.62)}to{opacity:1;filter:none;transform:translateX(-50%) scale(.84)}}
@media(max-width:760px){.poster-rose-noir .poster-content::after{top:12%!important;font-size:clamp(78px,21vw,112px)!important}}
@media(prefers-reduced-motion:reduce){.poster-rose-noir .poster-content::after{animation:none!important}}

/* Desktop Long Phung: force a crisp, flat double-happiness mark. */
@media(min-width:761px){
    .poster-rose-noir .poster-content::after{
        color:#ffe9af!important;
        -webkit-text-fill-color:#ffe9af!important;
        opacity:1!important;
        filter:none!important;
        mix-blend-mode:normal!important;
        text-shadow:none!important;
        -webkit-text-stroke:0 transparent;
        font-weight:700!important;
    }
}

/* Same flat, high-contrast ink on mobile and desktop. No alpha, glow or shadow. */
.poster-rose-noir .poster-content::after{
    color:#fff7ce!important;
    -webkit-text-fill-color:#fff7ce!important;
    opacity:1!important;
    filter:none!important;
    text-shadow:none!important;
    -webkit-text-stroke:0 transparent!important;
    mix-blend-mode:normal!important;
    background:none!important;
}

/* Tô Duyên: the bride and groom are the visual lead, not the family heading. */
body.template-bordeaux .cover-to-duyen .portrait-piece div{position:relative;z-index:2;padding:7px 10px 9px;border-radius:18px;background:linear-gradient(90deg,transparent,#fff9ef8c 22% 78%,transparent)}body.template-bordeaux .cover-to-duyen .portrait-piece b{position:relative;display:inline-block;font-size:clamp(40px,5.4vw,57px);color:#9a1745;text-shadow:0 1px 0 #fffdf4,0 2px 0 #d6a85d,0 7px 17px #71132f4a,0 0 20px #f4c8754d}.template-bordeaux .families-section>h2{font-size:clamp(38px,4.4vw,54px)!important;line-height:1.02!important;text-shadow:0 2px 12px #12020b88!important}@media(max-width:600px){body.template-bordeaux .cover-to-duyen .portrait-piece div{padding:6px 7px 8px}body.template-bordeaux .cover-to-duyen .portrait-piece b{font-size:clamp(38px,10.8vw,47px);line-height:1.02}.template-bordeaux .families-section>h2{font-size:clamp(38px,11.2vw,48px)!important;line-height:.96!important}.template-bordeaux .families-section>.section-label{margin-bottom:5px!important}}

/* Hanji Mộc and Hỷ Kim show the uploaded groom and bride portraits before opening. */
.poster-ivory-pocket .poster-couple-portraits,.poster-hy-kim .poster-couple-portraits{position:relative;z-index:2;display:flex;align-items:center;justify-content:center;gap:clamp(14px,4vw,26px);margin:auto}.poster-ivory-pocket .poster-couple-portrait,.poster-hy-kim .poster-couple-portrait{display:grid;place-items:center;width:clamp(104px,22vw,154px);height:clamp(132px,27vw,195px);overflow:hidden;background:linear-gradient(145deg,#f8eed9,#d9bd82);box-shadow:0 12px 24px #60482a2e}.poster-ivory-pocket .poster-couple-portrait{border:2px double #9f7d42;outline:4px solid #fff9e9;outline-offset:3px;transform:rotate(-3deg)}.poster-ivory-pocket .poster-couple-portrait:last-child{transform:rotate(3deg) translateY(10px)}.poster-hy-kim .poster-couple-portrait{border:2px double #a27c36;outline:4px solid #fff9e9;outline-offset:3px}.poster-hy-kim .poster-couple-portrait:first-child{transform:translateY(-7px)}.poster-hy-kim .poster-couple-portrait:last-child{transform:translateY(7px)}.poster-ivory-pocket .poster-couple-portrait img,.poster-hy-kim .poster-couple-portrait img{width:100%;height:100%;object-fit:cover}.poster-ivory-pocket .poster-couple-portrait b,.poster-hy-kim .poster-couple-portrait b{color:var(--poster-muted);font:400 48px/1 "Cormorant Garamond",serif}.poster-ivory-pocket .poster-content,.poster-hy-kim .poster-content{grid-template-rows:auto auto auto auto auto 1fr auto;align-items:center}.poster-ivory-pocket .poster-content h1,.poster-hy-kim .poster-content h1{align-self:center;margin:0}.poster-ivory-pocket .poster-guest,.poster-hy-kim .poster-guest{align-self:end}
@media(max-width:760px){.poster-ivory-pocket .poster-content,.poster-hy-kim .poster-content{min-height:100svh;margin:0;padding:max(36px,env(safe-area-inset-top)) 22px max(22px,env(safe-area-inset-bottom));gap:clamp(8px,1.8vh,16px)}.poster-ivory-pocket .poster-couple-portraits,.poster-hy-kim .poster-couple-portraits{gap:18px}.poster-ivory-pocket .poster-couple-portrait,.poster-hy-kim .poster-couple-portrait{width:min(29vw,130px);height:min(36vw,166px)}.poster-ivory-pocket .poster-content h1,.poster-hy-kim .poster-content h1{font-size:clamp(39px,11vw,52px)}.poster-ivory-pocket .poster-guest strong,.poster-hy-kim .poster-guest strong{font-size:clamp(29px,8.5vw,41px)}}

/* Balance the two portrait poster layouts. The former 1fr row pushed the
   invitation copy far down and made the paper card appear offset on phones. */
.poster-ivory-pocket .poster-content,.poster-hy-kim .poster-content{width:min(calc(100% - 28px),500px)!important;min-height:min(calc(100svh - 28px),900px)!important;margin:14px auto!important;grid-template-rows:none!important;grid-auto-rows:max-content;align-content:space-between!important;justify-items:center}.poster-ivory-pocket .poster-content h1,.poster-hy-kim .poster-content h1,.poster-ivory-pocket .poster-guest,.poster-hy-kim .poster-guest{align-self:center!important}
@media(max-width:760px){.poster-ivory-pocket .poster-content,.poster-hy-kim .poster-content{width:calc(100% - 28px)!important;min-height:calc(100svh - 28px)!important;margin:14px auto!important;padding:max(32px,env(safe-area-inset-top)) 22px max(22px,env(safe-area-inset-bottom))!important}.owner-toolbar~.opening.poster-ivory-pocket .poster-content,.owner-toolbar~.opening.poster-hy-kim .poster-content{padding-bottom:calc(118px + env(safe-area-inset-bottom))!important}}

/* User-selected text colors keep copy crisp on bright paper templates. */
.hero h1,.section h2,.couple-name,.formal-invitation-card>h2,.formal-couple-names,.family-card b,.ceremony-card .detail-list>p>span{color:var(--text-primary,var(--accent))!important}.hero .eyebrow,.section-label,.date-line,.family-card small,.ceremony-card>h3,.ceremony-card .detail-list b,.ceremony-card .detail-list>p>span>small,.formal-kicker,.formal-event-line,.formal-date-line{color:var(--text-secondary,var(--accent))!important}.family-card b,.ceremony-card .detail-list>p>span,.ceremony-card>h3{color:var(--text-primary,#fffaf2)!important;text-shadow:0 1px 2px rgba(31,20,18,.18)!important}.family-card small,.ceremony-card .detail-list b,.ceremony-card .detail-list>p>span>small{color:var(--text-secondary,#eadfe4)!important;text-shadow:none!important}
body.template-royal-cream .family-card b,body.template-royal-cream .ceremony-card .detail-list>p>span{color:var(--text-primary,#554026)!important}body.template-royal-cream .family-card small,body.template-royal-cream .ceremony-card .detail-list b,body.template-royal-cream .ceremony-card .detail-list>p>span>small{color:var(--text-secondary,#7c6443)!important}body.template-garden .family-card b,body.template-garden .ceremony-card .detail-list>p>span{color:var(--text-primary,#315e54)!important}body.template-garden .family-card small,body.template-garden .ceremony-card .detail-list b,body.template-garden .ceremony-card .detail-list>p>span>small{color:var(--text-secondary,#527b69)!important}body.template-minimal .family-card b,body.template-minimal .ceremony-card .detail-list>p>span{color:var(--text-primary,#252525)!important}body.template-minimal .family-card small,body.template-minimal .ceremony-card .detail-list b,body.template-minimal .ceremony-card .detail-list>p>span>small{color:var(--text-secondary,#474640)!important}body.template-ocean-pearl .family-card b,body.template-ocean-pearl .ceremony-card .detail-list>p>span{color:var(--text-primary,#175d64)!important}body.template-ocean-pearl .family-card small,body.template-ocean-pearl .ceremony-card .detail-list b,body.template-ocean-pearl .ceremony-card .detail-list>p>span>small{color:var(--text-secondary,#28777b)!important}body.template-terracotta .family-card b,body.template-terracotta .ceremony-card .detail-list>p>span{color:var(--text-primary,#6b3325)!important}body.template-terracotta .family-card small,body.template-terracotta .ceremony-card .detail-list b,body.template-terracotta .ceremony-card .detail-list>p>span>small{color:var(--text-secondary,#8d4933)!important}body.template-wisteria .family-card b,body.template-wisteria .ceremony-card .detail-list>p>span{color:var(--text-primary,#5e486f)!important}body.template-wisteria .family-card small,body.template-wisteria .ceremony-card .detail-list b,body.template-wisteria .ceremony-card .detail-list>p>span>small{color:var(--text-secondary,#87618c)!important}body.template-ivory-pocket .family-card b,body.template-ivory-pocket .ceremony-card .detail-list>p>span{color:var(--text-primary,#60482a)!important}body.template-ivory-pocket .family-card small,body.template-ivory-pocket .ceremony-card .detail-list b,body.template-ivory-pocket .ceremony-card .detail-list>p>span>small{color:var(--text-secondary,#896a37)!important}body.template-hy-kim .family-card b,body.template-hy-kim .ceremony-card .detail-list>p>span{color:var(--text-primary,#745a2b)!important}body.template-hy-kim .family-card small,body.template-hy-kim .ceremony-card .detail-list b,body.template-hy-kim .ceremony-card .detail-list>p>span>small{color:var(--text-secondary,#977538)!important}

/* Bordeaux, Rose Noir, Emerald and Midnight use dark paper: text needs a
   light contrast floor even when a darker custom ink color was saved. */
body.template-bordeaux .family-card b,body.template-bordeaux .ceremony-card .detail-list>p>span,body.template-rose-noir .family-card b,body.template-rose-noir .ceremony-card .detail-list>p>span,body.template-emerald .family-card b,body.template-emerald .ceremony-card .detail-list>p>span,body.template-midnight-silver .family-card b,body.template-midnight-silver .ceremony-card .detail-list>p>span{color:color-mix(in srgb,var(--text-primary,var(--accent)) 32%,#fff)!important;text-shadow:0 1px 2px rgba(0,0,0,.42)!important}body.template-bordeaux .family-card small,body.template-bordeaux .ceremony-card>h3,body.template-bordeaux .ceremony-card .detail-list b,body.template-bordeaux .ceremony-card .detail-list>p>span>small,body.template-rose-noir .family-card small,body.template-rose-noir .ceremony-card>h3,body.template-rose-noir .ceremony-card .detail-list b,body.template-rose-noir .ceremony-card .detail-list>p>span>small,body.template-emerald .family-card small,body.template-emerald .ceremony-card>h3,body.template-emerald .ceremony-card .detail-list b,body.template-emerald .ceremony-card .detail-list>p>span>small,body.template-midnight-silver .family-card small,body.template-midnight-silver .ceremony-card>h3,body.template-midnight-silver .ceremony-card .detail-list b,body.template-midnight-silver .ceremony-card .detail-list>p>span>small{color:color-mix(in srgb,var(--text-secondary,var(--accent)) 42%,#fff)!important;text-shadow:0 1px 2px rgba(0,0,0,.35)!important}

/* All supporting copy in the ceremony cards follows one secondary ink color:
   event name, labels, date/time, lunar date, venue and address. */
.ceremony-card>h3,.ceremony-card .detail-list b,.ceremony-card .detail-list>p>span,.ceremony-card .detail-list>p>span>small{color:var(--text-secondary,var(--accent))!important;text-shadow:0 1px 2px rgba(0,0,0,.22)!important}
body.template-bordeaux .ceremony-card>h3,body.template-bordeaux .ceremony-card .detail-list b,body.template-bordeaux .ceremony-card .detail-list>p>span,body.template-bordeaux .ceremony-card .detail-list>p>span>small,body.template-rose-noir .ceremony-card>h3,body.template-rose-noir .ceremony-card .detail-list b,body.template-rose-noir .ceremony-card .detail-list>p>span,body.template-rose-noir .ceremony-card .detail-list>p>span>small,body.template-emerald .ceremony-card>h3,body.template-emerald .ceremony-card .detail-list b,body.template-emerald .ceremony-card .detail-list>p>span,body.template-emerald .ceremony-card .detail-list>p>span>small,body.template-midnight-silver .ceremony-card>h3,body.template-midnight-silver .ceremony-card .detail-list b,body.template-midnight-silver .ceremony-card .detail-list>p>span,body.template-midnight-silver .ceremony-card .detail-list>p>span>small{color:color-mix(in srgb,var(--text-secondary,var(--accent)) 42%,#fff)!important;text-shadow:0 1px 2px rgba(0,0,0,.35)!important}

/* Universal custom ink system: every one of the 12 templates follows the
   same hierarchy. Primary ink is for names/headings; secondary ink is for
   supporting information. These final rules intentionally override each
   template's decorative palette without changing its layout or ornaments. */
:root{--invite-primary-ink:var(--text-primary,var(--accent));--invite-secondary-ink:var(--text-secondary,var(--accent))}
.poster-content h1,.template-cover h1,.template-cover .portrait-piece b,.template-cover .twin-portraits b,.template-cover .round-portraits b,.template-cover .arch-portrait b,.template-cover .modern-portraits b,.template-cover .polaroid-card small,.template-cover .cover-couple-name,.template-cover .long-phung-title,.template-cover .blush-script,.template-cover .letter-sheet h1,.template-cover .hy-kim-frame h1,.hero h1,.hero .names,.section h2,.couple-name,.family-card b,.formal-invitation-card>h2,.formal-couple-names,.story-signature,.count-grid strong,.guest-info-card h3,.guest-info-card strong,.rsvp h2,footer .footer-couple-names,.gift-account-card strong{color:var(--invite-primary-ink)!important;background:none!important;-webkit-background-clip:initial!important;background-clip:initial!important;-webkit-text-fill-color:var(--invite-primary-ink)!important;text-shadow:0 1px 0 color-mix(in srgb,var(--invite-primary-ink) 20%,#fff),0 4px 13px color-mix(in srgb,var(--invite-primary-ink) 48%,transparent)!important}
.animated-name-char:not(.name-ampersand){color:var(--invite-primary-ink)!important;background:none!important;-webkit-background-clip:initial!important;background-clip:initial!important;-webkit-text-fill-color:var(--invite-primary-ink)!important;text-shadow:0 1px 0 color-mix(in srgb,var(--invite-primary-ink) 20%,#fff),0 4px 13px color-mix(in srgb,var(--invite-primary-ink) 48%,transparent)!important}.heading-ampersand,.animated-name-char.name-ampersand,.template-cover h1 i,.template-cover h1 em,.template-cover h1 span,.footer-ampersand{color:var(--invite-primary-ink)!important;-webkit-text-fill-color:var(--invite-primary-ink)!important}
.family-card .couple-name .shimmer{color:var(--invite-primary-ink)!important;background:none!important;-webkit-background-clip:initial!important;background-clip:initial!important;-webkit-text-fill-color:var(--invite-primary-ink)!important;text-shadow:0 1px 0 color-mix(in srgb,var(--invite-primary-ink) 20%,#fff),0 4px 13px color-mix(in srgb,var(--invite-primary-ink) 48%,transparent)!important}
.poster-kicker,.poster-date,.poster-time,.poster-guest small,.poster-guest em,.template-cover .cover-kicker,.template-cover .cover-date,.template-cover .portrait-piece small,.template-cover .twin-portraits small,.template-cover .round-portraits small,.template-cover .arch-portrait small,.template-cover .modern-portraits small,.template-cover .letter-to,.template-cover .letter-copy,.template-cover .hy-kim-frame p,.section-label,.section .lead,.family-card small,.ceremony-card>h3,.ceremony-card .detail-list b,.ceremony-card .detail-list>p>span,.ceremony-card .detail-list>p>span>small,.formal-kicker,.formal-event-line,.formal-date-line,.count-grid span,.guest-info-card p,.guest-info-card a,.rsvp .glass-card>p,.rsvp label>span,.form-note,footer>p,.wedding-calendar-shell,.gift-account-role,.gift-account-card em,.gift-account-card code,.gift-envelope-intro,.gift-envelope-note{color:var(--invite-secondary-ink)!important;-webkit-text-fill-color:var(--invite-secondary-ink)!important;text-shadow:0 1px 2px color-mix(in srgb,var(--invite-secondary-ink) 42%,transparent)!important}

/* Primary lettering receives the user-selected outline on every template.
   The thin stroke and layered highlight stay crisp on narrow phone screens. */
.poster-content h1,.template-cover h1,.template-cover .portrait-piece b,.template-cover .twin-portraits b,.template-cover .round-portraits b,.template-cover .arch-portrait b,.template-cover .modern-portraits b,.template-cover .polaroid-card small,.template-cover .cover-couple-name,.template-cover .long-phung-title,.template-cover .blush-script,.template-cover .letter-sheet h1,.template-cover .hy-kim-frame h1,.hero h1,.hero .names,.section h2,.couple-name,.family-card b,.formal-invitation-card>h2,.formal-couple-names,.story-signature,.count-grid strong,.guest-info-card h3,.guest-info-card strong,.rsvp h2,footer .footer-couple-names,.gift-account-card strong,.family-card .couple-name .shimmer,.animated-name-char:not(.name-ampersand){-webkit-text-stroke:clamp(.35px,.09vw,.82px) var(--text-primary-outline)!important;paint-order:stroke fill!important;text-shadow:0 1px 0 color-mix(in srgb,var(--text-primary-outline) 55%,#fff),0 2px 0 color-mix(in srgb,var(--text-primary-outline) 72%,#000),0 7px 16px color-mix(in srgb,var(--invite-primary-ink) 48%,transparent),0 0 15px color-mix(in srgb,var(--text-primary-outline) 36%,transparent)!important}
@media(max-width:760px){.poster-content h1,.template-cover h1,.template-cover .portrait-piece b,.template-cover .twin-portraits b,.template-cover .round-portraits b,.template-cover .arch-portrait b,.template-cover .modern-portraits b,.template-cover .polaroid-card small,.template-cover .cover-couple-name,.template-cover .long-phung-title,.template-cover .blush-script,.template-cover .letter-sheet h1,.template-cover .hy-kim-frame h1,.hero h1,.hero .names,.section h2,.couple-name,.family-card b,.formal-invitation-card>h2,.formal-couple-names,.story-signature,.count-grid strong,.guest-info-card h3,.guest-info-card strong,.rsvp h2,footer .footer-couple-names,.gift-account-card strong,.family-card .couple-name .shimmer,.animated-name-char:not(.name-ampersand){-webkit-text-stroke:clamp(.35px,.12vw,.7px) var(--text-primary-outline)!important}}

/* Final text hierarchy. These are deliberately last so no design-specific
   palette can replace the three colors chosen in the invitation editor. */
.poster-content h1,
.poster-guest strong,
.template-cover h1,
.template-cover .portrait-piece b,
.template-cover .twin-portraits b,
.template-cover .round-portraits b,
.template-cover .arch-portrait b,
.template-cover .modern-portraits b,
.template-cover .polaroid-card small,
.template-cover .cover-couple-name,
.template-cover .long-phung-title,
.template-cover .blush-script,
.template-cover .letter-sheet h1,
.template-cover .hy-kim-frame h1,
.hero h1,
.hero .names,
.section h2,
.couple-name,
.family-card b,
.formal-invitation-card>h2,
.formal-couple-names,
.story-signature,
.count-grid strong,
.guest-info-card h3,
.guest-info-card strong,
.rsvp h2,
footer .footer-couple-names,
.gift-account-card strong,
.animated-name-char:not(.name-ampersand){
    color:var(--text-primary,var(--accent))!important;
    -webkit-text-fill-color:var(--text-primary,var(--accent))!important;
    -webkit-text-stroke:clamp(.35px,.09vw,.82px) var(--text-primary-outline)!important;
    paint-order:stroke fill!important;
}
.poster-kicker,
.poster-date,
.poster-time,
.poster-guest small,
.poster-guest em,
.template-cover>em,
.template-cover .cover-kicker,
.template-cover .cover-date,
.template-cover .portrait-piece small,
.template-cover .twin-portraits small,
.template-cover .round-portraits small,
.template-cover .arch-portrait small,
.template-cover .modern-portraits small,
.template-cover .letter-to,
.template-cover .letter-copy,
.template-cover .hy-kim-frame p,
.section-label,
.section .lead,
.section>p,
.family-card small,
.ceremony-card>h3,
.ceremony-card .detail-list b,
.ceremony-card .detail-list>p>span,
.ceremony-card .detail-list>p>span>small,
.formal-kicker,
.formal-event-line,
.formal-date-line,
.count-grid span,
.guest-info-card p,
.guest-info-card a,
.rsvp .glass-card>p,
.rsvp label>span,
.form-note,
footer>p,
.wedding-calendar-shell,
.gift-account-role,
.gift-account-card em,
.gift-account-card code,
.gift-envelope-intro,
.gift-envelope-note{
    color:var(--text-secondary,var(--accent))!important;
    -webkit-text-fill-color:var(--text-secondary,var(--accent))!important;
}

/* The formal invitation uses generated name spans/characters. Style every
   child so a template-wide text reset cannot leave either name unoutlined. */
.formal-invitation-card .formal-couple-names,
.formal-invitation-card .formal-couple-names *,
.formal-invitation-card .formal-couple-names .animated-name-char,
.formal-invitation-card .formal-couple-names .name-ampersand{
    color:var(--text-primary,var(--accent))!important;
    -webkit-text-fill-color:var(--text-primary,var(--accent))!important;
    -webkit-text-stroke:clamp(.35px,.09vw,.82px) var(--text-primary-outline)!important;
    paint-order:stroke fill!important;
    text-shadow:0 1px 0 color-mix(in srgb,var(--text-primary-outline) 55%,#fff),0 2px 0 color-mix(in srgb,var(--text-primary-outline) 72%,#000),0 7px 16px color-mix(in srgb,var(--text-primary,var(--accent)) 48%,transparent)!important;
}

/* Calendar follows the same editor-selected hierarchy: month and selected
   date are primary; weekday, year, normal dates and date details are secondary. */
.wedding-calendar-head strong,
.calendar-day.is-selected b,
.wedding-date-summary strong{
    color:var(--text-primary,var(--accent))!important;
    -webkit-text-fill-color:var(--text-primary,var(--accent))!important;
    -webkit-text-stroke:clamp(.35px,.09vw,.82px) var(--text-primary-outline)!important;
    paint-order:stroke fill!important;
}
.wedding-calendar-head>span,
.wedding-calendar-head small,
.wedding-calendar-weekdays span,
.calendar-day,
.wedding-date-summary span{
    color:var(--text-secondary,var(--accent))!important;
    -webkit-text-fill-color:var(--text-secondary,var(--accent))!important;
}

/* Couple names are the primary characters of every invitation. Apply the
   selected primary ink and outline to the name container and every generated
   letter, regardless of where that name appears in any of the 12 designs. */
.names,
.names *,
.couple-name,
.couple-name *,
.cover-couple-name,
.cover-couple-name *,
.template-cover .portrait-piece b,
.template-cover .portrait-piece b *,
.template-cover .twin-portraits b,
.template-cover .twin-portraits b *,
.template-cover .round-portraits b,
.template-cover .round-portraits b *,
.template-cover .arch-portrait b,
.template-cover .arch-portrait b *,
.template-cover .modern-portraits b,
.template-cover .modern-portraits b *,
.polaroid-card small,
.polaroid-card small *,
.story-signature,
.story-signature *,
.footer-couple-names,
.footer-couple-names *,
.opening-card .animated-couple-name,
.opening-card .animated-couple-name *{
    color:var(--text-primary,var(--accent))!important;
    -webkit-text-fill-color:var(--text-primary,var(--accent))!important;
    -webkit-text-stroke:clamp(.35px,.09vw,.82px) var(--text-primary-outline)!important;
    paint-order:stroke fill!important;
    text-shadow:0 1px 0 color-mix(in srgb,var(--text-primary-outline) 55%,#fff),0 2px 0 color-mix(in srgb,var(--text-primary-outline) 72%,#000),0 7px 16px color-mix(in srgb,var(--text-primary,var(--accent)) 48%,transparent)!important;
}

/* The selected date is the visual focal point of the calendar in every theme. */
.calendar-day.is-selected{
    isolation:isolate;
}
.calendar-day.is-selected::after{
    content:"";
    position:absolute;
    z-index:0;
    width:clamp(37px,6vw,52px);
    aspect-ratio:1;
    border:1px solid color-mix(in srgb,var(--text-primary-outline) 74%,transparent);
    border-radius:50%;
    box-shadow:0 0 0 5px color-mix(in srgb,var(--text-primary) 13%,transparent),0 0 20px color-mix(in srgb,var(--text-primary-outline) 42%,transparent);
    animation:calendar-selected-pulse 2.4s ease-in-out infinite;
}
.calendar-day.is-selected i{
    position:absolute!important;
    inset:0!important;
    display:grid!important;
    place-items:center!important;
    width:auto!important;
    height:auto!important;
    color:var(--text-primary,var(--accent))!important;
    -webkit-text-fill-color:var(--text-primary,var(--accent))!important;
    -webkit-text-stroke:1px var(--text-primary-outline)!important;
    filter:drop-shadow(0 4px 7px color-mix(in srgb,var(--text-primary-outline) 48%,transparent))!important;
    transform:none!important;
    transform-origin:center!important;
    animation:calendar-heartbeat-centered 2.4s cubic-bezier(.32,.05,.24,1) infinite!important;
}
.calendar-day.is-selected b{
    position:relative;
    z-index:2;
    color:var(--text-primary,var(--accent))!important;
    -webkit-text-fill-color:var(--text-primary,var(--accent))!important;
    text-shadow:0 1px 0 color-mix(in srgb,var(--text-primary-outline) 52%,#fff),0 2px 8px color-mix(in srgb,var(--text-primary-outline) 38%,transparent)!important;
}
@keyframes calendar-heartbeat{
    0%,100%{transform:translate(-50%,-50%) scale(1);opacity:.9}
    12%{transform:translate(-50%,-50%) scale(1.16);opacity:1}
    25%{transform:translate(-50%,-50%) scale(1.02)}
    39%{transform:translate(-50%,-50%) scale(1.12)}
    55%{transform:translate(-50%,-50%) scale(1)}
}
@keyframes calendar-heartbeat-centered{
    0%,100%{transform:scale(1);opacity:.9}
    12%{transform:scale(1.16);opacity:1}
    25%{transform:scale(1.02)}
    39%{transform:scale(1.12)}
    55%{transform:scale(1)}
}
@keyframes calendar-selected-pulse{
    0%,100%{transform:scale(.88);opacity:.45}
    42%{transform:scale(1.16);opacity:1}
}
@media(prefers-reduced-motion:reduce){
    .calendar-day.is-selected::after,.calendar-day.is-selected i{animation:none!important}
}

/* Opening names need their own restrained treatment. They sit inside a
   full-screen clipped poster, so do not inherit the long shadow stack used
   by section headings; that stack can be rasterized into horizontal strips
   on mobile Safari and clip the swashes of script fonts. */
.invitation-poster .poster-content h1,
.invitation-poster .poster-content h1 span,
.invitation-poster .poster-content h1 i{
    overflow:visible!important;
    background:none!important;
    -webkit-background-clip:initial!important;
    background-clip:initial!important;
    color:var(--text-primary)!important;
    -webkit-text-fill-color:var(--text-primary)!important;
    -webkit-text-stroke:clamp(.28px,.07vw,.58px) var(--text-primary-outline)!important;
    paint-order:stroke fill!important;
    text-shadow:0 1px 0 color-mix(in srgb,var(--text-primary-outline) 55%,#fff),0 3px 9px color-mix(in srgb,var(--text-primary-outline) 28%,transparent)!important;
    filter:none!important;
}
.invitation-poster .poster-content h1{
    width:calc(100% - clamp(14px,4vw,32px));
    max-width:min(100%,560px)!important;
    padding:.16em .12em .23em;
    line-height:1.02!important;
    contain:layout style;
}
.invitation-poster .poster-content h1 i{
    color:var(--text-secondary)!important;
    -webkit-text-fill-color:var(--text-secondary)!important;
    -webkit-text-stroke:0 transparent!important;
    text-shadow:none!important;
}
.invitation-poster .poster-content h1 span,
.invitation-poster .poster-content h1 i{
    animation:poster-name-fade-up .72s cubic-bezier(.22,.8,.25,1) both!important;
}
.invitation-poster .poster-content h1 i{animation-delay:.12s!important}
.invitation-poster .poster-content h1 span:last-of-type{animation-delay:.22s!important}
@keyframes poster-name-fade-up{
    from{opacity:0;transform:translateY(12px)}
    to{opacity:1;transform:translateY(0)}
}
@media(max-width:760px){
    .invitation-poster .poster-content h1{
        width:calc(100% - 10px);
        max-width:100%!important;
        padding:.19em .16em .27em;
        line-height:1.05!important;
        letter-spacing:0!important;
    }
}
@media(prefers-reduced-motion:reduce){
    .invitation-poster .poster-content h1 span,
    .invitation-poster .poster-content h1 i{animation:none!important}
}

/* Bordeaux is a dark wine-paper opening. Preserve the chosen secondary hue,
   while lifting it toward ivory only in this dark poster so small date and
   invitation copy remains readable instead of fading into the background. */
.poster-bordeaux{
    --poster-secondary-readable:color-mix(in srgb,var(--text-secondary) 42%,#fff7e8);
}
.poster-bordeaux .poster-kicker,
.poster-bordeaux .poster-date,
.poster-bordeaux .poster-time,
.poster-bordeaux .poster-guest small,
.poster-bordeaux .poster-guest em{
    color:var(--poster-secondary-readable)!important;
    -webkit-text-fill-color:var(--poster-secondary-readable)!important;
    opacity:1!important;
    text-shadow:0 1px 2px rgba(34,5,15,.7),0 0 10px color-mix(in srgb,var(--text-primary-outline) 24%,transparent)!important;
}

/* The ampersand is a connector, never part of either name. Keep the opening
   title in three explicit rows so font metrics and template-specific rules
   cannot pull it against the groom's name on any of the 12 posters. */
.invitation-poster .poster-content h1{
    display:grid!important;
    grid-template-columns:minmax(0,1fr)!important;
    grid-template-rows:auto auto auto auto!important;
    justify-items:center!important;
    align-items:center!important;
    row-gap:clamp(5px,.75vh,9px)!important;
    text-align:center!important;
    white-space:normal!important;
}
.invitation-poster .poster-content h1>span{
    display:block!important;
    width:100%;
    min-width:0;
    line-height:1.05!important;
    white-space:normal!important;
}
.invitation-poster .poster-content h1>i{
    display:block!important;
    width:max-content;
    min-width:1.1em;
    height:.68em;
    margin:0!important;
    padding:0 .1em!important;
    font-size:clamp(26px,6vw,43px)!important;
    font-style:normal;
    line-height:.68!important;
    text-align:center!important;
    white-space:nowrap!important;
    transform:none!important;
}
@media(max-width:760px){
    .invitation-poster .poster-content h1{row-gap:6px!important}
    .invitation-poster .poster-content h1>i{font-size:clamp(25px,7.2vw,36px)!important}
}

/* The ampersand joins the two primary names. Give it the same crisp ink and
   outline, at a smaller scale, instead of treating it as muted supporting copy. */
.invitation-poster .poster-content h1>i{
    color:var(--text-primary)!important;
    -webkit-text-fill-color:var(--text-primary)!important;
    -webkit-text-stroke:clamp(.25px,.06vw,.5px) var(--text-primary-outline)!important;
    paint-order:stroke fill!important;
    opacity:1!important;
    text-shadow:0 1px 0 color-mix(in srgb,var(--text-primary-outline) 58%,#fff),0 2px 7px color-mix(in srgb,var(--text-primary-outline) 34%,transparent)!important;
}

/* Couple names stay crisp and refined. The primary outline provides enough
   separation, while shadows make script faces look blurry on phone screens. */
.names,
.names *,
.couple-name,
.couple-name *,
.cover-couple-name,
.cover-couple-name *,
.template-cover .portrait-piece b,
.template-cover .portrait-piece b *,
.template-cover .twin-portraits b,
.template-cover .twin-portraits b *,
.template-cover .round-portraits b,
.template-cover .round-portraits b *,
.template-cover .arch-portrait b,
.template-cover .arch-portrait b *,
.template-cover .modern-portraits b,
.template-cover .modern-portraits b *,
.polaroid-card small,
.polaroid-card small *,
.formal-couple-names,
.formal-couple-names *,
.story-signature,
.story-signature *,
.footer-couple-names,
.footer-couple-names *,
.opening-card .animated-couple-name,
.opening-card .animated-couple-name *,
.invitation-poster .poster-content h1,
.invitation-poster .poster-content h1 *,
.invitation-poster .poster-guest strong{
    text-shadow:none!important;
    filter:none!important;
}

/* Phone event cards: keep the ceremony and party cards as a balanced pair.
   This only controls geometry; each template retains its own colors and type. */
@media(max-width:640px){
    .details .ceremony-grid{
        display:grid!important;
        grid-template-columns:repeat(2,minmax(0,1fr))!important;
        align-items:stretch!important;
        width:min(100%,540px)!important;
        margin:28px auto 0!important;
        gap:12px!important;
    }
    .details .ceremony-card{
        display:flex!important;
        flex-direction:column!important;
        align-items:center!important;
        min-height:430px!important;
        height:100%!important;
        padding:26px 12px 22px!important;
        text-align:center!important;
    }
    .details .ceremony-card>.icon{
        min-height:34px;
        margin:0!important;
    }
    .details .ceremony-card>h3{
        min-height:48px;
        margin:13px 0 17px!important;
        display:grid;
        place-items:center;
        text-align:center!important;
    }
    .details .ceremony-card .detail-list{
        display:flex!important;
        flex:1 1 auto;
        flex-direction:column!important;
        justify-content:space-between!important;
        gap:18px!important;
        width:100%;
        margin:0!important;
    }
    .details .ceremony-card .detail-list>p{
        min-height:126px;
        margin:0!important;
    }
    .details .ceremony-card .btn{
        width:100%!important;
        min-height:42px;
        margin:18px 0 0!important;
    }
}
@media(max-width:360px){
    .details .ceremony-grid{gap:9px!important}
    .details .ceremony-card{min-height:410px!important;padding-inline:9px!important}
    .details .ceremony-card .detail-list>p{min-height:120px}
}

/* Final Nắng Thông phone cover override. Keep all center copy inside canvas. */
@media(max-width:760px){
    body.template-terracotta .cover-nang-thong>h1{
        position:absolute!important;
        z-index:5!important;
        top:42%!important;
        right:auto!important;
        bottom:auto!important;
        left:50%!important;
        display:block!important;
        width:72%!important;
        max-width:330px!important;
        margin:0!important;
        padding:0!important;
        transform:translateX(-50%)!important;
        transform-origin:center!important;
        font-size:clamp(35px,9.5vw,44px)!important;
        line-height:.92!important;
        letter-spacing:0!important;
        text-align:center!important;
        white-space:normal!important;
        overflow:visible!important;
    }
    body.template-terracotta .cover-nang-thong>.cover-date{
        position:absolute!important;
        z-index:5!important;
        top:61%!important;
        right:auto!important;
        bottom:auto!important;
        left:50%!important;
        transform:translateX(-50%)!important;
    }
}

/* Nắng Thông: Save The Date cover for phones. This replaces the conflicting
   polaroid layout with one readable portrait and a dedicated date panel. */
@media(max-width:760px){
    body.template-terracotta .cover-nang-thong{
        min-height:100svh!important;
        overflow:hidden!important;
        background:
            radial-gradient(ellipse 96% 28% at 105% 25%,#f5b8c777 0 35%,transparent 36%),
            radial-gradient(ellipse 100% 28% at -12% 94%,#f3abc277 0 34%,transparent 35%),
            linear-gradient(145deg,#fffefd 0 54%,#fff5f7 100%)!important;
    }
    body.template-terracotta .cover-nang-thong::before{
        content:""!important;
        inset:auto -28% 2% auto!important;
        width:84%!important;
        height:22%!important;
        border:18px solid #ef9fba66!important;
        border-radius:58% 42% 55% 45%!important;
        background:none!important;
        transform:rotate(-17deg)!important;
    }
    body.template-terracotta .cover-nang-thong .cover-kicker{
        top:8%!important;
        color:#24201f!important;
        font:400 clamp(35px,9.8vw,48px)/1 "Great Vibes",cursive!important;
        letter-spacing:0!important;
        text-transform:uppercase;
    }
    body.template-terracotta .cover-nang-thong .cover-kicker::after{
        content:"SAVE THE DATE";
    }
    body.template-terracotta .cover-nang-thong .cover-kicker{font-size:0!important}
    body.template-terracotta .cover-nang-thong .cover-kicker::after{font:400 clamp(35px,9.8vw,48px)/1 "Great Vibes",cursive!important}
    body.template-terracotta .cover-nang-thong .polaroid-left{
        z-index:3!important;
        top:23%!important;
        left:50%!important;
        width:min(58vw,250px)!important;
        padding:6px!important;
        background:#fff!important;
        box-shadow:0 12px 25px #44302d30!important;
        transform:translateX(-50%) rotate(0)!important;
    }
    body.template-terracotta .cover-nang-thong .polaroid-left img{
        height:min(72vw,310px)!important;
        object-fit:cover!important;
    }
    body.template-terracotta .cover-nang-thong .polaroid-left small,
    body.template-terracotta .cover-nang-thong .polaroid-right,
    body.template-terracotta .cover-nang-thong .pine-stamp{display:none!important}
    body.template-terracotta .cover-nang-thong>h1{
        top:16%!important;
        width:92%!important;
        max-width:430px!important;
        color:#2a2524!important;
        -webkit-text-fill-color:#2a2524!important;
        -webkit-text-stroke:0 transparent!important;
        font-family:"Great Vibes",cursive!important;
        font-size:clamp(34px,9vw,45px)!important;
        line-height:1!important;
        text-shadow:none!important;
    }
    body.template-terracotta .cover-nang-thong>h1 i{
        font-family:"Great Vibes",cursive!important;
        color:#8b7775!important;
        -webkit-text-fill-color:#8b7775!important;
    }
    body.template-terracotta .cover-nang-thong>.cover-date{
        top:auto!important;
        bottom:7%!important;
        width:78%!important;
        padding:13px 10px!important;
        border:0!important;
        border-top:1px solid #241f1d!important;
        border-bottom:1px solid #241f1d!important;
        background:#fffdf9cc!important;
        color:#211d1c!important;
        -webkit-text-fill-color:#211d1c!important;
        font-size:clamp(21px,6.5vw,30px)!important;
        font-weight:500!important;
        letter-spacing:.08em!important;
    }
}

/* Keep ceremony symbols clean and flat; their previous drop shadow looked
   muddy on the light mobile cards. */
.ceremony-card>.icon{
    position:relative;
    isolation:isolate;
    text-shadow:none!important;
    filter:none!important;
    animation:ceremony-icon-heartbeat 3.1s ease-in-out infinite;
}
.ceremony-card>.icon::after{
    content:"";
    position:absolute;
    inset:50%;
    z-index:-1;
    width:1.45em;
    aspect-ratio:1;
    border:1px solid color-mix(in srgb,var(--text-primary-outline) 58%,transparent);
    border-radius:50%;
    opacity:0;
    transform:translate(-50%,-50%) scale(.7);
    animation:ceremony-icon-ring 3.1s ease-out infinite;
}
.ceremony-card:nth-child(2)>.icon,
.ceremony-card:nth-child(2)>.icon::after{animation-delay:1.05s}
@keyframes ceremony-icon-heartbeat{
    0%,100%{transform:scale(1)}
    12%{transform:scale(1.13)}
    24%{transform:scale(1.02)}
    36%{transform:scale(1.09)}
    50%{transform:scale(1)}
}
@keyframes ceremony-icon-ring{
    0%,14%{opacity:0;transform:translate(-50%,-50%) scale(.7)}
    23%{opacity:.62}
    52%,100%{opacity:0;transform:translate(-50%,-50%) scale(1.3)}
}
@media(prefers-reduced-motion:reduce){
    .ceremony-card>.icon,.ceremony-card>.icon::after{animation:none!important}
}

/* Guest links use crisp, flat typography across all 12 templates. A text
   outline remains where configured, but shadows and glow filters blur thin
   Vietnamese glyphs, particularly on phone displays. */
body.invitation-flat-text *,
body.invitation-flat-text *::before,
body.invitation-flat-text *::after{
    text-shadow:none!important;
}
body.invitation-flat-text :is(
    h1,h2,h3,h4,h5,h6,p,small,b,strong,em,i,span,code,label,legend,
    button,a,li,dt,dd,th,td,input,textarea,select,option
){
    filter:none!important;
}

/* Ceremony and reception cards are intentionally flat as a pair. Their
   inherited glass-card shadow created the dark smudge below the cards. */
body.invitation-flat-text .details .ceremony-card,
body.invitation-flat-text .details .ceremony-card::before,
body.invitation-flat-text .details .ceremony-card::after{
    box-shadow:none!important;
    filter:none!important;
}

/* Keep desktop on the exact same single-column reading system as mobile. */
@media(min-width:761px){
body[class*="template-"] .journey-section{width:100%!important;max-width:none!important;margin-inline:0!important;padding:72px 17px!important;text-align:center!important;transform:none!important}
body[class*="template-"] .family-grid,body.template-royal-cream .family-grid,body.template-minimal .family-grid{display:grid!important;grid-template-columns:1fr!important;width:100%!important;max-width:480px!important;margin:30px auto 0!important;gap:17px!important;padding-left:0!important;border-left:0!important}
body[class*="template-"] .family-grid .ampersand{position:relative!important;top:auto!important;left:auto!important;order:1;display:grid!important;width:auto!important;height:auto!important;margin:-4px auto!important;transform:none!important}
body.template-royal-cream .family-grid .ampersand,body.template-minimal .family-grid .ampersand,body.template-ocean-pearl .family-grid .ampersand,body.template-terracotta .family-grid .ampersand,body.template-wisteria .family-grid .ampersand,body.template-ivory-pocket .family-grid .ampersand{display:none!important}
body[class*="template-"] .family-card,body.template-royal-cream .family-card,body.template-minimal .family-card{width:100%!important;min-height:0!important;margin:0!important;text-align:center!important;transform:none!important}
body.template-minimal .bride-side{border-top:1px solid #2b2a2855!important;border-left:0!important;text-align:center!important;place-items:center!important}
body.template-royal-cream .journey-section>.divider{justify-content:center!important;margin-left:auto!important}
body.template-royal-cream .intro,body.template-royal-cream .wedding-calendar-section,body.template-ocean-pearl .wedding-calendar-section,body.template-wisteria .intro,body.template-wisteria .wedding-calendar-section,body.template-minimal .rsvp{width:100%!important;max-width:none!important;margin-inline:0!important}
body[class*="template-"] .gallery-showcase .gallery{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;grid-auto-rows:145px!important;grid-auto-flow:dense!important;width:100%!important;margin-top:28px!important;padding:0!important;gap:9px!important;background:transparent!important}
body[class*="template-"] .gallery-showcase .gallery-item,body[class*="template-"] .gallery-showcase .gallery-item:nth-child(n){grid-column:auto!important;grid-row:auto!important;min-width:0!important;margin:0!important;transform:none!important}
body[class*="template-"] .gallery-showcase .gallery-item:nth-child(5n+1){grid-column:span 2!important;grid-row:span 2!important}
}
