:root{--cream:#fff9ef;--ink:#483e51;--soft-ink:#736777;--rose:#f39ea9;--rose-dark:#d97285;--pink:#ffe1e3;--peach:#ffe7cf;--mint:#d7efdf;--sage:#72ae91;--yellow:#f8d67d;--line:#5a4959;--paper:#fffcf6}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--cream);color:var(--ink);font-family:"Nunito","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;line-height:1.6;-webkit-font-smoothing:antialiased}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer}a{color:inherit;text-decoration:none}.site-wrap{max-width:780px;margin:auto;background:var(--paper);min-height:100vh;box-shadow:0 0 0 1px #eae0d9,0 24px 90px #795d5d13;overflow:hidden;position:relative}.site-wrap:before{content:"";position:absolute;inset:0;background-image:radial-gradient(#d9b7b73d 1px,transparent 1px);background-size:20px 20px;pointer-events:none;opacity:.32;z-index:0}.site-wrap>*{position:relative;z-index:1}.ambient{position:fixed;top:17%;font-size:72px;color:#f6bfbb;opacity:.5;pointer-events:none}.ambient-left{left:calc(50% - 540px)}.ambient-right{right:calc(50% - 545px);top:63%;color:#a4d9b9}.topbar{height:76px;display:flex;align-items:center;justify-content:space-between;padding:0 40px;border-bottom:2px dashed #f0dadb;background:#fffaf5}.brand{display:inline-flex;align-items:center;gap:10px;font-weight:1000;font-size:17px;letter-spacing:1.3px;font-family:ui-monospace,monospace}.brand-heart{width:25px;height:25px;background:#f2a4b0;color:white;display:grid;place-items:center;box-shadow:3px 3px 0 #d27b8e,-3px -3px 0 #ffd5db;font-size:15px}.brand-dot{color:var(--rose-dark)}.demo-pill{font-size:11px;background:#fff0e9;border:1.5px solid #edbcc2;padding:5px 11px;color:#a45c69;font-weight:800;letter-spacing:.3px;box-shadow:2px 2px 0 #f0cdd0}.pill-light{display:inline-block;width:6px;height:6px;background:#db8a99;margin-right:3px;box-shadow:2px 0 #f8cad2}
.hero{text-align:center;padding:53px 36px 60px;background:linear-gradient(#fffaf4 0%,#fff7ef 75%,#fff9f2);position:relative}.eyebrow{display:flex;justify-content:center;align-items:center;gap:13px;color:#c48792;letter-spacing:3px;font-family:ui-monospace,monospace;font-weight:900;font-size:11px}.spark{font-size:17px;color:#dfb673}.hero h1{font-size:clamp(43px,8vw,67px);font-weight:1000;letter-spacing:3px;line-height:1.23;margin:15px 0 8px;text-shadow:3px 4px 0 #f8dfe0}.hero h1 .title-highlight{color:#e58c9a}.punct{color:#eab763;font-family:ui-monospace,monospace;margin-left:4px}.hero-subtitle{font-size:14px;color:#927787;letter-spacing:1.2px;margin:0 0 35px;font-weight:600}.game-window{max-width:510px;margin:0 auto;position:relative;border:3px solid var(--line);background:#fbe9e3;box-shadow:7px 7px 0 #d7c1be,11px 11px 0 #f4e5de;text-align:left}.game-window:before,.game-window:after{content:"";height:7px;width:7px;position:absolute;background:var(--line);z-index:5}.game-window:before{top:-7px;left:11px}.game-window:after{right:11px;bottom:-7px}.window-bar{height:34px;border-bottom:3px solid var(--line);background:#f6b8bf;display:flex;align-items:center;justify-content:space-between;padding:0 12px;color:#634a5e;font-size:10px;font-family:monospace;font-weight:1000;letter-spacing:1px}.window-heart{color:#d56b82;font-size:14px;margin-right:5px}.window-controls{display:flex;gap:6px}.window-controls i{width:10px;height:10px;border:2px solid var(--line);background:#ffe8d2}.window-controls i:nth-child(2){background:#f6d88c}.window-controls i:nth-child(3){background:#e58b9c}.pixel-scene{height:270px;position:relative;overflow:hidden;background:linear-gradient(#ffe8d9 0 61%,#f6dbbe 61% 71%,#b7debb 71%);isolation:isolate}.pixel-scene:after{content:"";position:absolute;bottom:0;height:47px;left:0;right:0;background:repeating-linear-gradient(90deg,#8dc99a 0 21px,#9cd7a4 21px 31px,#8dc99a 31px 57px);border-top:9px solid #6baa7f;z-index:1}.pixel-sun{width:70px;height:70px;position:absolute;top:34px;right:19%;background:#f9d47d;box-shadow:0 0 0 9px #fff2c391;clip-path:polygon(16% 0,84% 0,84% 16%,100% 16%,100% 84%,84% 84%,84% 100%,16% 100%,16% 84%,0 84%,0 16%,16% 16%)}.cloud{position:absolute;width:75px;height:21px;background:white;top:48px;left:12%;box-shadow:17px -13px white,42px -5px white,13px 17px white;opacity:.82}.cloud-two{left:auto;right:7%;top:102px;transform:scale(.65)}.sky-star{position:absolute;color:#eaa0ad;font-size:22px;font-weight:bold}.star-one{left:30%;top:21px}.star-two{right:31%;top:79px}.couple-art{position:absolute;z-index:3;width:370px;max-width:94%;height:235px;left:50%;bottom:4px;transform:translateX(-50%)}.couple-art svg{width:100%;height:100%;image-rendering:pixelated;filter:drop-shadow(4px 4px 0 #6f8c7450)}.grass{position:absolute;bottom:17px;z-index:5;color:#fff1a5;text-shadow:3px 2px #d7909b;font-size:26px}.grass-one{left:15%}.grass-two{right:15%}.scene-hearts{position:absolute;z-index:6;top:52px;left:47%;color:#e98d9d;display:flex;align-items:center;gap:8px;transform:translateX(-50%);animation:bob 3s ease-in-out infinite}.scene-hearts b:nth-child(1),.scene-hearts b:nth-child(3){font-size:15px}.scene-hearts b:nth-child(2){font-size:23px}.game-dialogue{min-height:65px;background:#fffcf7;border-top:3px solid var(--line);display:flex;align-items:center;gap:13px;padding:12px 16px;color:#6b596b}.avatar-icon{border:2px solid #b67f91;background:#ffd6d9;width:35px;height:35px;display:grid;place-items:center;font-weight:900;font-size:22px;color:#d56f87;box-shadow:3px 3px 0 #eac8cc;flex-shrink:0}.game-dialogue p{margin:0;font-size:12px;letter-spacing:.4px}.game-dialogue strong{color:#b66d7c}.blink-cursor{animation:blink 1s steps(2) infinite;color:#eaa1a7;margin-left:4px}.couple-names{display:flex;align-items:center;justify-content:center;gap:17px;margin:32px 0 20px}.couple-names>span{font-family:monospace;font-weight:900;letter-spacing:1px;font-size:10px;color:#bb9da3}.couple-names>b{font-size:24px;letter-spacing:2px;font-weight:1000}.couple-names em{font-style:normal;color:#e5a1a6;font-weight:400}.primary-btn{position:relative;display:inline-flex;align-items:center;gap:13px;border:3px solid #685266;background:#f3a7b0;padding:13px 18px 13px 21px;color:#5f435a;box-shadow:5px 5px 0 #cf8493;font-size:14px;font-weight:1000;letter-spacing:.4px;transition:transform .15s,box-shadow .15s}.primary-btn:hover,.primary-btn:focus-visible{transform:translate(2px,2px);box-shadow:3px 3px 0 #cf8493}.primary-btn:active{transform:translate(5px,5px);box-shadow:none}.play-triangle{font-size:12px;color:white;text-shadow:1px 1px #c37c8b}.btn-arrow{font-size:21px;line-height:1;margin-left:8px}.under-button{font-size:11px;color:#b89b9f;margin:18px 0 0}.scroll-hint{display:flex;flex-direction:column;align-items:center;gap:5px;margin:42px auto 0;color:#c5a5a8;font-size:10px;font-family:monospace;letter-spacing:2px;font-weight:900}.scroll-line{width:1px;height:25px;background:#d5b9b9}.scroll-hint span:last-child{font-size:18px;line-height:1}
.section{padding:62px 48px}.section-topline{display:flex;justify-content:space-between;border-top:2px solid #eed8d6;padding:12px 1px 0;font:900 10px/1.3 ui-monospace,monospace;letter-spacing:1.5px;color:#b9999e}.mini-stars{color:#eab37f;font-size:15px}.section-heading{text-align:center;padding:18px 0 37px}.tiny-label{display:inline-block;background:#e5f1e4;color:#5e977c;border:1.5px solid #9cc9a5;padding:3px 12px;font:900 10px/1.5 monospace;letter-spacing:2px;box-shadow:3px 3px 0 #cce5d0}.section-heading h2{font-size:clamp(27px,5vw,39px);font-weight:1000;margin:13px 0 7px;letter-spacing:1px}.section-heading h2 span{color:#e095a0}.section-heading p{color:#93828c;font-size:13px;margin:0;letter-spacing:.6px}
.story{background:#fffaf4}.story-track{position:relative;display:grid;gap:21px}.story-track:before{content:"";position:absolute;left:46px;top:25px;bottom:25px;border-left:4px dotted #eeb7bc}.story-card{display:flex;align-items:center;gap:23px;min-height:133px;background:white;border:2px solid #dccbd0;box-shadow:5px 5px 0 #e6d9d8;padding:20px 20px 20px 17px;position:relative}.story-card-a{transform:rotate(-.5deg)}.story-card-b{transform:rotate(.5deg)}.story-card-c{transform:rotate(-.35deg)}.story-icon{width:62px;height:62px;border:3px solid #5b4c5e;box-shadow:4px 4px 0 #c2b1b8;display:grid;place-items:center;font-size:35px;font-weight:1000;z-index:2;flex-shrink:0}.icon-meet{background:#ffe2e4;color:#e47d93}.icon-journey{background:#e2efe0;color:#75ab8a}.icon-forever{background:#fff0c9;color:#e5b85e}.story-content{flex:1;min-width:0}.story-num{color:#b89ea5;font:900 10px/1.5 monospace;letter-spacing:1.2px}.story-num span{color:#eed2d2;margin-left:8px}.story-content h3{margin:4px 0 4px;font-size:18px;line-height:1.35;font-weight:1000}.story-content p{margin:0;color:#968b91;font-size:12px;line-height:1.7}.story-sticker{position:absolute;right:16px;top:-11px;background:#f5c0c1;color:#9a6170;border:1.5px solid #ad7d85;font-size:10px;font-weight:1000;padding:2px 9px;transform:rotate(5deg);box-shadow:2px 2px 0 #dec4c7}.story-sticker span{color:#e7f7e9}.story-end{margin-top:35px;text-align:center;color:#b18a91;font:900 11px/1.6 monospace;letter-spacing:2px}.story-end span{color:#efabb1;margin:0 8px}
.memories{background:#fff6f4}.memories .section-topline{border-color:#edcad2}.memories .tiny-label{background:#ffe5e7;color:#c17584;border-color:#eab7c1;box-shadow:3px 3px 0 #f2ccd1}.album-toolbar{height:42px;border:2px solid #5f5161;background:#f3c5ca;display:flex;align-items:center;justify-content:space-between;padding:0 15px;box-shadow:4px 4px 0 #ddabb6;color:#5e4e61;font:900 11px/1 monospace;letter-spacing:1px}.tiny-folder{display:inline-block;width:13px;height:10px;background:#fff5df;border:2px solid #766479;position:relative;margin-right:8px}.tiny-folder:before{content:"";height:4px;width:7px;background:#fff5df;position:absolute;left:-2px;top:-6px;border:2px solid #766479;border-bottom:0}.toolbar-right{color:#b95c75}.photo-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-top:20px}.photo-card{padding:9px;background:#fffdf8;border:2px solid #ddcdd1;box-shadow:4px 4px 0 #e8ced3;text-align:left;min-width:0;transition:transform .2s,box-shadow .2s;position:relative}.photo-card:hover,.photo-card:focus-visible{transform:translateY(-4px) rotate(0deg);box-shadow:5px 8px 0 #e7bdc8;outline-color:#d88f9e}.photo-card:nth-child(2n){transform:rotate(.6deg)}.photo-card:nth-child(3n){transform:rotate(-.5deg)}.photo-card:nth-child(2n):hover,.photo-card:nth-child(3n):hover{transform:translateY(-4px)}.photo-feature{grid-column:span 2}.photo-art{display:block;aspect-ratio:1.28;background:#fde9e6;position:relative;overflow:hidden;border:1px solid #ebdfda}.photo-feature .photo-art{aspect-ratio:2.4}.photo-art svg{display:block;width:100%;height:100%;image-rendering:pixelated;shape-rendering:crispEdges}.photo-art:after{content:"示意插画  ·  可替换照片";position:absolute;bottom:9px;left:9px;padding:3px 6px;background:#fff9f0d9;border:1px solid #e9d8d2;font-size:9px;color:#8b7484;letter-spacing:.2px}.photo-meta{display:flex;gap:8px;align-items:center;padding:11px 5px 3px;color:#6e5e6b;font-size:12px;font-weight:1000}.photo-meta b{font:1000 12px monospace;color:#db8e9b}.photo-meta small{margin-left:auto;color:#eea7ad;font-size:16px}.album-note{text-align:center;font-size:11px;color:#b68e9b;margin:28px auto 0;line-height:1.8}.album-note span{color:#eab679}
.invitation{background:linear-gradient(#fffaf3,#ffefeb);padding-bottom:72px}.invitation .section-heading{padding-bottom:40px}.invite-paper{position:relative;max-width:475px;margin:auto;background:#fffdf8;border:3px solid #786171;box-shadow:8px 8px 0 #e2adb4;transform:rotate(-.7deg)}.ticket-edge{position:absolute;height:11px;left:10px;right:10px;background:repeating-linear-gradient(90deg,#fff1e5 0 13px,transparent 13px 24px)}.ticket-edge-top{top:-6px}.ticket-edge-bottom{bottom:-6px}.ticket-inner{border:2px dashed #e7c4c5;margin:12px;padding:26px 25px 18px;text-align:center;background:radial-gradient(#efc9cc66 1px,transparent 1px);background-size:22px 22px}.invite-flag{color:#ad8591;font:900 10px/1.3 monospace;letter-spacing:1.7px}.invite-icon{width:63px;height:60px;display:grid;place-items:center;background:#f6c6cf;color:#d47489;border:3px solid #755e71;box-shadow:4px 4px 0 #e5b8c1;margin:24px auto 20px;font-size:34px}.invite-name{font:1000 31px/1.3 ui-monospace,monospace;letter-spacing:3px;color:#6c5668}.invite-name span{color:#e38e9c;font-size:22px}.invite-paper h3{font-size:19px;line-height:1.85;letter-spacing:2px;margin:15px 0;color:#796473;font-weight:1000}.invite-line{height:2px;margin:23px 0 19px;background:repeating-linear-gradient(90deg,#dbb9bd 0 6px,transparent 6px 13px)}.info-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px 8px}.info-item{text-align:center}.info-key{display:block;color:#b1919b;font:900 10px/1.5 monospace;letter-spacing:.7px;margin-bottom:5px}.info-item strong{display:block;font-size:16px;letter-spacing:.6px;color:#685666}.info-place{grid-column:span 2}.invite-line-bottom{margin:23px 0 14px}.ticket-foot{display:flex;justify-content:space-between;font:900 9px/1.3 monospace;color:#bc9ba5;letter-spacing:1px}.wish-btn{display:flex;align-items:center;justify-content:center;gap:15px;margin:40px auto 0;width:min(100%,342px);background:#a6d7b3;color:#4e735e;border:3px solid #678f79;box-shadow:5px 5px 0 #85b893;font-size:14px;font-weight:1000;padding:13px 15px;transition:transform .15s,box-shadow .15s}.wish-btn:hover,.wish-btn:focus-visible{transform:translate(2px,2px);box-shadow:3px 3px 0 #85b893}.wish-btn span{font-size:20px}.wish-message{font-size:11px;text-align:center;margin:19px 0 0;color:#a9909a;min-height:20px}.wish-message.success{color:#7da689;font-weight:900}.floating-heart{position:fixed;z-index:70;font-size:25px;color:#ed91a4;pointer-events:none;animation:float-heart 1.3s ease-out forwards}
.footer{text-align:center;padding:55px 20px 40px;background:#f5d7d8;border-top:3px solid #e6bac4;color:#825f72}.footer-hearts{font-size:20px;letter-spacing:17px;color:#d88e9e}.footer-hearts span{color:#fff5e7}.footer strong{display:block;font:900 12px/1.6 monospace;letter-spacing:1.7px;margin-top:17px}.footer p{font-size:11px;margin:10px 0 22px;color:#a47586}.footer a{display:inline-block;border-bottom:1px solid #bb8293;font:900 10px/1.5 monospace;padding-bottom:4px;letter-spacing:1px}.footer small{display:block;color:#c496a2;font:900 9px/1.6 monospace;letter-spacing:1.5px;margin-top:31px}
.lightbox[hidden]{display:none}.lightbox{position:fixed;inset:0;z-index:60;display:grid;place-items:center;padding:20px}.lightbox-backdrop{position:absolute;inset:0;background:#342936c9;backdrop-filter:blur(5px)}.lightbox-panel{position:relative;width:min(560px,100%);background:#fffaf3;border:3px solid #59475d;box-shadow:8px 8px 0 #d08fa3;max-height:90vh;overflow:auto}.lightbox-head{background:#f1bfc8;border-bottom:3px solid #59475d;display:flex;align-items:center;justify-content:space-between;padding:7px 9px 7px 15px;color:#654f61;font:900 11px/1.4 monospace;letter-spacing:.8px}.lightbox-head span span{color:#a66b7a;margin-left:10px}.lightbox-head button{width:29px;height:29px;background:#fff5ec;border:2px solid #775d72;font-size:23px;line-height:20px;color:#775d72}.lightbox-art{aspect-ratio:1.5;background:#fff1df}.lightbox-art svg{width:100%;height:100%;display:block;image-rendering:pixelated}.lightbox-caption{display:flex;justify-content:space-between;align-items:end;gap:12px;padding:19px 22px 23px}.lightbox-caption small{color:#bc9aa5;font:900 10px monospace;letter-spacing:1px}.lightbox-caption h3{font-size:19px;margin:2px 0 3px}.lightbox-caption p{font-size:11px;margin:0;color:#a08a96}.lightbox-controls{display:flex;gap:7px}.lightbox-controls button{width:38px;height:36px;border:2px solid #6f5769;background:#f9d0d2;color:#6c5668;font-weight:1000;font-size:18px}.lightbox-controls button:hover{background:#f1acb7}body.modal-open{overflow:hidden}.reveal{opacity:0;translate:0 18px;transition:opacity .5s ease,translate .5s ease}.reveal.visible{opacity:1;translate:0 0}
@keyframes bob{0%,100%{transform:translate(-50%,0)}50%{transform:translate(-50%,-10px)}}@keyframes blink{50%{opacity:0}}@keyframes float-heart{0%{opacity:1;transform:translate(0,0) rotate(0)}100%{opacity:0;transform:translate(var(--dx),-160px) rotate(var(--rot))}}
@media(max-width:780px){.ambient{display:none}.site-wrap{box-shadow:none}.topbar{padding:0 25px}.hero{padding-left:24px;padding-right:24px}.section{padding-left:28px;padding-right:28px}}
@media(max-width:500px){.topbar{height:63px;padding:0 17px}.brand{font-size:13px;gap:7px}.brand-heart{width:19px;height:19px;font-size:12px;box-shadow:2px 2px 0 #d27b8e,-2px -2px 0 #ffd5db}.demo-pill{font-size:9px;padding:4px 6px}.hero{padding:48px 20px 49px}.eyebrow{font-size:9px;letter-spacing:2px;gap:8px}.hero h1{font-size:47px;margin-top:16px;letter-spacing:1px}.hero-subtitle{font-size:11px;letter-spacing:.3px;margin-bottom:29px}.game-window{box-shadow:5px 5px 0 #d7c1be,8px 8px 0 #f4e5de}.pixel-scene{height:233px}.couple-art{height:211px}.pixel-sun{width:48px;height:48px}.cloud{transform:scale(.7);transform-origin:top left;left:8%}.cloud-two{transform:scale(.5)}.scene-hearts{top:42px}.game-dialogue{padding:10px;min-height:61px;gap:9px}.game-dialogue p{font-size:10px}.couple-names{gap:12px;margin:30px 0 20px}.couple-names>span{font-size:8px}.couple-names>b{font-size:21px}.primary-btn{font-size:12px;gap:9px;padding:11px 12px}.under-button{font-size:10px}.scroll-hint{margin-top:34px}.section{padding:49px 20px}.section-heading{padding:16px 0 34px}.section-heading h2{font-size:30px}.section-heading p{font-size:11px}.story-track{gap:20px}.story-card{gap:14px;min-height:123px;padding:15px 11px}.story-icon{width:52px;height:52px;font-size:29px;box-shadow:3px 3px 0 #c2b1b8}.story-track:before{left:38px}.story-content h3{font-size:15px}.story-content p{font-size:10px}.story-num{font-size:9px}.story-sticker{font-size:9px;right:9px}.album-toolbar{font-size:9px;padding:0 9px}.photo-grid{gap:10px}.photo-card{padding:5px;box-shadow:3px 3px 0 #e8ced3}.photo-meta{font-size:10px;padding:8px 2px 3px;gap:5px}.photo-meta small{font-size:12px}.photo-art:after{font-size:7px;bottom:5px;left:5px;padding:2px 3px}.album-note{font-size:10px}.invite-paper{box-shadow:6px 6px 0 #e2adb4}.ticket-inner{margin:8px;padding:24px 11px 15px}.invite-name{font-size:27px}.invite-paper h3{font-size:16px}.info-item strong{font-size:14px}.info-key{font-size:9px}.wish-btn{font-size:12px}.footer{padding:48px 15px 36px}.footer strong{font-size:10px}.lightbox{padding:13px}.lightbox-head{font-size:9px}.lightbox-caption{padding:16px 12px}.lightbox-caption h3{font-size:17px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}.reveal{opacity:1;translate:none}}

/* The three adventure checkpoints are real links into their own photo chapters. */
.story-card{cursor:pointer;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}
.story-card:hover,.story-card:focus-visible{transform:translate(2px,-3px) rotate(0);box-shadow:6px 8px 0 #e5c7cb;border-color:#d58c9d;outline:none}
.story-card:active{transform:translate(4px,2px);box-shadow:2px 2px 0 #e5c7cb}
.story-jump{display:inline-block;margin-top:7px;color:#cc7f91;font:900 10px/1.5 ui-monospace,monospace;letter-spacing:.6px;border-bottom:1px dotted #dda0ad}
.chapter-divider{text-align:center;margin:47px 0 27px;color:#bc929e;font:900 11px/1.4 ui-monospace,monospace;letter-spacing:1.8px}
.chapter-divider span{color:#e7a4b1;font-size:11px;margin:0 9px}
.story-gallery{display:grid;gap:25px}
.chapter-panel{background:#fffef9;border:2px solid #d7c5c9;box-shadow:6px 6px 0 #e9d7d7;padding:15px;display:grid;grid-template-columns:.86fr 1.14fr;gap:21px;align-items:center;scroll-margin-top:22px;position:relative}
.chapter-panel:target{border-color:#d68fa0;box-shadow:6px 6px 0 #efbbc5}
.chapter-panel:target:before{content:"★ NOW PLAYING";position:absolute;top:-13px;right:14px;background:#f2b4be;color:#8a5666;padding:3px 10px;font:900 9px/1 monospace;letter-spacing:1px;border:1.5px solid #a97788}
.chapter-panel-alt{background:#f3faf2;border-color:#b8d8bf}
.chapter-panel-alt:target{border-color:#89b99a;box-shadow:6px 6px 0 #bee4c8}
.chapter-panel-alt:target:before{background:#bfdfc7;color:#5d8b6b;border-color:#88b395}
.chapter-panel-alt .chapter-info{order:2}
.chapter-panel-alt .chapter-photo{order:1}
.chapter-info{padding:8px 5px}
.chapter-kicker{color:#c18e9c;display:block;font:900 9px/1.5 monospace;letter-spacing:1.1px}
.chapter-info h3{font-size:24px;line-height:1.25;letter-spacing:.7px;margin:11px 0 10px;font-weight:1000}
.chapter-info h3 span{color:#e6a1ad;font-size:18px}
.chapter-info p{font-size:12px;line-height:1.9;color:#8d7d86;margin:0 0 14px}
.chapter-note{display:block;color:#ba9ca6;font-size:10px;border-left:3px solid #efc7cf;padding-left:8px;margin-bottom:16px}
.back-map{display:inline-block;color:#b77c8a;font:900 10px/1.5 ui-monospace,monospace;border-bottom:1px solid #dba6b0;padding-bottom:2px}
.back-map:hover,.back-map:focus-visible{color:#8e5163}
.chapter-photo{position:relative;background:#fff4ea;border:2px solid #8f7482;padding:6px;box-shadow:4px 4px 0 #cfb6bc}
.chapter-photo-art{aspect-ratio:1.36;background:#ffece7;overflow:hidden}
.chapter-photo-art svg{display:block;width:100%;height:100%;image-rendering:pixelated}
.chapter-photo-mark{position:absolute;bottom:12px;right:12px;background:#fffaf1e8;color:#8f7786;border:1px solid #d8bcc6;padding:3px 6px;font:900 9px/1.2 monospace;letter-spacing:.4px}
@media(max-width:500px){
  .story-jump{font-size:9px;margin-top:6px}
  .chapter-divider{margin:37px 0 22px;font-size:9px}
  .chapter-panel{grid-template-columns:1fr;gap:10px;padding:12px}
  .chapter-panel-alt .chapter-info,.chapter-panel-alt .chapter-photo{order:initial}
  .chapter-info{padding:8px 4px 0}
  .chapter-info h3{font-size:22px;margin:7px 0 8px}
  .chapter-info p{font-size:11px;margin-bottom:9px}
  .chapter-note{font-size:9px;display:inline-block;margin-right:10px;margin-bottom:10px}
  .back-map{font-size:9px}
  .chapter-photo-art{aspect-ratio:1.55}
}

/* A pixel-wedding curtain opening, deliberately unhurried like a little ceremony. */
.ceremony-overlay[hidden]{display:none}
.ceremony-overlay{position:fixed;inset:0;z-index:100;overflow:hidden;background:#fff5e9;display:grid;place-items:center;opacity:1;transition:opacity .7s ease}
.ceremony-overlay.is-exiting{opacity:0;pointer-events:none}
.ceremony-stage{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;background:radial-gradient(circle at 50% 35%,#fffdf7 0,#fff3e9 51%,#f9dce3 100%);overflow:hidden;opacity:.3;transform:scale(.9);transition:opacity 1.4s ease .65s,transform 2.1s ease .65s}
.ceremony-overlay.is-opening .ceremony-stage{opacity:1;transform:scale(1)}
.ceremony-stage:before,.ceremony-stage:after{content:"";position:absolute;bottom:0;width:24%;height:35%;background:repeating-linear-gradient(90deg,#b9d6b6 0 24px,#a8cda9 24px 48px);opacity:.46;clip-path:polygon(0 14%,15% 14%,15% 0,34% 0,34% 17%,52% 17%,52% 0,68% 0,68% 12%,100% 12%,100% 100%,0 100%)}
.ceremony-stage:before{left:0}.ceremony-stage:after{right:0}
.ceremony-sky-sparkles{position:absolute;top:13%;color:#e6ae88;font-size:20px;letter-spacing:30px;animation:gentle-glimmer 2.5s ease-in-out infinite}
.ceremony-sky-sparkles span{color:#e897a9;font-size:30px}
.ceremony-pixel-arch{position:relative;width:min(330px,72vw);height:215px;margin-top:-9vh;border:11px solid #91b99a;border-bottom:0;box-shadow:7px 0 0 #d2e2c1,-7px 0 0 #d2e2c1;clip-path:polygon(0 18%,11% 18%,11% 10%,22% 10%,22% 4%,78% 4%,78% 10%,89% 10%,89% 18%,100% 18%,100% 100%,0 100%);background:linear-gradient(#ffe9e1,#fffaf0 70%,#cee8cd 71%)}
.arch-flowers{position:absolute;top:2px;left:0;right:0;z-index:4;font-size:27px;color:#f09aad;letter-spacing:17px;text-shadow:4px 3px #ffe1a3}
.arch-flowers span{color:#e78e9e}
.arch-couple{position:absolute;inset:11px 0 -5px;display:grid;place-items:end center}
.arch-couple svg{width:320px;max-width:100%;height:205px;image-rendering:pixelated}
.ceremony-copy{z-index:2;margin-top:17px;padding:0 20px;opacity:0;transform:translateY(14px);transition:opacity 1s ease,transform 1s ease}
.ceremony-overlay.is-revealed .ceremony-copy{opacity:1;transform:translateY(0)}
.ceremony-label{font:1000 11px/1.4 ui-monospace,monospace;letter-spacing:3px;color:#c58091}
.ceremony-copy h2{font-size:clamp(28px,5.8vw,43px);line-height:1.45;letter-spacing:2px;margin:12px 0 10px;color:#664f63;text-shadow:3px 3px #fbe0e3}
.ceremony-copy h2 span{color:#e5909f}
.ceremony-copy p{font-size:12px;letter-spacing:1.3px;color:#a68b98;margin:0}
.ceremony-curtain{position:absolute;z-index:6;top:-3%;bottom:-3%;width:calc(50% + 9px);background:repeating-linear-gradient(90deg,#e6a1b4 0 18px,#f0b8c5 18px 34px,#e9a4b4 34px 42px,#d98ca3 42px 48px);box-shadow:inset 0 -25px 0 #dc8da3,inset 0 -35px 0 #f6c9d0;transition:transform 2.7s cubic-bezier(.64,.01,.22,1);filter:drop-shadow(6px 0 0 #ad758f)}
.ceremony-curtain:before{content:"";position:absolute;top:10%;bottom:14%;width:14px;background:#f9d99b;box-shadow:0 0 0 5px #d58e9d}
.ceremony-curtain:after{content:"";position:absolute;bottom:7%;width:100%;height:21px;background:repeating-linear-gradient(90deg,#f7d6dd 0 15px,transparent 15px 30px)}
.ceremony-curtain-left{left:0;border-right:4px solid #8f6379}.ceremony-curtain-right{right:0;border-left:4px solid #8f6379}
.ceremony-curtain-left:before{right:14%}.ceremony-curtain-right:before{left:14%}
.ceremony-overlay.is-opening .ceremony-curtain-left{transform:translateX(-104%)}
.ceremony-overlay.is-opening .ceremony-curtain-right{transform:translateX(104%)}
.curtain-tassel{position:absolute;top:31%;font-size:40px;color:#ffedd9;text-shadow:4px 4px #d18ca2}
.ceremony-curtain-left .curtain-tassel{right:18%}.ceremony-curtain-right .curtain-tassel{left:18%}
.curtain-seal{position:absolute;z-index:8;width:90px;height:85px;display:grid;place-items:center;background:#fbe7ce;color:#d87996;border:5px solid #836478;box-shadow:7px 7px 0 #bb8297;clip-path:polygon(15% 0,85% 0,85% 12%,100% 12%,100% 88%,85% 88%,85% 100%,15% 100%,15% 88%,0 88%,0 12%,15% 12%);font-size:46px;transition:transform .7s ease .2s,opacity .6s ease .2s}
.ceremony-overlay.is-opening .curtain-seal{transform:scale(.4) rotate(18deg);opacity:0}
.ceremony-petals{position:absolute;inset:0;z-index:9;pointer-events:none;overflow:hidden}
.petal-bit{position:absolute;top:-30px;left:var(--petal-left);color:var(--petal-color);font-size:var(--petal-size);opacity:0;text-shadow:2px 2px #fff7e6;animation:petal-rain var(--petal-duration) linear var(--petal-delay) forwards}
.ceremony-skip{position:absolute;top:max(20px,env(safe-area-inset-top));right:24px;z-index:12;background:#fff9eddd;border:2px solid #c591a4;color:#8c657a;box-shadow:3px 3px 0 #d6a1ad;padding:7px 12px;font:900 11px/1.4 monospace;letter-spacing:1px;transition:transform .16s ease,background .16s ease}
.ceremony-skip:hover,.ceremony-skip:focus-visible{background:#ffecdd;transform:translateY(-2px)}
.ceremony-skip:active{transform:translate(2px,2px);box-shadow:1px 1px 0 #d6a1ad}
.ceremony-invite-note{position:absolute;bottom:max(26px,env(safe-area-inset-bottom));left:0;right:0;text-align:center;z-index:4;color:#af8898;font:900 10px monospace;letter-spacing:1.5px}
.primary-btn.is-starting{transform:translate(5px,5px);box-shadow:none;background:#e8b0be}
.primary-btn:focus-visible,.wish-btn:focus-visible,.photo-card:focus-visible,.lightbox-controls button:focus-visible,.lightbox-head button:focus-visible,.footer a:focus-visible,.brand:focus-visible{outline:3px dashed #d7879a;outline-offset:5px}

/* Different micro-interactions for each invitation control. */
.interaction-toast{position:fixed;top:10%;left:50%;z-index:120;transform:translate(-50%,-15px) scale(.9);opacity:0;pointer-events:none;max-width:90vw;white-space:nowrap;background:#fff9ef;border:2px solid #c78d9c;color:#99667b;padding:9px 15px;box-shadow:4px 4px 0 #ecc0ca;font:1000 12px/1.4 "PingFang SC",sans-serif;letter-spacing:.6px;transition:opacity .2s ease,transform .2s ease}
.interaction-toast.is-showing{opacity:1;transform:translate(-50%,0) scale(1)}
.interaction-toast[data-mood="flower"]{border-color:#91c3a2;color:#658d75;box-shadow:4px 4px 0 #cce6d1}
.interaction-toast[data-mood="ring"]{border-color:#dfc07a;color:#a28343;box-shadow:4px 4px 0 #f4e0ae}
.interaction-toast[data-mood="blue"]{border-color:#98b9c8;color:#618b9e;box-shadow:4px 4px 0 #d6eaf1}
.fx-particle{position:fixed;z-index:119;pointer-events:none;left:var(--fx-x);top:var(--fx-y);font-size:var(--fx-size);color:var(--fx-color);font-weight:1000;text-shadow:2px 2px #fff9ef;animation:fx-bloom .95s cubic-bezier(.18,.75,.28,1) forwards}
.story-card.is-tapped{box-shadow:3px 3px 0 #d7adb9;border-color:#e297a8}
.story-card-a.is-tapped .story-icon{animation:checkpoint-heart .6s ease}
.story-card-b.is-tapped .story-icon{animation:checkpoint-flower .7s ease}
.story-card-c.is-tapped .story-icon{animation:checkpoint-ring .7s ease}
.story-card .story-jump{transition:color .15s,letter-spacing .2s}
.story-card:hover .story-jump{color:#ad6379;letter-spacing:1px}
.photo-card.is-flashing:before{content:"✦ SNAP!";position:absolute;z-index:8;inset:7px;display:grid;place-items:center;background:#fffdf7e8;color:#b77c93;font:1000 17px monospace;letter-spacing:2px;animation:camera-flash .34s ease forwards;pointer-events:none}
.photo-card.is-flashing{transform:translate(2px,2px) rotate(0);box-shadow:2px 2px 0 #deb3bf}
.lightbox-panel{transform-origin:center;animation:album-open .32s cubic-bezier(.2,.8,.3,1)}
.lightbox-panel.is-closing{animation:album-close .21s ease-in forwards}
.lightbox-art.page-next svg{animation:page-from-right .32s ease}
.lightbox-art.page-prev svg{animation:page-from-left .32s ease}
.lightbox-controls button{transition:background .14s,transform .14s,box-shadow .14s}
.lightbox-controls button:hover{transform:translateY(-2px);box-shadow:2px 3px 0 #e1b4c0}
.lightbox-controls button:active{transform:translateY(2px);box-shadow:none}
.lightbox-head button{transition:transform .2s,background .2s}
.lightbox-head button:hover{background:#f5d3d9;transform:rotate(90deg)}
.back-map{transition:color .15s,transform .15s,letter-spacing .15s}
.back-map:hover,.back-map:focus-visible{transform:translateY(-2px);letter-spacing:.5px}
.back-map:active{transform:translateY(1px)}
.brand-heart.is-pulsing{animation:brand-heartbeat .62s ease}
.footer a.is-lifting{animation:footer-balloon .65s ease}
.wish-btn.is-bouncing{animation:wish-bounce .6s ease}
@keyframes petal-rain{0%{transform:translate(0,-40px) rotate(0);opacity:0}12%{opacity:1}90%{opacity:1}100%{transform:translate(var(--petal-drift),110vh) rotate(var(--petal-rotate));opacity:0}}
@keyframes gentle-glimmer{50%{opacity:.5;transform:translateY(-7px)}}
@keyframes fx-bloom{0%{opacity:0;transform:translate(0,0) scale(.35) rotate(0)}25%{opacity:1}100%{opacity:0;transform:translate(var(--fx-dx),var(--fx-dy)) scale(.85) rotate(var(--fx-rotate))}}
@keyframes checkpoint-heart{0%,100%{transform:scale(1)}40%{transform:scale(1.23) rotate(-7deg)}70%{transform:scale(.93)}}
@keyframes checkpoint-flower{0%{transform:scale(.75) rotate(-20deg)}65%{transform:scale(1.25) rotate(25deg)}100%{transform:scale(1) rotate(0)}}
@keyframes checkpoint-ring{0%{transform:rotate(-8deg) scale(.9)}50%{transform:rotate(12deg) scale(1.22)}100%{transform:rotate(0) scale(1)}}
@keyframes camera-flash{0%{opacity:0;transform:scale(.95)}30%{opacity:1}100%{opacity:0;transform:scale(1.04)}}
@keyframes album-open{from{opacity:0;transform:scale(.86) rotate(-2deg)}to{opacity:1;transform:scale(1) rotate(0)}}
@keyframes album-close{to{opacity:0;transform:scale(.9) rotate(3deg)}}
@keyframes page-from-right{from{opacity:.5;transform:translateX(23px) scale(.98)}to{opacity:1;transform:translateX(0) scale(1)}}
@keyframes page-from-left{from{opacity:.5;transform:translateX(-23px) scale(.98)}to{opacity:1;transform:translateX(0) scale(1)}}
@keyframes brand-heartbeat{0%,100%{transform:scale(1)}35%{transform:scale(1.3) rotate(-9deg)}65%{transform:scale(.9) rotate(8deg)}}
@keyframes footer-balloon{45%{transform:translateY(-8px) rotate(-3deg)}100%{transform:translateY(0)}}
@keyframes wish-bounce{0%,100%{transform:translateY(0)}30%{transform:translateY(-7px) rotate(-1deg)}65%{transform:translateY(2px)}}
@media(max-width:500px){
  .ceremony-pixel-arch{height:190px;width:78vw;max-width:300px;margin-top:-6vh}
  .arch-couple svg{height:190px}
  .ceremony-copy h2{font-size:29px}
  .ceremony-copy p{font-size:11px}
  .ceremony-sky-sparkles{top:11%;font-size:17px}
  .ceremony-skip{right:14px;top:max(14px,env(safe-area-inset-top));font-size:10px}
  .ceremony-label{font-size:9px;letter-spacing:2px}
  .ceremony-invite-note{font-size:8px;letter-spacing:.8px}
  .interaction-toast{top:7%;font-size:11px;padding:8px 10px}
}
@media(prefers-reduced-motion:reduce){
  .ceremony-overlay,.ceremony-curtain,.ceremony-stage,.ceremony-copy,.curtain-seal,.interaction-toast{transition:none!important}
  .ceremony-overlay.is-opening .ceremony-curtain{display:none}
  .ceremony-overlay.is-revealed .ceremony-copy{opacity:1;transform:none}
  .fx-particle,.petal-bit{display:none}
}

/* Revised scene flow: fade into a closed curtain, open onto the actual map behind it. */
.story-card{width:100%;text-align:left}
.ceremony-overlay{background-color:rgba(255,248,239,1);opacity:0;transition:opacity .7s ease,background-color 2.2s ease}
.ceremony-overlay.is-visible{opacity:1}
.ceremony-overlay.is-opening{background-color:rgba(255,248,239,0)}
.ceremony-overlay.is-exiting{opacity:0;pointer-events:none}
.ceremony-softveil{position:absolute;inset:0;z-index:1;background:radial-gradient(circle at 50% 48%,#fffdf6 0%,#fff2e8 65%,#f6d5dc 100%);opacity:1;transition:opacity 2.2s ease;pointer-events:none}
.ceremony-overlay.is-opening .ceremony-softveil{opacity:0}
.ceremony-curtain{opacity:0;transition:transform 2.45s cubic-bezier(.58,.01,.22,1),opacity .7s ease}
.ceremony-overlay.is-visible .ceremony-curtain{opacity:1}
.curtain-seal{opacity:0;transition:opacity .55s ease,transform .6s ease}
.ceremony-overlay.is-visible .curtain-seal{opacity:1}
.ceremony-overlay.is-opening .curtain-seal{opacity:0;transform:scale(.72) rotate(18deg)}
.ceremony-opening-copy{position:absolute;z-index:8;top:calc(50% + 85px);left:0;right:0;text-align:center;color:#fff9e8;text-shadow:2px 2px #b6768d;font:1000 12px/1.6 "PingFang SC",sans-serif;letter-spacing:1.7px;opacity:0;transform:translateY(7px);transition:opacity .6s ease,transform .6s ease;pointer-events:none}
.ceremony-overlay.is-visible .ceremony-opening-copy{opacity:1;transform:translateY(0)}
.ceremony-overlay.is-opening .ceremony-opening-copy{opacity:0;transform:translateY(-9px)}

/* Three story chapters are true subpages with an obvious, sticky return control. */
.chapter-viewer[hidden]{display:none}
.chapter-viewer{position:fixed;inset:0;z-index:85;overflow-y:auto;overscroll-behavior:contain;background:#fff8ef;opacity:1;transition:opacity .35s ease,transform .35s ease}
.chapter-viewer.is-closing{opacity:0;transform:translateY(20px);pointer-events:none}
.chapter-view-shell{max-width:780px;margin:0 auto;min-height:100vh;background:radial-gradient(#eed1d444 1px,transparent 1px),linear-gradient(#fff9f0,#ffeef0);background-size:18px 18px,auto;box-shadow:0 0 0 1px #ead7d6;animation:album-open .38s ease}
.chapter-view-topbar{position:sticky;top:0;z-index:6;display:flex;justify-content:space-between;align-items:center;gap:12px;padding:15px 30px;background:#fff8efd9;backdrop-filter:blur(8px);border-bottom:2px dashed #e8c2ca}
.chapter-back-btn{border:2px solid #a8788a;background:#f6cad1;color:#765668;box-shadow:3px 3px 0 #d6a2b0;padding:9px 15px;font-size:13px;font-weight:1000;transition:transform .15s,box-shadow .15s,background .15s}
.chapter-back-btn span{font-size:20px;vertical-align:-2px;margin-right:5px}
.chapter-back-btn:hover,.chapter-back-btn:focus-visible{transform:translateY(-2px);background:#f4b8c4;outline-color:#d28c9f}
.chapter-back-btn:active{transform:translate(3px,3px);box-shadow:none}
.chapter-level{color:#bb91a0;font:1000 11px monospace;letter-spacing:1px;white-space:nowrap}
.chapter-view-body{text-align:center;max-width:630px;margin:0 auto;padding:53px 25px 75px}
.chapter-view-kicker{font:900 10px monospace;color:#b88b9a;letter-spacing:2px;margin:0 0 12px}
.chapter-view-body h2{font-size:clamp(35px,7vw,51px);font-weight:1000;letter-spacing:3px;color:#614d60;text-shadow:3px 4px #f5dce1;margin:5px 0}
.chapter-view-body h2 span{font-size:.65em;color:#e78da3}
.chapter-view-intro{font-size:13px;color:#927d8b;line-height:1.85;margin:6px auto 27px;max-width:500px}
.chapter-view-frame{position:relative;padding:10px;background:#fffdf8;border:3px solid #705769;box-shadow:7px 7px 0 #deb2bb;margin:0 auto}
.chapter-view-art{aspect-ratio:1.48;overflow:hidden;background:#ffe8dc}
.chapter-view-art svg{display:block;width:100%;height:100%;image-rendering:pixelated}
.chapter-view-stamp{position:absolute;bottom:18px;right:18px;background:#fffaf1ed;border:1.5px solid #ddb2bd;color:#aa8391;padding:5px 9px;font:900 10px monospace;letter-spacing:.4px}
.chapter-view-note{color:#b1909a;font-size:11px;margin:25px 0 28px}
.chapter-next-btn{background:#b5ddc1;border:3px solid #759a84;color:#567761;box-shadow:4px 4px 0 #95c2a4;padding:11px 18px;font-size:14px;font-weight:1000;transition:transform .16s,box-shadow .16s}
.chapter-next-btn span{margin-left:12px;font-size:19px}
.chapter-next-btn:hover,.chapter-next-btn:focus-visible{background:#a4d6b1;transform:translateY(-2px);outline-color:#81b696}
.chapter-next-btn:active{transform:translate(4px,4px);box-shadow:none}
.chapter-view-body.is-changing{animation:chapter-turn .36s ease}
@keyframes chapter-turn{0%{opacity:.4;transform:translateX(16px)}100%{opacity:1;transform:translateX(0)}}
@media(max-width:500px){
  .ceremony-opening-copy{font-size:10px;letter-spacing:.8px;top:calc(50% + 74px)}
  .chapter-view-topbar{padding:12px 16px}
  .chapter-back-btn{font-size:11px;padding:7px 9px}
  .chapter-level{font-size:9px}
  .chapter-view-body{padding:45px 19px 60px}
  .chapter-view-body h2{font-size:38px}
  .chapter-view-intro{font-size:12px}
  .chapter-view-frame{padding:6px;box-shadow:5px 5px 0 #deb2bb}
  .chapter-view-art{aspect-ratio:1.15}
  .chapter-view-note{font-size:10px}
  .chapter-next-btn{font-size:12px}
}
@media(prefers-reduced-motion:reduce){
  .chapter-viewer,.ceremony-overlay,.ceremony-curtain,.ceremony-softveil,.ceremony-opening-copy{transition:none!important}
}

/* Optional wedding easter eggs: discoverable, but never interrupt the invitation. */
.couple-art{padding:0;border:0;background:transparent;cursor:pointer}
.couple-art .couple-portrait{display:block;height:100%;width:100%;object-fit:contain;object-position:center bottom;image-rendering:pixelated;filter:drop-shadow(3px 4px 0 #a7818460);transition:filter .25s ease,transform .25s ease;pointer-events:none}
.couple-art:hover .couple-portrait,.couple-art:focus-visible .couple-portrait{filter:drop-shadow(4px 6px 0 #ba829164) drop-shadow(0 0 9px #fff6df);transform:translateY(-3px)}
.couple-art.is-hello .couple-portrait{animation:pixel-greeting .65s ease}
.couple-art:hover svg,.couple-art:focus-visible svg{filter:drop-shadow(4px 4px 0 #6f8c7450) drop-shadow(0 0 10px #ffeff0)}
.couple-art:focus-visible{outline:3px dashed #dc8c9f;outline-offset:-6px}
.couple-art.is-hello svg{animation:pixel-greeting .65s ease}
.couple-tap-hint{position:absolute;right:10px;bottom:49px;z-index:6;color:#7f937c;background:#fff9dfdc;border:1.5px solid #b2c9a8;box-shadow:2px 2px 0 #88ae8b;padding:3px 7px;font-size:9px;font-weight:1000;pointer-events:none}
.couple-speech[hidden]{display:none}
.couple-speech{position:absolute;left:7%;top:14px;z-index:8;max-width:155px;background:#fffaf2;border:2px solid #986f83;box-shadow:3px 3px 0 #e2aeba;color:#ab6b82;font-size:11px;line-height:1.4;font-weight:1000;padding:8px 10px;animation:secret-pop .24s ease}
.couple-speech:after{content:"";position:absolute;bottom:-10px;left:25px;border:5px solid transparent;border-top-color:#986f83}
.love-box{display:flex;align-items:center;gap:15px;width:min(100%,415px);margin:35px auto 0;padding:15px 16px 15px 13px;text-align:left;background:#fff0d9;border:3px solid #8d6f7d;box-shadow:5px 5px 0 #e7c8be;color:#6d5868;transition:transform .18s,box-shadow .18s,background .18s}
.love-box:hover,.love-box:focus-visible{transform:translateY(-4px);background:#ffe9d3;box-shadow:6px 8px 0 #e4b7b3;outline:none}
.love-box:active{transform:translate(3px,3px);box-shadow:2px 2px 0 #e4b7b3}
.pixel-chest{position:relative;width:65px;height:58px;flex-shrink:0;filter:drop-shadow(3px 3px 0 #d1a08c)}
.chest-lid{position:absolute;top:7px;left:4px;width:55px;height:20px;background:#f4b6a6;border:4px solid #72566a;box-shadow:inset 0 6px #fbe2c0;transform-origin:7px 15px;transition:transform .35s ease}
.chest-body{position:absolute;top:25px;left:1px;width:61px;height:31px;background:#e9ba74;border:4px solid #72566a;box-shadow:inset 0 -8px #dca06b,inset 9px 0 #f7cf8c,inset -9px 0 #f7cf8c}
.chest-lock{position:absolute;top:26px;left:25px;font-style:normal;font-size:17px;color:#e4839a;text-shadow:1px 1px white}
.love-box:hover .chest-lid,.love-box.is-opening-chest .chest-lid{transform:translateY(-6px) rotate(-13deg)}
.love-box-copy{display:flex;flex-direction:column;gap:2px;flex:1}
.love-box-copy small{font:900 9px monospace;letter-spacing:1px;color:#bd8e99}
.love-box-copy strong{font-size:17px;font-weight:1000;line-height:1.35}
.love-box-copy em{font-size:11px;font-style:normal;color:#ad91a0}
.love-box-arrow{font-size:22px;color:#b98594;font-weight:1000}
.fortune-dialog[hidden]{display:none}
.fortune-dialog{position:fixed;inset:0;z-index:92;display:grid;place-items:center;padding:18px}
.fortune-backdrop{position:absolute;inset:0;background:#413345ca;backdrop-filter:blur(4px)}
.fortune-panel{position:relative;width:min(470px,100%);border:3px solid #705869;background:#fff7ed;box-shadow:7px 7px 0 #d996a9;animation:album-open .34s ease}
.fortune-panel.is-closing{animation:album-close .23s ease forwards}
.fortune-topline{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:10px 13px;border-bottom:3px solid #705869;background:#f4bec6;color:#775769;font:900 10px monospace;letter-spacing:1px}
.fortune-topline span:last-child{color:#ac657b}
.fortune-card{text-align:center;margin:17px;padding:21px 17px 24px;border:2px dashed #dfb5bf;background:#fffdf7;background-image:radial-gradient(#f2d3d6 1px,transparent 1px);background-size:22px 22px}
.fortune-sparkles{color:#dca477;letter-spacing:14px;font-size:17px}
.fortune-badge{width:77px;height:70px;display:grid;place-items:center;margin:18px auto;background:#f9d9b5;border:3px solid #8b697b;box-shadow:5px 5px 0 #e5acb8;font-size:34px}
.fortune-label{font:900 10px monospace;letter-spacing:2px;color:#bc8b99}
.fortune-card h2{font-size:26px;line-height:1.4;color:#8b596d;margin:10px 0 8px}
.fortune-card p{font-size:14px;color:#877483;line-height:1.9;margin:0 auto;max-width:300px;min-height:54px}
.fortune-ticket{margin:22px auto 0;border-top:2px dashed #e8bdc5;padding-top:13px;color:#bb94a1;font:900 10px monospace;letter-spacing:1px}
.fortune-ticket span{color:#d6879c}
.fortune-actions{display:flex;gap:12px;padding:0 18px 22px}
.fortune-actions button{flex:1;padding:11px 8px;font-weight:1000;font-size:12px;border:2px solid #806478;box-shadow:3px 3px 0 #e1b9c1;background:#f8d5db;color:#7a536b;transition:transform .15s,background .15s}
.fortune-actions button:last-child{background:#bee1c5;border-color:#739f81;color:#53785e;box-shadow:3px 3px 0 #a6c8ad}
.fortune-actions button:hover,.fortune-actions button:focus-visible{transform:translateY(-3px);filter:saturate(1.1)}
.fortune-actions button:active{transform:translate(2px,2px);box-shadow:none}
.fortune-card.is-new-ticket{animation:secret-pop .36s ease}
.invite-icon{padding:0;cursor:pointer;transition:transform .2s,box-shadow .2s,background .2s}
.invite-icon:hover,.invite-icon:focus-visible{background:#f9b8c4;transform:rotate(-8deg) scale(1.08);outline:2px dashed #c78998;outline-offset:5px}
.invite-icon.is-unlocking{animation:seal-unlock .6s ease}
.secret-vow[hidden]{display:none}
.secret-vow{margin:18px auto 12px;padding:15px 12px;background:#fff0eb;border:2px dashed #d9a2ac;box-shadow:3px 3px 0 #eed0d2;color:#846679;animation:secret-pop .38s ease}
.secret-vow>span{display:block;color:#c58195;font:900 9px monospace;letter-spacing:1px}
.secret-vow p{font-size:13px;font-weight:900;line-height:1.85;margin:8px 0}
.secret-vow small{font-size:10px;color:#b68a9b}
.footer .easter-hint{margin:3px 0 21px;font-size:10px;color:#bd879c;letter-spacing:.4px}
@keyframes secret-pop{from{opacity:0;transform:translateY(10px) scale(.92)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes pixel-greeting{0%,100%{transform:translateY(0) rotate(0)}25%{transform:translateY(-9px) rotate(-3deg)}60%{transform:translateY(-2px) rotate(2deg)}}
@keyframes seal-unlock{0%,100%{transform:scale(1) rotate(0)}30%{transform:scale(1.25) rotate(-15deg)}70%{transform:scale(.9) rotate(11deg)}}
@media(max-width:500px){
  .couple-tap-hint{right:7px;bottom:47px;font-size:8px}
  .couple-speech{max-width:130px;font-size:10px;top:12px;left:5%}
  .love-box{padding:12px 10px;gap:9px;margin-top:28px}
  .love-box-copy strong{font-size:15px}
  .love-box-copy em{font-size:9px}
  .love-box-copy small{font-size:8px}
  .pixel-chest{transform:scale(.83);transform-origin:left center;width:54px}
  .fortune-card{margin:12px;padding:18px 11px}
  .fortune-actions{gap:8px;padding:0 12px 17px}
  .fortune-actions button{font-size:11px}
  .fortune-card h2{font-size:22px}
  .fortune-card p{font-size:12px}
}
@media(prefers-reduced-motion:reduce){
  .couple-art.is-hello svg,.invite-icon.is-unlocking,.fortune-card.is-new-ticket{animation:none!important}
}

/* Five-frame pixel wedding photo booth: a shutter flash, a little pose jump and a stamp. */
.pose-camera-flash{position:absolute;inset:0;z-index:7;pointer-events:none;opacity:0;background:#fffef4}
.pixel-scene.is-snapping .pose-camera-flash{animation:camera-click-flash .43s ease-out both}
.couple-art.is-posing .couple-portrait{animation:photo-pose-bounce .52s cubic-bezier(.2,.8,.25,1)}
.couple-speech.is-speaking{animation:secret-pop .36s ease both}
.pose-stamp[hidden]{display:none}
.pose-stamp{position:absolute;right:12px;top:9px;z-index:9;padding:5px 8px;background:#fff9e9;border:2px solid #94758a;box-shadow:3px 3px 0 #e3b4b7;color:#bb788e;font:1000 10px/1.3 ui-monospace,monospace;letter-spacing:.2px;pointer-events:none}
.pose-stamp.is-stamped{animation:pose-stamp-in .38s steps(4,end) both}
@keyframes camera-click-flash{0%,100%{opacity:0}16%{opacity:.88}34%{opacity:.2}48%{opacity:.47}72%{opacity:0}}
@keyframes photo-pose-bounce{0%{transform:translateY(9px) scale(.93);opacity:.7}38%{transform:translateY(-9px) scale(1.045);opacity:1}70%{transform:translateY(2px) scale(.99)}100%{transform:translateY(0) scale(1)}}
@keyframes pose-stamp-in{0%{opacity:0;transform:rotate(-10deg) scale(1.25)}60%{opacity:1;transform:rotate(3deg) scale(.94)}100%{opacity:1;transform:rotate(-2deg) scale(1)}}
@media(max-width:500px){
  .pose-stamp{right:6px;top:5px;font-size:8px;padding:3px 5px}
  .couple-speech{max-width:155px}
}
@media(prefers-reduced-motion:reduce){
  .pixel-scene.is-snapping .pose-camera-flash,.couple-art.is-posing .couple-portrait,.couple-speech.is-speaking,.pose-stamp.is-stamped{animation:none!important}
}

/* Two real-pet-inspired chibi pixel cats flank the couple, each with its own tap surprise. */
.cat-companion{position:absolute;z-index:5;border:0;padding:0;background:none;cursor:pointer;display:block;transform-origin:center bottom;touch-action:manipulation}
.cat-companion img{width:100%;height:100%;display:block;object-fit:contain;object-position:center bottom;image-rendering:pixelated;filter:drop-shadow(2px 3px 0 #6a6b6255);pointer-events:none;transition:filter .2s}
.cat-bride{left:10px;bottom:7px;width:87px;height:111px}
.cat-groom{right:7px;bottom:6px;width:123px;height:111px}
.cat-companion:hover img,.cat-companion:focus-visible img{filter:drop-shadow(3px 4px 0 #9479858c) drop-shadow(0 0 7px #fff4dd)}
.cat-companion:focus-visible{outline:2px dashed #cb8e9c;outline-offset:2px}
.cat-companion.is-nodding{animation:kitty-nod .65s ease}
.cat-companion.is-pouncing{animation:kitty-pounce .65s ease}
.cat-bubble[hidden]{display:none}
.cat-bubble{position:absolute;bottom:calc(100% - 2px);width:132px;padding:6px 7px;z-index:10;background:#fffdf1;border:2px solid #b78b9e;box-shadow:3px 3px 0 #e9c0c9;color:#946f84;font-size:10px;font-weight:1000;line-height:1.45;text-align:center;animation:secret-pop .26s ease;pointer-events:none}
.cat-bride .cat-bubble{left:0}
.cat-groom .cat-bubble{right:0}
.couple-tap-hint{left:10px;right:auto;top:11px;bottom:auto;white-space:nowrap}
.couple-tap-hint[hidden]{display:none}
@keyframes kitty-nod{0%,100%{transform:translateY(0) rotate(0)}25%{transform:translateY(-9px) rotate(-9deg)}65%{transform:translateY(-2px) rotate(7deg)}}
@keyframes kitty-pounce{0%,100%{transform:translateY(0) scale(1)}30%{transform:translateY(-16px) scale(1.1,.9)}60%{transform:translateY(-5px) rotate(5deg)}}
@media(max-width:500px){
  .cat-bride{left:2px;bottom:4px;width:67px;height:87px}
  .cat-groom{right:1px;bottom:4px;width:94px;height:86px}
  .cat-bubble{width:113px;font-size:9px;padding:5px}
  .couple-tap-hint{left:7px;top:8px;right:auto;bottom:auto;font-size:8px}
}
@media(prefers-reduced-motion:reduce){
  .cat-companion.is-nodding,.cat-companion.is-pouncing{animation:none!important}
}

/* The cats are little game characters, not static stickers: each tap swaps a pose. */
.cat-companion img{animation:kitty-idle-breathe 2.6s ease-in-out infinite}
.cat-companion[data-action="wave"].is-playing img{animation:kitty-wave .8s cubic-bezier(.3,.7,.2,1) both}
.cat-companion[data-action="roll"].is-playing img{animation:kitty-roll .85s ease both}
.cat-companion[data-action="wink"].is-playing img{animation:kitty-wink .75s ease both}
.cat-companion[data-action="pounce"].is-playing img{animation:kitty-leap .85s cubic-bezier(.25,.8,.25,1) both}
.cat-companion[data-action="stretch"].is-playing img{animation:kitty-stretch .85s ease both}
.cat-companion.is-resting img{animation:kitty-return .3s ease both}
.cat-bubble.is-meowing{animation:secret-pop .34s ease both}
@keyframes kitty-idle-breathe{0%,100%{transform:translateY(0) scale(1)}50%{transform:translateY(-2px) scale(1.025)}}
@keyframes kitty-wave{0%,100%{transform:translateY(0) rotate(0)}20%{transform:translateY(-8px) rotate(-7deg)}48%{transform:translateY(-9px) rotate(8deg)}72%{transform:translateY(-4px) rotate(-5deg)}}
@keyframes kitty-roll{0%{transform:rotate(-16deg) translateY(6px) scale(.88)}35%{transform:rotate(13deg) translateY(-8px) scale(1.1)}65%{transform:rotate(-9deg) translateY(0) scale(1.04)}100%{transform:rotate(0) scale(1)}}
@keyframes kitty-wink{0%,100%{transform:rotate(0) scale(1)}35%{transform:rotate(-9deg) scale(1.12)}65%{transform:rotate(6deg) scale(1.04)}}
@keyframes kitty-leap{0%{transform:translateY(11px) scale(.9)}35%{transform:translateY(-23px) rotate(-8deg) scale(1.1)}65%{transform:translateY(-10px) rotate(5deg)}100%{transform:translateY(0) rotate(0) scale(1)}}
@keyframes kitty-stretch{0%{transform:scale(.9,1.13) translateY(-4px)}42%{transform:scale(1.15,.86) translateY(6px)}75%{transform:scale(.98,1.04)}100%{transform:scale(1)}}
@keyframes kitty-return{from{opacity:.7;transform:scale(.91) translateY(6px)}to{opacity:1;transform:scale(1) translateY(0)}}
@media(prefers-reduced-motion:reduce){
  .cat-companion img,.cat-companion[data-action].is-playing img,.cat-companion.is-resting img,.cat-bubble.is-meowing{animation:none!important}
}
/* The last wedding-game checkpoint doubles as a real, touch-friendly venue link. */
.location-address{display:block;margin-top:4px;color:#b08f99;font-size:11px;letter-spacing:1px;font-weight:800}
.venue-quest{max-width:475px;margin:30px auto 0;padding:17px 20px 20px;border:2px solid #9abc9e;background:#f3fff0;box-shadow:5px 5px 0 #d0e9d1;text-align:center;position:relative}
.venue-quest:before,.venue-quest:after{content:'♥';position:absolute;top:-12px;background:#f3fff0;color:#d892a0;padding:0 7px;font-size:17px}
.venue-quest:before{left:20px;transform:rotate(-13deg)}.venue-quest:after{right:20px;transform:rotate(13deg)}
.venue-quest-heading{display:flex;justify-content:space-between;gap:8px;color:#85ac8b;font:900 9px/1.5 ui-monospace,monospace;letter-spacing:1.1px}
.venue-quest-title{margin:15px 0 12px;color:#65866e;font-size:17px;font-weight:1000;letter-spacing:1px}
.venue-map-link{min-height:52px;display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:10px 13px;background:#ffcf8d;border:3px solid #876b65;box-shadow:5px 5px 0 #cda880;color:#69505b;font-size:14px;font-weight:1000;letter-spacing:.2px;transition:transform .16s ease,box-shadow .16s ease,background .16s ease}
.venue-map-link:hover,.venue-map-link:focus-visible{transform:translate(2px,2px);box-shadow:3px 3px 0 #cda880;background:#ffdb9f;outline:2px dashed #d3929e;outline-offset:5px}
.venue-map-link:active{transform:translate(5px,5px) scale(.985);box-shadow:none;background:#ffd093}
.venue-map-icon{font-size:20px;color:#bc8292;display:inline-block;transform-origin:50% 85%;animation:venue-flower-wiggle 2.5s ease-in-out infinite}
.venue-map-arrow{font-size:21px;line-height:1;color:#ab7586}
.venue-map-link:active .venue-map-icon{animation:venue-flower-pop .3s ease}
.venue-map-tip{margin:13px 0 0;color:#809b83;font-size:10px;line-height:1.7}
@keyframes venue-flower-wiggle{0%,80%,100%{transform:rotate(0)}84%{transform:rotate(-18deg)}90%{transform:rotate(17deg)}95%{transform:rotate(-9deg)}}
@keyframes venue-flower-pop{40%{transform:rotate(24deg) scale(1.4)}100%{transform:rotate(0) scale(1)}}
@media(max-width:500px){.couple-names{gap:9px}.couple-names>b{font-size:clamp(16px,5.2vw,21px);letter-spacing:0}.invite-name{font-size:clamp(21px,6.5vw,27px);letter-spacing:1px}.venue-quest{padding:17px 13px 18px}.venue-quest-heading{font-size:8px;letter-spacing:.2px}.venue-map-link{font-size:12px;gap:6px}.venue-map-icon{font-size:18px}.venue-map-tip{font-size:9px}}
@media(prefers-reduced-motion:reduce){.venue-map-icon{animation:none}}

/* Guest RSVP: an extra love-game checkpoint with persistent form submission. */
.rsvp-section{background:linear-gradient(#fffcf6,#fff3f1);padding-bottom:60px}
.rsvp-section .tiny-label{background:#fce6d4;color:#b78d69;border-color:#eac7a5;box-shadow:3px 3px 0 #f4e1ce}
.rsvp-card{max-width:550px;margin:auto;background:#fffefb;border:3px solid #69566a;box-shadow:7px 7px 0 #dbb2bd}
.rsvp-terminal-head{display:flex;justify-content:space-between;gap:10px;align-items:center;background:#f7bdc5;border-bottom:3px solid #69566a;padding:11px 14px;font:900 11px/1.5 ui-monospace,monospace;letter-spacing:1px;color:#815d72}
.rsvp-terminal-head span:last-child{color:#a5677c;font-size:9px}
.rsvp-card-inner{padding:25px 30px 28px;text-align:center}
.rsvp-mascot{width:57px;height:53px;display:grid;place-items:center;margin:0 auto 12px;background:#ffe4a9;border:3px solid #886574;color:#af748b;box-shadow:4px 4px 0 #e8ccad;font-size:31px;transform:rotate(-5deg)}
.rsvp-card h3{font-size:22px;letter-spacing:1px;color:#755568;margin:12px 0 5px;font-weight:1000}
.rsvp-intro{font-size:12px;color:#9c8590;margin:0 auto 25px;line-height:1.9}
#rsvp-form{text-align:left;display:grid;gap:18px}
.rsvp-field{display:grid;gap:8px;min-width:0;color:#6f5e6f;font-size:13px;font-weight:900}
.rsvp-field b,.rsvp-attendance b{color:#d57e91}.rsvp-field small{font-size:10px;color:#a88e97;font-weight:600}
.rsvp-field input,.rsvp-field select,.rsvp-field textarea{width:100%;border:2px solid #d5bfc8;background:#fffaf4;border-radius:0;padding:11px 13px;color:#574c60;font:600 14px/1.6 "PingFang SC","Microsoft YaHei",sans-serif;outline:none;transition:border-color .15s,box-shadow .15s}
.rsvp-field input:focus,.rsvp-field select:focus,.rsvp-field textarea:focus{border-color:#da93a6;box-shadow:3px 3px 0 #f1c9d2}
.rsvp-field textarea{resize:vertical;min-height:78px}.rsvp-field input::placeholder,.rsvp-field textarea::placeholder{color:#c0a9b1;font-weight:400}
.rsvp-attendance{border:0;padding:0;margin:0;min-width:0}.rsvp-attendance legend{font-size:13px;font-weight:900;color:#6f5e6f;margin-bottom:9px;padding:0}
.rsvp-options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px}
.rsvp-choice{position:relative;cursor:pointer;min-width:0}.rsvp-choice input{position:absolute;opacity:0;width:1px;height:1px;pointer-events:none}
.rsvp-choice span{display:flex;align-items:center;justify-content:center;min-height:48px;text-align:center;padding:6px 4px;border:2px solid #d9c2c9;background:#fff9ef;box-shadow:3px 3px 0 #e9dce0;color:#8f7581;font-size:12px;font-weight:900;transition:transform .14s,box-shadow .14s,border-color .14s,background .14s}
.rsvp-choice input:checked+span{background:#f9c8d2;border-color:#ae778d;box-shadow:3px 3px 0 #e7afbe;color:#855166}
.rsvp-choice input:focus-visible+span{outline:3px dashed #cc8b9e;outline-offset:4px}
.rsvp-choice:active span{transform:translate(3px,3px) scale(.98);box-shadow:none}
.rsvp-field.is-disabled{opacity:.48}.rsvp-field select:disabled{cursor:not-allowed}
.rsvp-trap{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}
.rsvp-send{display:flex;align-items:center;justify-content:center;gap:13px;margin-top:4px;width:100%;border:3px solid #73576b;background:#f5b0ba;box-shadow:5px 5px 0 #d28d9b;color:#674e63;padding:12px 10px;font-weight:1000;font-size:15px;transition:transform .16s,box-shadow .16s,background .16s}
.rsvp-send span:first-child{font-size:22px}.rsvp-send span:last-child{font-size:22px;line-height:1}
.rsvp-send:hover,.rsvp-send:focus-visible{background:#f8bfca;transform:translate(2px,2px);box-shadow:3px 3px 0 #d28d9b;outline:2px dashed #ca8594;outline-offset:5px}
.rsvp-send:active{transform:translate(5px,5px) scale(.99);box-shadow:none}.rsvp-send:disabled{cursor:wait;opacity:.7}
.rsvp-feedback{margin:20px 0 7px;min-height:24px;color:#ab889a;font-size:11px;line-height:1.8}.rsvp-feedback.success{color:#629e76;font-weight:900}.rsvp-feedback.error{color:#ca697d;font-weight:900}
.rsvp-privacy{margin:14px 0 0;color:#b29ca8;font-size:10px;line-height:1.7}
.rsvp-owner-link{display:block;width:max-content;max-width:100%;margin:26px auto 0;padding:5px;color:#b48a9a;border-bottom:1px dashed #d3a8b8;font-size:11px;font-weight:800;transition:transform .15s,color .15s}
.rsvp-owner-link:hover,.rsvp-owner-link:focus-visible{color:#d77991;transform:translateY(-2px);outline:none}.rsvp-owner-link:active{transform:translateY(1px)}
@media(max-width:500px){.couple-names>b{font-size:clamp(21px,6.2vw,27px);letter-spacing:1px}.invite-name{font-size:clamp(26px,8vw,34px);letter-spacing:1px}.rsvp-card-inner{padding:22px 15px 24px}.rsvp-terminal-head{font-size:9px;letter-spacing:.3px;padding:10px}.rsvp-terminal-head span:last-child{font-size:8px}.rsvp-card h3{font-size:18px}.rsvp-intro{font-size:11px}.rsvp-options{gap:5px}.rsvp-choice span{font-size:10px;min-height:45px}.rsvp-send{font-size:13px}.rsvp-section{padding-bottom:50px}}
/* Personal wedding lettering: custom outlined brush glyphs, twin-heart ligature,
   hand-drawn swashes and miniature blossoms — no device font differences. */
.name-signature{max-width:540px;margin:24px auto 15px;display:flex;align-items:center;justify-content:center;gap:7px}
.name-signature>span{flex:none;font-size:9px;letter-spacing:1.4px;color:#ba94a3;font-family:ui-monospace,monospace;font-weight:900}
.wedding-name-logo{display:block;max-width:100%;height:auto;object-fit:contain;user-select:none;-webkit-user-drag:none}
.name-signature .wedding-name-logo{width:min(100%,436px);min-width:0;flex:1;filter:drop-shadow(0 4px 0 #fae4e6);animation:wedding-lettering-arrive .9s cubic-bezier(.18,.88,.22,1.12) both}
.invite-name{display:flex;justify-content:center;align-items:center;width:100%;margin:0 auto -4px;line-height:1;padding:0}
.invite-name .wedding-name-logo-invite{width:min(100%,375px);filter:drop-shadow(0 3px 0 #f8e2e4)}
@keyframes wedding-lettering-arrive{from{opacity:0;transform:translateY(10px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}
@media(max-width:500px){.name-signature{gap:3px;margin-top:22px;margin-bottom:11px}.name-signature>span{font-size:7px;letter-spacing:.3px}.name-signature .wedding-name-logo{width:min(100%,310px)}.invite-name .wedding-name-logo-invite{width:100%;max-width:330px}.invite-name{margin-bottom:-3px}}
@media(prefers-reduced-motion:reduce){.name-signature .wedding-name-logo{animation:none}}

/* A real page-turning wedding storybook: one level per viewport. */
body.game-mode{height:100dvh;overflow:hidden;overscroll-behavior:none}
body.game-mode .site-wrap{height:100dvh;min-height:0;display:flex;flex-direction:column;overflow:hidden;perspective:1100px}
body.game-mode .topbar{flex:0 0 auto;z-index:5}
body.game-mode .site-wrap>.hero,body.game-mode .site-wrap>.section{display:none;flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:#e9c2c9 transparent}
body.game-mode .site-wrap>.is-active-page{display:block}
body.game-mode .site-wrap>.page-turn-next{animation:wedding-page-next .48s cubic-bezier(.17,.84,.3,1) both;transform-origin:100% 50%}
body.game-mode .site-wrap>.page-turn-prev{animation:wedding-page-prev .48s cubic-bezier(.17,.84,.3,1) both;transform-origin:0 50%}
body.game-mode .site-wrap>.footer{display:none}
@keyframes wedding-page-next{0%{opacity:.15;transform:perspective(900px) rotateY(-12deg) translateX(18px) scale(.98)}65%{opacity:1}100%{opacity:1;transform:none}}
@keyframes wedding-page-prev{0%{opacity:.15;transform:perspective(900px) rotateY(12deg) translateX(-18px) scale(.98)}65%{opacity:1}100%{opacity:1;transform:none}}
.topbar-actions{display:flex;align-items:center;gap:10px}
.music-toggle{flex-shrink:0;border:2px solid #77576b;background:#fff0f0;color:#976577;padding:7px 10px;box-shadow:2px 2px 0 #e8c2cc;font:900 11px/1.2 "PingFang SC",sans-serif;white-space:nowrap;transition:transform .15s,background .15s}
.music-toggle:hover,.music-toggle:focus-visible{background:#ffe1e7;outline:2px dashed #d78d9e;outline-offset:2px}
.music-toggle:active{transform:translate(2px,2px);box-shadow:none}
.music-toggle.is-playing{background:#e8f4e9;color:#62866b;border-color:#8aab94;box-shadow:2px 2px 0 #c2dec7}
.game-page-nav{flex:0 0 auto;display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:8px;align-items:center;padding:13px 24px calc(13px + env(safe-area-inset-bottom));background:#fff8f1;border-top:3px solid #ead4d5;box-shadow:0 -6px 20px #6a455b10;z-index:5}
.game-page-nav[hidden]{display:none!important}
.game-page-btn{border:2px solid #71556a;background:#fce2e6;color:#765667;box-shadow:3px 3px 0 #dbb4bf;padding:11px 10px;font-weight:900;font-size:12px;white-space:nowrap;transition:transform .15s,box-shadow .15s}
.game-page-btn:last-child{background:#f4adb8;color:#644559;box-shadow:3px 3px 0 #d28d9e;text-align:center}
.game-page-btn:active{transform:translate(3px,3px);box-shadow:none}
.game-page-btn:focus-visible{outline:3px dashed #d78d9e;outline-offset:4px}
.game-page-center{display:flex;min-width:126px;flex-direction:column;align-items:center;gap:6px}
.game-page-label{font-size:10px;font-weight:1000;color:#ad7889;letter-spacing:.2px;text-align:center;white-space:nowrap}
.game-page-dots{display:flex;gap:6px;align-items:center;justify-content:center}
.game-page-dots i{display:block;width:6px;height:6px;background:#ead0d4;box-shadow:1px 1px 0 #d9b4bc;transition:background .18s,transform .18s}
.game-page-dots i.active{background:#d68199;transform:scale(1.4)}
.album-page-controls{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:25px 0 0}
.album-page-controls button{border:2px solid #735569;background:#ffe4e4;color:#876276;padding:9px 12px;font-size:12px;font-weight:900;box-shadow:3px 3px 0 #e5c3ca;transition:transform .13s,box-shadow .13s}
.album-page-controls button:active{transform:translate(3px,3px);box-shadow:none}
.album-page-controls span{font:900 11px monospace;color:#bd8b9a;white-space:nowrap}
.share-kit{display:flex;justify-content:center;align-items:center;gap:12px;flex-wrap:wrap;margin-top:12px}
.share-kit-btn{border:1.5px dashed #deb9c2;background:#fff8f3;color:#a77a8c;padding:5px 9px;font-size:11px;font-weight:900;transition:transform .14s,background .14s}
.share-kit-btn:focus-visible,.share-kit-btn:hover{outline:2px dashed #d78d9e;outline-offset:2px;background:#ffebed}
.share-kit-btn:active{transform:scale(.96)}
body.game-mode .photo-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
body.game-mode .photo-grid .photo-feature{grid-column:auto}
body.game-mode .photo-grid .photo-art,body.game-mode .photo-grid .photo-feature .photo-art{aspect-ratio:.84}
body.game-mode .photo-card[hidden]{display:none!important}
body.game-mode .photo-grid .photo-meta{flex-wrap:wrap;line-height:1.2}
body.game-mode .photo-grid .photo-meta small{display:none}
body.game-mode .scroll-hint{margin-top:24px}
body.game-mode .scroll-line{display:none}
@media(max-width:580px){
  body.game-mode .topbar{padding:0 13px}
  .topbar-actions{gap:5px}
  .music-toggle{font-size:10px;padding:6px}
  .topbar-actions .demo-pill{font-size:8px;padding:3px 5px}
  body.game-mode .hero{padding-top:27px;padding-bottom:24px}
  body.game-mode .hero .hero-subtitle{margin-bottom:20px}
  body.game-mode .hero .name-signature{margin-top:16px;margin-bottom:10px}
  body.game-mode .hero .under-button{margin-top:9px}
  body.game-mode .hero .share-kit{margin-top:9px;gap:8px}
  body.game-mode .hero .share-kit-btn{font-size:10px;padding:4px 6px}
  body.game-mode .hero .scroll-hint{margin:15px 0 0}
  body.game-mode .section{padding:25px 18px 26px}
  body.game-mode .section-heading{padding:10px 0 20px}
  body.game-mode .section-heading h2{font-size:27px}
  .game-page-nav{padding:10px 11px calc(11px + env(safe-area-inset-bottom));gap:6px}
  .game-page-btn{font-size:11px;padding:10px 6px}
  .game-page-center{min-width:105px}
  .game-page-label{font-size:9px;letter-spacing:0}
  .game-page-dots{gap:5px}
  .album-page-controls button{font-size:10px;padding:9px 7px}
  body.game-mode .photo-grid{gap:7px;margin-top:14px}
  body.game-mode .photo-grid .photo-meta{font-size:9px;gap:3px}
  body.game-mode .photo-grid .photo-meta b{font-size:10px}
  body.game-mode .photo-grid .photo-art:after{font-size:6px;padding:1px 2px;bottom:2px;left:2px}
  body.game-mode .album-note{margin:17px auto 0}
}
@media(max-width:390px){.topbar-actions .demo-pill{display:none}.game-page-center{min-width:100px}}
@media(prefers-reduced-motion:reduce){body.game-mode .site-wrap>.page-turn-next,body.game-mode .site-wrap>.page-turn-prev{animation:none}}

/* WeChat touch polish: taps never magnify the invitation by accident. */
html,body.game-mode,body.game-mode .site-wrap,body.game-mode .site-wrap>.section,body.game-mode .site-wrap>.hero{touch-action:pan-y}
body.game-mode button,body.game-mode a,body.game-mode label{touch-action:manipulation}

/* One generously sized portrait per album turn, with a very clear zoom affordance. */
.photo-zoom-hint{max-width:485px;margin:10px auto 4px;padding:10px 12px;border:2px solid #d996ac;background:#fff0f1;color:#a6607b;display:flex;align-items:center;justify-content:center;gap:7px;flex-wrap:wrap;box-shadow:3px 3px 0 #eac7ce;text-align:center}
.photo-zoom-hint strong{font-size:15px;letter-spacing:.5px}
.photo-zoom-hint>span:last-child{font-size:11px;font-weight:900}
.zoom-magnifier{font-size:21px;animation:zoom-hint-bounce 1.7s ease-in-out infinite}
@keyframes zoom-hint-bounce{0%,100%{transform:scale(1) rotate(-12deg)}45%{transform:scale(1.18) rotate(8deg)}}
body.game-mode .photo-grid{grid-template-columns:minmax(0,1fr);max-width:450px;margin:14px auto 0;justify-items:stretch}
body.game-mode .photo-grid .photo-card{width:100%;padding:10px;cursor:zoom-in;transform:none;box-shadow:6px 6px 0 #ebc7d1}
body.game-mode .photo-grid .photo-card:after{content:'🔍 点击放大';position:absolute;right:18px;top:18px;z-index:5;border:2px solid #76556a;background:#fff2f0ec;color:#975f7c;padding:5px 8px;font-size:12px;font-weight:1000;box-shadow:2px 2px 0 #e4b6c3;pointer-events:none;animation:zoom-label-pulse 2.6s ease-in-out infinite}
@keyframes zoom-label-pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}
body.game-mode .photo-grid .photo-art,body.game-mode .photo-grid .photo-feature .photo-art{aspect-ratio:1.12}
body.game-mode .photo-grid .photo-meta{font-size:13px;gap:9px;justify-content:center;padding:10px 4px 3px}
body.game-mode .photo-grid .photo-meta b{font-size:13px}
body.game-mode .album-page-controls{max-width:450px;margin:17px auto 0}

/* Wedding facts, address and navigation should be readable together on one screen. */
body.game-mode .invitation{padding:13px 25px 12px}
body.game-mode .invitation .section-topline{display:none}
body.game-mode .invitation .section-heading{padding:0 0 10px}
body.game-mode .invitation .section-heading .tiny-label{display:none}
body.game-mode .invitation .section-heading h2{font-size:27px;margin:0 0 2px}
body.game-mode .invitation .section-heading p{font-size:11px}
body.game-mode .invitation .invite-paper{max-width:440px;transform:none;box-shadow:5px 5px 0 #e2adb4}
body.game-mode .invitation .ticket-inner{position:relative;margin:7px;padding:12px 13px 10px}
body.game-mode .invitation .invite-flag{font-size:9px;letter-spacing:1px}
body.game-mode .invitation .invite-icon{position:absolute;right:8px;top:7px;margin:0;width:35px;height:35px;font-size:19px;border-width:2px;box-shadow:2px 2px 0 #e5b8c1}
body.game-mode .invitation .invite-name{margin:6px auto 0}
body.game-mode .invitation .invite-name .wedding-name-logo-invite{width:min(85%,295px)}
body.game-mode .invitation .invite-paper h3{font-size:15px;line-height:1.35;letter-spacing:1px;margin:3px 0 8px}
body.game-mode .invitation .invite-line{margin:9px 0 7px}
body.game-mode .invitation .info-grid{gap:7px 6px}
body.game-mode .invitation .info-key{font-size:9px;line-height:1.25;margin-bottom:2px}
body.game-mode .invitation .info-item strong{font-size:15px;line-height:1.3}
body.game-mode .invitation .info-place strong{font-size:16px;line-height:1.25}
body.game-mode .invitation .location-address{font-size:12px;line-height:1.3;margin-top:1px}
body.game-mode .invitation .invite-line-bottom{margin:8px 0 6px}
body.game-mode .invitation .ticket-foot{font-size:8px}
body.game-mode .invitation .venue-quest{max-width:440px;margin:11px auto 0;padding:10px 12px 8px;box-shadow:3px 3px 0 #d0e9d1}
body.game-mode .invitation .venue-map-actions{display:grid;grid-template-columns:1.65fr 1fr;gap:8px}
body.game-mode .invitation .venue-map-link{min-height:42px;padding:7px 8px;box-shadow:3px 3px 0 #cda880;font-size:12px;border-width:2px;gap:5px}
.venue-copy-link{border:2px solid #8e8088;background:#fff7ed;color:#8b6678;box-shadow:3px 3px 0 #decac9;font-size:12px;font-weight:1000;padding:5px;transition:transform .15s,box-shadow .15s}
.venue-copy-link:active{transform:translate(3px,3px);box-shadow:none}
.venue-copy-link:focus-visible{outline:2px dashed #d3929e;outline-offset:3px}
body.game-mode .invitation .venue-map-tip{font-size:10px;line-height:1.4;margin:7px 0 0}
body.game-mode .invitation .wish-btn{margin:11px auto 0;min-height:40px;padding:7px 12px;font-size:12px;gap:7px;box-shadow:3px 3px 0 #85b893}
body.game-mode .invitation .wish-message{font-size:10px;min-height:15px;margin:5px 0 0}
@media(max-width:580px){
  body.game-mode .memories .section-heading{padding-bottom:10px}
  body.game-mode .memories .section-heading h2{margin:5px 0 4px}
  .photo-zoom-hint{padding:7px 6px;margin:8px auto 2px;gap:4px}
  .photo-zoom-hint strong{font-size:13px}
  .photo-zoom-hint>span:last-child{font-size:10px}
  body.game-mode .photo-grid{max-width:360px;margin-top:11px}
  body.game-mode .photo-grid .photo-card{padding:7px}
  body.game-mode .photo-grid .photo-card:after{top:12px;right:12px;font-size:11px}
  body.game-mode .photo-grid .photo-meta{font-size:12px}
  body.game-mode .invitation{padding:9px 14px 7px}
  body.game-mode .invitation .section-heading{padding-bottom:7px}
  body.game-mode .invitation .section-heading h2{font-size:23px}
  body.game-mode .invitation .section-heading p{font-size:10px}
  body.game-mode .invitation .ticket-inner{margin:5px;padding:8px 8px 7px}
  body.game-mode .invitation .invite-flag{font-size:8px}
  body.game-mode .invitation .invite-name .wedding-name-logo-invite{width:min(77%,255px)}
  body.game-mode .invitation .invite-paper h3{font-size:13px;line-height:1.3;margin:2px 0 5px}
  body.game-mode .invitation .invite-line{margin:6px 0 5px}
  body.game-mode .invitation .info-grid{gap:5px 4px}
  body.game-mode .invitation .info-key{font-size:8px}
  body.game-mode .invitation .info-item strong{font-size:13px}
  body.game-mode .invitation .info-place strong{font-size:14px}
  body.game-mode .invitation .location-address{font-size:11px}
  body.game-mode .invitation .invite-line-bottom{margin:6px 0 4px}
  body.game-mode .invitation .venue-quest{margin-top:10px;padding:8px 8px 7px}
  body.game-mode .invitation .venue-map-link{font-size:11px;min-height:39px}
  body.game-mode .invitation .venue-map-icon{font-size:15px}
  body.game-mode .invitation .venue-map-arrow{font-size:16px}
  .venue-copy-link{font-size:11px}
  body.game-mode .invitation .venue-map-tip{font-size:9px;margin-top:6px}
  body.game-mode .invitation .wish-btn{margin-top:9px;min-height:37px;padding:5px}
  body.game-mode .invitation .wish-message{font-size:9px;margin-top:4px}
}
@media(max-height:700px){
  body.game-mode .invitation{padding-top:5px;padding-bottom:4px}
  body.game-mode .invitation .section-heading{padding-bottom:4px}
  body.game-mode .invitation .section-heading p{display:none}
  body.game-mode .invitation .invite-name .wedding-name-logo-invite{width:min(72%,235px)}
  body.game-mode .invitation .venue-quest{margin-top:7px}
  body.game-mode .invitation .wish-btn{margin-top:6px}
}
@media(prefers-reduced-motion:reduce){.zoom-magnifier,body.game-mode .photo-grid .photo-card:after{animation:none}}

/* Keep the album arrows visible without needing to scroll to reach them. */
body.game-mode .memories{padding-top:15px;padding-bottom:9px}
body.game-mode .memories .section-topline{display:none}
body.game-mode .memories .section-heading{padding:0 0 11px}
body.game-mode .memories .section-heading .tiny-label{display:none}
body.game-mode .memories .section-heading h2{font-size:27px;margin:0 0 3px}
body.game-mode .memories .album-toolbar{height:35px}
body.game-mode .memories .photo-zoom-hint{padding:6px 9px;margin:7px auto 3px}
body.game-mode .memories .photo-grid{max-width:410px;margin-top:10px}
body.game-mode .memories .photo-grid .photo-art{aspect-ratio:1.32}
body.game-mode .memories .album-page-controls{max-width:410px;margin-top:11px}
body.game-mode .memories .album-note{font-size:9px;margin:11px auto 0}
@media(max-width:580px){
  body.game-mode .memories{padding:10px 13px 7px}
  body.game-mode .memories .section-heading{padding-bottom:8px}
  body.game-mode .memories .section-heading h2{font-size:24px}
  body.game-mode .memories .photo-zoom-hint{padding:5px 5px;margin:6px auto 2px}
  body.game-mode .memories .photo-grid{max-width:355px;margin-top:8px}
  body.game-mode .memories .photo-grid .photo-art{aspect-ratio:1.25}
  body.game-mode .memories .album-page-controls{margin-top:9px}
  body.game-mode .memories .album-note{margin-top:7px;font-size:8px}
}
