:root{
  --ink:#1c2b23;
  --ink-soft:#2c3d33;
  --ivory:#f6f1e6;
  --ivory-2:#efe7d6;
  --gold:#b6883f;
  --gold-soft:#d9b877;
  --rose:#c48b7f;
  --sage:#7f9a86;
  --charcoal:#2a2a24;
  --line: rgba(28,43,35,0.16);
  --shadow: 0 20px 50px rgba(28,43,35,0.14);
  --serif: 'Newsreader', serif;
  --sans: 'Jost', sans-serif;
  --radius: 2px;
  --max: 640px;
}
[data-mode="night"]{
  --ink:#0e1a14;
  --ivory:#12201a;
  --ivory-2:#0e1a14;
  --charcoal:#e9e2d2;
  --line: rgba(233,226,210,0.14);
  --shadow: 0 20px 50px rgba(0,0,0,0.45);
}
*{box-sizing:border-box;}
html{scroll-behavior:smooth;}
body{
  margin:0;
  background:var(--ink);
  color:var(--charcoal);
  font-family:var(--sans);
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
@media (prefers-reduced-motion: reduce){
  *{animation-duration:0.001ms !important; animation-iteration-count:1 !important; transition-duration:0.001ms !important; scroll-behavior:auto !important;}
}
.stage{
  max-width:var(--max);
  margin:0 auto;
  background:var(--ivory);
  min-height:100vh;
  position:relative;
  transition:background .6s ease;
}
h1,h2,h3{font-family:var(--serif); font-weight:400; margin:0; color:var(--ink);}
p{margin:0; line-height:1.7;}
a{color:inherit;}
button{font-family:var(--sans); cursor:pointer;}
.eyebrow{
  font-family:var(--sans); font-size:11.5px; letter-spacing:.28em; color:var(--gold);
  font-weight:500;
}
.section{
  padding:88px 32px;
  position:relative;
  border-bottom:1px solid var(--line);
}
.center{text-align:center;}
.reveal{opacity:0; transform:translateY(28px); transition:opacity .9s cubic-bezier(.2,.7,.2,1), transform .9s cubic-bezier(.2,.7,.2,1);}
.reveal.is-visible{opacity:1; transform:translateY(0);}

/* ---------- decorative sprig svg used across sections ---------- */
.sprig{width:64px; height:auto; opacity:.85; margin:0 auto;}
.sprig path{stroke:var(--sage); fill:none; stroke-width:1.1;}
.sprig circle{fill:var(--rose);}

/* ================= COVER / ENVELOPE ================= */
#cover{
  position:fixed; inset:0; z-index:100;
  background:radial-gradient(120% 120% at 50% 0%, #24382e 0%, #17251e 55%, #101a15 100%);
  display:flex; align-items:center; justify-content:center;
  transition:opacity 1s ease, visibility 1s ease;
}
#cover.opened{opacity:0; visibility:hidden; pointer-events:none;}
.envelope-wrap{
  text-align:center; color:var(--ivory); cursor:pointer;
  padding:0 24px;
}
.envelope{
  width:200px; height:140px; margin:0 auto 34px; position:relative;
}
.envelope .body{
  position:absolute; inset:0;
  background:linear-gradient(180deg,#2c4136,#1d2f26);
  border:1px solid rgba(217,184,119,.35);
}
.envelope .flap{
  position:absolute; top:0; left:0; width:100%; height:70px;
  background:linear-gradient(180deg,#33493d,#24382e);
  clip-path:polygon(0 0,100% 0,50% 100%);
  transform-origin:top center;
  transition:transform 1s cubic-bezier(.6,-0.2,.3,1.2);
  border-bottom:1px solid rgba(217,184,119,.35);
}
.seal{
  position:absolute; top:56px; left:50%; transform:translate(-50%,0);
  width:44px; height:44px; border-radius:50%;
  background:radial-gradient(circle at 35% 30%, var(--gold-soft), var(--gold) 60%, #8a6427 100%);
  display:flex; align-items:center; justify-content:center;
  font-family:var(--serif); font-style:italic; font-size:16px; color:#1c2b23;
  box-shadow:0 6px 14px rgba(0,0,0,.35);
  transition:transform .5s ease, opacity .5s ease;
  z-index:3;
}
#cover.opened .flap{transform:rotateX(180deg);}
#cover.opened .seal{transform:translate(-50%,-10px) scale(0); opacity:0;}
.envelope-wrap .tap-txt{
  font-family:var(--sans); font-size:12px; letter-spacing:.24em; color:var(--gold-soft);
  animation:pulse 2.4s ease-in-out infinite;
}
.envelope-wrap .to-line{
  font-family:var(--serif); font-style:italic; font-size:18px; margin-bottom:8px; color:#efe7d6;
}
@keyframes pulse{0%,100%{opacity:.55}50%{opacity:1}}

/* falling petals used on cover + hero */
.petals{position:absolute; inset:0; overflow:hidden; pointer-events:none; z-index:1;}
.petal{
  position:absolute; top:-5%; width:10px; height:10px; border-radius:60% 0 60% 0;
  background:var(--rose); opacity:.75;
  animation:fall linear infinite;
}
@keyframes fall{
  0%{transform:translateY(0) translateX(0) rotate(0deg); opacity:0;}
  8%{opacity:.8;}
  100%{transform:translateY(110vh) translateX(var(--drift,40px)) rotate(300deg); opacity:0;}
}

/* ================= HERO ================= */
#hero{
  min-height:100svh; display:flex; flex-direction:column; align-items:center; justify-content:center;
  text-align:center; position:relative; padding:60px 28px;
  background:
    radial-gradient(70% 50% at 50% 15%, rgba(182,136,63,.12), transparent 70%),
    var(--ivory);
  border-bottom:1px solid var(--line);
}
.hero-quote{
  font-family:var(--serif); font-style:italic; font-size:15px; color:var(--ink-soft);
  max-width:280px; margin:0 auto 22px; opacity:.85;
}
.hero-names{
  font-size:clamp(48px,13vw,72px); line-height:1.02; letter-spacing:.01em;
}
.hero-amp{
  display:block; font-style:italic; color:var(--gold); font-size:.55em; margin:6px 0;
}
.hero-date{
  margin-top:26px; font-family:var(--sans); letter-spacing:.32em; font-size:13px; color:var(--gold);
}
.hero-place{margin-top:6px; font-size:13px; color:var(--ink-soft); letter-spacing:.05em;}
.scroll-cue{
  position:absolute; bottom:28px; left:50%; transform:translateX(-50%);
  width:1px; height:46px; background:linear-gradient(var(--gold), transparent);
  overflow:hidden;
}
.scroll-cue::after{
  content:''; position:absolute; top:-46px; left:0; width:1px; height:46px; background:var(--ivory);
  animation:cueMove 2.2s ease-in-out infinite;
}
@keyframes cueMove{0%{top:-46px;}100%{top:46px;}}

/* ================= SAVE THE DATE / CALENDAR ================= */
.cal-wrap{
  border:1px solid var(--gold-soft); padding:34px 22px; max-width:340px; margin:36px auto 0; position:relative;
  background:linear-gradient(180deg, rgba(182,136,63,.05), transparent);
}
.cal-month{font-family:var(--sans); letter-spacing:.3em; font-size:12px; color:var(--gold); text-align:center; margin-bottom:16px;}
.cal-grid{display:grid; grid-template-columns:repeat(7,1fr); gap:6px; text-align:center;}
.cal-grid span{font-size:11px; color:var(--ink-soft); opacity:.5; font-family:var(--sans);}
.cal-grid .day{
  font-family:var(--serif); font-size:14px; padding:6px 0; color:var(--charcoal);
}
.cal-grid .day.hl{
  background:var(--ink); color:var(--ivory); border-radius:50%;
  position:relative;
}
.cal-grid .day.hl::after{
  content:''; position:absolute; inset:-4px; border:1px solid var(--gold); border-radius:50%;
  animation:ring 2.6s ease-in-out infinite;
}
@keyframes ring{0%,100%{transform:scale(1); opacity:.7;}50%{transform:scale(1.14); opacity:0;}}

/* ================= FAMILY ================= */
#family{background:var(--ivory-2);}
.fam-grid{
  display:grid; grid-template-columns:1fr auto 1fr; gap:22px; max-width:440px; margin:34px auto 0; align-items:start;
}
.fam-col{text-align:center;}
.fam-col .role{font-family:var(--sans); font-size:11px; letter-spacing:.24em; color:var(--gold); margin-bottom:10px;}
.fam-col p{font-family:var(--serif); font-size:16px; margin-bottom:4px;}
.fam-div{width:1px; background:var(--line); margin-top:6px;}
.couple-strip{
  margin-top:46px; display:flex; justify-content:center; gap:34px; flex-wrap:wrap;
}
.couple-strip div{text-align:center;}
.couple-strip .name{font-family:var(--serif); font-size:22px; margin-top:4px;}
.couple-strip .tag{font-size:11px; letter-spacing:.2em; color:var(--gold);}

/* ================= EVENT ================= */
.event-card{
  max-width:400px; margin:30px auto 0; text-align:center; border-top:1px solid var(--gold-soft); border-bottom:1px solid var(--gold-soft);
  padding:28px 10px;
}
.event-time{font-family:var(--serif); font-size:34px;}
.event-date-line{font-size:12px; letter-spacing:.2em; color:var(--gold); margin-top:6px;}
.event-lunar{font-size:12px; color:var(--ink-soft); opacity:.7; margin-top:4px;}
.event-venue{margin-top:22px; font-family:var(--serif); font-size:19px;}
.event-addr{font-size:13px; color:var(--ink-soft); margin-top:4px;}
.btn{
  display:inline-flex; align-items:center; gap:8px; margin-top:22px;
  padding:13px 30px; border:1px solid var(--ink); color:var(--ink); background:transparent;
  font-size:12px; letter-spacing:.2em; text-decoration:none; transition:background .35s ease, color .35s ease;
}
.btn:hover{background:var(--ink); color:var(--ivory);}
.btn-solid{background:var(--ink); color:var(--ivory); border-color:var(--ink);}
.btn-solid:hover{background:var(--ink-soft);}
.map-frame{
  margin-top:24px; border:1px solid var(--line); height:220px; overflow:hidden;
}
.map-frame iframe{width:100%; height:100%; border:0; filter:sepia(.15) saturate(.9);}

/* ================= TIMELINE ================= */
#timeline{background:var(--ivory-2);}
.tl{max-width:420px; margin:38px auto 0; position:relative; padding-left:26px;}
.tl::before{content:''; position:absolute; left:6px; top:6px; bottom:6px; width:1px; background:var(--gold-soft);}
.tl-item{position:relative; padding-bottom:34px;}
.tl-item:last-child{padding-bottom:0;}
.tl-item::before{
  content:''; position:absolute; left:-26px; top:4px; width:9px; height:9px; border-radius:50%;
  background:var(--ivory-2); border:2px solid var(--gold);
}
.tl-time{font-family:var(--sans); font-size:12px; letter-spacing:.18em; color:var(--gold);}
.tl-title{font-family:var(--serif); font-size:19px; margin-top:4px;}
.tl-desc{font-size:13px; color:var(--ink-soft); margin-top:4px;}
.dresscode{margin-top:36px; text-align:center;}
.swatches{display:flex; gap:10px; justify-content:center; margin-top:12px;}
.swatch{width:26px; height:26px; border-radius:50%; border:1px solid var(--line);}

/* ================= GALLERY ================= */
.gal-grid{
  display:grid; grid-template-columns:repeat(3,1fr); gap:6px; margin-top:32px;
}
.gal-grid a{display:block; aspect-ratio:3/4; overflow:hidden; position:relative;}
.gal-grid img{width:100%; height:100%; object-fit:cover; display:block; transition:transform .6s ease, filter .6s ease; filter:grayscale(.15) sepia(.08);}
.gal-grid a:hover img{transform:scale(1.08); filter:none;}
.lightbox{
  position:fixed; inset:0; background:rgba(14,20,17,.94); z-index:200; display:none;
  align-items:center; justify-content:center; padding:20px;
}
.lightbox.show{display:flex;}
.lightbox img{max-width:100%; max-height:88vh; box-shadow:var(--shadow);}
.lightbox .close{position:absolute; top:22px; right:26px; color:#efe7d6; font-size:26px; background:none; border:0;}

/* ================= WISHES / RSVP ================= */
.card{
  max-width:420px; margin:30px auto 0; background:var(--ivory); border:1px solid var(--line); padding:26px 22px;
  box-shadow:var(--shadow);
}
label{display:block; font-size:11px; letter-spacing:.16em; color:var(--gold); margin-bottom:6px; margin-top:16px;}
label:first-child{margin-top:0;}
input[type=text], textarea{
  width:100%; border:0; border-bottom:1px solid var(--line); background:transparent; padding:9px 2px;
  font-family:var(--sans); font-size:14.5px; color:var(--charcoal); outline:none;
}
input[type=text]:focus, textarea:focus{border-color:var(--gold);}
.seg{display:flex; gap:8px; margin-top:6px;}
.seg button{
  flex:1; padding:10px 4px; border:1px solid var(--line); background:transparent; font-size:12.5px; color:var(--ink-soft);
  transition:all .25s ease;
}
.seg button.active{background:var(--ink); border-color:var(--ink); color:var(--ivory);}
.submit-row{margin-top:22px; text-align:center;}
.toast{
  position:fixed; left:50%; bottom:26px; transform:translate(-50%,140%); background:var(--ink); color:var(--ivory);
  padding:12px 22px; font-size:13px; letter-spacing:.05em; z-index:300; transition:transform .5s cubic-bezier(.2,.8,.2,1);
  box-shadow:var(--shadow);
}
.toast.show{transform:translate(-50%,0);}
.wish-list{max-width:420px; margin:26px auto 0; display:flex; flex-direction:column; gap:12px;}
.wish{
  border-left:2px solid var(--gold-soft); padding:8px 0 8px 14px; opacity:0; transform:translateY(8px);
  animation:wishIn .6s ease forwards;
}
@keyframes wishIn{to{opacity:1; transform:translateY(0);}}
.wish .who{font-family:var(--serif); font-size:14.5px; color:var(--ink);}
.wish .msg{font-size:13px; color:var(--ink-soft); margin-top:2px;}
.wish-empty{text-align:center; font-size:13px; color:var(--ink-soft); opacity:.6; padding:14px 0;}

/* ================= COUNTDOWN ================= */
#countdown{
  background:var(--ink); color:var(--ivory); text-align:center;
}
#countdown h2{color:var(--ivory);}
.cd-grid{display:flex; justify-content:center; gap:18px; margin-top:30px; flex-wrap:wrap;}
.cd-unit{width:74px;}
.cd-num{
  font-family:var(--serif); font-size:38px; background:rgba(246,241,230,.06); border:1px solid rgba(246,241,230,.18);
  padding:14px 0; transition:background .3s ease;
}
.cd-num.tick{background:rgba(182,136,63,.22);}
.cd-lbl{font-size:10.5px; letter-spacing:.2em; margin-top:8px; color:var(--gold-soft);}

/* ================= GIFT BOX ================= */
.tabs{display:flex; max-width:420px; margin:30px auto 0; border-bottom:1px solid var(--line);}
.tabs button{
  flex:1; background:none; border:0; padding:12px 0; font-size:12.5px; letter-spacing:.16em; color:var(--ink-soft);
  border-bottom:2px solid transparent; transition:all .3s ease;
}
.tabs button.active{color:var(--ink); border-color:var(--gold);}
.gift-panel{display:none; max-width:420px; margin:0 auto; text-align:center; padding-top:24px;}
.gift-panel.active{display:block;}
.qr{width:150px; height:150px; margin:0 auto 16px; border:6px solid var(--ivory); box-shadow:var(--shadow);}
.bank-line{font-size:13px; color:var(--ink-soft); margin-top:2px;}
.bank-name{font-family:var(--serif); font-size:18px; margin-top:12px;}
.copy-btn{
  margin-top:14px; border:1px solid var(--line); background:transparent; padding:9px 18px; font-size:11.5px;
  letter-spacing:.16em; color:var(--ink); transition:all .3s ease;
}
.copy-btn:hover{border-color:var(--gold); color:var(--gold);}

/* ================= FOOTER ================= */
#footer{background:var(--ink); color:var(--ivory); text-align:center; border-bottom:0;}
#footer h2{color:var(--ivory); font-style:italic;}
.socials{margin-top:20px; display:flex; gap:22px; justify-content:center;}
.socials a{opacity:.75; transition:opacity .3s ease;}
.socials a:hover{opacity:1;}
.foot-note{margin-top:34px; font-size:11px; opacity:.45; letter-spacing:.08em;}

/* ================= FLOATING CONTROLS ================= */
.fab{
  position:fixed; z-index:50; width:46px; height:46px; border-radius:50%; background:var(--ink); color:var(--ivory);
  display:flex; align-items:center; justify-content:center; box-shadow:var(--shadow); border:1px solid rgba(246,241,230,.2);
}
#musicFab{right:18px; bottom:88px;}
#nightFab{right:18px; bottom:140px;}
.eq{display:flex; gap:2px; align-items:flex-end; height:14px;}
.eq span{width:2.5px; background:var(--gold-soft); animation:eq 1s ease-in-out infinite; height:4px;}
.eq span:nth-child(2){animation-delay:.2s;}
.eq span:nth-child(3){animation-delay:.4s;}
[data-playing="0"] .eq span{animation-play-state:paused; height:4px;}
@keyframes eq{0%,100%{height:4px;}50%{height:13px;}}

.bottomnav{
  position:sticky; bottom:0; left:0; right:0; z-index:40; background:var(--ivory); border-top:1px solid var(--line);
  display:flex; justify-content:space-around; padding:10px 4px calc(10px + env(safe-area-inset-bottom));
}
.bottomnav a{
  font-size:10px; letter-spacing:.05em; color:var(--ink-soft); text-decoration:none; text-align:center; opacity:.75;
}
.bottomnav a .ic{display:block; margin:0 auto 4px;}

/* Botanical Dusk adapter for shared TCDT template parts. The canonical tokens/layout above remain source of truth. */
body.tcdt-thiep-page{background:var(--ink);color:var(--charcoal);font-family:var(--sans);font-weight:300;font-size:16px;line-height:1.8;}
body.tcdt-thiep-page .stage{max-width:var(--max);width:100%;margin:0 auto;background:var(--ivory);min-height:100vh;box-shadow:0 0 120px rgba(0,0,0,.35);overflow:hidden;}
body.tcdt-thiep-page .sec{padding:88px 32px;position:relative;border-bottom:1px solid var(--line);}
body.tcdt-thiep-page .ctr{text-align:center;}
body.tcdt-thiep-page .eyebrow{font-family:var(--sans);font-size:11.5px;letter-spacing:.28em;color:var(--gold);font-weight:500;display:block;text-transform:uppercase;}
body.tcdt-thiep-page .eyebrow::before,body.tcdt-thiep-page .eyebrow::after{display:none;}
body.tcdt-thiep-page .h-sec{font-family:var(--serif);font-size:30px;line-height:1.15;color:var(--ink);margin-top:10px;font-weight:400;}
body.tcdt-thiep-page .h-sec em{font-style:italic;font-weight:400;}
body.tcdt-thiep-page .lead{margin-top:10px;font-size:13.5px;color:var(--ink-soft);line-height:1.7;}
body.tcdt-thiep-page .rv{opacity:0;transform:translateY(28px);transition:opacity .9s cubic-bezier(.2,.7,.2,1),transform .9s cubic-bezier(.2,.7,.2,1);}
body.tcdt-thiep-page .rv.on{opacity:1;transform:translateY(0);}
body.tcdt-thiep-page .rv-d1{transition-delay:.12s}.rv-d2{transition-delay:.24s}.rv-d3{transition-delay:.36s}
body.tcdt-thiep-page #veil{background:radial-gradient(120% 120% at 50% 0%,#24382e 0%,#17251e 55%,#101a15 100%);transition:opacity 1s ease,visibility 1s ease;}
body.tcdt-thiep-page .veil-in{max-width:440px;color:var(--ivory);}
body.tcdt-thiep-page .veil-to{font-family:var(--serif);font-style:italic;font-size:18px;color:#efe7d6;}
body.tcdt-thiep-page .veil-guest{font-family:var(--serif);font-size:26px;color:#efe7d6;line-height:1.25;}
body.tcdt-thiep-page .env{width:200px;height:140px;margin:0 auto 34px;position:relative;perspective:900px;cursor:pointer;}
body.tcdt-thiep-page .env-body{position:absolute;inset:0;background:linear-gradient(180deg,#2c4136,#1d2f26);border:1px solid rgba(217,184,119,.35);}
body.tcdt-thiep-page .env-body::after{content:'';position:absolute;inset:0;background:linear-gradient(to bottom right,transparent 49.4%,rgba(217,184,119,.16) 50%,transparent 50.6%),linear-gradient(to bottom left,transparent 49.4%,rgba(217,184,119,.16) 50%,transparent 50.6%);}
body.tcdt-thiep-page .env-flap{position:absolute;top:0;left:0;width:100%;height:70px;background:linear-gradient(180deg,#33493d,#24382e);clip-path:polygon(0 0,100% 0,50% 100%);transform-origin:top center;transition:transform 1s cubic-bezier(.6,-.2,.3,1.2);border-bottom:1px solid rgba(217,184,119,.35);z-index:2;}
body.tcdt-thiep-page .env.open .env-flap{transform:rotateX(180deg);}
body.tcdt-thiep-page .env-card{position:absolute;left:10px;right:10px;top:16px;height:108px;background:linear-gradient(180deg,var(--ivory),var(--ivory-2));border:1px solid rgba(217,184,119,.4);transform:translateY(0) scale(.96);opacity:0;transition:transform 1s .45s cubic-bezier(.2,.7,.2,1),opacity .5s .45s ease;display:flex;align-items:center;justify-content:center;font-family:var(--serif);font-size:22px;color:var(--ink);z-index:1;}
body.tcdt-thiep-page .env.open .env-card{transform:translateY(-52px) scale(1);opacity:1;}
body.tcdt-thiep-page #veil .seal{top:56px;width:44px;height:44px;margin-left:-22px;background:radial-gradient(circle at 35% 30%,var(--gold-soft),var(--gold) 60%,#8a6427 100%);color:var(--ink);font-family:var(--serif);font-style:italic;font-size:16px;box-shadow:0 6px 14px rgba(0,0,0,.35);}
body.tcdt-thiep-page .env.open .seal{transform:translateY(-10px) scale(0);opacity:0;}
body.tcdt-thiep-page .veil-hint{font-family:var(--sans);font-size:12px;letter-spacing:.24em;color:var(--gold-soft);text-transform:uppercase;animation:pulse 2.4s ease-in-out infinite;}
body.tcdt-thiep-page .veil-btn{margin-top:14px;padding:11px 30px;border:1px solid var(--gold-soft);border-radius:0;color:var(--gold-soft);font-size:11px;letter-spacing:.22em;text-transform:uppercase;}
body.tcdt-thiep-page .veil-btn:hover{background:var(--gold-soft);color:var(--ink);}
body.tcdt-thiep-page #hero{min-height:100svh;padding:60px 28px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;position:relative;background:radial-gradient(70% 50% at 50% 15%,rgba(182,136,63,.12),transparent 70%),var(--ivory);border-bottom:1px solid var(--line);}
body.tcdt-thiep-page #hero .ph{position:absolute;inset:0;background-image:none!important;background-position:center;background-size:cover;opacity:.12;filter:grayscale(.2) sepia(.25);}
body.tcdt-thiep-page #hero .vig{position:absolute;inset:0;background:linear-gradient(180deg,rgba(246,241,230,.75),rgba(246,241,230,.96));}
body.tcdt-thiep-page #hero .dust{display:none;}
body.tcdt-thiep-page #hero .hero-in{position:relative;z-index:2;max-width:560px;}
body.tcdt-thiep-page #hero .mono,body.tcdt-thiep-page #hero .hero-rule{display:none;}
body.tcdt-thiep-page .hero-eyebrow{font-family:var(--sans);font-size:11.5px;letter-spacing:.28em;color:var(--gold);font-weight:500;text-transform:uppercase;}
body.tcdt-thiep-page .hero-names{font-family:var(--serif);font-size:clamp(48px,13vw,72px);line-height:1.02;letter-spacing:.01em;color:var(--ink);font-weight:400;margin-top:16px;}
body.tcdt-thiep-page .hero-amp{display:block;font-style:italic;color:var(--gold);font-size:.55em;margin:6px 0;}
body.tcdt-thiep-page .hero-date{margin-top:26px;font-family:var(--sans);letter-spacing:.32em;font-size:13px;color:var(--gold);}
body.tcdt-thiep-page .hero-venue{margin-top:6px;font-size:13px;color:var(--ink-soft);letter-spacing:.05em;}
body.tcdt-thiep-page .cue{position:absolute;bottom:28px;left:50%;transform:translateX(-50%);width:1px;height:46px;background:linear-gradient(var(--gold),transparent);overflow:hidden;}
body.tcdt-thiep-page .cue::after{content:'';position:absolute;top:-46px;left:0;width:1px;height:46px;background:var(--ivory);animation:cueMove 2.2s ease-in-out infinite;}
body.tcdt-thiep-page #botanical-calendar{background:var(--ivory);}
body.tcdt-thiep-page .botanical-cal-wrap{border:1px solid var(--gold-soft);padding:34px 22px;max-width:340px;margin:36px auto 0;background:linear-gradient(180deg,rgba(182,136,63,.05),transparent);position:relative;}
body.tcdt-thiep-page .botanical-cal-month{font-family:var(--sans);letter-spacing:.3em;font-size:12px;color:var(--gold);text-align:center;margin-bottom:16px;}
body.tcdt-thiep-page .botanical-cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;text-align:center;}
body.tcdt-thiep-page .botanical-cal-grid span{font-size:11px;color:var(--ink-soft);opacity:.5;}
body.tcdt-thiep-page .botanical-cal-grid .day{font-family:var(--serif);font-size:14px;padding:6px 0;color:var(--charcoal);}
body.tcdt-thiep-page .botanical-cal-grid .day.hl{background:var(--ink);color:var(--ivory);border-radius:50%;position:relative;}
body.tcdt-thiep-page .botanical-cal-grid .day.hl::after{content:'';position:absolute;inset:-4px;border:1px solid var(--gold);border-radius:50%;animation:ring 2.6s ease-in-out infinite;}
body.tcdt-thiep-page #invite{background:var(--ivory);text-align:center;}
body.tcdt-thiep-page #invite .inv-in{max-width:420px;margin:auto;}
body.tcdt-thiep-page #invite .inv-role{font-family:var(--serif);font-style:italic;font-size:18px;color:var(--ink-soft);}
body.tcdt-thiep-page #invite .inv-guest{font-family:var(--serif);font-size:24px;color:var(--ink);margin-top:8px;}
body.tcdt-thiep-page #invite .lace{width:120px;height:auto;margin:24px auto;opacity:.7;}
body.tcdt-thiep-page #invite .inv-body{font-size:15px;color:var(--ink-soft);line-height:1.85;}
body.tcdt-thiep-page #invite .inv-sign{margin-top:22px;font-family:var(--serif);font-style:italic;color:var(--ink);font-size:18px;}
body.tcdt-thiep-page #couple{background:var(--ivory-2);}
body.tcdt-thiep-page #couple .duo{display:grid;grid-template-columns:1fr auto 1fr;gap:22px;max-width:440px;margin:34px auto 0;align-items:start;}
body.tcdt-thiep-page #couple .frame,body.tcdt-thiep-page #couple .p-role,body.tcdt-thiep-page #couple .p-name,body.tcdt-thiep-page #couple .p-desc{display:none;}
body.tcdt-thiep-page #couple .p-parents{text-align:center;font-family:var(--serif);font-size:16px;line-height:1.55;color:var(--charcoal);margin:0;}
body.tcdt-thiep-page #couple .p-parents span{display:block;font-family:var(--sans);font-size:11px;letter-spacing:.24em;color:var(--gold);margin-bottom:10px;}
body.tcdt-thiep-page #couple .duo-amp{font-family:var(--serif);font-size:28px;color:var(--gold);padding-top:28px;}
body.tcdt-thiep-page .botanical-couple-strip{margin-top:46px;display:flex;justify-content:center;gap:34px;flex-wrap:wrap;text-align:center;}
body.tcdt-thiep-page .botanical-couple-strip .tag{font-size:11px;letter-spacing:.2em;color:var(--gold);}
body.tcdt-thiep-page .botanical-couple-strip .name{font-family:var(--serif);font-size:22px;margin-top:4px;color:var(--charcoal);}
body.tcdt-thiep-page #events{background:var(--ivory);text-align:center;}
body.tcdt-thiep-page #events .ev{max-width:400px;margin:30px auto 0;text-align:center;border-top:1px solid var(--gold-soft);border-bottom:1px solid var(--gold-soft);padding:28px 10px;}
body.tcdt-thiep-page #events .ev-no{display:none;}
body.tcdt-thiep-page #events .ev-name{font-family:var(--serif);font-size:19px;color:var(--charcoal);}
body.tcdt-thiep-page #events .ev-time{font-family:var(--serif);font-size:34px;color:var(--charcoal);}
body.tcdt-thiep-page #events .ev-date{font-size:12px;letter-spacing:.2em;color:var(--gold);margin-top:6px;}
body.tcdt-thiep-page #events .ev-lunar{font-size:12px;color:var(--ink-soft);opacity:.7;margin-top:4px;}
body.tcdt-thiep-page #events .ev-venue{margin-top:22px;font-family:var(--serif);font-size:19px;color:var(--charcoal);}
body.tcdt-thiep-page #events .ev-addr{font-size:13px;color:var(--ink-soft);margin-top:4px;}
body.tcdt-thiep-page #events .btn{display:inline-flex;align-items:center;margin-top:22px;padding:13px 30px;border:1px solid var(--ink);color:var(--ink);background:transparent;font-size:12px;letter-spacing:.2em;text-decoration:none;}
body.tcdt-thiep-page #events .btn--solid{background:var(--ink);color:var(--ivory);}
body.tcdt-thiep-page #events .map{margin-top:24px;border:1px solid var(--line);height:220px;overflow:hidden;}
body.tcdt-thiep-page #events .map iframe{width:100%;height:100%;border:0;filter:sepia(.15) saturate(.9);}
body.tcdt-thiep-page #story{background:var(--ivory-2);}
body.tcdt-thiep-page #story .tl{max-width:420px;margin:38px auto 0;position:relative;padding-left:26px;}
body.tcdt-thiep-page #story .tl::before{content:'';position:absolute;left:6px;top:6px;bottom:6px;width:1px;background:var(--gold-soft);}
body.tcdt-thiep-page #story .tl-i{position:relative;padding-bottom:34px;}
body.tcdt-thiep-page #story .tl-i:last-child{padding-bottom:0;}
body.tcdt-thiep-page #story .tl-i::before{content:'';position:absolute;left:-26px;top:4px;width:9px;height:9px;border-radius:50%;background:var(--ivory-2);border:2px solid var(--gold);}
body.tcdt-thiep-page #story .tl-y{font-size:12px;letter-spacing:.18em;color:var(--gold);}
body.tcdt-thiep-page #story .tl-h{font-family:var(--serif);font-size:19px;margin-top:4px;color:var(--charcoal);}
body.tcdt-thiep-page #story .tl-p{font-size:13px;color:var(--ink-soft);margin-top:4px;}
body.tcdt-thiep-page #story .tl-img{display:none;}
body.tcdt-thiep-page #album{background:var(--ivory);}
body.tcdt-thiep-page #album .gal{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-top:32px;}
body.tcdt-thiep-page #album .gal figure{display:block;aspect-ratio:3/4;overflow:hidden;position:relative;margin:0;cursor:zoom-in;}
body.tcdt-thiep-page #album .gal figure:nth-child(n+10){display:none;}
body.tcdt-thiep-page #album .gal img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .6s ease,filter .6s ease;filter:grayscale(.15) sepia(.08);}
body.tcdt-thiep-page #album .gal figure:hover img{transform:scale(1.08);filter:none;}
body.tcdt-thiep-page #rsvp{background:var(--ivory);}
body.tcdt-thiep-page #rsvp .card,body.tcdt-thiep-page #wish .card{max-width:420px;margin:30px auto 0;background:var(--ivory);border:1px solid var(--line);padding:26px 22px;box-shadow:var(--shadow);}
body.tcdt-thiep-page #rsvp label,body.tcdt-thiep-page #wish label{display:block;font-size:11px;letter-spacing:.16em;color:var(--gold);margin:16px 0 6px;}
body.tcdt-thiep-page #rsvp input[type=text],body.tcdt-thiep-page #wish input[type=text],body.tcdt-thiep-page #wish textarea{width:100%;border:0;border-bottom:1px solid var(--line);background:transparent;padding:9px 2px;font-family:var(--sans);font-size:14.5px;color:var(--charcoal);outline:none;}
body.tcdt-thiep-page #rsvp .seg,body.tcdt-thiep-page #wish .seg{display:flex;gap:8px;margin-top:6px;}
body.tcdt-thiep-page #rsvp .seg button{flex:1;padding:10px 4px;border:1px solid var(--line);background:transparent;font-size:12.5px;color:var(--ink-soft);}
body.tcdt-thiep-page #rsvp .seg button.on{background:var(--ink);border-color:var(--ink);color:var(--ivory);}
body.tcdt-thiep-page #rsvp #goExtra{display:none;}
body.tcdt-thiep-page #rsvp .submit{text-align:center;margin-top:22px;}
body.tcdt-thiep-page #rsvp .btn--solid{background:var(--ink);color:var(--ivory);border:1px solid var(--ink);padding:13px 30px;letter-spacing:.2em;}
body.tcdt-thiep-page #count{background:var(--ink);color:var(--ivory);text-align:center;}
body.tcdt-thiep-page #count .h-sec{color:var(--ivory);}
body.tcdt-thiep-page #count .eyebrow{color:var(--gold-soft);}
body.tcdt-thiep-page #count .cd{display:flex;justify-content:center;gap:18px;margin-top:30px;flex-wrap:wrap;}
body.tcdt-thiep-page #count .cd-u{width:74px;}
body.tcdt-thiep-page #count .cd-n{font-family:var(--serif);font-size:38px;background:rgba(246,241,230,.06);border:1px solid rgba(246,241,230,.18);padding:14px 0;}
body.tcdt-thiep-page #count .cd-l{font-size:10.5px;letter-spacing:.2em;margin-top:8px;color:var(--gold-soft);}
body.tcdt-thiep-page #count .cd-note{margin-top:16px;color:var(--ivory);}
body.tcdt-thiep-page #gift{background:var(--ivory);}
body.tcdt-thiep-page #gift .tabs{display:flex;max-width:420px;margin:30px auto 0;border-bottom:1px solid var(--line);}
body.tcdt-thiep-page #gift .tabs button{flex:1;background:none;border:0;padding:12px 0;font-size:12.5px;letter-spacing:.16em;color:var(--ink-soft);border-bottom:2px solid transparent;}
body.tcdt-thiep-page #gift .tabs button.on{color:var(--ink);border-color:var(--gold);}
body.tcdt-thiep-page #gift .pane{display:none;max-width:420px;margin:0 auto;text-align:center;padding-top:24px;}
body.tcdt-thiep-page #gift .pane.on{display:block;}
body.tcdt-thiep-page #wish{background:var(--ivory);}
body.tcdt-thiep-page #wish .wlist{max-width:420px;margin:26px auto 0;display:flex;flex-direction:column;gap:12px;}
body.tcdt-thiep-page #wish .w{border-left:2px solid var(--gold-soft);padding:8px 0 8px 14px;}
body.tcdt-thiep-page #wish .w-n{font-family:var(--serif);font-size:14.5px;color:var(--ink);}
body.tcdt-thiep-page #wish .w-m{font-size:13px;color:var(--ink-soft);margin-top:2px;}
body.tcdt-thiep-page #thanks{background:var(--ink);color:var(--ivory);text-align:center;border-bottom:0;}
body.tcdt-thiep-page #thanks .th-h{color:var(--ivory);font-size:24px;}
body.tcdt-thiep-page #thanks .th-sig{color:var(--gold-soft);font-family:var(--serif);font-style:italic;margin-top:24px;}
body.tcdt-thiep-page #thanks .credit{margin-top:34px;font-size:11px;opacity:.5;letter-spacing:.08em;}
body.tcdt-thiep-page #botanical-nav{position:sticky;bottom:0;z-index:40;background:var(--ivory);border-top:1px solid var(--line);display:flex;justify-content:space-around;padding:10px 4px calc(10px + env(safe-area-inset-bottom));}
body.tcdt-thiep-page #botanical-nav a{font-size:10px;letter-spacing:.05em;color:var(--ink-soft);text-decoration:none;text-align:center;opacity:.75;}
body.tcdt-thiep-page .fab{position:fixed;z-index:50;width:46px;height:46px;border-radius:50%;background:var(--ink);color:var(--ivory);display:flex;align-items:center;justify-content:center;box-shadow:var(--shadow);border:1px solid rgba(246,241,230,.2);}
body.tcdt-thiep-page #musicFab{right:18px;bottom:88px;} body.tcdt-thiep-page #nightFab{right:18px;bottom:140px;}
body.tcdt-thiep-page .botanical-fabs .disc{display:block;width:18px;height:18px;border:2px solid currentColor;border-radius:50%;}
body.tcdt-thiep-page .botanical-fabs{display:contents;}
body.tcdt-thiep-page #lightbox{position:fixed;inset:0;background:rgba(14,20,17,.94);z-index:200;display:none;align-items:center;justify-content:center;padding:20px;}
body.tcdt-thiep-page #lightbox.show{display:flex;} body.tcdt-thiep-page #lightbox img{max-width:100%;max-height:88vh;box-shadow:var(--shadow);}
body.tcdt-thiep-page .botanical-petals{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:1;}
body.tcdt-thiep-page .botanical-petal{position:absolute;top:-5%;border-radius:60% 0 60% 0;background:var(--rose);opacity:.75;animation:fall linear infinite;}
body.tcdt-thiep-page #botanical-cover-petals{z-index:1;} body.tcdt-thiep-page #botanical-hero-petals{z-index:1;}
body.tcdt-thiep-page[data-mode="night"] .stage{background:var(--ivory);} 
@media(max-width:480px){body.tcdt-thiep-page .sec{padding-left:26px;padding-right:26px;}body.tcdt-thiep-page #couple .duo{gap:12px;}body.tcdt-thiep-page .hero-names{font-size:clamp(46px,13vw,68px);}}
/* Final shared-markup corrections */
body.tcdt-thiep-page #veil{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;flex-direction:column;}
body.tcdt-thiep-page #veil canvas{position:absolute;inset:0;width:100%;height:100%;}
body.tcdt-thiep-page .veil-in{position:relative;z-index:3;text-align:center;padding:0 24px;color:var(--ivory);}
body.tcdt-thiep-page .veil-to{margin-bottom:8px;}
body.tcdt-thiep-page #thanks .acts{display:flex;justify-content:center;gap:10px;flex-wrap:wrap;margin-top:24px;}
body.tcdt-thiep-page #thanks .acts button{border:1px solid rgba(217,184,119,.45);padding:9px 13px;color:var(--gold-soft);font-size:11px;background:transparent;}
body.tcdt-thiep-page #thanks .th-date{color:var(--gold-soft);margin-top:6px;}
body.tcdt-thiep-page #gift .bank{font-size:13px;color:var(--ink-soft);}
