:root{--xuan-paper:#F3EDDF;--paper-light:#FCFAF4;--ink:#262824;--mineral-green:#29443A;--cinnabar:#9A443D;--ochre-gold:#AD9565;--linen-shadow:#CFC3AE;--paper:var(--xuan-paper);--ink-green:var(--mineral-green);--forest:var(--mineral-green);--wax-red:var(--cinnabar);--wax:var(--cinnabar);--wine:var(--cinnabar);--antique-gold:var(--ochre-gold);--brass:var(--ochre-gold);--gold:var(--ochre-gold);--warm:var(--linen-shadow);--deep:var(--mineral-green);--sage:var(--mineral-green)}
.letter-desk{place-items:center;padding:5vh 0 10vh;background:linear-gradient(145deg,var(--linen-shadow),var(--xuan-paper) 58%,var(--linen-shadow));isolation:isolate}
.letter-desk .sunbeam{inset:-25% 15% 35% -35%;background:linear-gradient(135deg,color-mix(in srgb,var(--paper-light) 82%,transparent),transparent 68%);filter:blur(4px)}
.folded-letter{position:relative;width:min(76vw,420px);aspect-ratio:1/1.55;margin:0;transform:rotate(-1.2deg);filter:drop-shadow(0 24px 28px color-mix(in srgb,var(--ink) 16%,transparent));perspective:none}
.folded-letter:before,.folded-letter:after{content:"";position:absolute;z-index:2;left:0;width:100%;background:var(--paper-light);background-image:repeating-linear-gradient(92deg,transparent 0 7px,color-mix(in srgb,var(--linen-shadow) 7%,transparent) 8px);transition:transform .85s cubic-bezier(.2,.7,.2,1)}
.folded-letter:before{top:0;height:60%;transform-origin:top}.folded-letter:after{bottom:0;height:40%;transform-origin:bottom}
.folded-letter .envelope-address{z-index:4;inset:0;padding:11% 12%;background:transparent;pointer-events:none}
.vertical-address h1{position:absolute;left:45%;top:14%;bottom:auto;display:flex;align-items:center;gap:16px;margin:0;max-width:none;writing-mode:vertical-rl;white-space:normal;font-size:clamp(19px,5.4vw,25px);font-weight:400;letter-spacing:.13em}
.vertical-address h1 small{font-size:13px;color:var(--cinnabar)}
.vertical-address .letter-date{position:absolute;right:11%;top:13%;bottom:auto;writing-mode:vertical-rl;font-size:12px;line-height:1.8;letter-spacing:.1em;color:var(--ink)}
.vertical-address .letter-signature{position:absolute;left:10%;bottom:9%;font:10px var(--mono);letter-spacing:.08em;color:var(--mineral-green)}
.fold-seam{position:absolute;z-index:6;left:8%;right:8%;top:50%;height:1px;background:var(--cinnabar);opacity:.55;pointer-events:none}
.emboss-pattern{position:absolute;z-index:3;inset:7%;opacity:.035;pointer-events:none;background:radial-gradient(ellipse at 32% 28%,var(--mineral-green) 0 3%,transparent 3.5%),radial-gradient(ellipse at 68% 62%,var(--mineral-green) 0 2%,transparent 2.5%),repeating-radial-gradient(ellipse at 50% 100%,transparent 0 18px,var(--mineral-green) 19px 20px,transparent 21px 34px)}
.cinnabar-seal{position:absolute;z-index:8;left:50%;top:50%;display:grid;width:42px;aspect-ratio:1;place-items:center;translate:-50% -50%;border:0;border-radius:3px;color:var(--paper-light);background:var(--cinnabar);box-shadow:0 6px 14px color-mix(in srgb,var(--cinnabar) 25%,transparent);transition:opacity .3s,transform .3s;cursor:pointer}
.cinnabar-seal:before{content:"";position:absolute;inset:5px;border:1px solid color-mix(in srgb,var(--paper-light) 62%,transparent);border-radius:1px}.cinnabar-seal span{font:14px var(--serif);letter-spacing:.06em}
.unfolded-message{z-index:1;inset:7% 6%;min-height:86%;gap:14px;padding:14% 9%;background:var(--paper-light);opacity:0;transform:none;transition:opacity .35s .35s}
.unfolded-message small{color:var(--cinnabar);font:15px var(--serif);letter-spacing:.22em}.unfolded-message strong{font-size:clamp(25px,7vw,38px)}.unfolded-message p{margin:20px 0 0;font-size:20px}.unfolded-message b{font:30px var(--display);color:var(--mineral-green)}.unfolded-message time{font:11px var(--mono);letter-spacing:.18em;color:var(--cinnabar)}
.folded-letter.opened{transform:rotate(-1.2deg) scale(.96)}.folded-letter.opened:before{transform:translateY(-47%)}.folded-letter.opened:after{transform:translateY(47%)}.opened .cinnabar-seal{opacity:0;transform:scale(.88);pointer-events:none}.opened .emboss-pattern{opacity:.08;transition:opacity .4s}.opened .unfolded-message{z-index:7;opacity:1;transform:none}
.letter-desk .open-prompt{bottom:3vh;color:var(--mineral-green);border-bottom:1px solid var(--ochre-gold);font-size:12px}
@media(max-width:430px){.folded-letter{width:76vw}.vertical-address h1{left:43%}.vertical-address .letter-date{right:9%}.letter-desk .open-prompt{bottom:4vh}}
@media(prefers-reduced-motion:reduce){.folded-letter,.folded-letter:before,.folded-letter:after,.unfolded-message,.cinnabar-seal{transition:none!important}.folded-letter.opened:before,.folded-letter.opened:after{opacity:0;transform:none}.opened .unfolded-message{opacity:1}}

/* 留席笺：同一张长笺中抽出的附页 */
.reserved-seat{position:relative;background:linear-gradient(150deg,var(--paper-light),var(--xuan-paper) 64%,var(--linen-shadow));overflow:hidden}
.reserved-seat:before{content:"";position:absolute;z-index:3;left:max(18px,3vw);top:0;bottom:0;width:1px;background:var(--cinnabar);opacity:.48;pointer-events:none}
.seat-table{display:grid;place-items:center;min-height:620px;background:linear-gradient(125deg,var(--xuan-paper),var(--linen-shadow));box-shadow:inset 0 0 70px color-mix(in srgb,var(--ink) 7%,transparent)}
.seat-table:before{opacity:.35}.seat-table .plate{left:-20%;top:5%;width:76%;background:radial-gradient(circle,var(--paper-light) 0 43%,var(--ochre-gold) 44% 44.5%,var(--paper-light) 45% 68%,transparent 69%)}
.seat-table .glass{right:7%;top:7%;border-color:color-mix(in srgb,var(--paper-light) 62%,transparent);box-shadow:inset 0 0 0 7px color-mix(in srgb,var(--paper-light) 20%,transparent)}

.seat-note-wrap{position:relative;z-index:2;width:min(68%,290px);aspect-ratio:.62;perspective:1000px}
.seat-note{position:absolute;inset:0;width:100%;height:100%;padding:0;border:0;background:transparent;cursor:pointer;transform-style:preserve-3d;transition:transform .65s cubic-bezier(.2,.7,.2,1)}
.seat-note-wrap.flipped .seat-note{transform:rotateY(180deg)}
.seat-note-face{position:absolute;inset:0;display:grid;align-content:center;gap:28px;padding:13%;border:1px solid color-mix(in srgb,var(--ochre-gold) 55%,transparent);background:var(--paper-light);box-shadow:0 18px 35px color-mix(in srgb,var(--ink) 13%,transparent);backface-visibility:hidden;overflow:hidden}
.seat-note-face:after{content:"";position:absolute;inset:7%;opacity:.035;background:repeating-radial-gradient(ellipse at 30% 100%,transparent 0 18px,var(--mineral-green) 19px 20px,transparent 21px 34px);pointer-events:none}
.seat-note-front{grid-template-columns:.65fr 1.35fr}.seat-note-front>strong{justify-self:center;writing-mode:vertical-rl;color:var(--mineral-green);font-size:26px;font-weight:400;letter-spacing:.18em}
.seat-times{display:grid;align-content:center;gap:21px;border-left:1px solid var(--cinnabar);padding-left:20px;text-align:left}.seat-times small{font:10px var(--mono);letter-spacing:.09em}.seat-times b{display:block;margin-top:4px;color:var(--cinnabar);font:15px var(--serif);letter-spacing:0}
.seat-note-back{place-items:center;text-align:center;transform:rotateY(180deg)}.seat-note-back strong{color:var(--cinnabar);font-size:25px;font-weight:400}.seat-note-back small{font-size:14px}
.attend-cta{position:absolute;z-index:5;left:50%;bottom:8%;translate:-50% 0;min-width:150px;min-height:46px;border:1px solid var(--cinnabar);color:var(--cinnabar);background:var(--paper-light);opacity:0;pointer-events:none;transition:opacity .25s .35s;cursor:pointer}.flipped .attend-cta{opacity:1;pointer-events:auto}
.seat-intent{position:absolute;left:50%;top:102%;translate:-50% 0;width:150%;margin:8px 0 0;text-align:center;font-size:12px;color:var(--mineral-green)}
.seat-copy>small{display:block;margin-top:28px;color:var(--mineral-green);font-size:14px}.seat-copy>p:last-of-type{font-size:18px;line-height:2}
@media(max-width:760px){.reserved-seat{gap:6vh}.seat-table{min-height:520px}.seat-note-wrap{width:min(68vw,260px)}.seat-note-face{gap:20px}.seat-note-front>strong{font-size:22px}.seat-times{gap:16px;padding-left:14px}.seat-intent{width:128%;font-size:11px}}
@media(prefers-reduced-motion:reduce){.seat-note{transition:none!important}.seat-note-wrap.flipped .seat-note-front{display:none}.seat-note-wrap.flipped .seat-note{transform:none}.seat-note-wrap.flipped .seat-note-back{transform:none}.attend-cta{transition:none!important}}

/* 回笺：牙白信笺从矿物绿纸套中抽出 */
.reply-scene{position:relative;display:block;min-height:120svh;padding:11vh max(7vw,24px) 16vh;color:var(--ink);background:linear-gradient(180deg,var(--xuan-paper) 0 81%,var(--mineral-green) 81% 100%);overflow:hidden}
.reply-scene:before{content:"";position:absolute;left:max(18px,3vw);right:max(18px,3vw);top:8vh;height:1px;background:var(--cinnabar);opacity:.62;pointer-events:none}
.reply-heading{position:relative;z-index:3;top:auto;max-width:680px;margin:0 auto 6vh;text-align:center}.reply-heading .eyebrow{color:var(--cinnabar)}.reply-heading h2{margin:18px 0;font-size:clamp(34px,5vw,54px);font-weight:400}.reply-heading p{line-height:1.9}.reply-thread{position:absolute;left:50%;top:-3vh;width:1px;height:3vh;background:var(--cinnabar)}
.reply-sleeve{position:absolute;z-index:1;left:4%;right:4%;bottom:0;height:19%;background:var(--mineral-green);transition:height .5s cubic-bezier(.2,.7,.2,1);pointer-events:none}.reply-sleeve:before{content:"";position:absolute;left:0;right:0;top:-46px;height:48px;background:var(--mineral-green);clip-path:polygon(0 100%,50% 0,100% 100%);transform-origin:bottom;transition:transform .5s}.reply-sleeve>span{position:absolute;right:5%;top:14%;display:grid;color:var(--paper-light);font-size:14px;letter-spacing:.15em}.reply-sleeve small{font:9px var(--mono);letter-spacing:.18em;opacity:.7}
.reply-scene form{position:relative;z-index:2;width:min(820px,100%);margin:auto}
.reply-sheet{padding:clamp(28px,6vw,58px);color:var(--ink);background:var(--paper-light);box-shadow:0 24px 55px color-mix(in srgb,var(--ink) 15%,transparent);transform:none;transition:transform .45s cubic-bezier(.2,.7,.2,1)}
.reply-sheet:before{content:"";position:absolute;inset:16px;border:1px solid color-mix(in srgb,var(--linen-shadow) 32%,transparent);pointer-events:none}
.reply-sheet .field input,.reply-sheet .field textarea{min-height:48px;padding:12px 3px;border:0;border-bottom:1px solid var(--linen-shadow);font-size:16px;background:transparent}.reply-sheet .field textarea{min-height:96px;resize:vertical}.reply-sheet .field label,.reply-sheet .field legend{font-size:14px}.reply-sheet .field input:focus,.reply-sheet .field textarea:focus{outline:none;border-color:var(--cinnabar);box-shadow:inset 0 0 0 1px var(--cinnabar)}.reply-sheet .choice-grid span{min-height:48px;border:1px solid var(--linen-shadow);font-size:16px;background:var(--paper-light)}.reply-sheet .choice-grid input:focus-visible+span{outline:2px solid var(--cinnabar);outline-offset:2px}
.reply-sheet .side-summary{grid-template-columns:1fr auto;gap:3px 16px;text-align:left}.reply-sheet .side-summary span{font-size:16px}.reply-sheet .side-summary small{grid-column:1;font-size:14px;color:var(--mineral-green)}.reply-sheet .side-summary button{grid-column:2;grid-row:1/3;min-height:44px}
.reply-sheet .primary-button{display:block;min-width:180px;min-height:52px;margin:34px auto 0;background:var(--cinnabar);font-size:16px}.reply-sheet .primary-button[hidden]{display:none}
.reply-sheet.sent{transform:translateY(-12px)}.reply-sleeve.received{height:21%}.reply-sleeve.received:before{transform:scaleY(.78)}
.reply-sheet .reply-stamp{left:50%;right:auto;bottom:-68px;z-index:5;width:76px;border:0;border-radius:2px;translate:-50% 0;color:var(--paper-light);background:var(--cinnabar);opacity:0;transform:translateY(-18px) scale(1.2);box-shadow:0 7px 15px color-mix(in srgb,var(--cinnabar) 25%,transparent)}.reply-sheet .reply-stamp:before{content:"";position:absolute;inset:6px;border:1px solid color-mix(in srgb,var(--paper-light) 60%,transparent)}.reply-sheet .reply-stamp strong{font-size:20px;font-weight:400}.reply-sheet .reply-stamp small{font:7px var(--mono);letter-spacing:.1em}.reply-sheet.sent .reply-stamp{display:grid;animation:receiveSeal .4s .18s forwards}
.reply-sheet .form-status[data-state=success]{gap:2px;margin:30px 0 12px}.reply-sheet .form-status[data-state=success] strong{color:var(--ink);font:22px var(--serif);letter-spacing:.08em}.reply-sheet .form-status[data-state=success] span{font-size:16px}.reply-sheet .form-status[data-state=success] small{margin-top:8px;font-size:10px}
@keyframes receiveSeal{to{opacity:1;transform:translateY(0) scale(1)}}
@media(max-width:760px){.reply-scene{padding:10vh 18px 15vh;background:linear-gradient(180deg,var(--xuan-paper) 0 83%,var(--mineral-green) 83%)}.reply-heading{margin-bottom:4vh}.reply-sheet{padding:34px 18px}.reply-sheet:before{inset:8px}.reply-sleeve{left:0;right:0;height:17%}.reply-sheet .side-summary{grid-template-columns:1fr auto}.reply-sheet .choice-grid span{font-size:15px}.reply-sheet .reply-stamp{bottom:-62px}}
@media(prefers-reduced-motion:reduce){.reply-sheet,.reply-sleeve,.reply-sleeve:before,.reply-stamp{transition:none!important;animation:none!important}.reply-sheet.sent{transform:none}.reply-sheet.sent .reply-stamp{opacity:1;transform:none}}

/* 统一内容沟槽与移动端单栏 */
:root{--page-gutter:clamp(24px,6.4vw,32px)}
.section-inner{width:min(100%,1120px);margin-inline:auto;padding-inline:var(--page-gutter)}
.fold-journey,.fold-stay{display:block;padding-inline:0}.journey-inner,.stay-inner{padding-block:14vh}.journey-copy{max-width:620px}.journey-copy>p:last-child,.stay-inner .section-lead{max-width:22em}
.music-control{top:calc(env(safe-area-inset-top) + 16px);right:16px}

/* 封题：日期、收件人、封缄、署名四区网格 */
.folded-letter .envelope-address{display:grid;grid-template-rows:18% 32% 32% 18%;grid-template-columns:1fr;padding:9% 10%;text-align:initial}
.vertical-address .letter-date{position:static;grid-row:1;justify-self:end;align-self:start;margin:0;text-align:right;writing-mode:horizontal-tb;font-size:11px;line-height:1.75;letter-spacing:.08em}
.vertical-address h1{position:static;grid-row:2;display:grid;justify-items:center;align-self:center;gap:12px;margin:0;writing-mode:horizontal-tb;font-size:inherit;letter-spacing:0}
.vertical-address h1 small{font-size:12px;letter-spacing:.25em}.recipient-columns{display:flex;flex-direction:row-reverse;gap:13px}.recipient-columns b{writing-mode:vertical-rl;color:var(--ink);font-size:clamp(18px,4.8vw,24px);font-weight:400;line-height:1.25;letter-spacing:.12em}
.fold-seam{position:relative;z-index:6;grid-row:3;align-self:center;left:auto;right:auto;top:auto;width:100%;height:1px;background:var(--cinnabar);opacity:.72;pointer-events:none}.fold-seam .cinnabar-seal{pointer-events:auto}
.vertical-address .letter-signature{position:static;grid-row:4;align-self:end;justify-self:start;display:grid;gap:3px;margin:0;color:var(--mineral-green)}.letter-signature span{font:12px var(--display);letter-spacing:.05em}.letter-signature small{font-size:11px;letter-spacing:.25em}
.letter-desk .open-prompt{position:relative;bottom:auto;margin-top:22px;padding:7px 0;border:0;border-bottom:1px solid var(--ochre-gold)}

/* 八方赴约：抽象路线，不对应真实地理位置 */
.convergence-route{width:min(100%,760px);margin:12vh auto 8vh;padding:clamp(22px,5vw,46px);background:var(--paper-light);box-shadow:0 16px 38px color-mix(in srgb,var(--ink) 8%,transparent)}
.convergence-route>header{text-align:center}.convergence-route h3{margin:16px 0 0;font-size:clamp(28px,4vw,42px);font-weight:400;line-height:1.45}.route-canvas{position:relative;width:100%;height:480px;margin-top:28px;overflow:hidden;background:repeating-linear-gradient(0deg,transparent 0 39px,color-mix(in srgb,var(--ochre-gold) 8%,transparent) 40px),repeating-linear-gradient(90deg,transparent 0 39px,color-mix(in srgb,var(--ochre-gold) 8%,transparent) 40px)}
.route-canvas svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}.route-lines{fill:none;stroke:color-mix(in srgb,var(--mineral-green) 31%,transparent);stroke-width:1.3}.route-lines path:nth-child(3n){stroke:color-mix(in srgb,var(--ochre-gold) 25%,transparent)}.route-lines path{stroke-dasharray:900;stroke-dashoffset:900}.route-active .route-lines path{animation:drawRoute 1.55s .25s ease-out forwards}.route-active .route-lines path:nth-child(2){animation-delay:.31s}.route-active .route-lines path:nth-child(3){animation-delay:.37s}.route-active .route-lines path:nth-child(4){animation-delay:.43s}.route-active .route-lines path:nth-child(5){animation-delay:.49s}.route-active .route-lines path:nth-child(6){animation-delay:.55s}.route-active .route-lines path:nth-child(7){animation-delay:.61s}.route-active .route-lines path:nth-child(8){animation-delay:.67s}
.route-dots{fill:var(--ochre-gold)}.arrival-dots{fill:var(--cinnabar);opacity:0}.route-complete .route-dots{opacity:0}.route-complete .arrival-dots{opacity:.68;transition:opacity .25s}
.route-note{position:absolute;margin:0;color:var(--mineral-green);font-size:16px;line-height:1.7}.note-one{left:5%;top:11%}.note-two{right:4%;top:25%}.note-three{left:4%;top:50%}.note-four{right:4%;bottom:5%}
.route-destination{position:absolute;left:50%;top:67.4%;display:grid;width:132px;min-height:104px;place-content:center;translate:-50% -50%;border:1px solid var(--cinnabar);color:var(--cinnabar);background:color-mix(in srgb,var(--paper-light) 94%,transparent);text-align:center;opacity:0}.route-active .route-destination{animation:destinationIn .35s forwards}.route-destination strong{font-size:15px;font-weight:500}.route-destination span{font-size:14px}.route-destination time{margin-top:5px;font:9px var(--mono);letter-spacing:.12em}
.route-closing{margin:30px 0 0;text-align:center;font-size:18px;line-height:1.9}.destination-block{width:min(100%,760px);margin:auto}.destination-block>strong{display:block;font-size:30px;font-weight:400}.destination-block>time{display:block;margin:12px 0 28px;color:var(--cinnabar);font:12px/1.8 var(--mono);letter-spacing:.12em}.destination-block .venue-card{position:static;display:grid;grid-template-columns:1fr auto;gap:24px;transform:none;background:var(--paper-light)}
@keyframes drawRoute{to{stroke-dashoffset:0}}@keyframes destinationIn{to{opacity:1}}

/* 住宿卡片 */
.stay-inner>h3{margin:12px 0 0;color:var(--mineral-green);font-size:22px;font-weight:400}.stay-inner #accommodationSide{border:0;padding:0}.stay-inner .side-picker{width:100%;max-width:820px}.stay-inner .side-card{padding:28px;border:1px solid var(--ochre-gold);background:var(--paper-light);clip-path:none}.stay-inner .side-card:has(input:checked){border-color:var(--mineral-green);color:var(--paper-light);background:var(--mineral-green)}

@media(max-width:767px){
  .chapter-progress{display:none!important}
  .music-control{top:calc(env(safe-area-inset-top) + 16px);right:16px}
  .folded-letter{width:76vw;margin:0}.letter-desk{align-content:center}.letter-desk .open-prompt{margin-top:22px}
  .fold{padding-block:11vh;padding-inline:var(--page-gutter)}.fold-journey,.fold-stay,.reserved-seat{padding-inline:0}.journey-inner,.stay-inner{padding-block:11vh}
  .fold-journey,.ceremony-moment,.reserved-seat,.little-story,.reply-scene{grid-template-columns:1fr}
  .journey-copy,.stay-inner,.seat-copy,.story-copy,.program-fold,.practical-fold,.ceremony-copy,.reply-heading{width:100%;margin-inline:auto}
  .journey-copy>p:last-child,.stay-inner .section-lead,.seat-copy>p,.story-copy>p,.ceremony-copy>p{max-width:22em}
  .convergence-route{width:100%;margin:8vh 0 6vh;padding:24px 0;background:transparent;box-shadow:none}.convergence-route>header,.route-closing{padding-inline:0}.convergence-route h3{font-size:30px}
  .route-canvas{height:460px;margin-top:20px}.route-lines{stroke-width:1.15}.route-note{padding:1px 3px;font-size:14px;background:color-mix(in srgb,var(--paper-light) 88%,transparent)}.note-two,.note-three{display:none}.note-one{left:3%;top:13%}.note-four{right:3%;bottom:3%}.route-destination{width:122px;min-height:98px}.route-closing{font-size:16px}
  .destination-block .venue-card{grid-template-columns:1fr;gap:12px;padding:26px 22px}.destination-block .card-actions{width:100%}.destination-block .card-actions>*{flex:1;text-align:center}
  .stay-inner .side-picker{grid-template-columns:1fr;gap:14px;margin:5vh 0}.stay-inner .side-card{min-height:126px;margin:0;padding:28px}.stay-inner .hotel-placeholder,.stay-inner .hotel-slot{width:100%;margin-inline:0}
  .seat-copy{padding-inline:var(--page-gutter)}.story-copy{padding-inline:0}.ceremony-copy{position:relative;left:auto;padding-inline:var(--page-gutter)}
  .reply-scene{padding-inline:var(--page-gutter)}.reply-sheet{padding-inline:20px}.final-fold{padding-inline:var(--page-gutter)}.final-paper{width:100%;padding-inline:var(--page-gutter)}
}
@media(prefers-reduced-motion:reduce){.route-lines path{stroke-dashoffset:0!important;animation:none!important}.route-destination{opacity:1!important;animation:none!important}.route-dots{display:none}.arrival-dots{opacity:.68!important;transition:none!important}}
