@import url('https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700;900&display=swap');
:root{--paper:#f8f3e7;--ink:#3d4936;--muted:#7d8269;--green:#4b6542;--edge:#786748;--peach:#d69c77;--line:#ded8c5}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:30px}body{margin:0;background:var(--paper);color:var(--ink);font-family:'Noto Serif SC','Songti SC',serif;background-image:linear-gradient(#7e805107 1px,transparent 1px),linear-gradient(90deg,#7e805107 1px,transparent 1px);background-size:24px 24px}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible{outline:3px solid #bd8557;outline-offset:6px}.wrap{max-width:1120px;margin:auto;padding:0 30px}.nav{height:98px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.brand{font-weight:700;font-size:19px;letter-spacing:2px;display:flex;align-items:center;gap:10px}.brand small{font:9px monospace;letter-spacing:2px;border-left:1px solid #bdbda7;padding-left:12px;margin-left:6px}.pixel-heart{font-family:monospace;color:#b76a52;font-size:25px}nav{display:flex;align-items:center;gap:30px;font:12px sans-serif;letter-spacing:1px}nav a:hover{color:#af724c}#sound{border:1px solid #cccbb6;background:transparent;padding:9px 12px;color:var(--ink);font:11px monospace}.hero{text-align:center;padding-top:43px}.eyebrow{font:10px monospace;letter-spacing:3px;color:#868466;display:flex;justify-content:center;align-items:center;gap:18px}.eyebrow span{color:#ac9862;font-size:16px}h1{font-size:43px;letter-spacing:3px;line-height:1.6;font-weight:700;margin:16px 0 8px}.title-star{font-size:28px;color:#b59556;display:inline-block;vertical-align:top;margin:5px 0 0 8px}.subtitle{font-size:13px;color:var(--muted);letter-spacing:1.8px;margin:0 0 32px}.mobile-break{display:none}.scene{position:relative;border:5px solid #5e7048;box-shadow:0 0 0 2px #eee6cd,0 0 0 4px #948c64,7px 8px 0 #dcd8bd;overflow:hidden;background:#c6dfd1;aspect-ratio:1.9}.landscape{display:block;width:100%;height:100%;object-fit:cover;image-rendering:pixelated}.scene-top{position:absolute;top:20px;left:20px;right:20px;display:flex;justify-content:space-between}.game-label{background:#fff5dceF;border:2px solid #8e714b;box-shadow:2px 2px 0 #54472a60;padding:9px 14px;font:12px monospace;color:#685436;letter-spacing:1px}.sun{color:#d39e38;margin-right:5px;font-size:17px}.love-meter{position:absolute;right:23px;top:76px;color:#d47965;letter-spacing:4px;font:20px monospace;text-shadow:1px 2px #624237}.scene-caption{position:absolute;bottom:57px;left:22px;background:#fff4dcf5;border:3px solid #9a7d4d;box-shadow:3px 3px 0 #5e54335c;text-align:left;padding:15px 22px;min-width:225px}.scene-caption>span{font:9px monospace;letter-spacing:1.8px;color:#9a8058}.scene-caption strong{display:block;font-size:27px;margin:6px 0 5px;font-weight:700}.scene-caption i,.modal-names i{color:#c27b59;font-weight:400;font-size:20px;margin:0 7px}.scene-caption small{font-size:11px;letter-spacing:1px;color:#856d43}.scene-bottom{position:absolute;bottom:0;left:0;right:0;background:#344830e6;color:#f9efd6;padding:12px 20px;display:flex;justify-content:space-between;letter-spacing:2px;font:9px monospace}.scene-bottom span:last-child{font:10px sans-serif;letter-spacing:1px}.hero-actions{display:flex;justify-content:center;gap:18px;margin-top:31px}.button{padding:14px 25px;min-height:49px;display:inline-flex;align-items:center;justify-content:center;border:2px solid #455536;border-radius:0;font:13px 'Noto Serif SC',serif;letter-spacing:1px;box-shadow:3px 3px 0 #c6c9ad;transition:transform .15s,box-shadow .15s}.button:hover{transform:translate(-1px,-2px);box-shadow:4px 5px 0 #c6c9ad}.button:active{transform:translate(2px,2px);box-shadow:0 0 0 transparent}.primary{background:#4e6541;color:#fff6da}.secondary{background:#fdf7e6;color:var(--ink);border-color:#aaa787}.scroll-note{font-size:10px;color:#989881;letter-spacing:2px;display:block;margin-top:24px}.scroll-note span{display:block;font:20px monospace;margin-top:4px}.invitation{padding-top:90px}.section-kicker{font:10px monospace;letter-spacing:2.5px;color:#97916f;margin-bottom:25px}.letter-layout{display:grid;grid-template-columns:1fr 1.1fr;gap:65px;align-items:center}.little-flower{font-size:36px;color:#c4965c}.letter-heading h2{font-size:34px;line-height:1.75;letter-spacing:3px;font-weight:600;margin:15px 0 24px}.letter-heading>p{color:var(--muted);font-size:12px;letter-spacing:1px}.pixel-panel{border:2px solid #ae9870;box-shadow:inset 0 0 0 3px #fff8e4,4px 4px 0 #e2d9bf;background:#fff5dd}.letter{padding:27px 36px}.letter-top{display:flex;justify-content:space-between;padding-bottom:15px;border-bottom:1px dashed #c9ba98;font-size:11px;color:#957748;letter-spacing:2px}.letter-top span:last-child{color:#ba7f63}.letter p{font-size:13px;line-height:2.1;letter-spacing:1px;margin:20px 0}.signature{text-align:right;font-size:17px;padding:15px 0 0}.signature>span:last-child{font-size:11px;color:#918163}.schedule{padding-top:95px}.section-title{display:flex;align-items:center;justify-content:space-between;margin-bottom:27px}.section-title h2{margin:0;font-size:28px;letter-spacing:2px;font-weight:600}.section-title>span{font-size:10px;color:#988e70;border:1px solid #cfc6ad;padding:6px 10px}.venue{padding:24px 30px;display:flex;gap:23px;align-items:center}.venue-icon{font:42px monospace;color:#a58a5a}.venue small{font-size:10px;color:#938265;letter-spacing:1px}.venue h3{font-size:19px;margin:7px 0}.venue p{font-size:11px;color:#92866a;margin:0}.venue-date{margin-left:auto;padding-left:35px;border-left:1px dashed #c7b995;text-align:center}.venue-date small{display:block;font:9px monospace;letter-spacing:2px}.venue-date strong{display:block;margin-top:9px;font-size:23px;font-weight:500}.timeline{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin-top:27px}.timeline article{position:relative;padding:25px 25px 20px;border:1px solid #d8d0ba;background:#fbf7ec}.step{position:absolute;right:15px;top:13px;font:10px monospace;color:#b7ad91}.task-icon{font-size:32px;color:#ab885c;line-height:1.3;margin-bottom:15px}.timeline article>small{font:10px monospace;letter-spacing:1px;color:#849071}.timeline h3{font-size:17px;margin:10px 0;font-weight:600;letter-spacing:1px}.timeline p{font-size:11px;color:#939078;line-height:1.9;margin-bottom:23px}.task-type{border-top:1px dashed #dbd0b7;padding-top:13px;display:block;font-size:10px;letter-spacing:1px;color:#a39372}.closing{text-align:center;padding-top:100px;padding-bottom:64px}.closing h2{font-size:31px;line-height:1.8;letter-spacing:4px;font-weight:600;margin:15px 0}.closing>p{font-size:12px;color:#939079;letter-spacing:1px;margin-bottom:27px}.closing .bless-status{font-size:10px;margin:17px 0 28px;min-height:16px}.footer-hearts{color:#ac885c;font-size:20px}.footer{border-top:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;padding-top:24px;padding-bottom:30px;font-size:11px;color:#8d8d75;letter-spacing:1px}.footer small{font:8px monospace;letter-spacing:1px}dialog{width:min(460px,calc(100% - 36px));padding:44px 34px 35px;background:#fff5dd;color:var(--ink);border:4px solid #8c7751;box-shadow:inset 0 0 0 4px #dfcba0,6px 6px 0 #20281960;text-align:center}dialog::backdrop{background:#26332199;backdrop-filter:blur(4px)}.close{position:absolute;top:12px;right:16px;border:0;background:transparent;color:#877344;font:26px monospace;min-width:32px;min-height:32px}.modal-heart{font-size:35px;color:#b77759;display:block;margin-top:20px}dialog h2{font-size:25px;letter-spacing:2px}dialog>p{font-size:12px;color:#8c7f5c}.modal-names{font-size:22px!important;color:var(--ink)!important}.modal-details{margin:25px 0;padding:12px 0;border-block:1px dashed #cbb998}.modal-details p{font-size:12px;color:#938063}.modal-details strong{display:block;color:var(--ink);font-size:17px;margin-top:7px}.modal-address{font-size:10px!important}.modal-end{line-height:1.8;margin:20px 0}.floating-heart{position:fixed;pointer-events:none;color:#c77d62;font-size:25px;z-index:20;animation:rise 2.4s ease-out forwards}@keyframes rise{from{transform:translateY(0) rotate(-10deg);opacity:1}to{transform:translateY(-200px) rotate(20deg);opacity:0}}@media(max-width:760px){.wrap{padding-left:21px;padding-right:21px}.nav{height:78px}.brand{font-size:15px;letter-spacing:1px;gap:6px}.brand small{display:none}nav{gap:10px}nav>a{display:none}#sound{font-size:10px;padding:7px 9px}.hero{padding-top:34px}h1{font-size:28px;line-height:1.65;letter-spacing:2px;margin-top:15px}.mobile-break{display:block}.title-star{font-size:19px;margin-left:3px}.eyebrow{font-size:8px;letter-spacing:2px;gap:10px}.subtitle{font-size:11px;line-height:1.9;letter-spacing:.7px;max-width:280px;margin:12px auto 25px}.scene{aspect-ratio:.84;border-width:3px;box-shadow:0 0 0 2px #948c64,5px 6px #dcd8bd}.landscape{object-position:50% center}.scene-top{top:12px;left:10px;right:10px;gap:7px}.game-label{font-size:9px;padding:7px 8px;letter-spacing:0}.sun{font-size:13px;margin-right:2px}.love-meter{font-size:15px;letter-spacing:3px;right:13px;top:56px}.scene-caption{bottom:42px;left:12px;min-width:160px;padding:11px 13px;border-width:2px}.scene-caption>span{font-size:7px;letter-spacing:1px}.scene-caption strong{font-size:22px;margin:3px 0}.scene-caption small{font-size:9px}.scene-bottom{padding:11px 10px;font-size:7px;letter-spacing:.8px}.scene-bottom span:last-child{font-size:8px}.hero-actions{gap:11px;margin-top:27px}.button{font-size:11px;padding:12px 14px;min-height:46px;letter-spacing:.4px}.scroll-note{font-size:9px;margin-top:20px}.invitation,.schedule{padding-top:65px}.section-kicker{font-size:8px;letter-spacing:2px;margin-bottom:18px}.letter-layout{grid-template-columns:1fr;gap:23px}.letter-heading h2{font-size:28px;line-height:1.65;letter-spacing:2px;margin:8px 0 16px}.letter-heading h2 br{display:none}.little-flower{font-size:27px}.letter-heading>p{font-size:11px}.letter{padding:22px 25px}.letter p{font-size:12px}.signature{font-size:16px}.section-title{align-items:flex-start;gap:12px}.section-title h2{font-size:23px;line-height:1.6}.section-title>span{font-size:8px;white-space:nowrap;margin-top:6px;padding:5px}.venue{padding:20px 17px;gap:12px;flex-wrap:wrap}.venue-icon{font-size:32px}.venue h3{font-size:16px}.venue-date{flex-basis:100%;margin-top:12px;padding-top:15px;padding-left:0;border-left:0;border-top:1px dashed #c7b995;display:flex;justify-content:space-between;align-items:center}.venue-date strong{margin:0;font-size:19px}.timeline{grid-template-columns:1fr;gap:14px;margin-top:23px}.timeline article{padding:23px 20px 18px 74px}.task-icon{position:absolute;left:23px;top:30px;font-size:30px}.timeline h3{font-size:17px;margin:6px 0}.timeline p{margin:9px 0 16px}.task-type{font-size:9px}.closing{padding-top:67px;padding-bottom:43px}.closing h2{font-size:26px;letter-spacing:2px}.footer{flex-wrap:wrap;gap:18px;font-size:9px}.footer small{flex-basis:100%;font-size:7px}dialog{padding:39px 24px 28px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}}

/* 婚期与午宴详情 */
.venue-date .lunar-date{margin-top:10px;white-space:nowrap;font-size:10px}.venue-date .banquet-time{margin-top:9px;font-size:12px;color:var(--green);letter-spacing:1px}.venue-date strong{font-size:20px;white-space:nowrap}.modal-details{margin:18px 0;padding:7px 0}.modal-details p{margin:10px 0}.modal-details strong{font-size:16px}dialog{max-height:calc(100dvh - 32px);overflow-y:auto}@media(max-width:760px){.venue-date{display:grid;grid-template-columns:auto 1fr;gap:10px 8px;text-align:right}.venue-date>small{text-align:left}.venue-date strong{font-size:17px}.venue-date .lunar-date{grid-column:1 / -1;margin:0}.venue-date .banquet-time{grid-column:1 / -1;margin:0}.venue p{line-height:1.8}}
/* 循环氛围动画与渐进式入场 */
#motion{border:1px solid #cccbb6;background:transparent;padding:9px 12px;color:var(--ink);font:11px monospace;white-space:nowrap}
#motion:disabled{cursor:default;opacity:.7}
.scene{isolation:isolate}
.landscape{animation:scene-breathe 16s ease-in-out infinite alternate;transform-origin:50% 65%;will-change:transform}
.scene-atmosphere{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:1}
.scene-atmosphere::before{content:'';position:absolute;inset:0;background:linear-gradient(115deg,transparent 35%,#fff3b510 46%,#fffbe326 50%,transparent 57%);background-size:220% 100%;animation:sunlight 12s ease-in-out infinite;mix-blend-mode:screen}
.pixel-petal{position:absolute;top:-8%;width:7px;height:7px;background:#ffe1c5;box-shadow:3px 0 #edbbaa;opacity:0;animation:petal-drift var(--duration) linear infinite;animation-delay:var(--delay);will-change:transform,opacity}
.scene-spark{position:absolute;color:#fff2ae;font:16px monospace;text-shadow:0 0 7px #fff1a1;animation:sparkle var(--duration) ease-in-out infinite;animation-delay:var(--delay);opacity:.2}
.scene-top,.love-meter,.scene-caption,.scene-bottom{z-index:2}
.game-label{animation:label-float 5s ease-in-out infinite}
.date-label{animation-delay:-2.5s}
.love-meter span{display:inline-block;margin-left:5px;animation:heart-beat 3.8s ease-in-out infinite}
.love-meter span:nth-child(2){animation-delay:.2s}.love-meter span:nth-child(3){animation-delay:.4s}.love-meter span:nth-child(4){animation-delay:.6s}.love-meter span:nth-child(5){animation-delay:.8s}
.title-star,.eyebrow>span{animation:sparkle 4.5s ease-in-out infinite}
.scroll-note span{animation:scroll-bob 2s ease-in-out infinite}
.little-flower{display:inline-block;animation:flower-sway 6s ease-in-out infinite}
.footer-hearts,.modal-heart{animation:heart-beat 4s ease-in-out infinite}
.hero>.eyebrow,.hero>h1,.hero>.subtitle{animation:welcome-in .9s ease-out both}
.hero>h1{animation-delay:.1s}.hero>.subtitle{animation-delay:.2s}
dialog[open]{animation:dialog-in .3s ease-out}
.reveal{transition:opacity .8s ease,transform .8s cubic-bezier(.2,.65,.3,1);transition-delay:var(--reveal-delay,0s)}
.reveal-ready .reveal:not(.is-visible){opacity:0;transform:translateY(24px)}
.motion-paused *,.motion-paused *::before,.motion-paused *::after,.scene.is-resting *,.scene.is-resting *::before{animation-play-state:paused!important}
.motion-paused .reveal{opacity:1!important;transform:none!important;transition:none!important}
.motion-paused .hero>.eyebrow,.motion-paused .hero>h1,.motion-paused .hero>.subtitle{animation:none;opacity:1;transform:none}
@keyframes scene-breathe{from{transform:scale(1.012) translateY(0)}to{transform:scale(1.045) translateY(-3px)}}
@keyframes sunlight{0%,100%{background-position:100% 0;opacity:.35}50%{background-position:0 0;opacity:.8}}
@keyframes petal-drift{0%{transform:translate3d(0,-12px,0) rotate(0);opacity:0}8%{opacity:.65}50%{transform:translate3d(36px,280px,0) rotate(180deg)}90%{opacity:.6}100%{transform:translate3d(-24px,620px,0) rotate(360deg);opacity:0}}
@keyframes sparkle{0%,100%{opacity:.22;transform:scale(.85)}50%{opacity:1;transform:scale(1.18)}}
@keyframes label-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}
@keyframes heart-beat{0%,36%,70%,100%{transform:scale(1)}45%{transform:scale(1.13)}55%{transform:scale(1)}62%{transform:scale(1.09)}}
@keyframes scroll-bob{0%,100%{transform:translateY(0);opacity:.5}50%{transform:translateY(5px);opacity:1}}
@keyframes flower-sway{0%,100%{transform:rotate(-8deg)}50%{transform:rotate(8deg)}}
@keyframes welcome-in{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
@keyframes dialog-in{from{opacity:0;transform:translateY(14px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}
@media(max-width:760px){nav{gap:8px}#motion{font-size:10px;padding:7px 8px}.love-meter{letter-spacing:0}.pixel-petal{width:5px;height:5px}.scene-spark{font-size:12px}.letter-heading h2 br{display:block}}
@media(prefers-reduced-motion:reduce){.reveal-ready .reveal:not(.is-visible){opacity:1;transform:none}.pixel-petal,.scene-spark{display:none}.landscape{transform:none;will-change:auto}}
/* 原创像素农场底景与中文游戏字体 */
@font-face{font-family:'Fusion Pixel';src:url('assets/fonts/fusion-pixel-12px-zh-hans.woff2') format('woff2');font-style:normal;font-weight:400;font-display:swap}
:root{--pixel:'Fusion Pixel',monospace}
body{background:#82ad64;background-image:none;position:relative;isolation:isolate;padding:28px 0 22px}
body::before{content:'';position:fixed;inset:0;z-index:-2;background:url('assets/farm-background.png') center top/cover no-repeat;image-rendering:pixelated;pointer-events:none}
body::after{content:'';position:fixed;inset:0;z-index:-1;background:linear-gradient(#274b1905,#28442324);pointer-events:none}
.wrap{max-width:1060px;width:calc(100% - 48px)}
.nav,.footer{background:#fff1d5f5;border:3px solid #8b7146;box-shadow:inset 0 0 0 3px #fff8dc,5px 5px 0 #364d2770}
.hero,.invitation,.schedule,.closing{background:#fff4dbeF;border:3px solid #9d8453;box-shadow:inset 0 0 0 3px #fff8e7,5px 5px 0 #364d2770;margin-top:28px;padding-left:32px;padding-right:32px}
.hero{padding-bottom:26px}.invitation{padding-top:44px;padding-bottom:44px}.schedule{padding-top:44px;padding-bottom:44px}.closing{padding-top:54px;padding-bottom:44px}.footer{margin-top:28px}
.letter{background:#fff2d6}.timeline article{background:#fff5dfaF;border:2px solid #c6af80;box-shadow:3px 3px 0 #c5b79055}
.game-label,.letter-top,.task-type,.timeline,.section-kicker,.section-title>span,.scene-caption,.scene-bottom,.eyebrow,.brand small,nav,.button,#motion,#sound,.venue small,.venue-date,.scroll-note,.footer small{font-family:var(--pixel);font-weight:400;font-synthesis:none;-webkit-font-smoothing:none;letter-spacing:0}
.game-label{font-size:12px;line-height:1.5}.letter-top{font-size:12px;line-height:1.8}.task-type{font-size:12px;line-height:1.5}.timeline h3{font-size:24px;font-family:var(--pixel);font-weight:400;line-height:1.5;letter-spacing:0}.timeline p{font-family:var(--pixel);font-size:12px;line-height:2;color:#756849}.timeline article>small{font:12px/1.6 var(--pixel);color:#506440;letter-spacing:0}.step{font:12px var(--pixel)}
.section-kicker{font-size:12px;color:#796d4b}.section-title>span{font-size:12px}.scene-caption strong{font-size:24px;font-family:var(--pixel);font-weight:400}.scene-caption>span,.scene-caption small{font:12px/1.5 var(--pixel)}.scene-bottom,.scene-bottom span:last-child{font:12px/1.5 var(--pixel)}
.eyebrow{font-size:12px;letter-spacing:1px}.button{font-size:12px;line-height:1.5}#motion,#sound{font:12px/1.5 var(--pixel);background:#fff5de}.venue small,.venue-date small{font:12px/1.5 var(--pixel)}.venue-date strong{font:24px/1.5 var(--pixel)}.venue-date .lunar-date,.venue-date .banquet-time{font:12px/1.5 var(--pixel)}.footer small{font:12px/1.5 var(--pixel)}
@media(max-width:760px){body{padding-top:14px}.wrap{width:calc(100% - 28px);padding-left:17px;padding-right:17px}.nav{padding-left:12px;padding-right:12px;height:74px}.hero,.invitation,.schedule,.closing{margin-top:20px;padding-left:18px;padding-right:18px}.hero{padding-top:30px;padding-bottom:20px}.invitation,.schedule{padding-top:32px;padding-bottom:32px}.closing{padding-top:40px;padding-bottom:32px}.footer{margin-top:20px}.brand{font-size:14px;gap:5px}nav{gap:6px}#motion,#sound{font-size:12px;padding:6px}.game-label{font-size:12px;padding:5px 6px}.scene-top{left:7px;right:7px;gap:5px}.scene-caption{padding:10px;min-width:160px;left:9px}.scene-caption>span,.scene-caption small{font-size:12px}.scene-caption strong{font-size:24px}.scene-bottom{padding:8px;font-size:12px;letter-spacing:0}.scene-bottom span:last-child{display:none}.eyebrow{font-size:12px;letter-spacing:0;gap:8px}.section-title{gap:8px}.section-title h2{font-size:21px}.section-title>span{font-size:12px;padding:4px}.venue-date strong{font-size:24px}.footer small{font-size:12px}.timeline article{padding-left:65px;padding-right:14px}.timeline h3{font-size:24px}.timeline p{font-size:12px}.button{padding-left:12px;padding-right:12px}.subtitle{max-width:280px}.letter-layout{gap:20px}.letter{padding:20px}.letter-heading h2{font-size:26px}}
@media(max-width:390px){.brand{font-size:12px}.pixel-heart{font-size:20px}.game-label{padding-left:4px;padding-right:4px}.scene-top{left:5px;right:5px}.section-title{flex-wrap:wrap}.venue-date{grid-template-columns:1fr;text-align:left}.venue-date strong,.venue-date .lunar-date,.venue-date .banquet-time{grid-column:1}.hero-actions{gap:9px}.button{padding-left:10px;padding-right:10px}.scene-caption>span{font-size:12px}}
.section-title h2,.venue h3,.signature{font-family:var(--pixel);font-size:24px;font-weight:400;line-height:1.5;letter-spacing:0}.letter p{font-family:var(--pixel);font-size:12px;line-height:2.2;letter-spacing:0}

/* 农场游戏界面：木框、像素铆钉与循环星光 */
.hero{position:relative;margin-top:0;padding-top:82px}
.hero-controls{position:absolute;top:19px;right:22px;display:flex;gap:10px;z-index:3}
.hero-controls button{border:2px solid #8c633d!important;padding:8px 11px!important;background:#ffe5af!important;box-shadow:inset 0 0 0 2px #fff3cf,3px 3px 0 #b79059;color:#705032!important;min-height:38px}
.hero-controls button:hover{background:#fff3cf!important;transform:translateY(-2px)}
.hero,.invitation,.schedule,.closing{border:5px solid #976239;box-shadow:inset 0 0 0 3px #e4b777,inset 0 0 0 6px #fff4d8,5px 5px 0 #4c592a88;background-color:#fff1d4;background-image:linear-gradient(90deg,#b9874810 1px,transparent 1px),linear-gradient(#b9874808 1px,transparent 1px);background-size:12px 12px}
.letter.pixel-panel,.venue.pixel-panel,.timeline article{position:relative;border:4px solid #9b6d40;background:linear-gradient(135deg,#fff7e2,#f7e4bb);box-shadow:inset 0 0 0 2px #f8c988,inset 0 0 0 5px #fffae6,4px 4px 0 #77563355}
.letter.pixel-panel::before,.venue.pixel-panel::before,.timeline article::before{content:'';position:absolute;inset:5px;pointer-events:none;background:linear-gradient(#a87b44,#a87b44) left top/5px 5px no-repeat,linear-gradient(#a87b44,#a87b44) right top/5px 5px no-repeat,linear-gradient(#a87b44,#a87b44) left bottom/5px 5px no-repeat,linear-gradient(#a87b44,#a87b44) right bottom/5px 5px no-repeat}
.letter-top{margin:-7px -14px 0;padding:9px 12px;background:#eed09b;border:2px solid #b48a54;box-shadow:inset 0 0 0 2px #ffeabd;color:#6d4e2b}
.letter-top span:last-child{display:inline-block;animation:heart-beat 4s steps(4,end) infinite}
.timeline article{border-top-width:7px;padding-top:28px}
.timeline article:nth-child(1){border-top-color:#849455}.timeline article:nth-child(2){border-top-color:#c28572}.timeline article:nth-child(3){border-top-color:#c9a156}
.task-icon{display:flex;width:48px;height:48px;align-items:center;justify-content:center;background:#f0d9a7;border:2px solid #b99260;box-shadow:inset 0 0 0 2px #fff1cc,2px 2px 0 #c3a478;color:#9e6d45;animation:task-bob 4s steps(4,end) infinite}
.timeline article:nth-child(2) .task-icon{animation-delay:-1.3s}.timeline article:nth-child(3) .task-icon{animation-delay:-2.6s}
.task-type{background:#ead7b2;margin:0 -10px -3px;padding:9px 10px;border:1px solid #c7a677;color:#756039}
.step{background:#fff1cb;border:1px solid #bca06a;padding:4px;color:#96764a}
.section-title>span{background:#ecd3a2;border:2px solid #b58b52;box-shadow:2px 2px 0 #d3b783}
.card-sparkles{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:1}
.card-sparkles span{position:absolute;color:#c89a40;font:18px var(--pixel);animation:card-twinkle 5s steps(4,end) infinite;opacity:.2}
.card-sparkles span:nth-child(1){top:12px;right:34px;animation-delay:-1s}.card-sparkles span:nth-child(2){bottom:15px;right:12px;animation-delay:-3s}.card-sparkles span:nth-child(3){bottom:12px;left:12px;animation-delay:-4.2s}
.letter .card-sparkles span:nth-child(1){top:61px;right:14px}.timeline .card-sparkles span:nth-child(1){top:66px;right:15px}
.venue-icon{animation:task-bob 5s steps(4,end) infinite}
@keyframes task-bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}
@keyframes card-twinkle{0%,100%{opacity:.15;transform:scale(.7)}40%,60%{opacity:.85;transform:scale(1.1)}}
@media(max-width:760px){.hero{margin-top:0;padding-top:82px}.hero-controls{top:16px;right:15px;gap:8px}.hero-controls button{padding:7px 8px!important}.timeline article{padding-left:82px}.timeline .task-icon{left:20px;top:30px}.letter-top{margin:-2px -5px 0}.venue{padding:23px 18px}.card-sparkles span{font-size:12px}}
@media(prefers-reduced-motion:reduce){.task-icon,.venue-icon,.card-sparkles span,.letter-top span:last-child{animation:none!important}}

/* 金秋微风：像素秋叶与卡片角落的小小落叶堆 */
.autumn-card{position:relative}dialog.autumn-card{position:fixed}
.autumn-layer{position:absolute;inset:7px;overflow:hidden;pointer-events:none;z-index:2}
.autumn-falling{position:absolute;top:-26px;width:18px;height:22px;opacity:0;animation:autumn-fall var(--fall-time) linear infinite;animation-delay:var(--fall-delay)}
.autumn-leaf{position:relative;display:block;width:18px;height:22px;background:var(--leaf-color,#d68c36);clip-path:polygon(44% 0,66% 0,66% 18%,88% 18%,88% 36%,100% 36%,100% 63%,78% 63%,78% 81%,56% 81%,56% 100%,44% 100%,44% 81%,22% 81%,22% 63%,0 63%,0 36%,22% 36%,22% 18%,44% 18%);image-rendering:pixelated;transform:rotate(25deg)}
.autumn-leaf::after{content:'';position:absolute;left:8px;top:4px;width:2px;height:17px;background:#80542f80;box-shadow:-3px 4px #ffde8f88,3px 7px #ffde8f88}
.autumn-falling:nth-child(2n) .autumn-leaf{transform:rotate(-35deg)}
.autumn-falling:nth-child(3n){width:14px;height:18px}.autumn-falling:nth-child(3n) .autumn-leaf{transform:scale(.75) rotate(60deg)}
.autumn-pile{position:absolute;left:7px;bottom:5px;display:flex;align-items:flex-end;gap:0;animation:autumn-rustle 6s steps(4,end) infinite;transform-origin:bottom left}
.autumn-pile .autumn-leaf{width:16px;height:19px;transform:rotate(-55deg)}
.autumn-pile .autumn-leaf:nth-child(2){--leaf-color:#b75c38;transform:translate(-5px,2px) rotate(65deg)}
.autumn-pile .autumn-leaf:nth-child(3){--leaf-color:#d6ae45;transform:translate(-10px,3px) rotate(25deg)}
.hero .autumn-layer{z-index:2}.hero-controls{z-index:4}
.letter .autumn-pile{left:4px;bottom:4px}.timeline .autumn-pile{left:3px;bottom:3px;transform:scale(.8)}
.card-sparkles span{color:#d69b36}
.autumn-resting .autumn-falling,.autumn-resting .autumn-pile{animation-play-state:paused}
@keyframes autumn-fall{0%{opacity:0;transform:translate3d(-3px,0,0) rotate(-20deg)}9%{opacity:.72}30%{transform:translate3d(7px,calc(var(--fall-distance)*.3),0) rotate(35deg)}65%{transform:translate3d(-7px,calc(var(--fall-distance)*.65),0) rotate(-35deg);opacity:.6}90%{opacity:.65}100%{opacity:0;transform:translate3d(4px,var(--fall-distance),0) rotate(65deg)}}
@keyframes autumn-rustle{0%,100%{translate:0 0;rotate:0deg}45%{translate:1px -2px;rotate:5deg}65%{translate:0 -1px;rotate:-3deg}}
@media(max-width:760px){.autumn-layer{inset:5px}.autumn-falling{scale:.8}.autumn-pile{scale:.85}.autumn-falling:nth-child(n+5){display:none}}
@media(prefers-reduced-motion:reduce){.autumn-falling{display:none}.autumn-pile{animation:none}}

/* 邀请函关键信息：清晰的字号、层次和对比度 */
#invite-dialog{width:min(500px,calc(100% - 28px));padding:30px 30px 25px}
#invite-dialog .modal-heart{font-size:28px;margin-top:13px}
#invite-dialog h2{margin:12px 0;font-size:26px}
#invite-dialog .modal-details{margin:17px 0;padding:10px 0}
#invite-dialog .modal-details p{font-size:16px;line-height:1.65;color:#665139;margin:12px 0}
#invite-dialog .modal-details strong{font-size:24px;line-height:1.5;color:#35462c;margin-top:4px;font-weight:700}
#invite-dialog .modal-details [data-fill="lunar"]{font-size:18px;font-weight:700;color:#865525;background:#f1deb5;border:1px solid #d6b777;padding:7px 10px;margin:13px 0}
#invite-dialog .modal-details .modal-address{font-size:17px!important;color:#4d563b;line-height:1.8;overflow-wrap:anywhere}
#invite-dialog .modal-end{margin:14px 0;line-height:1.8}
@media(max-width:760px){#invite-dialog{padding:28px 23px 23px}#invite-dialog h2{font-size:24px}#invite-dialog .modal-details strong{font-size:23px}#invite-dialog .modal-details [data-fill="lunar"]{font-size:18px;padding:7px 5px}#invite-dialog .modal-details .modal-address{font-size:17px!important}}

/* 弹窗操作始终留在可见区域，适配手机工具栏与安全区域 */
body.invite-open{overflow:hidden}
#invite-dialog{padding:22px 24px 18px;max-height:calc(100vh - 24px);max-height:calc(100svh - 24px - env(safe-area-inset-top) - env(safe-area-inset-bottom));overflow:hidden}
#invite-dialog[open]{display:flex;flex-direction:column}
#invite-dialog .modal-header,#invite-dialog .modal-footer{flex-shrink:0;position:relative;z-index:3}
#invite-dialog .modal-header{padding-top:13px}
#invite-dialog .close{top:-15px;right:-16px;width:44px;height:44px;min-width:44px;min-height:44px;display:grid;place-items:center;z-index:4}
#invite-dialog h2{display:flex;align-items:center;justify-content:center;gap:10px;margin:12px 0 8px;line-height:1.4}
#invite-dialog .modal-heart{display:block;width:24px;height:24px;flex-shrink:0;margin:0;fill:#c47156;shape-rendering:crispEdges;animation:heart-beat 4s steps(3,end) infinite}
#invite-dialog .modal-names{font-size:22px;color:var(--ink);margin:8px 0}
#invite-dialog .modal-intro{font-size:12px;line-height:1.6;color:#8c7f5c;margin:6px 0}
#invite-dialog .modal-body{min-height:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;position:relative;z-index:3}
#invite-dialog .modal-details{margin:8px 0;padding:7px 0}
#invite-dialog .modal-details p{margin:8px 0;line-height:1.5}
#invite-dialog .modal-details p:has(>[data-fill="date"]),#invite-dialog .modal-details p:has(>[data-fill="dinnerTime"]){display:flex;align-items:center;justify-content:space-between;gap:10px;text-align:left}
#invite-dialog .modal-details strong{margin-top:3px;font-size:24px;line-height:1.4}
#invite-dialog .modal-details p:has(>[data-fill="date"]) strong,#invite-dialog .modal-details p:has(>[data-fill="dinnerTime"]) strong{margin:0}
#invite-dialog .modal-details [data-fill="lunar"]{margin:10px 0;padding:6px 5px;line-height:1.5}
#invite-dialog .modal-details .modal-address{line-height:1.6;margin:8px 0}
#invite-dialog .modal-footer{background:#fff6df;padding-top:5px}
#invite-dialog .modal-end{font-size:12px;line-height:1.6;color:#8c7f5c;margin:5px 0 10px}
#invite-dialog #accept{min-height:46px}
@media(max-width:760px){#invite-dialog{padding:16px 20px 14px}#invite-dialog h2{font-size:24px;gap:8px;margin:10px 0 7px}#invite-dialog .eyebrow{font-size:10px}#invite-dialog .modal-details strong{font-size:23px}#invite-dialog .close{top:-13px;right:-14px}#invite-dialog .modal-details .modal-address{font-size:17px!important}}
@media(max-width:350px){#invite-dialog{padding-left:16px;padding-right:16px}#invite-dialog h2{font-size:22px}#invite-dialog .modal-details strong{font-size:21px}#invite-dialog .modal-details [data-fill="lunar"]{font-size:17px}}
@media(max-height:560px){#invite-dialog{padding-top:12px;padding-bottom:12px}#invite-dialog .modal-header{padding-top:10px}#invite-dialog h2{margin:6px 0;font-size:22px}#invite-dialog .modal-names{margin:5px 0}#invite-dialog .modal-intro{margin:3px 0}}
.motion-paused #invite-dialog[open]{animation:none!important;opacity:1;transform:none}
@media(max-width:350px){#invite-dialog .modal-details p:has(>[data-fill="date"]),#invite-dialog .modal-details p:has(>[data-fill="dinnerTime"]){display:block;text-align:center}#invite-dialog .modal-details strong{white-space:nowrap}#invite-dialog h2{font-size:20px}#invite-dialog .modal-heart{width:20px;height:20px}}

/* 手机首屏预留约 50px 浏览器工具栏空间，让两项操作提前出现 */
@media(max-width:760px){
 body{padding-top:10px}
 .hero{padding-top:58px;padding-bottom:16px}
 .hero-controls{top:12px;right:12px;gap:7px}
 .hero-controls button{min-height:34px;padding:5px 8px!important}
 .hero>.eyebrow{font-size:10px;line-height:1.4;gap:7px}
 .hero>h1{font-size:24px;line-height:1.45;letter-spacing:1px;margin:8px 0 6px}
 .hero>.subtitle{font-size:11px;line-height:1.65;margin:6px auto 14px;max-width:285px}
 .hero .scene{aspect-ratio:auto;height:clamp(150px,calc(100vh - 380px),440px);height:clamp(150px,calc(100svh - 380px),440px)}
 .hero .landscape{object-position:50% 62%}
 .hero .scene-top{top:8px}
 .hero .love-meter{top:47px}
 .hero .scene-caption{padding:6px 9px;bottom:34px;left:8px;min-width:150px}
 .hero .scene-caption>span{font-size:10px}
 .hero .scene-caption strong{font-size:24px;margin:3px 0}
 .hero .scene-caption small{font-size:10px}
 .hero .scene-bottom{padding:6px 8px;font-size:10px}
 .hero-actions{margin-top:16px;gap:10px;position:relative;z-index:3}
 .hero-actions .button{min-height:46px;padding:10px 12px;white-space:nowrap}
 .hero>.scroll-note{display:none}
}
@media(max-width:350px){.hero{padding-left:13px;padding-right:13px}.hero>h1{font-size:22px}.hero-actions{gap:7px}.hero-actions .button{padding-left:8px;padding-right:8px}.hero>.subtitle{font-size:10px}}
@media(max-width:760px) and (max-height:600px){.hero{padding-top:52px}.hero>.subtitle{margin-bottom:10px}.hero .scene-caption small,.hero .scene-caption>span{display:none}.hero .scene-caption{min-width:140px}.hero .scene-caption strong{margin:0}.hero .love-meter{display:none}}

/* 新人信息卡靠左下，轻轻跨过画框；按钮向下留出呼吸空间 */
.scene-shell{position:relative}
.scene-shell>.scene-caption{left:-10px;bottom:-12px;z-index:4}
.hero-actions{margin-top:44px}
@media(max-width:760px){
 .scene-shell>.scene-caption{left:-8px;bottom:-16px;min-width:164px;padding:7px 10px;border-width:2px}
 .hero .scene-caption>span,.hero .scene-caption small{display:block;font-size:10px;line-height:1.5}
 .hero .scene-caption strong{font-size:24px;line-height:1.3;margin:4px 0}
 .hero-actions{margin-top:34px}
}

/* 底栏文案靠右，避开左下角新人信息卡 */
.scene-bottom{justify-content:flex-end;text-align:right}.scene-bottom span:last-child{display:none}

.scene-bottom>span:first-child{max-width:calc(100% - 240px);line-height:1.5}
@media(max-width:760px){.scene-bottom>span:first-child{max-width:calc(100% - 178px);font:10px/1.5 var(--pixel);white-space:normal}.scene-bottom{min-height:38px;align-items:center}}

/* 喜庆暖红：主操作、画框与游戏底栏 */
:root{--green:#a7433c}
.primary{background:#ac403c;border-color:#76302d;color:#fff5dc;box-shadow:3px 3px 0 #cf9a7a}
.primary:hover{background:#bb4b43;box-shadow:4px 5px 0 #cf9a7a}
.secondary{border-color:#ac6250;color:#913d36;background:#fff1d5;box-shadow:3px 3px 0 #dab294}
.hero .scene{border-color:#a54b3f;box-shadow:0 0 0 2px #fff0cb,0 0 0 4px #884333,5px 6px 0 #cca487}
.scene-bottom{background:#873c34ee;color:#fff3d3}
.hero .hero-actions .button{border-color:#863b32}

/* 邀请函落叶在底部独立留白中完整显示，不被页脚覆盖。 */
#invite-dialog .modal-footer{padding-bottom:22px}
#invite-dialog #accept{width:100%}
#invite-dialog .autumn-layer{z-index:4}
#invite-dialog .autumn-pile{left:16px;bottom:8px;transform-origin:left bottom}
/* 按住原位显示婚纱照，松开立即恢复像素画。 */
.scene{-webkit-touch-callout:none;user-select:none;-webkit-user-select:none}
.landscape{-webkit-touch-callout:none;user-select:none;-webkit-user-select:none;cursor:pointer}
.scene:focus-visible{outline:3px dashed #fff2c5;outline-offset:-7px}
.scene.is-photo-held .landscape{image-rendering:auto;filter:saturate(1.2)}

/* 独立触摸表面避免浏览器直接长按图片，保留竖向滚动与双指缩放。 */
.scene{touch-action:pan-y pinch-zoom}
.scene::after{content:"";position:absolute;inset:0;z-index:10;pointer-events:auto;background:transparent;-webkit-touch-callout:none;user-select:none;-webkit-user-select:none}
.scene .landscape{pointer-events:none;-webkit-user-drag:none}
.scene *{-webkit-touch-callout:none;user-select:none;-webkit-user-select:none}
