@font-face{font-family:'Cormorant Garamond';font-style:italic;font-weight:400;font-display:swap;src:url(../assets/fonts/cg-i400-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Cormorant Garamond';font-style:italic;font-weight:400;font-display:swap;src:url(../assets/fonts/cg-i400-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Cormorant Garamond';font-style:italic;font-weight:500;font-display:swap;src:url(../assets/fonts/cg-i500-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Cormorant Garamond';font-style:italic;font-weight:500;font-display:swap;src:url(../assets/fonts/cg-i500-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Cormorant Garamond';font-style:normal;font-weight:400;font-display:swap;src:url(../assets/fonts/cg-400-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Cormorant Garamond';font-style:normal;font-weight:400;font-display:swap;src:url(../assets/fonts/cg-400-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Cormorant Garamond';font-style:normal;font-weight:500;font-display:swap;src:url(../assets/fonts/cg-500-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Cormorant Garamond';font-style:normal;font-weight:500;font-display:swap;src:url(../assets/fonts/cg-500-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Italiana';font-style:normal;font-weight:400;font-display:swap;src:url(../assets/fonts/itl-400-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
:root{
  --ink:#1d1815;
  --ink-2:#4a3f37;
  --ink-faint:#8a7c6f;
  --paper:#f2ebdd;
  --paper-deep:#e7dcc7;
  --ivory:#f5efe2;
  --ivory-dim:rgba(245,239,226,.62);
  --gold:#c2a171;
  --gold-deep:#a5854f;
  --red:#7e2f24;
  --blush:#e6a4ae;
  --blush-soft:#f4c9c6;
  --plum:#2b2634;
  --hair-d:rgba(29,24,21,.16);
  --hair-l:rgba(245,239,226,.22);
  --serif:"Noto Serif SC","Songti SC","STSong","SimSun",serif;
  --lat:"Italiana","Cormorant Garamond","Times New Roman",serif;
  --corm:"Cormorant Garamond","Times New Roman",serif;
  --ease:cubic-bezier(.76,0,.24,1);
  --ease-o:cubic-bezier(.22,1,.36,1);
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%;overflow:hidden;overscroll-behavior:none;touch-action:pan-x}
body{
  font-family:var(--serif);
  color:var(--ink);
  background:#14100d;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
::selection{background:var(--gold);color:#14100d}
img{display:block;max-width:100%}
a{color:inherit}
button{font-family:inherit}

/* ── 舞台与堆叠滑幕翻页 ─────────────────── */
#stage{position:fixed;inset:0;overflow:hidden}
.page{
  position:absolute;inset:0;overflow:hidden;
  transform:translateY(103%);
  background:var(--paper);
  /* 仅当前页 ±1 参与渲染(.vis);被剔除的页延迟 1.15s 隐藏,刚好撑过滑幕 */
  visibility:hidden;
  transition:transform 1.15s var(--ease),visibility 0s linear 1.15s;
}
.page.vis{visibility:visible;transition:transform 1.15s var(--ease),visibility 0s}
/* 性能:非当前页暂停所有关键帧动画(kb 推镜/跑马灯/指示线等),避免离屏页面空转 */
.page:not(.active) *{animation-play-state:paused!important}
.page.on{transform:translateY(0)}
.page[data-theme="dark"]{color:var(--ivory);background:#161210}
.p-body{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  transition:transform 1.15s var(--ease);
}
.page.passed .p-body{transform:scale(.93)}
.veil{
  position:absolute;inset:0;z-index:8;pointer-events:none;
  background:#0d0a08;opacity:0;transition:opacity 1.15s var(--ease);
}
.page.passed .veil{opacity:.55}

/* 丝滑滑幕的关键:±1 窗口内的页面常驻提层——
   视口外(translateY(103%))的页面浏览器默认不光栅化,滑入时边滑边画会全程掉帧;
   常驻 will-change 让相邻页提前提层+光栅化,滑幕全程只动合成器 */
.page.vis,.page.vis .p-body{will-change:transform}
/* 滑幕期间:暂停一切关键帧动画 + 卸下毛玻璃,换翻页流畅 */
body.sliding *{animation-play-state:paused!important}
body.sliding .rsvp-form,body.sliding .cal,body.sliding .bub,body.sliding .info-cell.hot{
  backdrop-filter:none;-webkit-backdrop-filter:none;
}
/* 滑幕期间同时卸下大投影滤镜(18 枚轮盘切片 / 巨字「好」的 drop-shadow 逐帧重绘很贵) */
body.sliding .disk-c,body.sliding .prop-big,body.sliding .pb-rings{filter:none}

/* 入场编排:仅当前屏播放,等开幕后才启动 */
.reveal{opacity:0;transform:translateY(36px);transition:opacity 1s ease,transform 1s var(--ease-o)}
body.ready:not(.sliding) .page.active .reveal{opacity:1;transform:none}
body.ready:not(.sliding) .page.active .d1{transition-delay:.18s}
body.ready:not(.sliding) .page.active .d2{transition-delay:.34s}
body.ready:not(.sliding) .page.active .d3{transition-delay:.5s}
body.ready:not(.sliding) .page.active .d4{transition-delay:.66s}
body.ready:not(.sliding) .page.active .d5{transition-delay:.82s}

/* 逐字遮罩入场 */
.sp .ch{display:inline-block;overflow:hidden;vertical-align:bottom}
.sp .ci{
  display:inline-block;transform:translateY(118%);
  transition:transform 1.05s var(--ease-o) calc(var(--b,0s) + var(--i,0)*.055s);
}
body.ready:not(.sliding) .page.active .sp .ci{transform:translateY(0)}

/* 发线拉开 */
.draw{transform:scaleX(0);transform-origin:center;transition:transform 1.2s var(--ease) .3s}
body.ready:not(.sliding) .page.active .draw{transform:scaleX(1)}

/* 带定位变换的元素:入场动画保留最终变换 */
.cue.reveal,.gal-hint.reveal{transform:translateX(-50%) translateY(36px)}
body.ready:not(.sliding) .page.active .cue.reveal,body.ready:not(.sliding) .page.active .gal-hint.reveal{transform:translateX(-50%)}

/* ── 共享组件 ─────────────────────────── */
.eyebrow{
  display:inline-flex;align-items:center;gap:18px;
  font-family:var(--corm);font-size:11px;font-weight:500;
  letter-spacing:.52em;text-indent:.06em;text-transform:uppercase;color:var(--gold);
}
.eyebrow::before,.eyebrow::after{content:"";width:46px;height:1px}
.eyebrow::before{background:linear-gradient(90deg,transparent,rgba(194,161,113,.75))}
.eyebrow::after{background:linear-gradient(90deg,rgba(194,161,113,.75),transparent)}
.dia{width:7px;height:7px;transform:rotate(45deg);border:1px solid var(--gold);flex:none}

.s-label{display:flex;align-items:center;gap:18px;width:100%}
.s-label .no{font-family:var(--lat);font-size:15px;letter-spacing:.12em;color:var(--gold)}
.s-label .tt{font-size:13px;letter-spacing:.52em;color:var(--ink-2);white-space:nowrap}
.s-label .tt i{font-family:var(--corm);font-style:italic;letter-spacing:.18em;color:var(--gold);margin-left:14px;text-transform:none}
.s-label .ln{flex:1;height:1px;background:var(--hair-d)}
[data-theme="dark"] .s-label .tt{color:var(--ivory-dim)}
[data-theme="dark"] .s-label .ln{background:var(--hair-l)}

/* 编辑式相框:细线 + 外描边 */
.mat{position:relative;padding:12px;border:1px solid rgba(29,24,21,.3);background:#faf5ea}
.mat::after{content:"";position:absolute;inset:-8px;border:1px solid rgba(194,161,113,.45);pointer-events:none}
[data-theme="dark"] .mat{border-color:rgba(245,239,226,.3)}
.mat .ph{overflow:hidden;position:relative}
.mat img{width:100%;height:100%;object-fit:cover}

/* 跑马灯 */
.marquee{overflow:hidden;white-space:nowrap;pointer-events:none}
.mq-in{display:inline-flex;animation:mq 26s linear infinite;will-change:transform}
.mq-in.rev{animation-direction:reverse}
.mq-in span{display:inline-block;padding-right:.6em}
.mq-in b{font-weight:400;color:#c96a5a;font-style:normal}
@keyframes mq{to{transform:translateX(-50%)}}

/* ── 开场帷幕 ─────────────────────────── */
#loader{
  position:fixed;inset:0;z-index:200;background:#14100d;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:26px;
  color:var(--ivory);
  transition:transform 1.05s var(--ease) .2s,visibility 0s linear 1.4s;
}
body.ready #loader{transform:translateY(-100%);visibility:hidden}
.ld-mono{font-family:var(--lat);font-size:clamp(44px,7.5vh,68px);letter-spacing:.22em;text-indent:.22em;line-height:1}
.ld-mono i{color:var(--gold);font-style:italic;margin:0 .08em}
.ld-line{width:min(240px,52vw);height:1px;background:rgba(245,239,226,.16);overflow:hidden}
.ld-line i{display:block;height:100%;background:var(--gold);transform:scaleX(0);transform-origin:left;animation:ldfill 1.15s .15s var(--ease) forwards}
@keyframes ldfill{to{transform:scaleX(1)}}
.ld-txt{font-size:11px;letter-spacing:.55em;text-indent:.55em;color:rgba(245,239,226,.55)}

/* ── 全局 HUD ─────────────────────────── */
#hud{color:var(--ink);transition:color .9s ease}
body.theme-dark #hud{color:var(--ivory)}
.hud-mono{
  position:fixed;top:26px;left:32px;z-index:40;
  font-family:var(--lat);font-size:17px;letter-spacing:.26em;
  opacity:0;transition:opacity 1s ease .9s,color .9s ease;
}
.hud-mono i{color:var(--gold);font-style:italic;margin:0 .12em}
body.ready .hud-mono{opacity:1}
.hud-count{
  position:fixed;left:32px;bottom:26px;z-index:40;
  display:flex;align-items:baseline;gap:12px;
  opacity:0;transition:opacity 1s ease .9s;
}
body.ready .hud-count{opacity:1}
.hud-count b{font-family:var(--lat);font-weight:400;font-size:30px;line-height:1;letter-spacing:.04em}
.hud-count span{font-size:11px;letter-spacing:.34em;opacity:.65}
.hud-count span i{font-family:var(--corm);font-style:italic;margin-right:10px;color:var(--gold);letter-spacing:.1em;opacity:1}
#ticks{
  position:fixed;right:24px;top:50%;transform:translateY(-50%);z-index:40;
  display:flex;flex-direction:column;gap:9px;
  opacity:0;transition:opacity 1s ease .9s;
}
body.ready #ticks{opacity:1}
#ticks button{
  all:unset;display:flex;align-items:center;justify-content:flex-end;
  width:46px;height:18px;position:relative;pointer-events:auto;
}
#ticks button i{display:block;height:1px;width:15px;background:currentColor;opacity:.4;transition:all .5s var(--ease-o)}
#ticks button.on i{width:34px;background:var(--gold);opacity:1}
#ticks button em{
  position:absolute;right:52px;top:50%;transform:translate(8px,-50%);
  font-style:normal;font-size:11px;letter-spacing:.32em;white-space:nowrap;
  opacity:0;transition:all .45s var(--ease-o);pointer-events:none;
}
#ticks button:hover em{opacity:.85;transform:translate(0,-50%)}
#hud{pointer-events:none}
#ticks{pointer-events:auto}

/* ── 胶片颗粒 / 浮尘 / 光标 ─────────────── */
#grain{
  /* 层尺寸从 220%² 缩到 130%²:合成纹理内存降约 3 倍,steps 位移幅度仍完全覆盖 */
  position:fixed;inset:-15%;width:130%;height:130%;z-index:90;pointer-events:none;opacity:.05;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='300' height='300'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/></filter><rect width='300' height='300' filter='url(%23n)' opacity='0.6'/></svg>");
  animation:grain 1.1s steps(4) infinite;
}
@keyframes grain{
  0%{transform:translate(0,0)}25%{transform:translate(-2%,1.4%)}
  50%{transform:translate(1.6%,-1%)}75%{transform:translate(-1%,-1.8%)}100%{transform:translate(0,0)}
}
#dust{position:fixed;inset:0;z-index:25;pointer-events:none}
#cursor{position:fixed;left:0;top:0;z-index:120;pointer-events:none;display:none}
@media(pointer:fine){
  body{cursor:none}
  input,textarea{cursor:text}
  #cursor{display:block}
}
.cur-dot{
  position:fixed;width:5px;height:5px;border-radius:50%;background:var(--gold);
  transform:translate(-50%,-50%);
}
.cur-ring{
  position:fixed;width:38px;height:38px;border-radius:50%;
  border:1px solid rgba(194,161,113,.8);
  transform:translate(-50%,-50%);
  display:flex;align-items:center;justify-content:center;
  transition:width .4s var(--ease-o),height .4s var(--ease-o),background .4s,border-color .4s;
}
.cur-ring span{
  font-size:11px;letter-spacing:.34em;text-indent:.34em;color:#14100d;
  opacity:0;transition:opacity .3s;font-family:var(--serif);white-space:nowrap;
}
#cursor.hov .cur-ring{width:56px;height:56px;background:rgba(194,161,113,.14)}
#cursor.drag .cur-ring{width:78px;height:78px;background:var(--gold);border-color:var(--gold)}
#cursor.drag .cur-ring span{opacity:1}
#cursor.txt .cur-ring,#cursor.txt .cur-dot{opacity:0}

/* ═══ P1 封面 ═══ */
.p-cover .bg{position:absolute;inset:0;overflow:hidden}
.p-cover .bg img{
  width:100%;height:100%;object-fit:cover;object-position:50% 16%;
  transform:scale(1.06);animation:kb 26s ease-in-out infinite alternate;
}
@keyframes kb{to{transform:scale(1.15) translate(1.2%,1.6%)}}
.scrim{
  position:absolute;inset:0;z-index:1;
  background:linear-gradient(180deg,rgba(13,9,7,.6),rgba(13,9,7,.1) 32%,rgba(13,9,7,.16) 58%,rgba(13,9,7,.8));
}
.vignette{position:absolute;inset:0;z-index:1;background:radial-gradient(115% 90% at 50% 42%,transparent 55%,rgba(13,9,7,.5))}
.frame{position:absolute;inset:20px;z-index:5;pointer-events:none;border:1px solid rgba(245,239,226,.2)}
.frame::before,.frame::after{content:"";position:absolute;width:26px;height:26px;border-color:rgba(245,239,226,.7);border-style:solid}
.frame::before{top:-1px;left:-1px;border-width:1px 0 0 1px}
.frame::after{bottom:-1px;right:-1px;border-width:0 1px 1px 0}
.cov{
  position:relative;z-index:6;height:100%;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  text-align:center;padding:16vh 6vw 0;
  text-shadow:0 2px 26px rgba(13,9,7,.6);
}
.cov h1{margin-top:3.6vh;font-weight:600;color:var(--ivory)}
.cov .n{
  display:block;font-size:clamp(42px,8.4vh,86px);
  letter-spacing:.24em;text-indent:.24em;line-height:1.32;
  text-shadow:0 2px 30px rgba(13,9,7,.4);
}
.cov .amp{
  display:block;font-family:var(--lat);font-style:italic;font-weight:400;
  font-size:clamp(24px,3.4vh,38px);color:var(--gold);line-height:1.9;letter-spacing:0;
}
.cov-rule{display:flex;align-items:center;gap:16px;margin-top:3vh}
.cov-rule .draw{display:block;width:min(120px,16vw);height:1px;background:rgba(194,161,113,.8)}
.cov-date{margin-top:2.6vh;font-family:var(--lat);font-size:clamp(22px,3.4vh,34px);letter-spacing:.34em;text-indent:.34em;color:var(--ivory)}
.cov-lunar{margin-top:1.4vh;font-size:clamp(11px,1.6vh,13px);letter-spacing:.42em;text-indent:.42em;color:var(--ivory-dim)}
/* 封面欢快点缀:姓名两侧漂浮爱心/星芒 */
.cov-spark{position:absolute;inset:0;pointer-events:none;z-index:1}
.cov-spark .sp{position:absolute;font-style:normal;animation:sparkbob 5.2s ease-in-out infinite;opacity:.62}
.cov-spark .s1{left:8%;top:42%;color:#c96a5a;font-size:18px}
.cov-spark .s2{right:9%;top:36%;color:var(--gold);font-size:14px;animation-delay:.9s}
.cov-spark .s3{left:13%;top:66%;color:var(--gold);font-size:13px;animation-delay:1.7s}
.cov-spark .s4{right:12%;top:63%;color:#c96a5a;font-size:16px;animation-delay:2.4s}
@keyframes sparkbob{0%,100%{transform:translateY(0) rotate(-8deg)}50%{transform:translateY(-11px) rotate(10deg)}}
.cue{
  position:absolute;left:50%;bottom:4.4vh;transform:translateX(-50%);z-index:7;
  display:flex;flex-direction:column;align-items:center;gap:14px;
  color:var(--ivory-dim);font-size:11px;letter-spacing:.5em;text-indent:.5em;
  transition:opacity .7s;
}
.cue i{display:block;width:1px;height:46px;background:var(--ivory-dim);transform-origin:top;animation:cue 2s var(--ease) infinite}
@keyframes cue{0%{transform:scaleY(0)}45%{transform:scaleY(1);transform-origin:top}55%{transform:scaleY(1);transform-origin:bottom}100%{transform:scaleY(0);transform-origin:bottom}}
body:not(.at-cover) .cue{opacity:0}

/* ═══ 毛玻璃氛围底(全站共用):预虚化静态图(assets/bg/,生成时即含 虚化+压暗+降饱和) + 暗角 ═══
   性能:不再对满页照片做实时 blur(26px)——移动端每次翻页都会逐帧重光栅化,是滑动卡顿的主因 */
.g-bg{position:absolute;inset:0;overflow:hidden}
.g-bg img{width:100%;height:100%;object-fit:cover}
.g-bg::after{
  content:"";position:absolute;inset:0;
  background:radial-gradient(90% 70% at 50% 45%,transparent 40%,rgba(13,9,7,.55));
}

/* ═══ P2 序言:整幅照片 + 压叠信笺卡 ═══ */
.ghost{
  position:absolute;z-index:0;user-select:none;pointer-events:none;white-space:nowrap;
  font-family:var(--corm);font-style:italic;font-weight:400;
  color:transparent;-webkit-text-stroke:1px rgba(29,24,21,.09);
}
.p-note{background:#161210}
.p-note .ghost{
  top:50%;left:42%;transform:translate(-50%,-50%);
  font-size:min(24vh,20vw);-webkit-text-stroke:1px rgba(245,239,226,.06);
}
/* 右侧整幅照片,左侧渐隐融入毛玻璃氛围底 */
.note-bg{position:absolute;top:0;right:0;bottom:0;width:56%;overflow:hidden}
.note-bg img{width:100%;height:100%;object-fit:cover;object-position:50% 30%}
.note-bg::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(90deg,transparent 30%,rgba(22,18,16,.08) 60%,rgba(22,18,16,.3));
}
.p-note .p-body{flex-direction:column;align-items:flex-start;gap:3.2vh;padding:0 6vw}
.note-card{
  position:relative;z-index:5;width:min(560px,50%);
  background:linear-gradient(160deg,#f8f2e6,#eee4d0);
  border:1px solid rgba(194,161,113,.55);
  box-shadow:0 30px 80px rgba(0,0,0,.55);
  padding:clamp(28px,5vh,52px) clamp(26px,4.5vw,56px);
  transform:rotate(-.6deg);
}
.note-card::before{ /* 信笺内描边 */
  content:"";position:absolute;inset:9px;pointer-events:none;
  border:1px solid rgba(165,133,79,.35);
}
.note-card.reveal{transform:rotate(-.6deg) translateY(36px)}
body.ready:not(.sliding) .page.active .note-card.reveal{transform:rotate(-.6deg)}
.note-title{
  margin-top:2.4vh;font-weight:600;color:var(--ink);
  font-size:clamp(28px,4.6vh,44px);letter-spacing:.3em;line-height:1.3;
}
.note-txt{
  margin-top:2.6vh;
  font-size:clamp(13px,1.8vh,15px);letter-spacing:.12em;line-height:2.3;color:var(--ink-2);
}
.note-sig{
  margin-top:3.2vh;display:flex;align-items:center;justify-content:flex-end;gap:18px;
  font-size:13.5px;letter-spacing:.22em;color:var(--ink);
}
.note-sig i{font-family:var(--lat);font-style:italic;color:var(--gold-deep);margin:0 .08em}
.seal{
  flex:none;display:inline-flex;align-items:center;justify-content:center;
  width:44px;height:44px;border-radius:8px;transform:rotate(-6deg);
  background:linear-gradient(135deg,#8c3527,var(--red));
  box-shadow:inset 0 0 0 2px rgba(245,239,226,.4),0 8px 18px rgba(126,47,36,.3);
  color:var(--ivory);font-size:24px;font-weight:600;
}
.note-cap{width:min(560px,50%);text-align:center;font-size:11px;letter-spacing:.5em;text-indent:.5em;color:var(--ivory-dim)}
/* 别在信笺上的拍立得小照 + 胶带 */
.note-ph{
  position:absolute;top:-46px;right:-30px;z-index:3;width:clamp(100px,9.5vw,136px);
  background:#faf5ea;padding:7px 7px 22px;
  transform:rotate(6deg);
  box-shadow:0 14px 34px rgba(0,0,0,.5);
}
.note-ph::before{
  content:"";position:absolute;top:-11px;left:50%;
  transform:translateX(-50%) rotate(-3deg);
  width:58px;height:20px;background:rgba(245,239,226,.32);
  border-left:1px dashed rgba(29,24,21,.18);border-right:1px dashed rgba(29,24,21,.18);
}
.note-ph img{width:100%;aspect-ratio:1/1.08;object-fit:cover}
.note-ph.reveal{transform:rotate(6deg) translateY(30px)}
body.ready:not(.sliding) .page.active .note-ph.reveal{transform:rotate(6deg)}
/* 邮戳:双圈虚线金章,压在信笺左下角 */
.note-stamp{
  position:absolute;bottom:-28px;left:-26px;z-index:3;
  width:96px;height:96px;border-radius:50%;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  border:1.5px solid rgba(194,161,113,.85);color:var(--gold);
  font-size:9.5px;letter-spacing:.2em;line-height:1;
  background:rgba(22,18,16,.72);
  transform:rotate(-10deg);
}
.note-stamp::after{
  content:"";position:absolute;inset:5px;border-radius:50%;
  border:1px dashed rgba(194,161,113,.55);
}
.note-stamp b{font-family:var(--lat);font-weight:400;font-size:17px;letter-spacing:.04em}
.note-stamp.reveal{transform:rotate(-10deg) translateY(30px)}
body.ready:not(.sliding) .page.active .note-stamp.reveal{transform:rotate(-10deg)}

/* ═══ P3 相识:虚化氛围底 + 拱形照片 + 侧文 ═══ */
.p-arch{background:#161210}
.arch-wrap{
  position:relative;z-index:2;width:100%;height:100%;
  display:flex;align-items:center;justify-content:center;
  gap:clamp(36px,6vw,110px);padding:0 8vw;
}
.arch-vis{position:relative;flex:none}
/* 错位金拱轮廓,叠在照片拱后面 */
.arch-line{
  position:absolute;left:16px;top:-16px;width:100%;height:100%;pointer-events:none;
  border:1px solid rgba(194,161,113,.45);border-radius:999px 999px 6px 6px;
}
.arch-ph{
  position:relative;z-index:2;
  width:clamp(300px,32vw,440px);aspect-ratio:3/4.1;overflow:hidden;
  border-radius:999px 999px 6px 6px; /* 拱形门廊 */
  border:1px solid rgba(194,161,113,.55);
  box-shadow:0 26px 70px rgba(0,0,0,.5);
}
.arch-ph::after{
  content:"";position:absolute;inset:10px;border-radius:inherit;pointer-events:none;
  border:1px solid rgba(245,239,226,.3);
}
.arch-ph img{
  width:100%;height:100%;object-fit:cover;object-position:50% 25%;
  transform:scale(1.06);animation:kb 30s ease-in-out infinite alternate;
}
/* 叠在拱形照右下的拍立得小照 */
.arch-pol{
  position:absolute;right:-58px;bottom:-28px;z-index:3;
  width:clamp(112px,10vw,152px);
  background:#faf5ea;padding:8px 8px 10px;
  transform:rotate(7deg);
  box-shadow:0 18px 44px rgba(0,0,0,.55);
}
.arch-pol img{width:100%;aspect-ratio:1/1;object-fit:cover}
.arch-pol figcaption{
  padding-top:7px;text-align:center;
  font-family:var(--corm);font-style:italic;font-size:11.5px;letter-spacing:.14em;color:var(--ink-faint);
}
.arch-pol.reveal{transform:rotate(7deg) translateY(30px)}
body.ready:not(.sliding) .page.active .arch-pol.reveal{transform:rotate(7deg)}
.arch-txt{max-width:520px}
/* 时间轴:初识 —— 初见 —— 婚礼 */
.arch-tl{margin-top:3.6vh;display:flex;align-items:center;gap:clamp(10px,1.4vw,18px)}
.arch-tl span{
  display:flex;flex-direction:column;gap:5px;
  font-family:var(--lat);font-size:clamp(14px,2vh,18px);letter-spacing:.14em;color:var(--gold);
  white-space:nowrap;
}
.arch-tl span i{
  font-style:normal;font-family:var(--serif);
  font-size:10.5px;letter-spacing:.34em;color:var(--ivory-dim);
}
.arch-tl b{
  flex:0 0 clamp(22px,3.6vw,54px);height:1px;
  background:linear-gradient(90deg,rgba(194,161,113,.75),rgba(194,161,113,.2));
}

/* ═══ P4 相知:全幅照片 + 底部叠字(全站唯一一页电影感全幅) ═══ */
.p-story .bg{position:absolute;inset:0;overflow:hidden}
.p-story .bg img{
  width:100%;height:100%;object-fit:cover;object-position:50% 30%;
  transform:scale(1.06);animation:kb 30s ease-in-out infinite alternate;
}
.p-story .scrim{
  background:linear-gradient(180deg,rgba(13,9,7,.52),rgba(13,9,7,.06) 32%,rgba(13,9,7,.18) 56%,rgba(13,9,7,.88));
}
.st-ov{
  position:relative;z-index:5;width:100%;height:100%;
  display:flex;flex-direction:column;justify-content:flex-end;
  padding:0 7vw 11vh;
  text-shadow:0 2px 26px rgba(13,9,7,.55);
}
.st-ov .s-label{max-width:460px}
.st-title{
  margin-top:2.8vh;font-weight:600;color:var(--ivory);
  font-size:clamp(38px,7.4vh,72px);letter-spacing:.18em;line-height:1.3;
}
.st-txt{
  margin-top:2.4vh;max-width:36em;
  font-size:clamp(13px,1.9vh,15.5px);letter-spacing:.14em;line-height:2.15;
  color:rgba(245,239,226,.88);
}
.st-mark{
  margin-top:3vh;font-family:var(--lat);
  font-size:clamp(15px,2.4vh,22px);letter-spacing:.42em;color:var(--gold);
}
.int-note{
  padding-bottom:1.2vh;font-family:var(--corm);font-style:italic;
  font-size:clamp(13px,1.9vh,16px);letter-spacing:.1em;color:var(--gold-deep);white-space:nowrap;
}

/* ═══ P7 倒计时 ═══ */
.p-count .bg{position:absolute;inset:0;overflow:hidden}
.p-count .bg img{
  width:100%;height:100%;object-fit:cover;object-position:50% 8%;
  transform:scale(1.06);animation:kb 30s ease-in-out infinite alternate;
}
.p-count .scrim{background:linear-gradient(180deg,rgba(13,9,7,.78),rgba(13,9,7,.45) 42%,rgba(13,9,7,.84))}
.count-mq{
  position:absolute;left:7vw;right:7vw;z-index:4;
  border-top:1px solid var(--hair-l);border-bottom:1px solid var(--hair-l);
  padding:12px 0;
}
.count-mq.top{top:4.5vh}
.count-mq.bot{bottom:4.5vh}
.count-mq span{
  font-family:var(--lat);font-size:13px;letter-spacing:.4em;color:var(--ivory-dim);
}
.count-mq span b{font-weight:400;color:var(--gold);margin:0 .6em}
.count-box{position:relative;z-index:5;text-align:center;padding:0 6vw}
.count-box h2{
  margin-top:3vh;font-weight:600;font-size:clamp(28px,4.6vh,46px);
  letter-spacing:.5em;text-indent:.5em;color:var(--ivory);
}
.count-row{
  margin-top:4.6vh;display:flex;align-items:center;justify-content:center;
  gap:clamp(14px,3.4vw,52px);
}
.cd-cell{min-width:clamp(64px,10vw,130px)}
.cd-cell .num{
  font-family:var(--lat);font-size:clamp(52px,10.5vh,110px);line-height:1;
  color:var(--ivory);font-variant-numeric:tabular-nums;
}
.cd-cell .lab{
  margin-top:12px;font-size:11px;letter-spacing:.55em;text-indent:.55em;color:var(--gold);
}
.cd-sep{width:1px;height:9vh;background:linear-gradient(rgba(245,239,226,0),rgba(245,239,226,.35),rgba(245,239,226,0))}
.count-note{
  margin-top:4vh;font-size:clamp(12px,1.8vh,14.5px);
  letter-spacing:.34em;text-indent:.34em;color:var(--ivory-dim);
}
.count-note b{
  font-family:var(--lat);font-weight:400;font-size:1.35em;
  color:var(--gold);margin:0 .3em;letter-spacing:.05em;
}
/* 十月日历 */
.cal{
  margin-top:3.6vh;display:inline-block;padding:20px 24px 18px;
  border:1px solid var(--hair-l);background:rgba(245,239,226,.05);
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
}
.cal-h{
  display:flex;justify-content:space-between;align-items:baseline;gap:40px;
  margin-bottom:12px;font-size:14px;letter-spacing:.24em;color:var(--gold);
}
.cal-h i{font-family:var(--corm);font-style:italic;letter-spacing:.12em;color:var(--ivory-dim)}
.cal-g{
  display:grid;grid-template-columns:repeat(7,36px);gap:4px 3px;
  text-align:center;font-size:13.5px;line-height:28px;color:var(--ivory-dim);
}
.cal-g .w{font-size:11.5px;color:var(--gold)}
.cal-g b{
  display:block;width:28px;height:28px;margin:0 auto;border-radius:50%;
  background:var(--red);color:var(--ivory);font-weight:600;
  box-shadow:0 0 0 5px rgba(126,47,36,.25);
}

/* ═══ P8 婚礼信息:深色底 + 扇形照片轮盘 ═══ */
.p-info{background:#161210}
.info-wrap{position:relative;z-index:2;width:100%;max-width:1360px;padding:0 6vw}
.info-wrap>.s-label{max-width:520px}
.info-hero{display:flex;align-items:flex-end;gap:clamp(20px,3.5vw,56px);margin-top:2.2vh}
.info-date{
  font-family:var(--lat);font-size:clamp(110px,22.5vh,250px);line-height:.82;
  color:var(--ivory);letter-spacing:.01em;white-space:nowrap;
}
.info-date i{
  font-style:normal;font-family:var(--serif);font-weight:600;
  font-size:.3em;color:var(--gold);margin:0 .12em 0 .2em;letter-spacing:0;
}
.info-side{padding-bottom:1vh}
.info-mon{
  font-family:var(--corm);font-style:italic;font-size:clamp(13px,1.9vh,17px);
  letter-spacing:.3em;color:var(--gold);
}
.info-lunar{margin-top:8px;font-size:clamp(12.5px,1.8vh,15px);letter-spacing:.3em;color:var(--ivory-dim)}
.info-time{
  margin-top:12px;font-size:clamp(14px,2.1vh,17.5px);
  letter-spacing:.24em;color:var(--ivory);
}
.info-time b{
  font-family:var(--lat);font-weight:400;font-size:1.3em;
  color:var(--gold);margin-right:.3em;letter-spacing:.04em;
}
.info-disk{
  position:relative;z-index:3;width:calc(100% + 12vw);height:42vh;
  margin:-2vh -6vw 0;cursor:grab;touch-action:none;user-select:none;
  overflow:hidden;
}
.info-disk:active{cursor:grabbing}
.disk-wheel{position:absolute;left:50%;top:100%;width:0;height:0}
/* 装饰:轮盘上方两道同心金弧(半径/圆心由 JS 按轮盘几何同步) */
.disk-arc{
  position:absolute;border-radius:50%;pointer-events:none;
  border:1px solid rgba(165,133,79,.65);
}
.disk-arc.faint{border-color:rgba(194,161,113,.3)}
/* 弧顶小金菱:呼应 .dia 的设计语言 */
.disk-gem{
  position:absolute;width:9px;height:9px;pointer-events:none;
  transform:translate(-50%,-50%) rotate(45deg);
  border:1px solid var(--gold);background:#161210;
}
.disk-c{
  position:absolute;left:0;top:0; /* 宽高/裁切路径/原点由 JS 按轮盘几何计算 */
  /* 唱片纹:深色胶木底 + 以轮盘圆心为圆心的同心刻槽(--ro 由 JS 同步) */
  background:#100d0b;
  background-image:repeating-radial-gradient(circle at 50% var(--ro,900px),rgba(245,239,226,.09) 0 1px,transparent 1px 3px);
  filter:drop-shadow(0 10px 22px rgba(0,0,0,.5));
}
.disk-c .ph{
  position:relative;overflow:hidden;width:100%;height:100%;
  /* 内缩扇环的 clip-path 由 JS 按轮盘几何计算,保证照片上下边也是圆弧 */
}
.disk-c .ph img{width:100%;height:100%;object-fit:cover;object-position:50% 25%}
.info-grid{
  margin-top:clamp(16px,3vh,30px);padding-top:clamp(14px,2.6vh,26px);
  border-top:1px solid var(--hair-l);
  display:grid;grid-template-columns:1.2fr 1fr;gap:clamp(16px,2.4vw,40px);
}
.info-cell.hot{
  border:1px solid rgba(245,239,226,.18);background:rgba(245,239,226,.07);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px); /* 毛玻璃信息卡 */
  padding:clamp(14px,2.2vh,22px) clamp(16px,1.8vw,28px);
}
.info-cell.hot p{font-size:clamp(16px,2.5vh,20px);font-weight:600;line-height:1.9}
.info-cell h4{
  font-weight:400;font-size:12px;letter-spacing:.44em;color:var(--gold);
  display:flex;align-items:baseline;gap:12px;margin-bottom:12px;
}
.info-cell h4 i{font-family:var(--corm);font-style:italic;letter-spacing:.14em;color:var(--ivory-dim)}
.info-cell p{font-size:clamp(13.5px,2vh,16px);letter-spacing:.1em;line-height:2;color:var(--ivory)}
.info-links{display:flex;gap:28px;margin-top:14px}
.lk{
  display:inline-flex;align-items:center;gap:10px;text-decoration:none;
  font-size:13.5px;letter-spacing:.3em;color:var(--ivory);
  border-bottom:1px solid rgba(245,239,226,.35);padding-bottom:5px;
  transition:border-color .4s,color .4s;
}
.lk b{font-family:var(--corm);font-weight:500;transition:transform .4s var(--ease-o)}
.lk:hover{border-color:var(--gold);color:var(--gold)}
.lk:hover b{transform:translateX(5px)}

/* ═══ 画廊(P5 相守) ═══ */
.gal-head{
  position:absolute;top:0;left:0;right:0;z-index:6;
  display:flex;align-items:center;justify-content:space-between;
  padding:9vh 7vw 0;pointer-events:none;
}
.gal-head .s-label{max-width:420px}
.gal-count{font-family:var(--lat);font-size:clamp(22px,3.4vh,32px);color:var(--gold);letter-spacing:.1em}
.gal-count i{font-style:normal;color:var(--ivory-dim);font-size:.6em;margin-left:10px;letter-spacing:.2em}
.gal{
  position:absolute;inset:0;z-index:4;
  display:flex;align-items:center;gap:clamp(24px,4.5vw,64px);
  padding:0 10vw;overflow-x:auto;overflow-y:hidden;
  scrollbar-width:none;
  /* 触屏交给原生惯性滚动:pan-x 声明横向归浏览器(竖向仍由 JS 翻页接管),
     proximity 轻吸附到最近照片居中,不会像 mandatory 那样小滑动被弹回 */
  touch-action:pan-x;scroll-snap-type:x proximity;
}
.gal::-webkit-scrollbar{display:none}
.gal.dragging{scroll-behavior:auto;scroll-snap-type:none} /* 鼠标拖拽期间禁用吸附,避免与手动 scrollLeft 打架 */
.g-item{flex:0 0 auto;position:relative;scroll-snap-align:center}
.g-no{
  position:absolute;top:-.72em;left:-.3em;z-index:3;
  font-family:var(--lat);font-size:clamp(64px,11vh,116px);line-height:1;
  color:transparent;-webkit-text-stroke:1px rgba(194,161,113,.6);
  pointer-events:none;
}
.g-ph{
  width:min(380px,68vw);height:min(56vh,540px);
  overflow:hidden;position:relative;
}
.g-ph img{
  width:124%;height:100%;max-width:none;object-fit:cover;
  transform:translateX(var(--px,0));
  transition:transform .1s linear,filter .8s ease;
  filter:saturate(.92) brightness(.94);
}
.g-item:hover .g-ph img{filter:saturate(1.05) brightness(1.02)}
.g-cap{
  margin-top:16px;display:flex;justify-content:space-between;align-items:baseline;
}
.g-cap .cn{font-size:13px;letter-spacing:.4em;color:var(--ivory)}
.g-cap .en{font-family:var(--corm);font-style:italic;font-size:12.5px;letter-spacing:.18em;color:var(--gold)}
/* 杂志式高低错落 */
.g-item:nth-child(odd){transform:translateY(-2.4vh)}
.g-item:nth-child(even){transform:translateY(2.8vh)}
.g-item:nth-child(3n+2) .g-ph{width:min(300px,56vw)}
.g-item:nth-child(4n) .g-ph{width:min(420px,74vw)}
.gal-hint{
  position:absolute;bottom:4.6vh;left:50%;transform:translateX(-50%);z-index:6;
  font-size:11px;letter-spacing:.5em;text-indent:.5em;color:var(--ivory-dim);
  display:flex;align-items:center;gap:2px;pointer-events:none;white-space:nowrap;
}
.gal-hint::before,.gal-hint::after{content:"";width:20px;height:1px;background:var(--hair-l)}

/* ═══ P9 回执 ═══ */
.p-rsvp .bg{position:absolute;inset:0;overflow:hidden}
.p-rsvp .bg img{
  width:100%;height:100%;object-fit:cover;object-position:50% 16%;
  transform:scale(1.05);animation:kb 30s ease-in-out infinite alternate;
}
.p-rsvp .scrim{
  background:linear-gradient(100deg,rgba(18,8,6,.9) 26%,rgba(18,8,6,.5) 58%,rgba(18,8,6,.82));
}
.rsvp-wrap{
  position:relative;z-index:5;width:100%;max-width:1180px;padding:0 7vw;
  display:grid;grid-template-columns:auto 1fr;align-items:center;gap:clamp(30px,6vw,110px);
}
.rsvp-side{display:flex;flex-direction:column;align-items:center;gap:26px}
.rsvp-side h2{
  writing-mode:vertical-rl;font-weight:600;
  font-size:clamp(30px,5.4vh,52px);letter-spacing:.42em;color:var(--ivory);
}
.rsvp-side .vt{
  writing-mode:vertical-rl;font-family:var(--lat);
  font-size:13px;letter-spacing:.5em;color:var(--gold);
}
.rsvp-side .vln{width:1px;height:8vh;background:linear-gradient(rgba(194,161,113,0),var(--gold),rgba(194,161,113,0))}
.rsvp-form{
  width:100%;max-width:520px;justify-self:end;
  background:rgba(20,11,9,.52);
  border:1px solid rgba(194,161,113,.32);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  padding:clamp(24px,4.4vh,44px) clamp(22px,3.4vw,48px);
}
.rsvp-form .s-label{margin-bottom:3.4vh}
.field{margin-bottom:clamp(12px,2.4vh,22px)}
.field label{
  display:block;font-size:11px;letter-spacing:.4em;color:var(--gold);margin-bottom:9px;
}
.field label em{font-style:normal;color:#e0a08c;margin-left:4px}
.field input[type=text],.field input[type=number],.field textarea{
  width:100%;border:none;border-bottom:1px solid var(--hair-l);border-radius:0;
  background:transparent;padding:7px 2px;
  font-family:var(--serif);font-size:clamp(13px,1.9vh,15.5px);letter-spacing:.1em;
  color:var(--ivory);outline:none;transition:border-color .4s;
}
.field input::placeholder,.field textarea::placeholder{color:rgba(245,239,226,.35)}
.field textarea{resize:none;height:52px;line-height:1.8}
.field input:focus,.field textarea:focus{border-bottom-color:var(--gold)}
.radio-row{display:flex;gap:38px}
.radio-row label{
  display:flex;align-items:center;gap:12px;margin:0;cursor:pointer;
  font-size:clamp(12.5px,1.8vh,14.5px);letter-spacing:.2em;color:var(--ivory);
}
.radio-row input{
  appearance:none;width:12px;height:12px;flex:none;cursor:pointer;
  border:1px solid var(--gold);transform:rotate(45deg);
  transition:background .3s,box-shadow .3s;
}
.radio-row input:checked{background:var(--gold);box-shadow:0 0 0 4px rgba(194,161,113,.2)}
.rsvp-submit{
  width:100%;margin-top:clamp(4px,1.4vh,12px);
  padding:clamp(11px,2vh,15px);
  background:transparent;border:1px solid var(--gold);color:var(--gold);
  font-size:13px;letter-spacing:.52em;text-indent:.52em;cursor:pointer;
  transition:background .5s var(--ease-o),color .5s,letter-spacing .5s var(--ease-o);
}
.rsvp-submit:hover{background:var(--gold);color:#14100d;letter-spacing:.6em}
.rsvp-done{display:none;text-align:center;padding:16px 0 4px}
.rsvp-done .ok{font-size:clamp(15px,2.2vh,19px);letter-spacing:.3em;color:var(--gold)}
.rsvp-done small{display:block;margin-top:12px;font-size:11.5px;letter-spacing:.18em;line-height:2;color:var(--ivory-dim)}
/* 祝福互动粒子 */
.fly-hrt{
  position:fixed;z-index:96;pointer-events:none;
  font-size:var(--s,16px);color:var(--c,#c96a5a);
  animation:flyh 1.1s var(--ease-o) forwards;
}
@keyframes flyh{
  0%{opacity:0;transform:translate(0,0) scale(.4) rotate(0deg)}
  15%{opacity:1}
  100%{opacity:0;transform:translate(var(--dx),var(--dy)) scale(1.1) rotate(var(--rr))}
}
.bub-layer{position:absolute;inset:0;z-index:4;overflow:hidden;pointer-events:none}
.bub{
  position:absolute;bottom:-8%;max-width:72%;pointer-events:none;
  padding:9px 16px;border-radius:999px 999px 999px 4px;
  background:rgba(22,18,16,.62);border:1px solid rgba(194,161,113,.35);
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
  font-size:12.5px;letter-spacing:.08em;color:var(--ivory);line-height:1.7;
  opacity:0;animation:bub 9s linear forwards;
}
.bub b{font-weight:400;color:var(--gold);margin-right:.6em}
@keyframes bub{
  0%{opacity:0;transform:translateY(0)}
  8%{opacity:1}
  80%{opacity:1}
  100%{opacity:0;transform:translateY(-46vh)}
}
.foot-line{
  position:absolute;left:0;right:0;bottom:3.4vh;z-index:6;text-align:center;pointer-events:none;
}
.foot-line .f-names{font-size:clamp(13px,1.9vh,17px);letter-spacing:.4em;text-indent:.4em;color:var(--ivory)}
.foot-line .f-date{margin-top:6px;font-size:clamp(10px,1.4vh,12px);letter-spacing:.34em;text-indent:.34em;color:var(--ivory-dim)}
/* ICP 备案号:工信部要求首页底部悬挂并链接 beian.miit.gov.cn */
.foot-line .f-icp{margin-top:9px;font-size:clamp(9px,1.2vh,11px);letter-spacing:.12em;color:rgba(245,239,226,.38)}
.foot-line a{pointer-events:auto;color:inherit;text-decoration:none}
.foot-line a:hover{color:var(--gold)}

/* ═══ P6 相守:可拖拽画廊(复用 .gal 画廊结构;照片统一高度、按各自宽高比定宽不裁切,故取消视差) ═══ */
.p-vow{background:#161210}
.p-vow .g-item .g-ph{width:auto;height:min(44vh,440px)} /*  specificity 压过 .g-item:nth-child(...) 的错落定宽 */
.p-vow .g-ph img{width:auto;height:100%;transform:none}
.vow-cap{
  position:absolute;left:7vw;bottom:8vh;z-index:6;pointer-events:none;
  max-width:min(440px,72vw);
}
.vow-cap h2{font-weight:600;font-size:clamp(30px,4.6vh,46px);letter-spacing:.3em;color:var(--ivory)}
.vow-cap p{margin-top:1.4vh;font-size:clamp(12px,1.7vh,14.5px);letter-spacing:.2em;line-height:2.1;color:var(--ivory-dim)}

/* ═══ P5 求婚:右幅实照 + 巨字「好」压缝 + 旋转徽章 + 跑马灯 ═══ */
.p-prop{background:#161210}
.prop-main{position:absolute;right:0;top:0;bottom:0;width:46%;overflow:hidden;z-index:1}
.prop-main img{
  width:100%;height:100%;object-fit:cover;object-position:50% 20%;
  transform:scale(1.06);animation:kb 30s ease-in-out infinite alternate;
}
/* 右下角求婚动图:透明 GIF 贴纸,阴影贴人物轮廓 */
.prop-gif{
  position:absolute;right:3.5vw;bottom:11vh;z-index:5;
  width:clamp(180px,15vw,230px);
}
.prop-gif img{display:block;width:100%;height:auto;}
.prop-gif figcaption{
  position:absolute;top:-24px;right:0;
  font-size:10px;letter-spacing:.3em;color:var(--gold);white-space:nowrap;
}
.prop-main::before{ /* 左侧渐暗,巨字压缝处保持可读 */
  content:"";position:absolute;inset:0;z-index:1;
  background:linear-gradient(90deg,rgba(22,18,16,.62),transparent 34%);
}
.prop-main::after{
  content:"";position:absolute;inset:14px;z-index:1;pointer-events:none;
  border:1px solid rgba(245,239,226,.25);
}
.prop-txt{position:absolute;left:8vw;top:50%;transform:translateY(-50%);z-index:3;width:64%}
.prop-txt .s-label{max-width:400px}
.prop-lead{
  margin-top:3.2vh;font-weight:600;color:var(--ivory);
  font-size:clamp(20px,3.2vh,32px);letter-spacing:.2em;
}
/* 巨字「好」:红底囍字照片填充字形(背景图由 warmPage 预热时才挂,见下方 .warmed 规则) */
.prop-big{
  margin:-1vh 0 0 -.05em;font-weight:900;line-height:1.04;
  font-size:min(34vh,26vw);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 18px 40px rgba(0,0,0,.5));
}
#stage .page.warmed .prop-big{background-image:url(../assets/p5/yes.jpg);background-size:cover;background-position:50% 100%}
.prop-copy{
  margin-top:1.6vh;max-width:26em;
  font-size:clamp(12.5px,1.8vh,15px);letter-spacing:.14em;line-height:2.25;color:var(--ivory-dim);
}
/* 旋转徽章:环形文字绕着一对相扣的金对戒 */
.prop-badge{position:absolute;z-index:4;left:calc(54% - 76px);top:9vh;width:152px;height:152px}
.prop-badge svg{position:absolute;inset:0;animation:spin 22s linear infinite}
.prop-badge text{font-family:var(--lat);font-size:12.5px;letter-spacing:.32em;fill:var(--gold)}
@keyframes spin{to{transform:rotate(360deg)}}
.pb-rings{
  position:absolute;left:50%;top:50%;width:76px;height:56px;
  transform:translate(-50%,-50%);
  filter:drop-shadow(0 3px 5px rgba(0,0,0,.5));
}
/* 戒圈:锥形渐变金边 + 内侧刻面高光,两戒交叠相扣 */
.pb-r{
  position:absolute;width:40px;height:40px;border-radius:50%;
  border:3px solid transparent;
  background:
    linear-gradient(#161210,#161210) padding-box,
    conic-gradient(from 215deg,#7d5f36,#e9d09b 22%,#a37f49 42%,#f4e6bc 60%,#8a6a3f 82%,#7d5f36) border-box;
  box-shadow:inset 0 1px 2px rgba(0,0,0,.65),inset 0 -1px 1px rgba(244,230,188,.35);
}
.pb-r::after{ /* 戒圈上缘一道抛光高光 */
  content:"";position:absolute;inset:-3px;border-radius:50%;
  background:conic-gradient(from 300deg,transparent 0deg,rgba(255,248,225,.85) 18deg,transparent 42deg);
  -webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 3.5px),#000 calc(100% - 3px));
          mask:radial-gradient(farthest-side,transparent calc(100% - 3.5px),#000 calc(100% - 3px));
}
.pb-r1{left:2px;top:10px}
.pb-r2{right:2px;top:4px}
.pb-r2::before{ /* 女戒爪镶小钻:菱形切面 + 冷调火彩 */
  content:"";position:absolute;left:50%;top:-8px;width:9px;height:9px;z-index:2;
  transform:translateX(-50%) rotate(45deg);
  background:linear-gradient(135deg,#ffffff 0%,#dcebf4 38%,#9dbfd4 62%,#eef7fc 100%);
  box-shadow:0 0 7px rgba(255,255,255,.9),0 0 2px rgba(255,255,255,1);
}
/* 底部跑马灯 */
.prop-mq{
  position:absolute;left:7vw;right:7vw;bottom:4.5vh;z-index:4;
  border-top:1px solid var(--hair-l);border-bottom:1px solid var(--hair-l);padding:11px 0;
}
.prop-mq span{font-family:var(--lat);font-size:13px;letter-spacing:.4em;color:var(--ivory-dim)}
.prop-mq span b{font-weight:400;color:var(--gold);margin:0 .6em}

/* ═══ P10 微电影:首映银幕 ═══ */
.p-film{background:#14100d}
.film-wrap{position:relative;z-index:2;width:min(920px,88vw);display:flex;flex-direction:column}
.film-head{display:flex;align-items:flex-end;gap:22px;margin-top:3vh}
.film-head h2{font-weight:600;font-size:clamp(34px,6vh,58px);letter-spacing:.22em;color:var(--ivory)}
.film-head .int-note{padding-bottom:1vh}
.film-frame{margin-top:3.4vh;box-shadow:0 26px 70px rgba(0,0,0,.5)}
.film-frame video{display:block;width:100%;aspect-ratio:16/9;background:#000}
.film-cap{
  margin-top:2.4vh;text-align:center;
  font-family:var(--corm);font-style:italic;font-size:13.5px;letter-spacing:.14em;color:var(--ivory-dim);
}
/* 回执页 → 微电影 引导 */
.film-hint{margin-top:2.8vh;font-size:12px;letter-spacing:.3em;color:var(--gold)}
.film-hint i{display:inline-block;margin-left:8px;font-style:normal;animation:hintx 1.6s ease-in-out infinite}
@keyframes hintx{0%,100%{transform:translateX(0)}50%{transform:translateX(6px)}}

/* ── 全局悬浮:音乐开关 ───────────────────── */
#float{
  position:fixed;top:26px;right:24px;z-index:70;
  display:flex;flex-direction:column;gap:12px;
  opacity:0;transition:opacity 1s ease .9s;
}
body.ready #float{opacity:1}
.float-btn{
  all:unset;position:relative;width:42px;height:42px;border-radius:50%;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  background:rgba(22,18,16,.55);border:1px solid rgba(194,161,113,.5);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
  transition:border-color .4s;
}
.float-btn:hover{border-color:var(--gold)}
/* 迷你唱片:胶木底 + 同心刻槽 + 金芯,播放时旋转 */
.fb-disc{
  width:26px;height:26px;border-radius:50%;
  background:
    radial-gradient(circle,var(--gold) 0 3px,#161210 3px 5px,transparent 5px),
    repeating-radial-gradient(circle,rgba(245,239,226,.14) 0 1px,transparent 1px 3px),
    #100d0b;
  border:1px solid rgba(194,161,113,.6);
  transition:opacity .3s;
}
/* 播放/暂停 UI 强区分:暂停=唱片压暗 + 中央金色 ▶;播放=唱片旋转 + 金色声圈脉动 */
#bgmBtn:not(.playing) .fb-disc{opacity:.45}
.fb-ico{
  position:absolute;width:0;height:0;margin-left:3px;
  border-left:9px solid var(--gold);
  border-top:6px solid transparent;border-bottom:6px solid transparent;
  filter:drop-shadow(0 1px 3px rgba(0,0,0,.7));
  transition:opacity .25s;
}
#bgmBtn.playing .fb-ico{opacity:0}
#bgmBtn.playing .fb-disc{animation:spin 3.6s linear infinite}
#bgmBtn.playing{border-color:var(--gold);animation:bgmpulse 2.2s ease-out infinite}
@keyframes bgmpulse{0%{box-shadow:0 0 0 0 rgba(194,161,113,.5)}100%{box-shadow:0 0 0 11px rgba(194,161,113,0)}}

/* ── 底部操作栏:祝福留言 + 点亮祝福 ───────── */
#bar{
  position:fixed;right:clamp(16px,2.4vw,32px);bottom:calc(18px + env(safe-area-inset-bottom));z-index:78;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;width:52px;height:auto;
  opacity:0;transform:translateY(18px);transition:opacity .7s ease .75s,transform .7s var(--ease-o) .75s;
}
body.ready #bar{opacity:1;transform:translateY(0)}
body.at-cover #bar{opacity:0;pointer-events:none;transform:translateY(14px)}
.bar-btn{
  all:unset;position:relative;width:46px;height:58px;flex:none;cursor:pointer;
  display:flex;align-items:center;justify-content:center;color:#c96a5a;
  transition:color .3s,filter .3s,transform .25s var(--ease-o);
}
.bar-btn:hover{color:#efb4a6;filter:drop-shadow(0 0 10px rgba(201,106,90,.55))}
.bar-btn:active{transform:translateY(2px) scale(.9)}
.bar-btn svg{
  width:40px;height:40px;flex:none;overflow:visible;stroke-linecap:round;stroke-linejoin:round;
  filter:drop-shadow(0 3px 7px rgba(0,0,0,.35));transition:transform .35s var(--ease-o),fill .3s,color .3s;
}
.bar-btn span{
  display:none;
}
.bar-sep{
  display:none;
}
#barMsg svg{animation:msgfloat 3.6s ease-in-out infinite}
@keyframes msgfloat{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-2px) rotate(2deg)}}
#barBless::after{
  display:none;
}
#barBless.lit{color:#f7ddb8}
#barBless.lit svg{color:#c96a5a;transform:scale(1.08)}
#barBless.beat svg{animation:barbeat .55s var(--ease-o)}
@keyframes barbeat{0%{transform:scale(.78)}45%{transform:scale(1.3)}100%{transform:scale(1.08)}}
.bar-badge{
  position:absolute;top:-3px;right:-5px;min-width:23px;height:20px;padding:0 5px;border-radius:999px;
  display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#c2a171,#a5854f);border:1px solid rgba(245,239,226,.65);
  box-shadow:0 4px 12px rgba(0,0,0,.38),0 0 0 3px rgba(122,92,46,.18);font-family:var(--corm);font-size:11px;font-style:normal;
  line-height:1;color:#241d15;letter-spacing:0;
}
.bar-badge.bump{animation:badgebump .5s var(--ease-o)}
@keyframes badgebump{50%{transform:translateY(-3px) scale(1.18)}}

/* ── 祝福留言漂浮层(页面之上,不拦截手势)────── */
#dmkLayer{position:fixed;inset:0;z-index:35;overflow:hidden;pointer-events:none}
.dmk{
  position:absolute;left:100%;display:inline-flex;align-items:center;gap:8px;
  max-width:80vw;padding:7px 18px 7px 8px;border-radius:999px;white-space:nowrap;
  background:rgba(22,18,16,.66);border:1px solid rgba(194,161,113,.38);
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
  font-size:13px;letter-spacing:.06em;color:var(--ivory);
  animation:dmkfly linear forwards;will-change:transform;
}
.dmk img{width:22px;height:22px;border-radius:50%;object-fit:cover;border:1px solid rgba(194,161,113,.7)}
.dmk b{font-weight:400;color:var(--gold)}
@keyframes dmkfly{to{transform:translateX(calc(-100vw - 100%))}}

/* ── 祝福留言面板(暖金主题,与全站一致)──────── */
#dmkPanel{
  position:fixed;inset:0;z-index:110;display:flex;align-items:center;justify-content:center;
  padding:18px;background:rgba(13,10,8,.8);backdrop-filter:blur(9px);-webkit-backdrop-filter:blur(9px);
  opacity:0;pointer-events:none;transition:opacity .35s ease;
}
#dmkPanel.open{opacity:1;pointer-events:auto}
.dp-card{
  position:relative;width:min(460px,100%);
  background:linear-gradient(165deg,rgba(43,32,26,.98),rgba(22,18,16,.98));
  border:1px solid rgba(194,161,113,.45);border-radius:18px;
  box-shadow:0 28px 80px rgba(0,0,0,.58),inset 0 1px rgba(255,255,255,.04);
  padding:clamp(18px,3vh,26px) clamp(22px,4vw,38px) clamp(22px,3.6vh,30px);
  transform:translateY(18px) scale(.985);transition:transform .4s var(--ease-o);
}
#dmkPanel.open .dp-card{transform:translateY(0) scale(1)}
/* 顶部中部徽章:悬浮卡沿,作为面板视觉焦点 */
.dp-header{
  display:block;width:min(150px,34vw);margin:-64px auto 4px;position:relative;z-index:3;
  filter:drop-shadow(0 12px 26px rgba(0,0,0,.5)) drop-shadow(0 0 20px rgba(194,161,113,.38));
  pointer-events:none;
}
.dp-body{overflow:auto;max-height:calc(100vh - 230px);position:relative;z-index:1}
/* 四角金菱点缀(请柬边框感) */
.dp-corner{position:absolute;width:10px;height:10px;transform:rotate(45deg);pointer-events:none;z-index:2;
  border:1px solid rgba(194,161,113,.65);background:rgba(194,161,113,.1)}
.dp-corner.tl{top:-6px;left:-6px}.dp-corner.tr{top:-6px;right:-6px}
.dp-corner.bl{bottom:-6px;left:-6px}.dp-corner.br{bottom:-6px;right:-6px}
/* 卡内悬浮小爱心(低速,面板关闭/翻页时暂停) */
.dp-hearts{position:absolute;inset:0;overflow:hidden;border-radius:18px;pointer-events:none;z-index:0}
.dp-hearts i{position:absolute;bottom:-18px;font-style:normal;opacity:0;animation:dpheart 9s linear infinite}
.dp-hearts i:nth-child(1){left:10%;font-size:15px;color:#c96a5a;animation-delay:1.2s}
.dp-hearts i:nth-child(2){left:52%;font-size:11px;color:var(--gold);animation-delay:4.4s}
.dp-hearts i:nth-child(3){left:80%;font-size:16px;color:#c96a5a;animation-delay:6.8s}
@keyframes dpheart{
  0%{opacity:0;transform:translateY(0) rotate(0)}
  12%{opacity:.18}
  88%{opacity:.12}
  100%{opacity:0;transform:translateY(-400px) rotate(24deg)}
}
#dmkPanel:not(.open) *{animation-play-state:paused!important}
.dp-kicker{display:flex;align-items:center;gap:9px;margin-bottom:11px;color:var(--gold);font-size:11px;letter-spacing:.28em}
.dp-kicker::before,.dp-kicker::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,transparent,rgba(194,161,113,.42))}
.dp-kicker::after{background:linear-gradient(90deg,rgba(194,161,113,.42),transparent)}
.dp-kicker-mark{color:#c96a5a;font-size:12px;line-height:1;animation:markbeat 2.6s ease-in-out infinite}
@keyframes markbeat{0%,100%{transform:scale(1)}50%{transform:scale(1.22)}}
.dp-kicker i{margin-left:auto;font-family:var(--corm);font-size:12px;font-style:italic;letter-spacing:.12em;color:rgba(245,239,226,.45)}
.dp-title{margin-bottom:24px;font-size:clamp(18px,2.4vh,22px);font-weight:400;line-height:1.65;letter-spacing:.14em;color:var(--ivory)}
.dp-me{display:flex;align-items:center;gap:10px;margin:-9px 0 18px;font-size:13px;letter-spacing:.12em;color:var(--ivory)}
.dp-me[hidden]{display:none}
.dp-me img{width:32px;height:32px;border-radius:50%;object-fit:cover;border:1px solid rgba(194,161,113,.7)}
#dmkPanel .field{position:relative;margin-bottom:18px}
#dmkPanel .field label{margin-bottom:8px;font-size:10.5px;letter-spacing:.3em;color:var(--gold-deep)}
#dmkPanel .field input[type=text]{
  height:42px;padding:8px 11px;border:1px solid rgba(245,239,226,.16);border-radius:5px;
  background:rgba(255,255,255,.035);font-size:14px;letter-spacing:.08em;
  transition:border-color .3s,background .3s,box-shadow .3s;
}
#dmkPanel .field input[type=text]:focus{border-color:rgba(194,161,113,.75);background:rgba(194,161,113,.06);box-shadow:0 0 0 3px rgba(194,161,113,.12)}
.dp-input-row{position:relative}
.dp-input-row input{padding-right:50px!important}
.dp-preset-btn{
  all:unset;position:absolute;top:50%;right:4px;transform:translateY(-50%);width:34px;height:34px;
  display:flex;align-items:center;justify-content:center;border-radius:50%;cursor:pointer;
  color:#c96a5a;font-size:16px;transition:background .25s,transform .25s var(--ease-o);
}
.dp-preset-btn:hover,.dp-preset-btn[aria-expanded="true"]{background:rgba(201,106,90,.16)}
.dp-preset-btn[aria-expanded="true"]{transform:translateY(-50%) rotate(45deg)}
/* 快捷祝福弹出层:fixed 独立浮层,位置由 JS 按输入框锚定,不占面板空间 */
.dp-preset-list{
  position:fixed;z-index:115;
  display:grid;grid-template-columns:1fr;gap:7px;padding:10px;
  border:1px solid rgba(194,161,113,.32);border-radius:10px;
  background:rgba(29,23,18,.99);box-shadow:0 16px 38px rgba(0,0,0,.5);
}
.dp-preset-list[hidden]{display:none}
.dp-chip{
  all:unset;min-width:0;padding:9px 12px;border:1px solid rgba(194,161,113,.24);border-radius:4px;
  text-align:center;font-size:12px;letter-spacing:.1em;color:var(--ivory);cursor:pointer;
  transition:border-color .3s,color .3s,background .3s;
}
.dp-chip:hover{border-color:#c96a5a;color:#eeb0a0;background:rgba(201,106,90,.1)}
.dp-tip{margin:-2px 0 14px;font-size:10.5px;line-height:1.7;letter-spacing:.12em;color:rgba(245,239,226,.38)}
.dp-send{
  position:relative;overflow:hidden;width:100%;margin-top:0;padding:13px;border-radius:5px;
  background:linear-gradient(135deg,#c96a5a,#b04a3d);border:1px solid #d07a68;color:#fff6ec;
  font-size:13px;letter-spacing:.5em;text-indent:.5em;cursor:pointer;
  box-shadow:0 8px 24px rgba(165,133,79,.16);transition:filter .35s,letter-spacing .35s var(--ease-o),transform .2s;
}
.dp-send::after{ /* 流光扫过,增加喜庆感 */
  content:"";position:absolute;top:-4px;bottom:-4px;left:-60%;width:38%;
  background:linear-gradient(105deg,transparent,rgba(255,255,255,.32),transparent);
  transform:skewX(-18deg);animation:dpsheen 3.6s ease-in-out infinite;
}
@keyframes dpsheen{0%,60%{left:-60%}100%{left:135%}}
.dp-send:hover{filter:brightness(1.12);letter-spacing:.6em}
.dp-send:active{transform:scale(.985)}
.dp-send:disabled{opacity:.55;cursor:wait}
.dp-close{
  all:unset;position:absolute;top:13px;right:13px;width:30px;height:30px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;border-radius:50%;
  font-size:20px;line-height:1;color:rgba(245,239,226,.55);transition:color .3s,background .3s;
}
.dp-close:hover{color:#eeb0a0;background:rgba(201,106,90,.12)}

/* ── 小屏适配 ─────────────────────────── */
@media(max-width:900px){
  .frame{inset:12px}
  .eyebrow{font-size:10px;letter-spacing:.4em;gap:12px}
  .eyebrow::before,.eyebrow::after{width:30px}
  /* P1 */
  .cov{padding-top:6vh}
  .cov h1{margin-top:2.4vh}
  .cov .n{font-size:clamp(34px,13vw,56px)}
  .cov .amp{font-size:22px;line-height:1.5}
  .cov-rule{margin-top:2.4vh}
  .cov-date{margin-top:2vh;font-size:22px}
  .cov-lunar{margin-top:1.2vh;font-size:11px}
  .cue{bottom:2.2vh}
  .cue i{height:32px}
  .hud-mono{top:18px;left:20px;font-size:15px}
  .hud-count{left:20px;bottom:18px}
  .hud-count b{font-size:24px}
  #ticks{right:10px;gap:7px}
  #ticks button em{display:none}
  #float{top:16px;right:16px;gap:10px}
  .float-btn{width:38px;height:38px}
  #bar{right:12px;bottom:calc(12px + env(safe-area-inset-bottom));width:46px;gap:12px}
  .bar-btn{width:42px;height:54px}
  .bar-btn svg{width:35px;height:35px}
  .bar-badge{right:-6px}
  .dmk{font-size:12px;padding:6px 14px 6px 6px}
  .page{overflow:hidden}
  .p-body{min-height:0;height:100%;padding:0}
  /* P2 照片带 + 压叠信笺 */
  .p-note .p-body{display:block;padding:0}
  .p-note .ghost{display:none}
  .note-bg{position:relative;left:0;bottom:auto;width:100%;height:44vh}
  .note-bg::after{background:linear-gradient(180deg,rgba(22,18,16,.18),rgba(22,18,16,.05) 45%,rgba(22,18,16,.5) 97%)}
  .note-card{width:auto;margin:-13vh 7vw 0}
  .note-cap{width:auto;text-align:center;margin-top:2.6vh}
  .note-txt br{display:none} /* 移动端让文案自然换行 */
  .note-ph{top:-54px;right:-10px;width:92px}
  .note-stamp{width:82px;height:82px;bottom:-22px;left:-12px;font-size:8.5px}
  .note-stamp b{font-size:14px}
  /* P3 虚化氛围底 + 拱形照片 */
  .arch-wrap{flex-direction:column;justify-content:flex-start;gap:3.4vh;padding:9.5vh 8vw 0}
  .arch-ph{width:min(74vw,320px);aspect-ratio:3/3.2}
  .arch-pol{right:-14px;bottom:-20px;width:100px}
  .arch-tl{margin-top:2.8vh}
  .arch-tl span{font-size:13px}
  .arch-tl b{flex-basis:20px}
  .arch-txt{max-width:none;width:100%}
  .arch-txt .s-label .tt i{display:none}
  /* P4 全幅故事页 */
  .st-ov{padding:0 8vw 9.5vh}
  .st-ov .s-label .tt i{display:none}
  .st-title{margin-top:2.2vh;font-size:clamp(30px,9.5vw,50px);letter-spacing:.12em}
  .st-txt{margin-top:2vh;font-size:12.5px;line-height:2.05;letter-spacing:.1em}
  .st-txt br{display:none}
  .st-mark{margin-top:2.4vh;font-size:15px}
  /* P7 倒计时 */
  .count-mq.top{top:6.5vh}
  .count-mq.bot{display:none}
  .count-box h2{font-size:26px;letter-spacing:.3em;text-indent:.3em}
  .count-row{gap:8px}
  .cd-cell{min-width:0}
  .cd-cell .num{font-size:clamp(38px,12.5vw,60px)}
  .cd-sep{height:6vh}
  .cal{margin-top:2.6vh;padding:14px 16px 12px}
  .cal-g{grid-template-columns:repeat(7,32px);font-size:12px;line-height:26px}
  .cal-g .w{font-size:10.5px}
  .cal-g b{width:25px;height:25px}
  /* P8 信息:横幅照片 + 紧凑信息格 */
  .p-info .p-body{display:block}
  .info-wrap{display:flex;flex-direction:column;height:100%;padding:9.5vh 8vw 7vh}
  .info-disk{order:2;width:calc(100% + 16vw);height:32vh;margin:2vh -8vw 0}
  .info-cell.hot{padding:12px 16px}
  .info-cell.hot p{font-size:14.5px;line-height:1.8}
  .info-hero{order:1;flex-direction:row;align-items:flex-end;justify-content:space-between;gap:14px;margin-top:2.2vh}
  .info-date{font-size:clamp(56px,16vw,74px)}
  .info-side{padding-bottom:4px;text-align:right}
  .info-mon{display:none}
  .info-lunar{margin-top:0;font-size:11px;line-height:1.9;white-space:nowrap}
  .info-time{margin-top:8px;font-size:12px;white-space:nowrap}
  .it-tail{display:none}
  .info-grid{order:3;grid-template-columns:1fr 1fr;gap:2vh 24px;margin-top:2vh;padding-top:1.8vh}
  .info-cell p{font-size:13px;line-height:1.9}
  .info-cell{grid-column:1/-1}
  .info-links{margin-top:8px}
  /* P6 相守:画廊照片收紧,底部留文案位 */
  .p-vow .g-ph{height:38vh}
  .vow-cap{left:8vw;bottom:9.5vh;max-width:80vw}
  .vow-cap h2{font-size:clamp(26px,7.5vw,36px)}
  .vow-cap p{font-size:12px;line-height:2}
  /* P5 求婚:照片上置,巨字「好」压缝 */
  .p-prop .p-body{display:block}
  .prop-main{position:relative;width:100%;height:38vh}
  .prop-main::before{background:linear-gradient(180deg,transparent 52%,rgba(22,18,16,.78))}
  .prop-main::after{inset:10px}
  .prop-txt{position:relative;left:0;top:0;transform:none;width:100%;padding:0 8vw;margin-top:-11vh;z-index:3}
  .prop-txt .s-label .tt i{display:none}
  .prop-lead{margin-top:2.4vh;font-size:clamp(15px,4.6vw,20px)}
  .prop-big{font-size:42vw;margin-top:-3vw}
  .prop-copy{font-size:12.5px;line-height:2.05;letter-spacing:.12em;max-width:55%}
  .prop-copy br{display:none}
  .prop-badge{left:auto;right:6vw;top:calc(38vh - 60px);width:104px;height:104px}
  .prop-badge text{font-size:13px}
  .pb-rings{width:54px;height:40px}
  .pb-r{width:28px;height:28px;border-width:2.5px}
  .pb-r::after{inset:-2.5px;-webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2.5px));mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2.5px))}
  .pb-r2::before{width:7px;height:7px;top:-6px}
  .prop-mq{left:6vw;right:6vw;bottom:6.5vh;padding:8px 0}
  .prop-mq span{font-size:10px;letter-spacing:.3em}
  .prop-gif{right:5vw;bottom:11vh;width:34vw}
  .prop-gif figcaption{top:-20px;font-size:9px;letter-spacing:.2em}
  /* P10 微电影 */
  .film-wrap{width:92vw}
  .film-head h2{font-size:clamp(28px,8.5vw,38px)}
  .film-hint{margin-top:2.2vh;text-align:center}
  /* P5 画廊:照片加大 */
  .gal-head{padding:8.5vh 8vw 0}
  .gal-count{white-space:nowrap;font-size:20px}
  .gal{padding:0 8vw}
  .g-ph{width:74vw;height:50vh}
  .g-item:nth-child(odd){transform:translateY(-1.2vh)}
  .g-item:nth-child(even){transform:translateY(1.6vh)}
  /* P9 回执 */
  .rsvp-wrap{grid-template-columns:1fr;gap:24px;padding:0 7vw}
  .rsvp-side{flex-direction:row;justify-content:center;gap:20px}
  .rsvp-side h2{writing-mode:horizontal-tb;font-size:24px;letter-spacing:.24em}
  .rsvp-side .vt{writing-mode:horizontal-tb}
  .rsvp-side .vln{width:8vw;height:1px;background:linear-gradient(90deg,rgba(194,161,113,0),var(--gold),rgba(194,161,113,0))}
  .rsvp-form{justify-self:center}
  /* 移动端:页脚只保留备案号(合规要求),姓名/日期收起避免挤压表单 */
  .foot-line{display:block;bottom:1.6vh}
  .foot-line .f-names,.foot-line .f-date{display:none}
  .foot-line .f-icp{margin-top:0;font-size:9px}
  #dmkPanel{align-items:center;padding:16px}
  .dp-card{width:min(460px,calc(100vw - 32px));padding:16px 20px 20px}
  .dp-header{width:min(128px,32vw);margin-top:-86px}
  .dp-body{max-height:calc(100vh - 196px)}
  .dp-kicker{font-size:10px}
  .dp-title{margin-bottom:20px;font-size:18px}
}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
  .reveal,.sp .ci,.draw{opacity:1!important;transform:none!important}
}
