/* 所有模板共用的抽屉（祝福 / 回执 / 到场信息）与静音按钮。
   模板在自己的 :root 里改这些变量即可换肤。 */
:root{
  --sh-bg:#1b1233; --sh-fg:#fbeecb; --sh-accent:#f2d48b; --sh-line:rgba(242,212,139,.35);
  --sh-on-accent:#2a0d1f; --sh-field:rgba(255,255,255,.06); --sh-mask:rgba(4,4,14,.55);
  --sh-font:"Songti SC","Noto Serif SC","Source Han Serif SC","STSong","SimSun",serif;
}
#sheet{position:fixed;inset:0;z-index:300;display:flex;align-items:flex-end;background:var(--sh-mask);
  opacity:0;visibility:hidden;transition:opacity .35s,visibility .35s;touch-action:auto;font-family:var(--sh-font)}
#sheet.on{opacity:1;visibility:visible}
#sheetBody{position:relative;width:100%;max-width:560px;margin:0 auto;max-height:82vh;overflow:auto;background:var(--sh-bg);color:var(--sh-fg);
  border-top:1px solid var(--sh-line);border-radius:22px 22px 0 0;padding:24px 22px calc(26px + env(safe-area-inset-bottom));
  transform:translateY(30px);transition:transform .4s;-webkit-user-select:text;user-select:text}
#sheet.on #sheetBody{transform:none}
#sheetBody h3{font-weight:400;font-size:18px;letter-spacing:.2em;margin-bottom:16px;color:var(--sh-accent)}
#sheetBody label{display:block;font-size:12px;letter-spacing:.2em;opacity:.7;margin:14px 0 6px}
#sheetBody input[type=text],#sheetBody textarea{width:100%;font:15px var(--sh-font);color:inherit;background:var(--sh-field);
  border:1px solid var(--sh-line);border-radius:10px;padding:11px 12px;outline:none}
#sheetBody textarea{height:86px;resize:none;line-height:1.7}
#sheetBody .row{display:flex;gap:10px;align-items:center}
#sheetBody .seg{flex:1;text-align:center;padding:11px 0;border:1px solid var(--sh-line);border-radius:10px;cursor:pointer;letter-spacing:.2em;font-size:14px}
#sheetBody .seg.sel{background:var(--sh-accent);color:var(--sh-on-accent);border-color:var(--sh-accent)}
#sheetBody .step{width:38px;height:38px;border-radius:50%;border:1px solid var(--sh-line);background:none;color:var(--sh-accent);font-size:20px;cursor:pointer}
#sheetBody .num{min-width:42px;text-align:center;font-size:20px}
#sheetBody .cbtn{font:14px var(--sh-font);letter-spacing:.25em;color:var(--sh-accent);background:transparent;border:1px solid var(--sh-accent);
  padding:12px 18px;border-radius:30px;cursor:pointer;white-space:nowrap;display:inline-block;text-decoration:none;text-align:center}
#sheetBody .cbtn.primary{background:var(--sh-accent);color:var(--sh-on-accent)}
#sheetBody .cbtn:disabled{opacity:.5}
#sheetBody .submit{width:100%;margin-top:22px}
#sheetBody .msg{margin-top:14px;font-size:13px;letter-spacing:.15em;min-height:20px;text-align:center;opacity:.9}
#sheetBody .count{font-size:34px;letter-spacing:.1em;text-align:center;margin:8px 0 4px;color:var(--sh-accent);font-variant-numeric:tabular-nums}
#sheetBody .sub{text-align:center;font-size:12px;letter-spacing:.25em;opacity:.7}
#sheetBody dl{margin-top:18px;display:grid;grid-template-columns:auto 1fr;gap:10px 16px;font-size:14px;line-height:1.7}
#sheetBody dt{opacity:.6;letter-spacing:.2em}
#sheetBody dd{margin:0}
#sheetBody ul{list-style:none;margin-top:16px;border-left:1px solid var(--sh-line);padding-left:14px}
#sheetBody li{margin:8px 0;font-size:14px}
#sheetBody li span{display:inline-block;min-width:54px;color:var(--sh-accent);font-variant-numeric:tabular-nums}
#sheetBody .close{position:absolute;right:12px;top:10px;background:none;border:0;color:inherit;opacity:.55;font-size:24px;cursor:pointer;padding:6px}
.c-mute{position:fixed;right:16px;top:calc(14px + env(safe-area-inset-top));z-index:400;width:34px;height:34px;border-radius:50%;
  border:1px solid currentColor;background:rgba(0,0,0,.18);font-size:15px;display:flex;align-items:center;justify-content:center;cursor:pointer;
  color:var(--mute-fg,#f2d48b)}
.c-mute.off{opacity:.4}

/* ---------- 完整请柬（reader.js） ---------- */
#reader{position:fixed;inset:0;z-index:250;background:var(--sh-bg);color:var(--sh-fg);font-family:var(--sh-font);overflow-y:auto;overflow-x:hidden;
  touch-action:pan-y;-webkit-overflow-scrolling:touch;opacity:0;transform:translateY(24px);transition:opacity .45s,transform .45s;-webkit-user-select:text;user-select:text}
#reader.on{opacity:1;transform:none}
.rd-x{position:fixed;right:14px;top:calc(12px + env(safe-area-inset-top));z-index:5;width:36px;height:36px;border-radius:50%;border:1px solid var(--sh-line);background:var(--sh-bg);
  color:inherit;font-size:22px;line-height:1;cursor:pointer}
.rd-page{max-width:520px;margin:0 auto;padding:0 22px calc(60px + env(safe-area-inset-bottom))}
.rv{opacity:0;transform:translateY(26px);transition:opacity .9s ease,transform .9s ease}
.rv.in{opacity:1;transform:none}
.rd-sec{padding:54px 0 10px;text-align:center}
.rd-h{margin-bottom:26px}
.rd-h h2{font-weight:400;font-size:22px;letter-spacing:.35em;padding-left:.35em;color:var(--sh-accent)}
.rd-h small{display:block;margin-top:8px;font:11px ui-monospace,Menlo,Consolas,monospace;letter-spacing:.35em;opacity:.55}
.rd-hero{padding-top:calc(86px + env(safe-area-inset-top));padding-bottom:30px}
.rd-eyebrow{font:11px ui-monospace,Menlo,Consolas,monospace;letter-spacing:.4em;opacity:.6}
.rd-names{margin:22px 0 14px;font-size:clamp(30px,9.5vw,46px);letter-spacing:.2em;line-height:1.3;color:var(--sh-accent);display:flex;flex-direction:column;align-items:center}
.rd-names i{font-style:normal;font-size:.5em;opacity:.7;margin:2px 0}
.rd-names.sm{font-size:26px;flex-direction:row;justify-content:center;gap:.6em;margin:0 0 16px}
.rd-date{font-size:16px;letter-spacing:.3em;padding-left:.3em}
.rd-venue{margin-top:8px;font-size:14px;letter-spacing:.2em;opacity:.75}
.rd-to{margin-top:22px;font-size:15px;letter-spacing:.3em;padding-left:.3em;opacity:.9}
.rd-count{display:flex;justify-content:center;gap:12px;margin-top:30px}
.rd-count div{min-width:60px;padding:12px 0 8px;border:1px solid var(--sh-line);border-radius:12px}
.rd-count b{display:block;font:400 26px ui-monospace,Menlo,Consolas,monospace;font-variant-numeric:tabular-nums;color:var(--sh-accent)}
.rd-count small{display:block;margin-top:2px;font-size:11px;letter-spacing:.3em;opacity:.65}
.rd-tl{position:relative;text-align:left;margin-left:6px;padding-left:26px;border-left:1px solid var(--sh-line)}
.rd-tli{position:relative;padding-bottom:30px}
.rd-dot{position:absolute;left:-33px;top:4px;width:13px;height:13px;border-radius:50%;background:var(--sh-bg);border:2px solid var(--sh-accent)}
.rd-tlc small{font:12px ui-monospace,Menlo,Consolas,monospace;letter-spacing:.2em;color:var(--sh-accent)}
.rd-tlc h3{font-weight:400;font-size:19px;letter-spacing:.2em;margin:4px 0 8px}
.rd-tlc p,.rd-pc p,.rd-tc p,.rd-vc p,.rd-faq p{font-size:14px;line-height:1.95;letter-spacing:.06em;opacity:.85}
.rd-pg{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media(max-width:420px){.rd-pg{grid-template-columns:1fr}}
.rd-pc{padding:22px 16px;border:1px solid var(--sh-line);border-radius:16px;text-align:center}
.rd-avatar{width:84px;height:84px;margin:0 auto 12px;border-radius:50%;overflow:hidden;border:2px solid var(--sh-accent);display:flex;align-items:center;justify-content:center;
  font-size:34px;color:var(--sh-accent);background:var(--sh-field)}
.rd-avatar img{width:100%;height:100%;object-fit:cover}
.rd-pc small{font-size:11px;letter-spacing:.4em;opacity:.6}
.rd-pc h3{font-weight:400;font-size:20px;letter-spacing:.25em;margin:4px 0 10px}
.rd-tags{display:flex;flex-wrap:wrap;justify-content:center;gap:6px;margin-bottom:10px}
.rd-tags em{font-style:normal;font-size:11px;letter-spacing:.15em;padding:3px 9px;border:1px solid var(--sh-line);border-radius:20px;color:var(--sh-accent)}
.rd-pc p{text-align:left}
.rd-cg{display:grid;grid-template-columns:repeat(7,1fr);gap:8px 0;max-width:340px;margin:0 auto}
.rd-cg b{font-weight:400;font-size:12px;letter-spacing:.1em;opacity:.55;padding-bottom:6px}
.rd-cg span{height:38px;display:flex;align-items:center;justify-content:center;font:15px ui-monospace,Menlo,Consolas,monospace;position:relative;opacity:.8}
.rd-cg span.on{opacity:1;color:var(--sh-on-accent);font-weight:700;z-index:0}
.rd-cg span.on::before{content:"";position:absolute;width:38px;height:38px;border-radius:50%;background:var(--sh-accent);z-index:-1;animation:rdbeat 1.8s ease-in-out infinite}
@keyframes rdbeat{50%{transform:scale(1.12)}}
.rd-cn{margin-top:18px;font-size:14px;letter-spacing:.3em;padding-left:.3em;opacity:.8}
.rd-sl{list-style:none;text-align:left;max-width:360px;margin:0 auto}
.rd-sl li{display:flex;gap:18px;padding:14px 0;border-bottom:1px dashed var(--sh-line);font-size:15px;letter-spacing:.1em}
.rd-sl b{flex:none;width:64px;font:400 16px ui-monospace,Menlo,Consolas,monospace;color:var(--sh-accent)}
.rd-gg{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.rd-gg img{width:100%;height:100%;min-height:150px;object-fit:cover;border-radius:10px;display:block}
.rd-vc,.rd-tc{border:1px solid var(--sh-line);border-radius:16px;padding:18px 18px 20px;margin-bottom:12px;text-align:left}
.rd-vc h3{font-weight:400;font-size:19px;letter-spacing:.15em;margin-bottom:6px}
.rd-vc .cbtn{margin-top:14px;font:14px var(--sh-font);letter-spacing:.25em;color:var(--sh-accent);border:1px solid var(--sh-accent);padding:9px 18px;border-radius:30px;display:inline-block;text-decoration:none}
.rd-seat{margin-top:14px;font-size:15px;letter-spacing:.2em;color:var(--sh-accent)}
.rd-tc h4{font-weight:400;font-size:15px;letter-spacing:.2em;color:var(--sh-accent);margin-bottom:6px}
.rd-tx{white-space:pre-line;font-size:16px;line-height:2.2;letter-spacing:.14em}
.rd-faq details{text-align:left;border-bottom:1px solid var(--sh-line);padding:14px 2px}
.rd-faq summary{cursor:pointer;font-size:15px;letter-spacing:.1em;list-style:none;display:flex;justify-content:space-between;gap:12px}
.rd-faq summary::after{content:"+";color:var(--sh-accent);font-size:20px;line-height:1}
.rd-faq details[open] summary::after{content:"−"}
.rd-faq p{margin-top:10px}
.rd-end{padding-top:70px}
.rd-btns{display:flex;gap:12px;justify-content:center;margin-top:26px}
.rd-btns .cbtn{font:14px var(--sh-font);letter-spacing:.3em;color:var(--sh-accent);background:transparent;border:1px solid var(--sh-accent);padding:12px 22px 12px 26px;border-radius:30px;cursor:pointer}
.rd-btns .cbtn.primary{background:var(--sh-accent);color:var(--sh-on-accent)}

/* ---------- 照片与视频（media.js） ---------- */
.md-block{margin-bottom:34px}
.md-bh{margin-bottom:14px;text-align:left}
.md-bh h3{font-weight:400;font-size:18px;letter-spacing:.25em;color:var(--sh-accent)}
.md-bh small{display:block;margin-top:4px;font-size:11px;letter-spacing:.3em;opacity:.6}
.md-f{position:relative;margin:0;overflow:hidden;border-radius:12px;background:var(--sh-field);cursor:pointer}
.md-f img,.md-f video{display:block;width:100%;height:100%;object-fit:cover}
.md-f figcaption{position:absolute;left:0;right:0;bottom:0;padding:26px 12px 10px;text-align:left;font-size:13px;letter-spacing:.1em;line-height:1.6;color:#fff;
  background:linear-gradient(transparent,rgba(0,0,0,.62));pointer-events:none}
.md-f figcaption small{display:block;font:10px ui-monospace,Menlo,Consolas,monospace;letter-spacing:.2em;opacity:.8}
.md-v{position:relative;width:100%;height:100%}
.md-v .md-play{position:absolute;left:50%;top:50%;width:46px;height:46px;margin:-23px 0 0 -23px;border-radius:50%;background:rgba(0,0,0,.45);color:#fff;font-style:normal;
  display:flex;align-items:center;justify-content:center;font-size:16px;padding-left:3px;pointer-events:none;transition:opacity .3s}
.md-v.on .md-play{opacity:0}
.md-snd{position:absolute;right:8px;top:8px;z-index:2;width:32px;height:32px;border-radius:50%;border:0;background:rgba(0,0,0,.5);color:#fff;font-size:14px;cursor:pointer}
.md-full .md-f.tall{aspect-ratio:4/5}
.md-full .md-f img{transform:scale(1.02);transition:transform 9s ease-out}
.rv.in .md-full .md-f img{transform:scale(1.1)}
.md-duo{display:grid;grid-template-columns:1fr 1fr;gap:10px;align-items:start}
.md-duo .md-f{aspect-ratio:3/4}
.md-duo .md-f.low{margin-top:36px}
.md-mos{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.md-mos .md-f{aspect-ratio:3/4}
.md-mos .md-f.wide{grid-column:span 2;aspect-ratio:16/10}
.md-list{display:flex;flex-direction:column;gap:12px}
.md-list .md-f{aspect-ratio:4/3}
.md-reel{display:flex;flex-direction:column;gap:12px}
.md-reel .md-f{aspect-ratio:9/12;max-height:72vh}
.md-carwrap{margin:0 -22px}
.md-car{display:flex;gap:10px;overflow-x:auto;scroll-snap-type:x mandatory;padding:0 22px;scrollbar-width:none;touch-action:pan-x}
.md-car::-webkit-scrollbar{display:none}
.md-car .md-f.slide{flex:none;width:76%;aspect-ratio:3/4;scroll-snap-align:center}
.md-dots{display:flex;justify-content:center;gap:6px;margin-top:12px}
.md-dots i{width:6px;height:6px;border-radius:50%;background:var(--sh-line);transition:.3s}
.md-dots i.on{width:18px;border-radius:4px;background:var(--sh-accent)}
.md-stackwrap{position:relative}
.md-stack{position:relative;width:72%;max-width:300px;margin:6px auto 40px;aspect-ratio:3/4}
.md-stack .md-f.pol{position:absolute;inset:0;background:#fff;padding:8px 8px 30px;border-radius:4px;box-shadow:0 10px 24px rgba(0,0,0,.28);transition:transform .45s cubic-bezier(.3,1.2,.5,1)}
.md-stack .md-f.pol img,.md-stack .md-f.pol video{border-radius:2px}
.md-stack .md-f.pol figcaption{background:none;color:#3a3028;padding:0 8px 8px;bottom:0;text-align:center}
.md-open{position:absolute;right:14%;top:-4px;z-index:50;width:34px;height:34px;border-radius:50%;border:1px solid var(--sh-line);background:var(--sh-bg);color:var(--sh-fg);font-size:15px;cursor:pointer}
.md-hint{text-align:center;font-size:12px;letter-spacing:.2em;opacity:.55;margin-top:-18px}
/* 全屏查看器 */
#mdbox{position:fixed;inset:0;z-index:600;background:#000;opacity:0;transition:opacity .3s}
#mdbox.on{opacity:1}
.mdb-strip{position:absolute;inset:0;display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;touch-action:pan-x}
.mdb-strip::-webkit-scrollbar{display:none}
.mdb-slide{flex:none;width:100%;height:100%;scroll-snap-align:center;display:flex;align-items:center;justify-content:center;position:relative}
.mdb-slide img,.mdb-slide video{max-width:100%;max-height:100%;object-fit:contain}
.mdb-cap{position:absolute;left:0;right:0;bottom:calc(26px + env(safe-area-inset-bottom));text-align:center;color:#fff;font-size:14px;letter-spacing:.15em;text-shadow:0 1px 6px #000;padding:0 20px;pointer-events:none}
.mdb-x{position:absolute;right:14px;top:calc(12px + env(safe-area-inset-top));width:38px;height:38px;border-radius:50%;border:1px solid rgba(255,255,255,.4);background:rgba(0,0,0,.4);color:#fff;font-size:22px;cursor:pointer}
.mdb-count{position:absolute;left:16px;top:calc(22px + env(safe-area-inset-top));color:#fff;opacity:.7;font:12px ui-monospace,Menlo,Consolas,monospace;letter-spacing:.2em}
