/*
 * 2026-08-27 · 连续婚礼长卷
 * 这一层只负责统一视觉和叙事节奏，保留原照片、角色、音乐与交互逻辑。
 */
:root{
  --wedding-paper:#fbf7ef;
  --wedding-paper-deep:#f5ecdf;
  --wedding-red:#b92f3d;
  --wedding-red-soft:#d86b73;
  --wedding-gold:#b38a4a;
  --wedding-ink:#49352d;
  --wedding-muted:#8c7568;
  --wedding-shadow:0 22px 55px rgba(77,48,35,.14);
}

.page-cover .name-card .double-happiness{font-size:22px!important;line-height:1.1!important}
.page-cover .heart-burst-zone > i{color:#d40000!important;font-style:normal!important}
.page-cover .art-names,.page-cover .name-sub{font-family:"STKaiti","KaiTi","楷体",serif!important}

html,body{
  background:#2a211d!important;
  color:var(--wedding-ink);
}

body{
  background:
    radial-gradient(circle at 50% -10%,#594a42 0,transparent 38%),
    #241d19!important;
}

#app{
  height:auto!important;
  min-height:100vh;
  overflow:visible!important;
  background:var(--wedding-paper)!important;
  box-shadow:0 0 70px rgba(0,0,0,.42)!important;
}

.pages{
  position:relative;
  isolation:isolate;
  overflow:hidden;
  background:
    radial-gradient(circle at 8% 5%,rgba(208,158,108,.11),transparent 20%),
    radial-gradient(circle at 90% 32%,rgba(184,47,61,.07),transparent 22%),
    radial-gradient(circle at 12% 69%,rgba(179,138,74,.08),transparent 19%),
    linear-gradient(90deg,rgba(116,76,51,.035) 1px,transparent 1px),
    linear-gradient(rgba(116,76,51,.028) 1px,transparent 1px),
    var(--wedding-paper)!important;
  background-size:auto,auto,auto,32px 32px,32px 32px,auto!important;
}

.page{
  position:relative!important;
  width:100%;
  height:auto!important;
  min-height:0!important;
  overflow:visible!important;
  isolation:isolate;
  background:transparent!important;
}
.page:not(.page-cover){margin-top:-58px}
.page::before{
  content:"";
  position:absolute;
  left:0;right:0;top:-1px;height:150px;
  z-index:-1;
  pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(251,247,239,.72) 40%,transparent);
}

/* 去除“翻页控件”暗示，保留自然滚动。 */
.swipe-hint{display:none!important}
.page-indicator{display:none!important}
.music-button{
  background:rgba(255,250,241,.78)!important;
  border:1px solid rgba(179,138,74,.32)!important;
  border-radius:50%!important;
  box-shadow:0 8px 25px rgba(67,43,31,.14)!important;
  backdrop-filter:blur(8px);
  -webkit-backdrop-filter:blur(8px);
}
.music-button img{width:42px!important;height:42px!important;opacity:.82!important}

/* 随阅读进度从右上走到右下的新郎新娘。外层位置由 JS 控制，
   内层只做轻微摆动，不改变 GIF 自身的走路帧。 */
.walking-couple{
  position:fixed;top:0;
  right:max(2px,calc((100vw - 430px)/2 + 2px));
  z-index:24;width:24px;height:auto;
  pointer-events:none;opacity:0;
  transform:translate3d(0,68px,0);
  will-change:transform,opacity;
  transition:opacity .65s ease;
  filter:drop-shadow(0 8px 11px rgba(66,42,31,.16));
}
.walking-couple.ready{opacity:.96}
.walking-couple img{
  display:block;width:100%;height:auto;object-fit:contain;
  transform-origin:52% 88%;
  animation:walkingCoupleSway 1.8s ease-in-out infinite;
}
@keyframes walkingCoupleSway{
  0%,100%{transform:translateX(0) rotate(-1.2deg)}
  50%{transform:translateX(-3px) rotate(1.2deg)}
}

/* 入场效果变成缓慢呼吸式显现，不再像 PPT 飞入。 */
body.long-scroll-ready .page .anim,
body.long-scroll-ready .page .full-photo,
body.long-scroll-ready .page .wide-photo{
  --reveal-x:0px!important;
  --reveal-y:24px!important;
  --reveal-scale:.99!important;
  --reveal-rotate:0deg!important;
  filter:none!important;
}
body.long-scroll-ready .page .anim.in-view,
body.long-scroll-ready .page .full-photo.in-view,
body.long-scroll-ready .page .wide-photo.in-view{
  animation-duration:1.65s!important;
  animation-timing-function:cubic-bezier(.2,.72,.18,1)!important;
}
body.long-scroll-ready .page .pop-in{--reveal-y:18px!important;--reveal-scale:.95!important}
body.long-scroll-ready .page .zoom-soft{--reveal-y:20px!important;--reveal-scale:1.025!important}
body.long-scroll-ready .page .slide-left{--reveal-x:14px!important;--reveal-y:12px!important}
body.long-scroll-ready .page .reveal-right{--reveal-x:18px!important;--reveal-y:10px!important}
body.long-scroll-ready .page .reveal-up{--reveal-y:26px!important;--reveal-scale:1!important}

/* 01 · 封面：保留热闹人物，但用中式请柬的红金秩序收住画面。 */
.page-cover{
  height:100vh!important;
  height:100svh!important;
  min-height:720px!important;
  overflow:hidden!important;
  background:
    radial-gradient(ellipse at 50% 42%,rgba(255,255,255,.98),transparent 58%),
    linear-gradient(180deg,#fffaf2,#f8eee1)!important;
}
.page-cover::after{
  content:"";
  position:absolute;inset:13px;
  border:1px solid rgba(179,138,74,.32);
  border-radius:180px 180px 30px 30px/70px 70px 30px 30px;
  pointer-events:none;z-index:1;
}
.page-cover .cover-top{top:5.5%!important}
.page-cover .cover-top .letter-row{color:var(--wedding-gold);letter-spacing:.38em}
.page-cover .cover-top h1{
  margin-top:14px!important;
  color:var(--wedding-red);
  font-family:"STKaiti","华文楷体","KaiTi",serif;
  font-size:27px!important;
  letter-spacing:.42em!important;
  text-shadow:0 3px 18px rgba(185,47,61,.1);
}
.page-cover .cover-top .serif{color:var(--wedding-muted);font-size:10px!important;text-transform:uppercase}
.cover-characters{top:12%!important;height:58%!important}
.page-cover .name-card{top:74%!important;left:7%!important;right:7%!important}
.page-cover .double-happiness{
  width:48px;height:48px;margin:0 auto 8px!important;
  display:grid;place-items:center;
  border:1px solid rgba(185,47,61,.62);
  border-radius:50%;
  color:var(--wedding-red)!important;
  background:rgba(255,250,241,.8);
}
.page-cover .art-names{font-size:27px!important;color:#3f2d26}
.page-cover .name-sub{margin-top:10px!important;font-size:15px!important;line-height:1.65!important;color:var(--wedding-muted)!important}

/* 02 · 相遇：图文相互穿插，取消“左文字右图片”的版式感。 */
.page-hi{height:920px!important;padding-top:92px}
.page-hi::after{
  content:"♡"!important;display:block!important;
  position:absolute;left:auto!important;right:17px!important;bottom:36px!important;
  color:rgba(185,47,61,.22)!important;font:68px/1 Georgia!important;letter-spacing:0!important;
}
.page-hi .hi{left:35px!important;top:112px!important;font-size:78px!important;color:rgba(185,47,61,.88)!important}
.page-hi .vertical-copy{
  left:30px!important;top:220px!important;width:80px!important;
  display:flex!important;flex-direction:row-reverse!important;align-items:flex-start!important;gap:14px!important;
  font-size:20px!important;line-height:1!important;letter-spacing:.24em!important;
  color:#4c352c;z-index:5!important;
  text-shadow:0 1px 8px rgba(251,247,239,.94),0 0 3px rgba(251,247,239,.94);
}
.page-hi .vertical-copy span{
  display:block;writing-mode:vertical-rl;text-orientation:upright;white-space:nowrap;
  padding:10px 6px 12px;border-top:1px solid rgba(179,138,74,.5);
  font-family:"STKaiti","华文楷体","KaiTi",serif;
}
.page-hi .vertical-copy span:nth-child(2){margin-top:34px;color:#8f343e}
.page-hi .portrait{
  left:145px!important;right:18px!important;top:550px!important;width:auto!important;height:440px!important;
  border:0!important;border-radius:180px 0 0 28px/100px 0 0 28px!important;
  box-shadow:var(--wedding-shadow)!important;
}
.page-hi .portrait::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(90deg,rgba(251,247,239,.18),transparent 28%);
  pointer-events:none;
}
.page-hi .subcopy{
  left:25px!important;bottom:22px!important;color:var(--wedding-muted)!important;
  font-size:9px!important;
}
.page-hi .story{
  left:28px!important;right:28px!important;top:40px!important;bottom:auto!important;
  padding:0!important;background:transparent!important;border:0!important;border-radius:0!important;
  text-align:center!important;color:#63483d;font-size:14.5px!important;line-height:1.8!important;
  font-family:"STKaiti","KaiTi","FangSong",serif!important;
}
.page-hi .story span{
  display:block;width:max-content;max-width:100%;margin:0 auto;
  clip-path:none;opacity:1;
  transform:none;filter:none;
  will-change:auto;
}
.page-hi .story.in-view span{
  animation:none!important;
}
.page-hi .story.in-view span:nth-child(1){animation-delay:.18s}
.page-hi .story.in-view span:nth-child(2){animation-delay:.68s}
.page-hi .story.in-view span:nth-child(3){animation-delay:1.18s}
.page-hi .story.in-view span:nth-child(4){animation-delay:1.68s}
.page-hi .story.in-view span:nth-child(5){animation-delay:2.18s}
body.long-scroll-ready .page-hi .story.in-view{
  animation:storyBlockRise 2.45s cubic-bezier(.18,.72,.18,1) both!important;
}
.page-hi .story::after{
  content:"";display:block;width:0;height:1px;margin:5px auto 0;
  background:linear-gradient(90deg,transparent,rgba(174,76,55,.52),rgba(202,156,82,.62),transparent);
  box-shadow:0 0 5px rgba(202,156,82,.25);
}
.page-hi .story.in-view::after{
  animation:storyInkFinish 1.15s ease-out 2.85s forwards;
}
.page-hi .story-photo{
  position:absolute;left:18px;right:18px;top:235px;height:280px;margin:0;padding:0;
  z-index:4;overflow:hidden;border-radius:10px;background:#858585;
  box-shadow:0 14px 30px rgba(71,47,38,.20);
}
.page-hi .story-photo img{
  width:100%;height:100%;border-radius:10px;object-fit:cover!important;object-position:center center!important;
  transform:scale(1.2)!important;transform-origin:center center!important;filter:none!important;
}
.page-hi .story-follow-photo{
  position:absolute;left:45%;right:18px;top:570px;height:300px;margin:0;padding:0;
  z-index:4;overflow:hidden;border-radius:34px 12px 34px 12px/26px 12px 26px 12px;
  background:#eee6df;box-shadow:0 15px 32px rgba(71,47,38,.18);
}
.page-hi .story-follow-photo img{
  display:block;width:100%;height:100%;object-fit:cover;object-position:center 43%;
}
.page-hi .story-follow-copy{
  position:absolute;left:18px;top:635px;width:40%;z-index:5;margin:0;text-align:center;
  color:#5a4036;font-family:"STKaiti","KaiTi","楷体",serif;
  font-size:clamp(11px,3.2vw,13.5px);line-height:2.05;letter-spacing:.03em;
}
.page-hi .story-follow-copy span{display:block;white-space:nowrap}
.page-hi .story-follow-copy span:first-child{
  margin-bottom:0;color:inherit;font-size:1em;letter-spacing:.03em;
}
.page-hi .story-follow-copy::after{
  content:"🎀";display:block;margin:11px auto 0;
  color:var(--wedding-red);font:22px/1 "Segoe UI Emoji","Apple Color Emoji",sans-serif;
  filter:drop-shadow(0 3px 5px rgba(121,52,62,.18));
}
@keyframes storyEnterFromLeft{
  from{opacity:0;transform:translate3d(-110vw,0,0)}
  to{opacity:1;transform:none}
}
@keyframes storyEnterFromRight{
  from{opacity:0;transform:translate3d(110vw,0,0)}
  to{opacity:1;transform:none}
}
.page-hi.active .story-follow-photo{animation:storyEnterFromRight 1s cubic-bezier(.2,.72,.18,1) both}
.page-hi.active .story-follow-copy{animation:storyEnterFromLeft 1s cubic-bezier(.2,.72,.18,1) .2s both}
body.long-scroll-ready .page .story-follow-photo{--reveal-x:110vw!important;--reveal-y:0!important;--reveal-scale:1!important}
body.long-scroll-ready .page .story-follow-copy{--reveal-x:-110vw!important;--reveal-y:0!important;--reveal-scale:1!important}
body.long-scroll-ready .page .story-follow-photo.in-view{animation-delay:0s!important}
body.long-scroll-ready .page .story-follow-copy.in-view{animation-delay:.2s!important}
@keyframes storyHandwrite{
  0%{clip-path:inset(0 100% 0 0);opacity:.18;filter:blur(.45px)}
  100%{clip-path:inset(0 0 0 0);opacity:1;filter:blur(0)}
}
@keyframes storyRiseFlash{
  0%{opacity:0;transform:translate3d(0,26px,0) scale(.97);filter:blur(5px) brightness(1.5)}
  52%{opacity:1;transform:translate3d(0,-3px,0) scale(1.018);filter:blur(0) brightness(1.35);text-shadow:0 0 14px rgba(255,224,157,.8)}
  100%{opacity:1;transform:translate3d(0,0,0) scale(1);filter:none;text-shadow:0 1px 5px rgba(255,247,230,.7)}
}
@keyframes storyBlockRise{
  0%{opacity:0;transform:translate3d(0,54px,0) scale(.985);filter:blur(5px)}
  58%{opacity:.9;filter:blur(1px)}
  100%{opacity:1;transform:translate3d(0,0,0) scale(1);filter:none}
}
@keyframes storyInkFinish{
  0%{width:0;opacity:0}
  55%{opacity:.85}
  100%{width:68%;opacity:.48}
}

/* 03 · 求婚：让照片成为故事高潮，印章只是点睛。 */
.page-proposal{
  height:1405px!important;padding-top:90px;
  overflow:hidden!important;
  background:linear-gradient(180deg,transparent,rgba(247,233,225,.55) 42%,transparent)!important;
}
.page-proposal .proposal-frame{
  left:28px!important;right:22px!important;top:110px!important;height:570px!important;
  padding:0!important;border-radius:190px 190px 32px 32px/84px 84px 32px 32px!important;
  background:transparent!important;box-shadow:var(--wedding-shadow)!important;
}
.page-proposal .proposal-frame::before{inset:-9px!important;border-color:rgba(179,138,74,.35)!important}
.page-proposal .proposal-photo-shell{position:relative!important;border-radius:inherit!important}
.page-proposal .proposal-follow-photo{
  position:absolute;left:55px;right:55px;top:870px;height:440px;z-index:4;overflow:hidden;
  border-radius:30px 90px 30px 90px/30px 54px 30px 54px;
  box-shadow:var(--wedding-shadow);background:#eee5df;
}
.page-proposal .proposal-follow-photo img{
  display:block;width:100%;height:100%;object-fit:cover;object-position:center center;
}
.page-proposal .proposal-follow-photo::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(135deg,rgba(255,255,255,.18),transparent 34%,rgba(179,138,74,.08));
}
.page-proposal .proposal-vow{
  position:absolute;left:46%;top:86px;width:154px;margin:0 0 0 -77px;z-index:9;text-align:center;
  pointer-events:none;transform-origin:78% 100%;
  animation:proposalSpeechBounce 2.35s cubic-bezier(.3,.68,.28,1) infinite;
}
.page-proposal .proposal-vow span{
  position:relative;display:block;box-sizing:border-box;padding:17px 13px 15px;
  border:0;background-color:transparent;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 154 62'%3E%3Cpath d='M29 55C14 55 7 45 13 34C5 22 17 9 31 13C39 2 55 4 62 12C74 3 91 5 97 15C112 8 128 17 127 30C143 35 140 51 125 55Z' fill='none' stroke='%23171412' stroke-opacity='.82' stroke-width='1.15' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-position:center;background-size:100% 100%;background-repeat:no-repeat;
  color:#171412;-webkit-text-fill-color:#171412;box-shadow:none;
  font:400 19px/1.15 Georgia,"Times New Roman",serif;font-style:italic;
  letter-spacing:.1em;text-indent:.1em;text-shadow:.45px .45px 0 rgba(0,0,0,.16);
}
.page-proposal .proposal-vow::before,
.page-proposal .proposal-vow::after{
  content:"";position:absolute;border:1px solid rgba(23,20,18,.78);border-radius:50%;background:transparent;
}
.page-proposal .proposal-vow::before{right:24px;bottom:-7px;width:9px;height:9px}
.page-proposal .proposal-vow::after{right:17px;bottom:-16px;width:5px;height:5px}
@keyframes proposalSpeechBounce{
  0%,100%{transform:translate3d(0,0,0) rotate(-1deg)}
  42%{transform:translate3d(0,-8px,0) rotate(1.2deg)}
  58%{transform:translate3d(0,-3px,0) rotate(.2deg)}
}
.page-proposal .proposal-orbit{left:14px!important;right:14px!important;top:90px!important;height:610px!important;opacity:.6}
.page-proposal .proposal-character{top:88px!important;width:22%!important}
.page-proposal .proposal-bride{left:-4%!important;top:88px!important}.page-proposal .proposal-groom{right:-4%!important;top:88px!important}
.page-proposal .proposal-seal{top:610px!important;right:18px!important;width:74px!important;height:74px!important}
.page-proposal .proposal-kicker{
  left:32px!important;right:32px!important;top:735px!important;bottom:auto!important;color:#513a32!important;
  font-size:16px!important;line-height:1.65!important;letter-spacing:.04em!important;
  font-family:"STKaiti","KaiTi","楷体",serif!important;z-index:10!important;isolation:isolate;text-shadow:none;
}
.page-proposal .proposal-kicker::before{
  content:none;display:none;
}
.page-proposal .proposal-kicker::after{
  content:none;display:none;
}
.page-proposal .proposal-kicker span{position:relative;z-index:1;display:block;text-align:center;white-space:nowrap}
.page-proposal .proposal-confession{
  position:absolute;left:48px;right:48px;bottom:21px;z-index:8;margin:0;text-align:center;
  color:#7b5148;font-family:"STKaiti","KaiTi","楷体",serif;font-size:14px;
  line-height:1.75;letter-spacing:.08em;
}
.page-proposal .proposal-confession span{display:block}
.page-proposal .proposal-confession span:first-child{color:#b02d3b;font-size:15px;letter-spacing:.18em}

/* 04 · 婚纱照：大面积出血，让照片自然融入长卷。 */
.page-notice{height:670px!important;padding-top:74px;overflow:hidden!important}
.page-notice::before{
  content:"LOVE · LAUGHTER · FOREVER"!important;
  left:34px!important;right:auto!important;top:105px!important;bottom:auto!important;height:auto!important;
  z-index:5!important;padding:0!important;background:none!important;
  color:rgba(255,255,255,.82)!important;
  font:8px/1 Georgia!important;letter-spacing:.26em!important;
  writing-mode:vertical-rl;
}
.page-notice .photo-main{
  left:36px!important;right:58px!important;top:92px!important;width:auto!important;height:475px!important;
  padding:0!important;transform:none!important;
  border-radius:0 150px 26px 0/0 80px 26px 0!important;
  background:transparent!important;box-shadow:var(--wedding-shadow)!important;
}
.page-notice .photo-main::after{opacity:.36}
.page-notice .action-mask{right:-2px!important;top:495px!important;width:22%!important}
.page-notice .tape{display:none!important}
.page-notice .notice-invite{
  position:absolute;left:44px;right:44px;top:591px;z-index:6;margin:0;
  color:#6f4339;text-align:center;font-family:"STKaiti","KaiTi","楷体",serif;
  font-size:14px;line-height:1.75;letter-spacing:.09em;
}
.page-notice .notice-invite span{display:block}
.page-notice .notice-invite span:last-child{font-size:12px;color:#9a7165;letter-spacing:.12em}
.page-notice .notice-invite::before,
.page-notice .notice-invite::after{
  content:"";position:absolute;top:12px;width:34px;height:1px;
  background:linear-gradient(90deg,transparent,rgba(183,137,70,.72));
}
.page-notice .notice-invite::before{left:-22px}
.page-notice .notice-invite::after{right:-22px;transform:scaleX(-1)}

/* 05 · 四季：两张纵向婚纱照左右并列，以不同节奏轻柔呼吸。 */
.page-love{height:950px!important;padding-top:90px;overflow:hidden!important}
.page-love .paper-grid{opacity:.38!important;background-size:38px 38px!important}
.page-love .photo-crop{
  left:22px!important;right:calc(50% + 5px)!important;top:132px!important;width:auto!important;height:390px!important;
  border:0!important;border-radius:72px 20px 20px 20px/46px 20px 20px 20px!important;
  box-shadow:var(--wedding-shadow)!important;
}
.page-love .photo-crop::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(90deg,rgba(43,31,26,.16),transparent 35%);
  pointer-events:none;
}
.page-love .photo-crop img[data-photo="photo17"]{
  object-position:center 43%!important;
}
.page-love .love-photo-inset{
  position:absolute;left:34px;right:34px;top:110px;width:auto;height:440px;z-index:9;
  overflow:hidden;border:0;border-radius:20px 72px 20px 20px/20px 46px 20px 20px;
  background:#fffaf2;box-shadow:0 16px 32px rgba(67,43,32,.2),0 3px 9px rgba(67,43,32,.12);
  transform:none;transform-origin:50% 50%;
  animation:loveInsetFloat 5.8s ease-in-out 1.2s infinite alternate!important;
}
.page-love .love-photo-inset::before{
  content:"";position:absolute;inset:0;z-index:2;pointer-events:none;
  box-shadow:inset 0 0 0 1px rgba(184,139,74,.28),inset 0 0 22px rgba(255,226,177,.12);
}
.page-love .love-photo-inset::after{
  content:"✦";position:absolute;right:9px;top:6px;z-index:3;color:#fff8d7;font-size:12px;
  text-shadow:-135px 77px 0 rgba(255,240,196,.9),0 0 8px rgba(255,255,255,.9);
  animation:photoStarTwinkle 3.2s ease-in-out infinite;
}
.page-love .love-photo-inset img{
  display:block;width:100%;height:100%;object-fit:cover;object-position:center 44%;
  transform:scale(1.02);animation:loveInsetPhoto 9s ease-in-out infinite alternate;
}
@keyframes loveInsetFloat{
  0%{transform:translate3d(0,0,0)}
  100%{transform:translate3d(0,-7px,0) rotate(.6deg)}
}
@keyframes loveInsetPhoto{
  0%{transform:scale(1.02) translate3d(0,0,0)}
  100%{transform:scale(1.09) translate3d(-1%,1.5%,0)}
}
.page-love .vertical-title{
  left:calc(50% - 14px)!important;top:570px!important;bottom:auto!important;writing-mode:horizontal-tb!important;transform:translateX(-50%);
  width:max-content;font-size:12px!important;letter-spacing:.35em!important;color:var(--wedding-red)!important;
}
.page-love .tips-copy{position:absolute;left:48px!important;right:24px!important;top:610px!important;bottom:auto!important;height:290px!important;z-index:10}
.page-love .tips-text-area{
  position:relative;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;
  width:100%;height:100%;min-height:0;padding:28px 27px 23px 36px;overflow:visible;border:0!important;
  border-radius:4px 26px 8px 34px;
  background:linear-gradient(90deg,transparent 0 21px,rgba(185,47,61,.16) 21px 22px,transparent 22px),
    repeating-linear-gradient(0deg,rgba(255,253,247,.97) 0 28px,rgba(179,138,74,.11) 28px 29px)!important;
  box-shadow:0 18px 44px rgba(76,48,37,.15)!important;transform:rotate(-1.4deg);
}
.page-love .tips-text-area::before{
  content:"";position:absolute;left:-8px;top:17px;width:18px;height:18px;border-radius:50%;
  background:#d94860;box-shadow:0 47px 0 #e0a348,0 94px 0 #6fa8a1;filter:drop-shadow(0 2px 3px rgba(69,37,33,.18));
}
.page-love .tips-text-area::after{
  content:"";position:absolute;right:0;top:0;width:46px;height:46px;
  background:linear-gradient(225deg,#f1d8c6 0 49%,transparent 50%);border-radius:0 8px 0 18px;opacity:.9;
}
.page-love .letter-kicker{position:relative;z-index:2;margin-bottom:9px;color:#b98a49;font:8px/1 Georgia,serif;letter-spacing:.25em}
.page-love .tips-love-text{position:relative;z-index:2;margin:0;text-align:left;font-size:13px;line-height:1.72;color:#493832;font-family:"STXingkai","华文行楷","KaiTi","楷体",serif}
.page-love .tips-love-text span{display:block;margin-top:7px}
.page-love .tips-love-text span:first-child{margin-top:0}
.page-love .letter-seal{
  position:absolute;right:17px;bottom:-13px;z-index:4;width:40px;height:40px;border-radius:50%;display:grid;place-items:center;
  color:#fff3df;font-size:17px;background:radial-gradient(circle at 35% 30%,#ed6a70,#b82437 68%);
  box-shadow:0 5px 10px rgba(117,31,43,.3),inset 0 0 0 3px rgba(255,222,205,.18);transform:rotate(8deg);
}
.page-love .sticker-tips{left:5px!important;top:848px!important;bottom:auto!important;width:17%!important;z-index:11!important;filter:drop-shadow(0 7px 10px rgba(76,48,37,.18))}
.page-love .sticker-zhu{width:48px!important;z-index:8!important}
.page-love .sticker-zhu img{border:2px solid rgba(255,255,255,.92)!important;border-radius:12px!important}
.page-love .sticker-zhu.zc{left:8px!important;top:182px!important}
.page-love .sticker-zhu.za{left:auto!important;right:5px!important;top:334px!important}
.page-love .sticker-zhu.zb{left:16px!important;top:490px!important}

/* 06 · 回忆：保留可旋转相册，但做成嵌入纸页的星夜章节。 */
.page-memory{height:838px!important;padding:120px 18px 72px;overflow:hidden!important}
.page-memory .memory-heading{
  position:absolute;left:28px;right:28px;top:10px;z-index:9;margin:0;text-align:center;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;
  color:#5f4439;font-family:"STKaiti","KaiTi","楷体",serif;
  text-shadow:0 1px 0 rgba(255,255,255,.86);
}
.page-memory .memory-xi{
  color:#c61f2f;font-size:42px;line-height:1;font-weight:400;letter-spacing:0;
  font-family:"SimSun","宋体",serif;
  text-shadow:0 2px 10px rgba(198,31,47,.2),0 1px 0 rgba(255,255,255,.9);
}
.page-memory .memory-title{font-size:20px;line-height:1.35;letter-spacing:.18em;padding-left:.18em}
.page-memory .memory-stage{
  position:relative!important;inset:auto!important;width:100%;height:100%!important;
  border-radius:180px 180px 34px 34px/82px 82px 34px 34px!important;
  overflow:hidden!important;
  background:radial-gradient(circle at 50% 42%,#4c3c43,#19171e 66%,#100f14)!important;
  box-shadow:0 28px 64px rgba(38,28,31,.24),0 0 0 1px rgba(179,138,74,.34)!important;
}
.page-memory .memory-bg{opacity:.36!important;filter:blur(32px) brightness(.35) saturate(.8)!important}
.page-memory .memory-vignette{border-radius:inherit!important}
.page-memory .memory-intro{bottom:26px!important}
.page-memory .mem-hint{color:rgba(255,244,225,.62)!important;letter-spacing:.16em}

/* 手机轻量模式：保留照片星球的层次和旋转，减少大面积模糊、阴影与循环光效。 */
.page-memory .memory-stage.memory-lite .memory-bg{
  filter:brightness(.30) saturate(.78)!important;
  transform:scale(1.06)!important;
  transition:opacity .8s ease,background-image .2s!important;
}
.memory-stage.memory-lite .memory-photo{
  will-change:transform,opacity!important;
  box-shadow:0 5px 18px rgba(0,0,0,.48)!important;
}
.memory-photo.mem-pending{
  background:
    radial-gradient(circle at 50% 42%,rgba(255,228,188,.16),transparent 48%),
    linear-gradient(145deg,#2d262a,#17161a)!important;
}
.memory-photo.mem-pending::before{
  content:"♥";position:absolute;inset:0;display:grid;place-items:center;
  color:rgba(255,220,190,.24);font-size:20px;text-shadow:0 0 12px rgba(255,194,168,.18);
}
.memory-photo.mem-pending img{opacity:0}
.memory-photo img{transition:opacity .35s ease}
.memory-stage.memory-lite .core-halo,
.memory-stage.memory-lite .core-heart::before,
.memory-stage.memory-lite .sphere-rings .ring::after,
.memory-stage.memory-lite .mem-hint{animation:none!important}
.memory-stage.memory-lite .sphere-core{
  box-shadow:0 0 34px rgba(255,220,160,.18),inset 0 0 24px rgba(255,228,180,.12)!important;
}
.mem-focus-card{
  background-size:cover!important;background-position:center!important;background-repeat:no-repeat!important;
  will-change:transform,opacity;
}
.mem-focus-card img{opacity:0;transition:opacity .22s ease!important;will-change:opacity}
.mem-focus-card img.is-ready{opacity:1}
.memory-stage.memory-lite .mem-focus-mask{transition:opacity .26s ease!important}
.memory-stage.memory-lite .mem-focus-card{
  transition:transform .34s cubic-bezier(.22,.78,.25,1),opacity .22s ease!important;
  box-shadow:0 14px 38px rgba(0,0,0,.62)!important;
}
.memory-stage.memory-lite .mem-focus-text{transition:opacity .28s ease .06s!important}

/* 07 · 誓言：文字直接浮在照片留白上，去掉“演示卡片”。 */
.page-info{height:940px!important;padding-top:90px;overflow:hidden!important}
.page-info .info-photo{
  left:45px!important;right:24px!important;top:90px!important;height:540px!important;
  border:0!important;border-radius:150px 0 0 28px/78px 0 0 28px!important;
  box-shadow:var(--wedding-shadow)!important;
}
.page-info .info-photo::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:48%;
  background:linear-gradient(180deg,transparent,rgba(34,25,22,.66));pointer-events:none;
}
.page-info .info-card{
  left:42px!important;right:26px!important;top:675px!important;bottom:auto!important;padding:0!important;
  border:0!important;background:transparent!important;box-shadow:none!important;
}
.page-info .vow-card-inner{
  padding:0 10px 18px!important;background:transparent!important;
  animation:vowCardFloat 4.8s ease-in-out 1.2s infinite!important;
}
.page-info .love-quote{
  color:#5c4338!important;font-size:15px!important;line-height:1.95!important;
  text-shadow:none!important;
}
.page-info .info-card .sticker-xiaoxin{
  width:70px!important;margin:0 auto 7px!important;
  filter:drop-shadow(0 7px 12px rgba(76,48,37,.14));
}

/* 08 · 情书：照片与纸张交叠，形成手作请柬而不是标准矩形卡片。 */
.page-tips{height:660px!important;padding-top:88px;overflow:hidden!important}
.page-tips .tips-photo{
  left:28px!important;right:68px!important;top:55px!important;height:510px!important;
  border:0!important;border-radius:0 130px 26px 0/0 76px 26px 0!important;
  box-shadow:var(--wedding-shadow)!important;
}
.page-tips .tips-copy{top:685px!important;left:54px!important;right:20px!important;bottom:auto!important;height:250px!important}
.page-tips .tips-text-area{
  height:100%!important;padding:30px 30px 24px 38px!important;
  border:0!important;border-radius:4px 26px 8px 34px!important;
  background:
    linear-gradient(90deg,transparent 0 21px,rgba(185,47,61,.16) 21px 22px,transparent 22px),
    repeating-linear-gradient(0deg,rgba(255,253,247,.97) 0 28px,rgba(179,138,74,.11) 28px 29px)!important;
  box-shadow:0 18px 44px rgba(76,48,37,.15)!important;
  transform:rotate(-1.4deg)!important;
}
.page-tips .tips-love-text{font-size:15px!important;line-height:2!important;color:#4c382f!important}
.page-tips .sticker-tips{left:5px!important;bottom:15px!important;width:17%!important}

/* 09 · 宴会信息：一张完整结尾，不再像倒计时宣传海报。 */
.page-rsvp{
  height:1415px!important;min-height:1415px!important;padding-top:100px!important;
  display:block!important;overflow:hidden!important;background:linear-gradient(180deg,transparent,rgba(246,234,220,.72))!important;
}
.page-rsvp::before{
  content:"一屋两人 三餐四季 携手到白头\A谨订此约 ❤ 良辰共证"!important;
  position:absolute!important;left:28px!important;right:28px!important;top:80px!important;height:auto!important;
  z-index:5!important;background:none!important;text-align:center;white-space:pre-line;
  color:var(--wedding-red);font:14px/1.8 "STKaiti","KaiTi",serif;letter-spacing:.15em;
}
.page-rsvp .rsvp-photo{
  position:absolute!important;left:20px!important;right:20px!important;top:180px!important;
  width:auto!important;height:640px!important;min-height:0!important;
  border:0!important;border-radius:180px 180px 28px 28px/82px 82px 28px 28px!important;
  overflow:hidden!important;box-shadow:var(--wedding-shadow)!important;
}
.page-rsvp .rsvp-photo::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,transparent 52%,rgba(24,19,17,.55));pointer-events:none;
}
.page-rsvp .rsvp-photo img{left:0!important;top:0!important;width:100%!important;height:100%!important;object-position:center 28%!important}
.page-rsvp .count-box{
  left:18px!important;right:18px!important;bottom:20px!important;z-index:4!important;
  padding:20px 8px 16px!important;
  border:1px solid rgba(255,235,186,.88)!important;border-radius:24px!important;
  outline:1px solid rgba(255,255,255,.3)!important;outline-offset:-6px!important;
  background:rgba(255,244,214,.2)!important;
  box-shadow:0 10px 26px rgba(91,63,34,.12),inset 0 0 20px rgba(255,252,237,.18)!important;
  backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
}
.page-rsvp .count-box h2:first-child{
  padding:7px 16px!important;color:#6d4a1f!important;
  background:rgba(249,227,177,.92)!important;
  box-shadow:0 7px 20px rgba(40,28,21,.18)!important;
}
.page-rsvp .count-box h2:last-child{
  width:max-content;max-width:calc(100% - 24px);margin:0 auto!important;padding:7px 18px!important;
  border:1px solid rgba(178,133,68,.46);border-radius:999px;
  background:linear-gradient(135deg,rgba(255,244,207,.94),rgba(243,216,157,.9))!important;
  color:#6d4a1f!important;text-shadow:0 1px 0 rgba(255,253,239,.95);
  box-shadow:0 6px 16px rgba(71,47,27,.16),inset 0 0 0 1px rgba(255,255,255,.5)!important;
}
.page-rsvp .countdown{gap:7px!important;margin:14px 0!important}
.page-rsvp .countdown span{
  width:54px!important;height:60px!important;border:0!important;border-radius:50%!important;
  background:rgba(255,245,218,.74)!important;
  box-shadow:inset 0 0 0 1px rgba(179,138,74,.28),0 5px 14px rgba(84,55,34,.1)!important;
}
.page-rsvp .countdown b{
  color:#8f2f3b!important;
  text-shadow:0 1px 0 rgba(255,248,229,.9),0 2px 8px rgba(73,38,29,.16)!important;
}
.page-rsvp .countdown i{
  color:#725337!important;font-weight:600!important;
  text-shadow:0 1px 0 rgba(255,248,229,.75)!important;
}
.page-rsvp .banquet-row{
  position:absolute!important;left:28px!important;right:28px!important;top:845px!important;
}
.page-rsvp .info-card-item{padding:0!important;background:transparent!important}
.page-rsvp .card-label{color:var(--wedding-red)!important;font-size:18px!important;font-family:"SimSun","宋体",serif!important}
.page-rsvp .card-value,.page-rsvp .card-lunar,.page-rsvp .card-invite{color:#584137!important;font-size:16px!important}
.page-rsvp .card-value,.page-rsvp .card-lunar{font-family:"STKaiti","KaiTi","楷体",serif!important}
.page-rsvp .card-value{line-height:1.05!important}
.page-rsvp .card-lunar{margin:-2px 0 0!important;line-height:1.05!important}
.page-rsvp .card-invite{font-family:"STKaiti","KaiTi","楷体",serif!important;font-weight:400!important}
.page-rsvp .see-you{
  position:absolute!important;left:20px!important;right:20px!important;top:auto!important;bottom:245px!important;
  color:var(--wedding-red)!important;font-size:17px!important
}
.page-rsvp .map-card{
  position:absolute!important;left:50px!important;right:50px!important;top:1040px!important;bottom:auto!important;
  width:auto!important;height:210px!important;padding:11px 14px!important;overflow:hidden;
  display:block;border:1px solid rgba(183,119,91,.3)!important;border-radius:18px!important;
  outline:1px solid rgba(255,255,255,.88)!important;outline-offset:-6px!important;
  background:linear-gradient(150deg,rgba(255,249,243,.98),rgba(252,231,229,.97))!important;color:#493b35!important;text-align:center;
  box-shadow:0 13px 30px rgba(123,75,72,.15),inset 0 0 0 1px rgba(255,255,255,.7)!important;
}
.page-rsvp .map-card::before,.page-rsvp .map-card::after{
  position:absolute;z-index:0;pointer-events:none;color:rgba(185,43,57,.1);font:52px/1 Georgia,serif;
}
.page-rsvp .map-card::before{content:"♥";left:-8px;top:-9px;transform:rotate(-18deg)}
.page-rsvp .map-card::after{content:"♥";right:-6px;bottom:-11px;transform:rotate(17deg);font-size:46px}
.page-rsvp .map-card-heading{position:relative;z-index:2;display:block;font-family:"STKaiti","KaiTi","楷体",serif}
.page-rsvp .map-card-heading strong{display:block;color:#a12e3a;font-size:15px;font-weight:600;letter-spacing:.1em;text-shadow:0 1px 0 #fff}
.page-rsvp .map-card-heading strong::before,.page-rsvp .map-card-heading strong::after{content:"♥";margin:0 7px;color:#d95562;font:8px/1 Georgia,serif;vertical-align:2px}
.page-rsvp .map-card-heading i{display:block;width:34px;height:1px;margin:4px auto;background:linear-gradient(90deg,transparent,#c99b66,transparent);border-radius:9px}
.page-rsvp .map-card-heading small{display:block;margin:0 auto 6px;max-width:260px;font-size:10px;line-height:1.4;color:#76564d;letter-spacing:.03em}
.page-rsvp .map-preview{
  position:relative;z-index:2;display:block;height:88px;overflow:hidden;border:1px solid rgba(190,139,111,.32);border-radius:10px;
  background:linear-gradient(145deg,#fff8ee 0 39%,#f6eee4 39% 100%);
  box-shadow:inset 0 0 0 2px rgba(255,255,255,.72),0 4px 12px rgba(115,79,57,.08);
}
.page-rsvp .map-preview::after{content:"♥";position:absolute;right:11px;top:7px;z-index:3;color:rgba(220,91,103,.28);font:12px/1 Georgia,serif;animation:mapHeartBeat 2.2s ease-in-out infinite}
.page-rsvp .map-land{position:absolute;border-radius:48% 52% 46% 54%;background:#eadfd1;opacity:.9}
.page-rsvp .map-land-a{left:-25px;bottom:-36px;width:150px;height:98px;transform:rotate(-8deg)}
.page-rsvp .map-land-b{right:-40px;top:-33px;width:148px;height:86px;transform:rotate(15deg);background:#f0deda}
.page-rsvp .map-road{position:absolute;z-index:2;height:8px;background:#fffdf8;border:1px solid #e2cdb8;box-shadow:0 0 0 2px rgba(226,180,123,.55)}
.page-rsvp .map-road-a{left:-32px;top:92px;width:390px;transform:rotate(-8deg)}
.page-rsvp .map-road-b{left:112px;top:-35px;width:245px;transform:rotate(66deg)}
.page-rsvp .map-road-c{left:-40px;top:28px;width:230px;height:5px;transform:rotate(19deg);box-shadow:0 0 0 1px rgba(247,219,148,.62)}
.page-rsvp .map-river{position:absolute;left:52px;top:-38px;width:24px;height:250px;border:7px solid #c7dfe2;border-left:0;border-bottom:0;border-radius:45%;transform:rotate(13deg);opacity:.75}
.page-rsvp .map-label{position:absolute;z-index:4;padding:2px 4px;background:rgba(255,255,255,.68);color:#7c7369;font:10px/1.2 "Microsoft YaHei",sans-serif}
.page-rsvp .map-label-a{left:22px;top:36px}.page-rsvp .map-label-b{right:25px;bottom:25px}
.page-rsvp .map-location{position:absolute;z-index:6;left:52%;top:53%;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center}
.page-rsvp .map-location b{position:relative;width:27px;height:27px;border:7px solid #fff;border-radius:50% 50% 50% 0;background:linear-gradient(145deg,#e65e69,#ad2635);transform:rotate(-45deg);box-shadow:0 4px 10px rgba(92,49,50,.25)}
.page-rsvp .map-location b::after{content:"";position:absolute;left:50%;top:50%;width:7px;height:7px;border-radius:50%;background:#fff;transform:translate(-50%,-50%)}
.page-rsvp .map-location em{margin-top:7px;padding:3px 8px;border:1px solid rgba(195,102,105,.18);border-radius:10px;background:rgba(255,250,246,.94);color:#9a3440;font:10px/1.2 "STKaiti","KaiTi","楷体",serif;font-style:normal;white-space:nowrap;box-shadow:0 2px 6px rgba(70,52,44,.1)}
.page-rsvp .map-card-action{
  position:absolute;right:0;bottom:0;z-index:8;padding:8px 13px;border-radius:10px 0 0 0;background:linear-gradient(135deg,#b52f3d,#8f2330);color:#fff8ef;
  font:13px/1 "Microsoft YaHei",sans-serif;letter-spacing:.08em;white-space:nowrap;
}
.page-rsvp .map-card:active{transform:scale(.985)!important;box-shadow:0 8px 18px rgba(91,63,34,.16)!important}
.page-rsvp .map-card,.map-chooser [data-map-app],.map-chooser [data-map-close]{touch-action:manipulation}
@keyframes mapHeartBeat{0%,100%{transform:scale(.86);opacity:.36}50%{transform:scale(1.18);opacity:.75}}

/* 地图应用选择：在微信内先让宾客选择常用地图，再交给对应应用处理。 */
.map-chooser{position:fixed;inset:0;z-index:120;display:flex;align-items:flex-end;justify-content:center;visibility:hidden;pointer-events:none}
.map-chooser.is-open{visibility:visible;pointer-events:auto}
.map-chooser-mask{position:absolute;inset:0;width:100%;height:100%;border:0;outline:0;background:rgba(35,25,24,.38);opacity:0;transition:opacity .25s ease;-webkit-tap-highlight-color:transparent;user-select:none;-webkit-user-select:none}
.map-chooser.is-open .map-chooser-mask{opacity:1}
.map-chooser-sheet{
  position:relative;z-index:2;width:min(430px,100%);padding:10px 20px calc(16px + env(safe-area-inset-bottom));overflow:hidden;
  border:1px solid rgba(199,143,112,.32);border-bottom:0;border-radius:28px 28px 0 0;
  background:linear-gradient(160deg,#fffaf4 0%,#fff2ef 58%,#fbe7e3 100%);text-align:center;
  box-shadow:0 -16px 38px rgba(105,58,56,.2),inset 0 0 0 5px rgba(255,255,255,.42);
  transform:translate3d(0,105%,0);transition:transform .32s cubic-bezier(.22,.8,.25,1);
  will-change:transform;backface-visibility:hidden;-webkit-backface-visibility:hidden;
}
.map-chooser-sheet::before,.map-chooser-sheet::after{position:absolute;z-index:0;color:rgba(202,65,74,.1);font:76px/1 Georgia,serif;pointer-events:none}
.map-chooser-sheet::before{content:"♥";left:-17px;top:48px;transform:rotate(-16deg)}
.map-chooser-sheet::after{content:"♥";right:-14px;bottom:24px;transform:rotate(18deg);font-size:62px}
.map-chooser-watermark{
  position:absolute;left:50%;top:55%;z-index:0;transform:translate(-50%,-50%) rotate(-7deg);
  color:rgba(162,38,51,.075);font:150px/1 "STKaiti","KaiTi","楷体",serif;
  text-shadow:0 0 1px rgba(184,122,75,.16);pointer-events:none;user-select:none;
}
.map-chooser.is-open .map-chooser-sheet{transform:translate3d(0,0,0)}
.map-chooser-handle{position:relative;z-index:2;display:block;width:38px;height:4px;margin:0 auto 12px;border-radius:9px;background:#d6b59e}
.map-chooser-kicker{position:relative;z-index:2;display:block;margin-bottom:4px;color:#b58a66;font:8px/1.2 Georgia,serif;letter-spacing:.3em}
.map-chooser-sheet h3{position:relative;z-index:2;margin:0;color:#9f2f3d;font:600 19px/1.4 "STKaiti","KaiTi","楷体",serif;letter-spacing:.05em}
.map-chooser-sheet h3 i{color:#d33f4d;font-size:10px;font-style:normal;vertical-align:2px}
.map-chooser-sheet>p{position:relative;z-index:2;margin:6px 10px 15px;color:#725950;font:12px/1.6 "STKaiti","KaiTi","楷体",serif}
.map-app-list{position:relative;z-index:2;display:grid;grid-template-columns:repeat(2,1fr);gap:9px;margin-bottom:13px}
.map-app-list a{
  display:flex;align-items:center;gap:10px;min-height:66px;padding:9px 11px;border:1px solid rgba(194,139,109,.23);border-radius:16px;
  background:rgba(255,253,248,.8);color:#5d4b45;text-align:left;text-decoration:none;font:11px/1.3 "Microsoft YaHei",sans-serif;
  box-shadow:0 6px 16px rgba(111,72,57,.07),inset 0 0 0 1px rgba(255,255,255,.72);
}
.map-app-list a:active{transform:scale(.97);background:#fff7f1}
.map-app-list a span{display:block;min-width:0}.map-app-list a strong{display:block;color:#624943;font-size:12px;font-weight:600;white-space:nowrap}
.map-app-list a small{display:block;margin-top:4px;color:#af8777;font-size:9px;white-space:nowrap}
.map-app-icon{flex:0 0 auto;display:grid;place-items:center;width:42px;height:42px;border:3px solid rgba(255,255,255,.86);border-radius:50%;color:#fff;font:700 16px/1 "Microsoft YaHei",sans-serif;box-shadow:0 5px 12px rgba(58,45,41,.14)}
.map-app-list .map-app-icon{
  border-color:rgba(255,226,153,.92);color:#ffe8a9;
  text-shadow:0 1px 1px rgba(91,16,18,.7),0 0 7px rgba(255,226,153,.42);
  box-shadow:0 5px 13px rgba(145,28,35,.25),inset 0 0 0 1px rgba(255,247,207,.3);
}
.amap-icon{background:linear-gradient(145deg,#df4650,#a80e25)}
.apple-icon{background:linear-gradient(145deg,#c93442,#870b21);font-size:16px}
.baidu-icon{background:linear-gradient(145deg,#e75b55,#b51629)}
.tencent-icon{background:linear-gradient(145deg,#c92739,#8f0b20)}
.map-chooser-cancel{position:relative;z-index:2;width:100%;height:42px;border:1px solid rgba(166,91,84,.16);border-radius:14px;background:rgba(246,228,221,.82);color:#8e554f;font:13px/1 "Microsoft YaHei",sans-serif;letter-spacing:.12em}
.page-rsvp .rsvp-letters{
  position:absolute!important;left:18px!important;right:18px!important;top:auto!important;bottom:0!important;height:120px!important
}
.page-rsvp .rsvp-letters img{max-height:120px!important;object-fit:contain!important}

.page-proposal .proposal-seal{width:66px!important;height:66px!important}
.page-proposal .proposal-seal b{font-size:20px!important}
.page-proposal .proposal-seal small{margin-top:3px!important;font-size:4px!important;letter-spacing:.1em!important}

/* 全局彩纸保持轻盈，不能盖住婚纱照人脸。 */
.global-effects{z-index:18!important;pointer-events:none}
.global-effects .fx{opacity:.42!important;font-size:11px!important}
#confettiCanvas{opacity:.68}

/* ===== 婚纱照动态层：每张照片各有一种轻柔效果，不改变人脸焦点 ===== */
@keyframes portraitDreamMove{
  0%{transform:scale(1.025) translate3d(0,3px,0)}
  45%{transform:scale(1.065) translate3d(-1.2%,0,0)}
  100%{transform:scale(1.04) translate3d(.5%,-5px,0)}
}
@keyframes proposalCinemaMove{
  0%,100%{transform:scale(1.01) translate3d(0,2px,0);filter:saturate(1.02) brightness(1)}
  50%{transform:scale(1.045) translate3d(0,-5px,0);filter:saturate(1.09) brightness(1.025)}
}
@keyframes veilPhotoMove{
  0%{transform:scale(1.02) translate3d(-.4%,3px,0)}
  50%{transform:scale(1.06) translate3d(.8%,-3px,0)}
  100%{transform:scale(1.035) translate3d(-.2%,-6px,0)}
}
@keyframes silkPhotoMove{
  0%,100%{transform:scale(1.015) translate3d(0,3px,0);filter:saturate(1.01)}
  50%{transform:scale(1.052) translate3d(-.7%,-4px,0);filter:saturate(1.08)}
}
@keyframes vowPhotoMove{
  0%{transform:scale(1.02) translate3d(-.4%,4px,0)}
  55%{transform:scale(1.06) translate3d(.5%,-4px,0)}
  100%{transform:scale(1.035) translate3d(0,-2px,0)}
}
@keyframes letterPhotoMove{
  0%,100%{transform:scale(1.015) translate3d(0,2px,0);filter:saturate(1.02)}
  48%{transform:scale(1.055) translate3d(-.6%,-5px,0);filter:saturate(1.1) brightness(1.02)}
}
@keyframes finalePhotoMove{
  0%{transform:scale(1.015) translate3d(0,3px,0);filter:saturate(1)}
  50%{transform:scale(1.045) translate3d(-.4%,-3px,0);filter:saturate(1.08)}
  100%{transform:scale(1.025) translate3d(.35%,-5px,0);filter:saturate(1.03)}
}
@keyframes photoSoftShine{
  0%,18%{transform:translate3d(-150%,0,0) skewX(-18deg);opacity:0}
  30%{opacity:.65}
  55%,100%{transform:translate3d(420%,0,0) skewX(-18deg);opacity:0}
}
@keyframes photoStarTwinkle{
  0%,100%{opacity:.18;transform:scale(.72) rotate(0)}
  45%{opacity:.92;transform:scale(1.16) rotate(15deg)}
  62%{opacity:.42;transform:scale(.9) rotate(-5deg)}
}
@keyframes photoHaloPulse{
  0%,100%{opacity:.28;transform:scale(.96)}
  50%{opacity:.76;transform:scale(1.035)}
}

body.long-scroll-ready .page-hi .portrait.photo-in-view img[data-photo]{
  animation:portraitDreamMove 13s ease-in-out 1s infinite alternate!important;
}
.page-proposal .proposal-photo-shell .proposal-single{
  animation:proposalCinemaMove 11s ease-in-out infinite!important;
}
body.long-scroll-ready .page-notice .photo-main.photo-in-view img[data-photo]{
  animation:veilPhotoMove 14s ease-in-out 1s infinite alternate!important;
}
body.long-scroll-ready .page-love .photo-crop.photo-in-view img[data-photo]{
  animation:silkPhotoMove 12s ease-in-out 1s infinite!important;
}
body.long-scroll-ready .page-info .info-photo.photo-in-view img[data-photo]{
  animation:vowPhotoMove 13s ease-in-out 1s infinite alternate!important;
}
body.long-scroll-ready .page-tips .tips-photo.photo-in-view img[data-photo="photo5"]{
  animation:letterPhotoMove 12s ease-in-out 1s infinite!important;
}
body.long-scroll-ready .page-rsvp .rsvp-photo.photo-in-view img[data-photo]{
  animation:finalePhotoMove 14s ease-in-out 1s infinite alternate!important;
}

/* 柔光扫过：只是一层透明高光，不覆盖照片内容。 */
.page-hi .portrait::before,
.page-notice .photo-main::before,
.page-love .photo-crop::before,
.page-info .info-photo::before,
.page-rsvp .rsvp-photo::before{
  content:"";position:absolute;z-index:3;top:-20%;bottom:-20%;left:-45%;width:22%;
  pointer-events:none;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.5),rgba(255,230,202,.18),transparent);
  transform:translate3d(-150%,0,0) skewX(-18deg);
  animation:photoSoftShine 8.5s ease-in-out infinite;
}
.page-notice .photo-main::before{animation-delay:1.4s}
.page-love .photo-crop::before{animation-delay:2.8s}
.page-info .info-photo::before{animation-delay:4s}
.page-rsvp .rsvp-photo::before{animation-delay:5.2s}

/* 边缘星光与柔金光晕增强“活照片”感，位置避开人物面部。 */
.page-hi .portrait::after{
  content:"✦"!important;z-index:4!important;
  position:absolute!important;left:auto!important;right:18px!important;top:26px!important;width:auto!important;height:auto!important;
  color:#fff5c9;font-size:15px;background:none!important;
  text-shadow:-218px 390px 0 rgba(255,214,223,.85),-28px 470px 0 rgba(255,255,255,.75),0 0 13px #fff;
  animation:photoStarTwinkle 3.4s ease-in-out infinite;
}
.page-notice .photo-main::after{
  content:"✦"!important;left:auto!important;right:18px!important;top:20px!important;bottom:auto!important;width:auto!important;
  color:#fff6cf;font-size:14px;background:none!important;transform:none!important;
  text-shadow:-285px 110px 0 rgba(255,255,255,.72),-32px 485px 0 rgba(255,215,226,.88),0 0 12px #fff;
  animation:photoStarTwinkle 3.8s ease-in-out .8s infinite!important;
}
.page-love .photo-crop::after{
  z-index:3!important;
  background:
    radial-gradient(circle at 88% 13%,rgba(255,244,197,.28),transparent 18%),
    linear-gradient(90deg,rgba(43,31,26,.12),transparent 35%)!important;
  animation:photoHaloPulse 5.5s ease-in-out infinite;
}
.page-info .info-photo::after{
  z-index:2!important;
  background:
    radial-gradient(circle at 14% 12%,rgba(255,241,191,.3),transparent 20%),
    linear-gradient(180deg,transparent 48%,rgba(34,25,22,.68))!important;
  animation:photoHaloPulse 6s ease-in-out infinite;
}
.page-rsvp .rsvp-photo::after{
  z-index:2!important;
  box-shadow:inset 0 0 0 1px rgba(255,232,175,.38),inset 0 0 34px rgba(255,220,160,.12);
  background:linear-gradient(180deg,transparent 50%,rgba(24,19,17,.58))!important;
  animation:photoHaloPulse 6.5s ease-in-out infinite;
}

@media(prefers-reduced-motion:reduce){
  .page-hi .portrait::before,.page-notice .photo-main::before,.page-love .photo-crop::before,
  .page-info .info-photo::before,.page-rsvp .rsvp-photo::before,
  .page-hi .portrait::after,.page-notice .photo-main::after,
  .page-love .love-photo-inset,.page-love .love-photo-inset img,.page-love .love-photo-inset::after{animation:none!important}
  .page-hi .story span{clip-path:none!important;opacity:1!important;filter:none!important;animation:none!important}
  .page-hi .story::after{width:68%!important;opacity:.48!important;animation:none!important}
}

@media(max-width:360px){
  .page-hi .portrait{left:105px!important}
  .page-love .photo-crop{left:16px!important;right:calc(50% + 4px)!important}
  .page-love .love-photo-inset{left:28px;right:28px;width:auto;height:440px}
  .page-info .love-quote{font-size:14px!important}
  .page-tips .tips-love-text{font-size:14px!important}
  .page-rsvp .rsvp-photo{left:14px!important;right:14px!important}
}

@media(max-height:760px){
  .page-cover{min-height:700px!important}
  .page-cover .cover-top{top:4%!important}
  .cover-characters{top:9%!important;height:60%!important}
  .page-cover .name-card{top:72%!important}
}

@media(prefers-reduced-motion:reduce){
  .page img,.side-character img{animation:none!important}
}
