/* Source: visual-assets.css */
:root{--art-flap-mask-svg:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAwIDEwMDAiIHByZXNlcnZlQXNwZWN0UmF0aW89Im5vbmUiPjxwYXRoIHRyYW5zZm9ybT0ic2NhbGUoMTAwMCkiIGZpbGw9IndoaXRlIiBkPSJNMCAwSDFDMSAuMDggLjk3IC4xMiAuOTMgLjExNUMuOTQzIC4yMCAuODkxIC4yNjQgLjg1NyAuMjM2Qy44NzMgLjMzIC44MjMgLjQwIC43NzkgLjM2NUMuNzkwIC40NiAuNzM1IC41MyAuNjk2IC41MEMuNzA2IC42MCAuNjQ4IC42OCAuNjA4IC42NEMuNjE1IC43NDUgLjU2MyAuODAyIC41NDIgLjc5M0MuNTM1IC45NCAuNDY1IC45NCAuNDU4IC43OTNDLjQzNyAuODAyIC4zODUgLjc0NSAuMzkyIC42NEMuMzUyIC42OCAuMjk0IC42MCAuMzA0IC41MEMuMjY1IC41MyAuMjEwIC40NiAuMjIxIC4zNjVDLjE3NyAuNDAgLjEyNyAuMzMgLjE0MyAuMjM2Qy4xMDkgLjI2NCAuMDU3IC4yMCAuMDcgLjExNUMuMDMgLjEyIDAgLjA4IDAgMFoiLz48L3N2Zz4K");--art-full-paper-portrait-v10-webp:url("/assets/full-paper-portrait-v10.webp?v=0b3c481fd13e");--art-full-paper-wide-v10-webp:url("/assets/full-paper-wide-v10.webp?v=cce00022ec9d");--art-main-card-v9-webp:url("/assets/main-card-v9.webp?v=8ce1685e5aa5");--art-olive-botanical-webp:none;--art-paper-grain-svg:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxODAiIGhlaWdodD0iMTgwIiB2aWV3Qm94PSIwIDAgMTgwIDE4MCI+PGZpbHRlciBpZD0iZyI+PGZlVHVyYnVsZW5jZSB0eXBlPSJmcmFjdGFsTm9pc2UiIGJhc2VGcmVxdWVuY3k9Ii45MSIgbnVtT2N0YXZlcz0iMyIgc3RpdGNoVGlsZXM9InN0aXRjaCIvPjxmZUNvbG9yTWF0cml4IHR5cGU9InNhdHVyYXRlIiB2YWx1ZXM9IjAiLz48ZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVGdW5jQSB0eXBlPSJsaW5lYXIiIHNsb3BlPSIuMDU1Ii8+PC9mZUNvbXBvbmVudFRyYW5zZmVyPjwvZmlsdGVyPjxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbHRlcj0idXJsKCNnKSIgb3BhY2l0eT0iLjU4Ii8+PC9zdmc+Cg==");--art-swan-left-v11-webp:none;--art-swan-right-v13-webp:none;--art-wax-seal-bronze-v14-webp:url("/assets/wax-seal-bronze-v14.webp?v=a32d2a814099");}
html:not(.envelope-ready) #open-envelope,html:not(.envelope-ready) .cover-instruction{visibility:hidden!important}#cover-loading{position:absolute;top:50%;left:0;right:0;text-align:center;font:14px 'Noto Serif TC',serif;color:#7f454a}html.art-fallback:not(.envelope-opened) .inner-letter{visibility:hidden}.envelope-ready #cover-loading{display:none}
.art-fallback .flap-front{background-color:#7e444a}

/* Source: styles.css */
@charset "UTF-8";
:root{--ink:#4c382c;--ink-soft:#796758;--cocoa:#5b4031;--gold:#a18a65;--paper:#f2ecdf;--line:rgba(112,87,62,.22);--wash:rgba(252,250,248,.55);--serif:'Cormorant Garamond','Noto Serif TC',Georgia,serif;--cjk:'Noto Serif TC','Songti TC','PMingLiU',serif;--script:'Pinyon Script','Snell Roundhand','Apple Chancery','Brush Script MT',cursive;--sans:-apple-system,BlinkMacSystemFont,'Segoe UI','Noto Sans TC',sans-serif;--ease:cubic-bezier(.22,.8,.25,1);color-scheme:light;font-size:16px}
*{box-sizing:border-box}body{margin:0;background:#e6ded1;color:var(--ink);font-family:var(--cjk);font-weight:400;line-height:1.7;height:100svh;overflow:hidden}button,input,select,textarea{font:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}button,a{touch-action:manipulation}button{color:inherit}button{cursor:pointer}a{color:inherit;text-underline-offset:4px}button:disabled{cursor:not-allowed;opacity:.5}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--cocoa);outline-offset:5px}button{border:0}svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.35;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}p,h1,h2,h3{margin:0}h1,h2,h3{font-weight:400}img{max-width:100%;display:block}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}[hidden]{display:none!important}
.language-button{position:fixed;top:max(33px,env(safe-area-inset-top));right:max(38px,calc((100vw - 1120px)/2 + 25px));z-index:100;height:40px;min-width:84px;padding:0 12px;border:1px solid rgba(91,64,49,.3);border-radius:3px;background:rgba(246,240,228,.84);backdrop-filter:blur(12px);display:flex;align-items:center;justify-content:center;gap:8px;font-family:var(--sans);font-size:.875rem;letter-spacing:.05em;transition:background .2s}.language-button:hover{background:#fff8e9}.language-active{font-weight:650;color:var(--cocoa)}.language-button span:not(.language-active){color:var(--ink-soft)}.language-divider{font-weight:300;opacity:.6}
.cover{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;flex-direction:column;isolation:isolate;overflow:hidden;cursor:pointer;background:#e9e1d4;transition:opacity .75s ease,visibility .75s}.cover:before{content:'';position:absolute;inset:0;z-index:-2;background:linear-gradient(90deg,rgba(237,230,215,.4),rgba(248,244,238,.72) 50%,rgba(231,224,210,.5)),var(--art-main-card-v9-webp) center/100% 100%;opacity:.66}.cover:after{content:'';position:absolute;inset:18px;border:1px solid rgba(91,64,49,.16);pointer-events:none;z-index:-1}.cover-corner{position:absolute;top:30px;left:42px;font-family:var(--serif);font-size:24px;letter-spacing:4px}.cover-corner span{font-style:italic;font-size:17px}.cover-intro{display:flex;align-items:center;gap:18px;font-size:.875rem;letter-spacing:.3em;margin:10px 0 24px;transition:opacity .3s}.fine-line{display:block;width:36px;height:1px;background:var(--gold);opacity:.5}.envelope-button{position:relative;display:block;padding:0;width:min(390px,74vw,calc((100svh - 200px)*.75));aspect-ratio:3/4;background:transparent;overflow:visible;isolation:isolate}.envelope-button:disabled{opacity:1}.envelope-scene{display:block;position:absolute;inset:0;isolation:isolate;transform-style:flat;transform:rotate(-1.3deg)}.envelope-button:hover .envelope-scene{transform:rotate(0deg) translateY(-4px)}.envelope-back{position:absolute;inset:0;z-index:0;background:#d9cbb7;box-shadow:inset 0 0 0 1px #c9b9a2,0 22px 22px rgba(64,43,24,.17)}.envelope-pocket{position:absolute;inset:50% 0 0;z-index:6;background:var(--art-olive-botanical-webp) bottom/100% 200%;box-shadow:0 -1px 1px rgba(76,56,44,.16);display:flex;align-items:flex-end;justify-content:center;padding-bottom:17%}.envelope-recipient{font-size:.875rem;letter-spacing:.28em;text-shadow:0 1px 5px var(--paper)}.envelope-flap{position:absolute;top:0;left:0;width:100%;height:50%;z-index:8;transform-origin:center top;transform:perspective(1400px) rotateX(0deg);transform-style:flat;backface-visibility:visible;-webkit-backface-visibility:visible;background:#d9cbb7;will-change:transform}.flap-front,.flap-back{position:absolute;inset:0;display:flex;align-items:center;flex-direction:column;justify-content:center}.flap-front{z-index:2;background:#e4d7c2 var(--art-olive-botanical-webp) top/100% 200%;box-shadow:0 1px 1px rgba(61,41,28,.4)}.flap-back{z-index:1;background:#d9cbb7;box-shadow:inset 0 0 0 1px rgba(93,68,40,.12)}.envelope-flap.is-inside .flap-front{visibility:hidden}.cover-names{font-family:var(--script);font-size:clamp(46px,5.2vw,69px);line-height:1.2;position:relative;top:-.05em;text-shadow:0 2px 12px #eaddc4}.cover-date{font-family:var(--serif);font-size:.75rem;letter-spacing:.18em;margin-top:7px;text-shadow:0 1px 5px #eaddc4}.envelope-seal{position:absolute;z-index:12;left:36%;top:39.5%;width:28%;aspect-ratio:1;transform:rotate(3deg);filter:drop-shadow(1px 5px 3px rgba(41,22,10,.35));transition:transform .35s var(--ease),filter .35s}.seal-art{display:block;position:relative;aspect-ratio:1;width:100%}.seal-art img{position:absolute;width:128%;height:128%;max-width:none;left:-14%;top:-12%;clip-path:polygon(47% 10.8%,52% 11%,58% 13.1%,63% 16.2%,69% 20.2%,74% 23.5%,79% 27.5%,83% 32.5%,87% 38.5%,89% 43%,88% 49%,86% 55%,84.8% 62%,81% 70%,77% 75%,74% 80%,69% 84.6%,64% 86.8%,56% 87%,49% 87%,42% 86%,36% 84%,31% 81%,26% 78%,22% 75%,18% 71%,15% 67%,12% 61%,10.2% 55%,10.3% 50%,12.3% 43%,15.5% 37%,19.5% 32%,23.5% 28%,28.5% 23%,32.5% 20%,37.5% 15%,41% 12%)}.envelope-button:hover .envelope-seal{transform:rotate(-3deg) translateY(-3px);filter:drop-shadow(2px 8px 4px rgba(41,22,10,.28))}.seal-glint{position:absolute;inset:10%;border-radius:50%;background:linear-gradient(115deg,transparent 38%,rgba(255,232,198,.28) 48%,transparent 57%);background-size:300% 100%;background-position:150% 0;mix-blend-mode:screen;animation:glint 5s 1s infinite;pointer-events:none}.inner-letter{position:absolute;inset:5% 6% 7%;z-index:3;background:var(--art-main-card-v9-webp) center/100% 100%;box-shadow:0 0 15px rgba(62,41,23,.14);display:flex;align-items:center;flex-direction:column;padding-top:24%;opacity:1;transform:translateY(0);transform-origin:center center;will-change:transform}.inner-letter-overline{font-family:var(--serif);font-style:italic;font-size:1.4rem}.inner-letter-names{font-family:var(--script);font-size:clamp(40px,5vw,64px);line-height:1.5}.inner-letter-date{font-family:var(--serif);font-size:1rem;letter-spacing:.22em}.cover-instruction{display:flex;align-items:center;gap:10px;margin-top:27px;font-size:.875rem;letter-spacing:.15em;transition:opacity .3s}.touch-mark{width:6px;height:6px;border-radius:50%;background:var(--cocoa);box-shadow:0 0 0 5px rgba(91,64,49,.07);animation:invitation-pulse 2.8s ease-in-out infinite}.cover-footer{font-family:var(--serif);font-size:.75rem;letter-spacing:.17em;color:var(--ink-soft);margin-top:11px}.cover-footer span{padding:0 10px}.cover.is-opening{pointer-events:none}.is-opening .cover-intro,.is-opening .cover-instruction,.is-opening .cover-footer,.is-opening .cover-corner{opacity:0;transition:opacity .3s}.is-opening .envelope-seal{animation:seal-release 1s var(--ease) forwards}.is-opening .seal-glint{animation:none}.cover.is-revealing{opacity:0;visibility:hidden}
@keyframes glint{0%,60%{background-position:150% 0}90%,100%{background-position:-50% 0}}@keyframes invitation-pulse{50%{box-shadow:0 0 0 8px rgba(91,64,49,0)}}@keyframes seal-release{0%{transform:rotate(3deg)}25%{transform:translateY(-8px) translateZ(30px) rotate(-7deg) scale(1.07);filter:drop-shadow(6px 16px 10px rgba(41,22,10,.2))}52%{opacity:1}100%{transform:translate(36px,-45px) translateZ(140px) rotate(18deg) scale(1.2);opacity:0;filter:drop-shadow(15px 28px 16px rgba(41,22,10,0))}}
.invitation{position:relative;width:min(1120px,calc(100% - 56px));height:calc(100svh - 48px);margin:24px auto;display:grid;grid-template-rows:70px minmax(0,1fr) auto;isolation:isolate;box-shadow:0 12px 55px rgba(65,43,23,.11),0 0 0 1px rgba(119,93,62,.19);opacity:0;transform:translateY(18px) scale(.985);transition:opacity 1s var(--ease),transform 1.2s var(--ease)}.invitation.is-visible{opacity:1;transform:none}.paper-background{position:absolute;inset:0;z-index:-2;background:linear-gradient(rgba(248,244,235,.1),rgba(248,244,235,.1)),var(--art-main-card-v9-webp) center/100% 100%}.invitation:after{content:'';position:absolute;inset:10px;border:1px solid rgba(115,89,59,.17);z-index:-1;pointer-events:none}.app-header{display:flex;align-items:center;justify-content:space-between;padding:0 32px;margin-right:114px;border-bottom:1px solid var(--line);position:relative}.wordmark{display:flex;align-items:center;gap:6px;font-family:var(--serif);font-size:24px;letter-spacing:2px;background:transparent;padding:6px 0}.wordmark>span:first-child{font-style:italic;font-size:19px}.replay-icon{font-size:18px;letter-spacing:0;color:var(--ink-soft);margin-left:6px;opacity:.55;transition:opacity .2s}.wordmark:hover .replay-icon{opacity:1}.header-date{font-family:var(--serif);font-size:.875rem;letter-spacing:.16em}.header-edition{font-size:.75rem;letter-spacing:.18em;color:var(--ink-soft)}.page-scroll{overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#bba88d transparent;scroll-behavior:smooth}.pages{min-height:100%;padding:28px 58px 32px}.page{width:100%;max-width:860px;margin:0 auto;animation:page-enter .48s var(--ease) both}.page-home{max-width:800px}.section-header{text-align:center;margin:0 auto 30px}.eyebrow{font-family:var(--sans);color:var(--ink-soft);font-size:.75rem;letter-spacing:.22em;text-transform:uppercase}.section-header h1{font-size:clamp(1.6rem,3.3vw,2.05rem);letter-spacing:.12em;line-height:1.5;margin:8px 0 7px}.section-header .english-script{font-family:var(--script);font-size:2rem;letter-spacing:.03em;color:var(--gold);line-height:1.35;margin-top:-4px}.section-header .lead{margin:12px auto 0;font-size:1rem;color:var(--ink-soft);max-width:590px;line-height:1.85}.fine-divider{display:flex;align-items:center;justify-content:center;gap:12px;margin:22px auto}.fine-divider:before,.fine-divider:after{content:'';width:48px;height:1px;background:var(--line)}.fine-divider svg{width:16px;height:16px;stroke:var(--gold)}.sample-note{font-family:var(--sans);font-size:.8125rem;line-height:1.7;color:var(--ink-soft);display:flex;align-items:center;gap:7px;justify-content:center;margin:18px 0 0}.sample-note svg{width:16px;height:16px;flex-shrink:0}.navigation-wrap{background:linear-gradient(180deg,rgba(244,237,224,.68),rgba(242,233,218,.96));backdrop-filter:blur(14px);border-top:1px solid var(--line);z-index:10;padding:0 18px max(12px,env(safe-area-inset-bottom));box-shadow:0 -7px 28px rgba(62,46,25,.025)}.navigation-hint{height:34px;display:flex;align-items:center;justify-content:center;gap:9px;font-family:var(--sans);font-size:.8125rem;letter-spacing:.06em;color:var(--ink-soft);transition:color .4s}.navigation-hint>span:last-child{font-size:16px;animation:hint-down 1.8s ease-in-out 3}.navigation-hint.has-explored>span:last-child{display:none}.navigation-hint.has-explored{color:#87745e}.tab-bar{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:5px;max-width:940px;margin:0 auto}.tab{position:relative;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:4px;padding:9px 3px 8px;min-height:65px;border-radius:4px;background:transparent;font-family:var(--sans);font-size:.875rem;line-height:1.35;letter-spacing:.06em;color:var(--ink-soft);transition:background .25s,color .25s,box-shadow .25s}.tab svg{width:21px;height:21px}.tab:hover{background:rgba(114,87,55,.07);color:var(--ink)}.tab[aria-selected=true]{background:var(--cocoa);color:#faf3e8;box-shadow:0 3px 10px rgba(62,37,17,.16)}.tab[aria-selected=true]:before{content:'';position:absolute;top:5px;right:9px;width:3px;height:3px;border-radius:50%;background:#ddc5a1}.tab:focus-visible{outline-offset:2px}@keyframes page-enter{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:none}}@keyframes hint-down{50%{transform:translateY(3px)}}
.home-content{text-align:center;display:flex;align-items:center;flex-direction:column;padding:4px 0 0}.home-overline{font-size:.875rem;letter-spacing:.3em;color:var(--ink-soft);margin-bottom:3px}.save-date{font-family:var(--serif);font-style:italic;font-size:clamp(1.6rem,3vw,2rem);letter-spacing:.02em;color:var(--gold)}.names{font-family:var(--script);font-weight:400;font-size:clamp(4.5rem,9vw,6.8rem);line-height:1.42;letter-spacing:0;margin:0 -10px;color:#533a2d;position:relative}.names .ampersand{font-size:.72em;display:inline-block;margin:0 .06em}.home-message{font-size:1rem;letter-spacing:.13em;margin-top:0;color:var(--ink-soft)}.date-lockup{display:flex;align-items:center;justify-content:center;gap:30px;margin:23px 0 20px;width:100%;max-width:580px}.date-side{width:110px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:8px 0;font-size:.875rem;letter-spacing:.14em}.date-middle{font-family:var(--serif);font-size:2rem;letter-spacing:.08em;line-height:1.1}.date-middle span{display:block;font-size:.875rem;letter-spacing:.26em;line-height:1.6;margin-top:7px}.home-seal{width:65px;margin:2px auto 13px;filter:drop-shadow(1px 3px 2px rgba(55,31,15,.23));transform:rotate(-8deg)}.home-location{font-size:1.05rem;letter-spacing:.05em}.home-city{font-size:.8125rem;letter-spacing:.16em;color:var(--ink-soft);margin-top:2px}.countdown-wrap{margin-top:23px;padding-top:15px;border-top:1px solid var(--line);width:min(420px,100%)}.countdown-label{font-size:.75rem;letter-spacing:.16em;color:var(--ink-soft);margin-bottom:10px}.countdown{display:grid;grid-template-columns:repeat(4,1fr)}.countdown-unit{position:relative}.countdown-unit:not(:last-child):after{content:':';position:absolute;right:-2px;top:0;color:#b3a28d;font-family:var(--serif);font-size:1.9rem;font-weight:400}.countdown-value{font-family:var(--serif);font-size:2.35rem;line-height:1.2;font-variant-numeric:tabular-nums;font-weight:500}.countdown-unit small{display:block;font-family:var(--sans);font-size:.75rem;letter-spacing:.14em;color:var(--ink-soft);margin-top:3px}.home-bottom{font-family:var(--serif);font-style:italic;color:var(--gold);font-size:1.15rem;margin-top:17px}
.timeline{position:relative;width:min(660px,100%);margin:0 auto;padding:6px 0 4px}.timeline:before{content:'';position:absolute;width:1px;top:20px;bottom:35px;left:50%;background:linear-gradient(transparent,#a58f70 6%,#a58f70 94%,transparent)}.timeline-event{position:relative;width:50%;padding:0 40px 28px 0;text-align:right;min-height:120px}.timeline-event:nth-child(even){margin-left:50%;padding:0 0 28px 40px;text-align:left}.timeline-marker{position:absolute;right:-17px;top:3px;width:34px;height:34px;display:grid;place-items:center;border:1px solid #b6a17f;border-radius:50%;background:#ece3d4;box-shadow:0 0 0 6px rgba(239,231,216,.65)}.timeline-marker svg{width:17px;height:17px;color:var(--cocoa)}.timeline-event:nth-child(even) .timeline-marker{left:-17px;right:auto}.timeline-time{font-family:var(--serif);font-size:1.65rem;letter-spacing:.07em;color:#947957;line-height:1.35}.timeline-event h2{font-size:1.0625rem;letter-spacing:.08em;margin:5px 0}.timeline-event p{font-family:var(--sans);font-size:.875rem;line-height:1.7;color:var(--ink-soft)}.timeline-ending{text-align:center;font-family:var(--script);font-size:2rem;color:var(--gold);margin-top:-5px}
.swatches{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:20px;margin:30px auto 34px;max-width:720px}.swatch{text-align:center}.swatch-color{height:88px;width:100%;max-width:88px;aspect-ratio:1;border-radius:50% 50% 8% 8%;margin:0 auto 12px;background:var(--swatch);box-shadow:inset 0 0 0 1px rgba(45,32,19,.08),0 4px 8px rgba(56,37,13,.05);transform:rotate(var(--rotation,0deg))}.swatch-name{font-size:.875rem}.swatch-hex{font-family:var(--sans);font-size:.75rem;color:var(--ink-soft);letter-spacing:.03em;margin-top:3px}.dress-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:17px}.dress-card{padding:24px 21px 23px;background:var(--wash);border:1px solid var(--line);border-radius:3px;position:relative}.dress-card:before{content:'';position:absolute;inset:5px;border:1px solid rgba(112,87,62,.1);pointer-events:none}.dress-card>svg{color:var(--gold);width:25px;height:25px;margin-bottom:9px}.dress-card h2{font-size:1.125rem;letter-spacing:.1em;margin-bottom:10px}.dress-card p{font-family:var(--sans);font-size:.9375rem;color:var(--ink-soft);line-height:1.85}.dress-card.avoid{background:rgba(117,72,51,.035)}.dress-footnote{text-align:center;font-family:var(--sans);font-size:.875rem;margin:24px auto 0;color:var(--ink-soft);max-width:580px}
.venue-layout{display:grid;grid-template-columns:1fr 1.05fr;gap:45px;align-items:center;margin:25px auto 20px;max-width:770px}.venue-art{min-height:335px;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;isolation:isolate;border-radius:48% 48% 2px 2px;overflow:hidden;border:1px solid var(--line);background:#ded2bb}.venue-art:before{content:'';position:absolute;inset:0;z-index:-2;background:var(--art-olive-botanical-webp) center/cover;filter:contrast(.9)}.venue-art:after{content:'';position:absolute;inset:0;z-index:-1;background:linear-gradient(transparent,rgba(237,227,207,.8) 45%,rgba(237,227,207,.4))}.venue-art-title{font-size:3.2rem;letter-spacing:.06em;text-shadow:0 2px 14px #eee4d0}.venue-art-type{font-family:var(--serif);font-size:.875rem;letter-spacing:.18em}.venue-art-date{font-family:var(--serif);font-size:1.25rem;letter-spacing:.1em;margin-top:60px}.venue-address-tag{display:flex;align-items:center;gap:7px;font-size:.875rem;letter-spacing:.08em;color:var(--gold);margin-bottom:13px}.venue-info h2{font-size:1.45rem;letter-spacing:.03em;line-height:1.5}.venue-address{font-size:1rem;line-height:1.9;margin:16px 0 23px;color:var(--ink-soft)}.venue-detail{border-top:1px solid var(--line);padding-top:18px;margin-bottom:23px;display:flex;align-items:center;gap:12px}.venue-detail p{font-size:.9375rem}.venue-detail small{display:block;font-family:var(--sans);color:var(--ink-soft);font-size:.8125rem;margin-top:3px}.primary-button{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:48px;padding:12px 22px;background:var(--cocoa);color:#fff8ec;border:1px solid var(--cocoa);border-radius:3px;font-family:var(--sans);font-size:.9375rem;font-weight:400;letter-spacing:.06em;text-decoration:none;transition:background .2s,transform .2s;line-height:1.5}.primary-button:hover{background:#443023;transform:translateY(-1px)}.primary-button svg{width:18px;height:18px}.secondary-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:10px 14px;border:1px solid var(--line);background:rgba(251,247,236,.6);border-radius:3px;font-family:var(--sans);font-size:.875rem;text-decoration:none}.secondary-button:hover{background:#faf3e5}.secondary-button svg{width:17px;height:17px}.venue-actions{display:flex;flex-direction:column;align-items:stretch;gap:10px}.venue-note{font-family:var(--sans);font-size:.8125rem;line-height:1.7;margin-top:14px;color:var(--ink-soft)}
.gallery-grid{display:grid;grid-template-columns:1.15fr 1fr;gap:22px;max-width:760px;margin:auto}.photo-placeholder{position:relative;background:rgba(249,245,239,.58);border:1px solid var(--line);padding:10px;display:flex;flex-direction:column;box-shadow:0 6px 15px rgba(66,40,14,.04);transform:rotate(-1.5deg)}.photo-placeholder:nth-child(2){transform:rotate(1.7deg);margin-top:28px}.placeholder-inner{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:230px;border:1px solid rgba(130,106,78,.2);background:linear-gradient(130deg,rgba(210,198,177,.2),rgba(247,239,224,.15));color:#9f8e75;gap:12px}.placeholder-inner svg{width:34px;height:34px;stroke-width:1}.placeholder-number{font-family:var(--serif);font-style:italic;font-size:2rem;color:#ae997a}.placeholder-inner p{font-size:.875rem;letter-spacing:.08em}.photo-caption{padding:12px 5px 4px;text-align:center;font-family:var(--serif);font-size:1rem;letter-spacing:.08em}.video-placeholder{max-width:760px;margin:24px auto 0;border:1px solid var(--line);background:rgba(112,88,60,.045);min-height:125px;padding:22px;display:flex;align-items:center;justify-content:center;gap:21px}.video-symbol{width:48px;height:48px;border-radius:50%;display:grid;place-items:center;border:1px solid var(--line);color:var(--gold)}.video-symbol svg{width:18px;height:18px}.video-placeholder h2{font-size:1.0625rem;letter-spacing:.06em}.video-placeholder p{font-family:var(--sans);font-size:.875rem;color:var(--ink-soft);margin-top:4px}
.form-container{max-width:610px;margin:0 auto}.demo-banner{display:flex;align-items:flex-start;gap:9px;font-family:var(--sans);font-size:.8125rem;line-height:1.65;padding:11px 14px;margin-bottom:22px;border:1px solid rgba(139,110,71,.24);background:rgba(188,161,113,.08);border-radius:3px;color:var(--ink-soft)}.demo-banner svg{width:17px;height:17px;margin-top:2px}.field{margin-bottom:21px}.field-label,fieldset legend{display:block;font-size:.9375rem;letter-spacing:.04em;margin-bottom:8px}.required-mark{color:#9b5d44;font-family:var(--sans);margin-left:4px}.field-hint{font-family:var(--sans);font-size:.8125rem;line-height:1.65;color:var(--ink-soft);margin-top:7px}.text-input,select,textarea{display:block;width:100%;min-height:48px;border:1px solid #bcae99;background:rgba(253,251,249,.68);border-radius:3px;color:var(--ink);padding:11px 13px;font-family:var(--sans);font-size:1rem;line-height:1.5;transition:border-color .2s,box-shadow .2s}.text-input::placeholder,textarea::placeholder{color:#958673;font-weight:400}.text-input:focus,select:focus,textarea:focus{border-color:var(--cocoa);outline:0;box-shadow:0 0 0 3px rgba(116,79,45,.1)}textarea{min-height:105px;resize:vertical}fieldset{border:0;padding:0;margin:0 0 21px;min-width:0}.attendance-options{display:grid;grid-template-columns:1fr 1fr;gap:12px}.radio-card{position:relative;min-height:54px;padding:12px;display:flex;align-items:center;gap:9px;border:1px solid #bcae99;border-radius:3px;background:rgba(253,251,249,.5);font-family:var(--sans);font-size:.9375rem;cursor:pointer}.radio-card:has(input:checked){border-color:var(--cocoa);background:rgba(108,71,36,.07);box-shadow:inset 0 0 0 1px var(--cocoa)}.radio-card input{accent-color:var(--cocoa);width:17px;height:17px;flex-shrink:0;margin:0}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:18px}.form-submit{display:flex;flex-direction:column;align-items:center;gap:8px;margin-top:7px}.form-submit .primary-button{width:100%}.error-message{font-family:var(--sans);font-size:.875rem;color:#983e31;line-height:1.7;margin:8px 0 16px}.field-error{border-color:#983e31!important}.success-card{text-align:center;padding:25px 25px 28px;border:1px solid var(--line);background:rgba(251,247,238,.65)}.success-icon{display:grid;place-items:center;width:50px;height:50px;border:1px solid #a37c68;border-radius:50%;margin:0 auto 15px;color:#7e444a}.success-card h2{font-size:1.4rem;letter-spacing:.05em}.success-card>p{font-family:var(--sans);font-size:.9375rem;line-height:1.8;color:var(--ink-soft);margin-top:12px}.response-summary{margin:22px 0;text-align:left;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:14px 0;display:grid;grid-template-columns:110px 1fr;gap:8px 12px;font-family:var(--sans);font-size:.9375rem;overflow-wrap:anywhere}.response-summary dt{color:var(--ink-soft)}.response-summary dd{margin:0;white-space:pre-wrap}.success-card .secondary-button{margin-top:4px}
.upload-container{max-width:680px;margin:auto}.drop-zone{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:30px 20px;border:1px dashed #a28b6d;background:rgba(255,251,239,.4);border-radius:3px;cursor:pointer;transition:background .2s,border-color .2s}.drop-zone:hover,.drop-zone.is-dragging{background:rgba(255,251,239,.85);border-color:var(--cocoa)}.drop-zone:focus-within{outline:2px solid var(--cocoa);outline-offset:4px}.drop-zone>svg{width:31px;height:31px;margin-bottom:12px;color:var(--gold)}.drop-zone strong{font-weight:400;font-size:1rem}.drop-zone span{display:block;font-family:var(--sans);font-size:.8125rem;color:var(--ink-soft);margin-top:7px}.drop-zone input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}.photo-preview-heading{display:flex;justify-content:space-between;align-items:center;font-family:var(--sans);font-size:.875rem;margin:24px 0 12px}.photo-preview-heading small{font-size:.8125rem;color:var(--ink-soft)}.photo-preview-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:20px}.photo-preview{position:relative;border:1px solid var(--line);background:rgba(255,250,237,.7);padding:5px;min-width:0}.photo-preview img{width:100%;aspect-ratio:1;object-fit:cover;background:#e3d7c3}.photo-preview p{font-family:var(--sans);font-size:.75rem;padding:6px 3px 3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.remove-photo{position:absolute;top:10px;right:10px;width:30px;height:30px;display:grid;place-items:center;border-radius:50%;background:rgba(253,248,236,.94);box-shadow:0 2px 5px rgba(0,0,0,.12)}.remove-photo svg{width:16px;height:16px}.upload-action{margin-top:20px}.upload-action .primary-button{width:100%}.upload-progress{margin-top:14px}progress{display:block;width:100%;height:5px;border:0;border-radius:4px;background:#d6c8b2;overflow:hidden}progress::-webkit-progress-bar{background:#d6c8b2}progress::-webkit-progress-value{background:var(--cocoa);transition:width .2s}progress::-moz-progress-bar{background:var(--cocoa)}.progress-caption{display:flex;justify-content:space-between;font-family:var(--sans);font-size:.8125rem;color:var(--ink-soft);margin-top:5px}.upload-success{display:flex;align-items:flex-start;gap:11px;margin-top:18px;padding:17px;background:rgba(139,75,81,.07);border:1px solid rgba(123,66,72,.22);border-radius:3px}.upload-success svg{color:#7d4349;flex-shrink:0;margin-top:1px}.upload-success p{font-family:var(--sans);font-size:.9375rem;line-height:1.7;overflow-wrap:anywhere}.upload-success small{display:block;font-size:.8125rem;color:var(--ink-soft);margin-top:4px}.toast{position:fixed;bottom:145px;left:50%;transform:translate(-50%,12px);padding:12px 22px;background:var(--cocoa);color:#fff6e6;border-radius:4px;font-family:var(--sans);font-size:.875rem;box-shadow:0 8px 28px rgba(54,31,11,.2);z-index:120;opacity:0;pointer-events:none;transition:opacity .25s,transform .25s;max-width:calc(100vw - 36px);text-align:center}.toast.visible{opacity:1;transform:translate(-50%,0)}.noscript-note{position:fixed;z-index:300;inset:auto 15px 20px;background:var(--paper);padding:15px;border:1px solid var(--cocoa);text-align:center}
@media(min-width:1200px) and (min-height:850px){.invitation{height:calc(100svh - 72px);margin:36px auto}.language-button{top:51px}.pages{padding-top:40px}.home-content{padding-top:15px}.home-overline{margin-bottom:8px}.date-lockup{margin:27px 0 23px}.home-seal{width:74px;margin:3px auto 18px}.countdown-wrap{margin-top:30px}.home-bottom{margin-top:24px}.cover-intro{margin-bottom:30px}.envelope-button{width:min(435px,calc((100svh - 230px)*.75))}}
@media(max-width:760px){.invitation{width:100%;height:100svh;margin:0;grid-template-rows:65px minmax(0,1fr) auto;box-shadow:none}.invitation:after{inset:7px}.language-button{top:max(14px,env(safe-area-inset-top));right:17px;height:35px;min-width:74px;padding:0 9px;gap:6px}.app-header{padding:0 20px;margin-right:102px}.header-date{font-size:.8125rem;letter-spacing:.11em}.header-edition{display:none}.wordmark{font-size:22px}.wordmark .replay-icon{font-size:16px;margin-left:1px}.pages{padding:27px 26px 30px}.paper-background{background-size:auto,100% 100%}.section-header{margin-bottom:25px}.section-header h1{font-size:1.65rem;letter-spacing:.1em}.section-header .english-script{font-size:1.85rem}.section-header .lead{font-size:.9375rem;line-height:1.8;max-width:440px}.navigation-wrap{padding:0 7px max(8px,env(safe-area-inset-bottom))}.tab-bar{gap:2px}.navigation-hint{height:33px;font-size:.75rem;letter-spacing:.035em;gap:6px}.tab{min-height:60px;padding:8px 1px 7px;gap:5px;font-size:.875rem;letter-spacing:0;border-radius:3px}.tab svg{width:20px;height:20px}.tab[aria-selected=true]:before{right:5px;top:5px;width:2px;height:2px}.cover-corner{left:25px;top:19px;font-size:22px}.cover:after{inset:9px}.cover-intro{font-size:.8125rem;letter-spacing:.18em;margin-bottom:23px}.fine-line{width:24px}.envelope-button{width:min(360px,80vw,calc((100svh - 195px)*.75))}.cover-names{font-size:clamp(48px,13vw,64px)}.cover-instruction{font-size:.875rem;letter-spacing:.1em;margin-top:27px}.envelope-recipient{font-size:.8125rem}.cover-date{font-size:.75rem;letter-spacing:.12em}.cover-footer{font-size:.75rem}.home-content{padding:0}.home-overline{font-size:.8125rem;letter-spacing:.21em}.save-date{font-size:1.65rem}.names{font-size:5.2rem;line-height:1.44}.home-message{font-size:.9375rem;letter-spacing:.06em}.date-lockup{gap:18px;margin:21px 0 18px}.date-side{width:86px;font-size:.8125rem;letter-spacing:.08em;padding:7px 0}.date-middle{font-size:1.85rem}.date-middle span{font-size:.8125rem}.home-seal{width:58px;margin-bottom:10px}.home-location{font-size:1rem}.home-city{font-size:.75rem}.countdown-wrap{margin-top:20px;max-width:330px;padding-top:13px}.countdown-value{font-size:2.1rem}.countdown-label{margin-bottom:9px}.home-bottom{margin-top:14px;font-size:1.0625rem}.timeline-event{padding-right:28px;min-height:125px}.timeline-event:nth-child(even){padding-left:28px}.timeline-marker{width:30px;height:30px;right:-15px}.timeline-event:nth-child(even) .timeline-marker{left:-15px}.timeline-marker svg{width:15px;height:15px}.timeline-event h2{font-size:1rem;letter-spacing:.035em}.timeline-event p{font-size:.875rem;line-height:1.7}.timeline-time{font-size:1.6rem}.swatches{gap:12px;margin:22px auto 28px}.swatch-color{height:auto;width:100%;margin-bottom:10px}.swatch-name{font-size:.875rem;white-space:nowrap}.swatch-hex{display:none}.dress-cards{grid-template-columns:1fr;gap:12px}.dress-card{padding:19px 20px 19px 60px}.dress-card>svg{position:absolute;top:22px;left:20px;width:22px;height:22px}.dress-card h2{font-size:1.0625rem;margin-bottom:6px}.dress-card p{font-size:.9375rem;line-height:1.8}.dress-footnote{font-size:.875rem;margin-top:20px}.venue-layout{gap:25px;grid-template-columns:1fr;max-width:450px}.venue-art{min-height:210px;max-width:290px;width:100%;margin:0 auto;border-radius:145px 145px 2px 2px}.venue-art-title{font-size:2.7rem}.venue-art-type{font-size:.8125rem}.venue-art-date{margin-top:22px;font-size:1.125rem}.venue-info{text-align:center}.venue-address-tag{justify-content:center}.venue-info h2{font-size:1.35rem}.venue-address{margin:12px 0 18px;font-size:1rem}.venue-detail{justify-content:center;text-align:left;padding-top:16px;margin-bottom:20px}.venue-actions{max-width:360px;margin:auto}.venue-note{max-width:360px;margin:13px auto 0}.gallery-grid{gap:14px}.photo-placeholder{padding:7px}.placeholder-inner{min-height:200px;padding:10px;gap:10px}.placeholder-inner p{font-size:.8125rem;letter-spacing:.03em;text-align:center}.placeholder-inner svg{width:25px;height:25px}.placeholder-number{font-size:1.7rem}.photo-caption{font-size:.875rem;letter-spacing:.03em;padding:10px 0 4px}.photo-placeholder:nth-child(2){margin-top:20px}.video-placeholder{margin-top:22px;padding:20px 16px;gap:13px;min-height:120px}.video-placeholder h2{font-size:1rem}.video-placeholder p{font-size:.8125rem}.video-symbol{width:40px;height:40px;flex-shrink:0}.form-row{gap:12px}.radio-card{font-size:.875rem;padding:12px 10px;gap:7px}.field-label,fieldset legend{font-size:.9375rem}.demo-banner{padding:10px 12px;font-size:.8125rem}.success-card{padding:23px 18px}.response-summary{grid-template-columns:90px 1fr;font-size:.875rem}.photo-preview-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.drop-zone{padding:26px 16px}.drop-zone span{font-size:.8125rem}.photo-preview-heading{font-size:.8125rem}.toast{bottom:120px}.sample-note{font-size:.8125rem;align-items:flex-start;text-align:left;max-width:500px;margin-left:auto;margin-right:auto}.sample-note svg{margin-top:2px}.form-submit .field-hint{text-align:center}}
@media(max-width:374px){.pages{padding:23px 19px 28px}.header-date{font-size:.75rem;letter-spacing:.035em}.wordmark{font-size:20px;gap:4px}.names{font-size:4.7rem}.home-message{font-size:.875rem}.date-lockup{gap:12px}.tab{font-size:.8125rem}.swatches{gap:9px}.swatch-name{font-size:.8125rem}.form-row{grid-template-columns:1fr;gap:0}.attendance-options{grid-template-columns:1fr;gap:8px}.timeline-event{padding-right:23px}.timeline-event:nth-child(even){padding-left:23px}.timeline-event p{font-size:.8125rem}.gallery-grid{gap:10px}.placeholder-inner{min-height:185px}.video-placeholder{gap:10px}}
@media(max-height:690px) and (min-width:761px){.invitation{margin:12px auto;height:calc(100svh - 24px);grid-template-rows:60px minmax(0,1fr) auto}.language-button{top:24px}.pages{padding-top:20px}.envelope-button{width:calc((100svh - 160px)*.75)}.cover-intro{margin-bottom:15px}.cover-instruction{margin-top:18px}.cover-footer{margin-top:6px}}
.home-content{padding-top:0}.save-date{line-height:1.25}.names{font-size:clamp(4.5rem,8vw,6rem);line-height:1.15;margin-top:8px;margin-bottom:8px}.date-lockup{margin-top:18px;margin-bottom:15px}.home-seal{width:54px;margin:2px auto 10px}.countdown-wrap{margin-top:17px;padding-top:12px}.home-bottom{margin-top:12px;line-height:1.5}
@media(max-width:760px){.names{font-size:5.1rem;line-height:1.2}.home-seal{width:50px}.date-lockup{margin-top:17px;margin-bottom:13px}.home-bottom{font-size:1.0625rem}.envelope-recipient{max-width:88%;font-size:.75rem;letter-spacing:.14em;text-align:center}.cover-intro{max-width:88%;text-align:center}.swatches{column-gap:8px}.swatch-name{font-size:.875rem;white-space:normal;line-height:1.5}}
@media(max-width:374px){.names{font-size:4.5rem}.swatch-name{font-size:.8125rem}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-delay:0ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}.envelope-button:hover .envelope-scene{transform:rotate(-1.3deg)}.is-opening .envelope-seal{animation:none!important}.cover.is-revealing{opacity:0;visibility:hidden}}

/* Floating chapter navigation: the paper remains one stationary surface. */
.invitation{grid-template-rows:70px minmax(0,1fr)}
.navigation-wrap{position:absolute;left:22px;right:22px;bottom:max(18px,env(safe-area-inset-bottom));padding:0 8px 8px;border:1px solid rgba(252,250,248,.7);border-radius:28px;background:rgba(246,241,230,.89);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);box-shadow:0 10px 32px rgba(71,49,29,.15),0 2px 7px rgba(71,49,29,.07)}
.navigation-hint{height:31px;text-align:center;padding:0 6px}
.tab-bar{position:relative;gap:0;padding:6px;isolation:isolate}
.tab-indicator{position:absolute;left:6px;top:6px;bottom:6px;width:calc((100% - 12px)/6);border-radius:18px;background:var(--cocoa);box-shadow:0 3px 10px rgba(62,37,17,.16);transform:translateX(calc(var(--active-index,0)*100%));transition:transform .32s var(--ease);z-index:0;pointer-events:none}
.tab{z-index:1;border-radius:18px;letter-spacing:0}
.tab[aria-selected=true],.tab[aria-selected=true]:hover{background:transparent;box-shadow:none}
.tab[aria-selected=true]:before{display:none}
.tab-bar.is-dragging .tab-indicator{transition:none}
.page-scroll{touch-action:pan-y;padding-bottom:calc(var(--nav-height,110px) + 38px)}
.page{animation:chapter-enter .35s var(--ease) both}
.page.is-dragging{animation:none;transition:none;user-select:none}
@keyframes chapter-enter{from{opacity:0;transform:translateX(var(--page-enter-x,0px))}to{opacity:1;transform:translateX(0)}}
.home-mv-placeholder{width:min(420px,100%);aspect-ratio:16/9;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;margin:8px auto 3px;border:1px dashed rgba(112,87,62,.4);border-radius:5px;background:rgba(255,251,242,.25)}
.home-mv-placeholder .video-symbol{width:38px;height:38px}
.home-mv-placeholder p{font-size:.9375rem;letter-spacing:.08em}
.home-mv-placeholder small{font-family:var(--sans);font-size:.8125rem;color:var(--ink-soft)}
@media(max-width:760px){.invitation{grid-template-rows:65px minmax(0,1fr)}.navigation-wrap{left:12px;right:12px;bottom:max(14px,env(safe-area-inset-bottom));border-radius:24px;padding:0 3px 5px}.navigation-hint{font-size:.75rem;height:29px;letter-spacing:0}.tab-bar{padding:4px}.tab-indicator{left:4px;top:4px;bottom:4px;width:calc((100% - 8px)/6);border-radius:16px}.tab{font-size:.8125rem;min-height:61px;padding:8px 0;white-space:nowrap;border-radius:16px}.page-scroll{padding-bottom:calc(var(--nav-height,105px) + max(30px,env(safe-area-inset-bottom)))}.home-mv-placeholder{max-width:340px}}
@media(max-height:690px) and (min-width:761px){.invitation{grid-template-rows:60px minmax(0,1fr)}}

/* Compact invitation cards, with a stationary paper and a slim floating dock. */
.cover:before{background:#e9e1d4;opacity:1}
.is-opening .envelope-seal{animation:none;transition:none}
h1[tabindex="-1"]:focus{outline:none}
.invitation{grid-template-rows:56px minmax(0,1fr)}
.page-scroll{padding-bottom:0;margin-bottom:calc(var(--nav-height,56px) + max(28px,env(safe-area-inset-bottom)));scroll-behavior:auto}
.pages{position:relative;min-height:100%;padding:16px 36px 20px}
.page{animation:chapter-enter .26s var(--ease) both}
.page.is-dragging,.page.swipe-preview{animation:none;will-change:transform;user-select:none}
.page.swipe-preview{position:absolute;margin:0;pointer-events:none}
.navigation-wrap{left:max(14px,calc((100% - 760px)/2));right:max(14px,calc((100% - 760px)/2));bottom:max(14px,env(safe-area-inset-bottom));padding:5px;border-radius:40px;background:rgba(248,244,235,.94);box-shadow:0 7px 22px rgba(71,49,29,.14),inset 0 1px 0 #fffaf0}
.navigation-hint{position:absolute;bottom:calc(100% + 8px);left:0;right:0;height:auto;font-size:.6875rem;letter-spacing:.04em;pointer-events:none}
.navigation-hint.has-explored{display:none}
.navigation-hint>span:last-child{display:none}
.tab-bar{display:flex;padding:0;gap:0;max-width:none}
.tab{flex:1 1 0;min-width:0;min-height:44px;padding:0 2px;flex-direction:row;gap:5px;font-size:.75rem;letter-spacing:0;border-radius:30px;white-space:nowrap}
.tab[aria-selected=true]{flex:2.25 1 0}
.tab span{display:none}.tab[aria-selected=true] span{display:inline}
.tab svg{width:19px;height:19px}
.tab-indicator{left:0;top:0;bottom:0;border-radius:30px;transition:transform .26s var(--ease),width .26s var(--ease);background:linear-gradient(115deg,#ac9270,#93764f)}
.tab[aria-selected=true]{color:#fffaf0}
.tab-bar.is-dragging .tab-indicator{transition:none}
.section-header{margin-bottom:18px}.section-header .eyebrow,.section-header .lead{display:none}
.section-header h1{font-size:1.65rem;margin:0 0 3px;line-height:1.4}
.section-header .english-script{font-size:1.65rem;margin:0;line-height:1.2}
.home-content{padding:0}.names{font-size:clamp(4rem,7.5vw,5.5rem);line-height:1.2;margin:0 0 8px}
.home-mv-placeholder{width:min(320px,100%,calc((100svh - 405px)*1.7778));min-width:200px;max-width:100%;aspect-ratio:16/9;margin:0 auto 4px;gap:4px}
.home-mv-placeholder .video-symbol{width:30px;height:30px}.home-mv-placeholder p{font-size:.875rem}.home-mv-placeholder small{font-size:.75rem}
.date-lockup{margin:12px 0 8px;gap:20px}.date-side{padding:5px 0}.date-middle{font-size:1.8rem}.date-middle span{margin-top:2px}
.home-location{font-size:1.05rem}.home-city{font-size:.75rem;line-height:1.5}
.countdown-wrap{margin-top:12px;padding-top:10px;width:min(350px,100%)}.countdown-label{margin-bottom:5px;font-size:.6875rem}.countdown-value{font-size:2rem}.countdown-unit small{margin-top:0}
.timeline{max-width:600px;padding:0}.timeline-event{min-height:0;padding:0 32px 15px 0}.timeline-event:nth-child(even){padding:0 0 15px 32px}
.timeline-event .timeline-time{font-size:1.45rem;line-height:1.15}.timeline-event h2{font-size:1rem;margin:2px 0;line-height:1.4}.timeline-event p:not(.timeline-time){font-size:.8125rem;line-height:1.4}
.timeline-marker{width:28px;height:28px;right:-14px}.timeline-event:nth-child(even) .timeline-marker{left:-14px}.timeline-marker svg{width:15px;height:15px}.timeline-ending{font-size:1.5rem;line-height:1.3;margin:0}.sample-note{margin-top:12px;line-height:1.45;font-size:.75rem}
.swatches{grid-template-columns:repeat(6,minmax(0,1fr));gap:15px;margin:22px auto;max-width:620px}
.swatch-color{position:relative;width:100%;height:auto;max-width:76px;aspect-ratio:1.16;border-radius:62% 38% 55% 45% / 48% 65% 35% 52%;margin:0 auto 7px;background:linear-gradient(145deg,rgba(255,255,255,.25),transparent 40%,rgba(0,0,0,.09)),var(--swatch);box-shadow:inset 2px 3px 3px rgba(255,255,255,.26),inset -2px -3px 3px rgba(50,32,20,.15),1px 3px 3px rgba(70,50,25,.12)}
.swatch:nth-child(2n) .swatch-color{border-radius:44% 56% 38% 62% / 66% 43% 57% 34%;transform:rotate(-12deg)}
.swatch:nth-child(3n) .swatch-color{border-radius:54% 46% 66% 34% / 38% 55% 45% 62%;transform:rotate(10deg)}
.swatch-name{font-size:.8125rem;line-height:1.4}.swatch-hex{display:none}
.dress-cards{gap:12px}.dress-card{padding:18px 16px;border-radius:10px}.dress-card:before{display:none}.dress-card>svg{width:27px;height:27px;margin-bottom:6px}.dress-card h2{font-size:1rem;margin-bottom:5px}.dress-card p{font-size:.875rem;line-height:1.6}.dress-footnote{font-size:.8125rem;margin-top:12px}
.venue-layout{gap:25px;margin:0 auto;max-width:700px}.venue-art{min-height:260px}.venue-address-tag{margin-bottom:5px}.venue-address{margin:9px 0 12px;line-height:1.6}.venue-detail{padding-top:10px;margin-bottom:12px}.venue-note{font-size:.75rem;line-height:1.5;margin-top:10px}.venue-actions{gap:8px}
.gallery-grid{max-width:610px}.placeholder-inner{min-height:clamp(170px,33svh,300px)}
.demo-banner{margin-bottom:12px;padding:8px 10px;font-size:.75rem;line-height:1.45}
.field,fieldset{margin-bottom:10px}.field-label,fieldset legend{margin-bottom:4px;font-size:.875rem}
.text-input,select,textarea{min-height:42px;padding:8px 10px;font-size:1rem}.radio-card{min-height:44px;padding:8px;font-size:.875rem}
textarea{min-height:62px;height:62px}.form-row{grid-template-columns:1fr 1fr;gap:10px}.attendance-options{grid-template-columns:1fr 1fr;gap:8px}
#attendance-details>.field-hint{margin:0 0 8px!important;font-size:.75rem;line-height:1.35}
.form-submit{margin-top:4px;gap:2px}.form-submit .field-hint{margin-top:2px;font-size:.75rem}.primary-button{min-height:44px;padding:9px 16px}.secondary-button{padding:8px 12px}
.drop-zone{padding:19px 14px}.drop-zone>svg{margin-bottom:6px}.drop-zone span{font-size:.75rem;margin-top:4px}.upload-action{margin-top:12px}
.photo-preview-heading{margin:10px 0 6px}.photo-preview-grid{max-height:150px;overflow-y:auto;overscroll-behavior:contain;margin-bottom:10px}.photo-preview img{height:75px;aspect-ratio:auto}.remove-photo{width:32px;height:32px;top:6px;right:6px}
@media(max-width:760px){
 .invitation{grid-template-rows:56px minmax(0,1fr)}.language-button{top:max(11px,env(safe-area-inset-top))}.app-header{padding-left:18px}.pages{padding:14px 24px 16px}
 .names{font-size:clamp(3.8rem,17vw,5rem)}.home-mv-placeholder{width:min(300px,100%,calc((100svh - 405px)*1.7778))}
 .swatches{grid-template-columns:repeat(3,1fr);max-width:290px;gap:12px 23px;margin:14px auto 18px}.swatch-color{max-width:61px;aspect-ratio:1.35}.swatch-name{font-size:.8125rem}
 .dress-cards{grid-template-columns:1fr;gap:8px}.dress-card{padding:10px 12px 10px 50px}.dress-card>svg{position:absolute;top:14px;left:14px;width:23px;height:23px}.dress-card h2{font-size:.9375rem;margin-bottom:2px}.dress-card p{font-size:.8125rem;line-height:1.5}.dress-footnote{margin-top:8px}
 .venue-layout{grid-template-columns:1fr;gap:12px}.venue-art{min-height:110px;max-width:100%;border-radius:60px 60px 3px 3px}.venue-art-title{font-size:2rem}.venue-art-date{display:none}.venue-art-type{font-size:.75rem}.venue-info h2{font-size:1.25rem}.venue-address-tag{display:none}.venue-detail{padding-top:8px;margin-bottom:10px}.venue-detail p{font-size:.875rem}.venue-detail small{font-size:.75rem}.venue-address{font-size:.875rem}.venue-actions{flex-direction:row;max-width:none}.venue-actions>*{flex:1;white-space:nowrap;font-size:.8125rem;padding:9px 8px}
 .section-header{margin-bottom:14px}.section-header h1{font-size:1.5rem}.section-header .english-script{font-size:1.5rem}
 .gallery-grid{gap:14px}.photo-caption{font-size:.8125rem;line-height:1.5}
}
@media(max-height:700px){.pages{padding-top:10px}.names{font-size:3.8rem}.home-mv-placeholder{min-width:180px}.date-lockup{margin-top:8px;margin-bottom:5px}.countdown-wrap{margin-top:8px;padding-top:6px}.timeline-event{padding-bottom:10px}.timeline-event:nth-child(even){padding-bottom:10px}.section-header{margin-bottom:10px}.swatches{margin:10px auto 12px;row-gap:8px}.sample-note{margin-top:8px}.dress-card{padding-top:8px;padding-bottom:8px}.demo-banner{margin-bottom:8px}.field,fieldset{margin-bottom:8px}}
@media(prefers-reduced-motion:reduce){.page,.tab-indicator{animation:none!important;transition:none!important}.is-opening .envelope-seal{animation:none!important;opacity:0}}

/* Reference invitation: a short-lived, gently floating navigation cue. */
.navigation-hint{bottom:calc(100% + 12px);height:auto;padding:0 8px;z-index:12;display:flex;justify-content:center;color:#fff;font-family:var(--cjk)}
.navigation-hint>span:first-child{position:relative;display:block;max-width:100%;padding:9px 17px;background:rgba(107,70,54,.94);border-radius:999px;font-size:.8125rem;font-weight:400;letter-spacing:.08em;line-height:1.5;box-shadow:0 10px 20px -12px rgba(0,0,0,.9);animation:nav-cue-bob 2.2s ease-in-out infinite}
.navigation-hint>span:first-child:after{content:'';position:absolute;left:50%;bottom:-5px;width:10px;height:10px;transform:translateX(-50%) rotate(45deg);background:#73503e}
@keyframes nav-cue-bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}
@media(prefers-reduced-motion:reduce){.navigation-hint>span:first-child{animation:none}}
.photo-save-state{display:block;font-family:var(--sans);font-size:.75rem;color:var(--ink-soft);padding:0 3px 4px}

/* V14 — hand-poured antique bronze wax; V13 stationery and timing retained. */
:root{--ink:#532c30;--ink-soft:#87484f;--cocoa:#6f3c41;--gold:#a75c63;--paper:#f4ece2;--line:rgba(109,59,64,.22);--wash:#fbf8f580;--backdrop:#ede1d1;--scene-w:min(700px,94vw,calc((100svh - 96px)*.90));--scene-h:calc(var(--scene-w)*120/175);color-scheme:light}
body{background:var(--backdrop);height:100svh;color:var(--ink)}
.language-button{top:max(21px,env(safe-area-inset-top));right:max(24px,calc((100vw - 1100px)/2));height:34px;min-width:76px;border:1px solid #a47d6a65;border-radius:30px;background:#f6efe7b8;box-shadow:inset 0 1px #fff9;font-size:.8125rem;z-index:100}
.language-button:hover{background:#f9f5f0}
.cover{display:block;background:var(--backdrop);transition:none;cursor:default;perspective:1800px}
.cover:before{background:var(--backdrop);opacity:1}
.cover:after{inset:18px;border-color:#aa877540}
.cover-corner{top:24px;left:max(28px,calc((100vw - 1100px)/2));color:#7a4147;font-size:25px;letter-spacing:3px}
.cover-intro{position:absolute;top:calc(50% - var(--scene-h)/2 - 66px);left:0;right:0;justify-content:center;margin:0;font-size:.8125rem;letter-spacing:.24em;gap:18px;color:#784046}
.fine-line{background:#a78270;width:33px}
.envelope-button{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:var(--scene-w);height:var(--scene-h);aspect-ratio:175/120;margin:0;perspective:1800px;outline-offset:20px;isolation:isolate}
.envelope-button:hover .envelope-scene{transform:none}
.envelope-scene{inset:0;transform:none;transform-origin:50% 50%;transform-style:flat;will-change:transform;isolation:isolate}
.envelope-back{inset:0;z-index:0;background:#763f45;border-radius:1px;box-shadow:inset 0 0 0 1px #97525933,0 3px 4px #41232630,0 22px 34px -16px #3f222552}
.envelope-back:after{content:'';position:absolute;inset:0;background:var(--art-olive-botanical-webp) center/100% 100%;opacity:.16;mix-blend-mode:multiply}
.envelope-pocket{inset:0;z-index:6;display:block;padding:0;background:none;box-shadow:none;filter:drop-shadow(0 -1px .8px #341c1e45)}
.pocket-sides,.pocket-fold{position:absolute;inset:0;display:block;background:linear-gradient(#a57f6c2e,#a57f6c2e),#7b4248 var(--art-olive-botanical-webp) center/100% 100%}
.pocket-sides{clip-path:polygon(0 0,50% 55%,100% 0,100% 100%,0 100%)}
.pocket-sides:after{content:'';position:absolute;inset:0;background:linear-gradient(40deg,#26141625,transparent 45%,#faf7f20c 55%,transparent);border:1px solid #faf7f20f}
.pocket-fold{clip-path:polygon(0 100%,0 96%,50% 49%,100% 96%,100% 100%);background-position:bottom;background-size:100% 160%;filter:brightness(1.025);box-shadow:inset 0 -1px #4d292d88}
.envelope-flap{height:68%;background:none;box-shadow:none;z-index:8;transform-origin:50% 0;transform-style:flat;filter:drop-shadow(0 2px 1px #341c1e6b) drop-shadow(0 6px 5px #341c1e25);will-change:transform}
.flap-front,.flap-back{inset:0;box-shadow:none;-webkit-mask:var(--art-flap-mask-svg) center/100% 100% no-repeat;mask:var(--art-flap-mask-svg) center/100% 100% no-repeat}
.flap-front{background:linear-gradient(#a57f6c2e,#a57f6c2e),#7e444a var(--art-olive-botanical-webp) center top/100% 151%;filter:brightness(1.035)}
.flap-back{background:#87484f;box-shadow:inset 0 1px 4px #331c1e28}
.flap-back:after{content:'';position:absolute;inset:0;background:var(--art-paper-grain-svg);opacity:.18}
.envelope-flap.is-inside .flap-front{visibility:hidden}
.envelope-seal{left:42%;top:48%;width:16%;z-index:12;transform:none;transition:none;filter:drop-shadow(.35px .7px .45px #31221257) drop-shadow(1px 3px 2px #46252940)}
.envelope-seal .seal-art{filter:none;opacity:1}
/* The new wax has a real alpha silhouette; no polygon cuts its handmade rim. */
.seal-art img{clip-path:none;object-fit:contain}
.envelope-button:hover .envelope-seal{transform:none;filter:drop-shadow(.35px .7px .45px #31221257) drop-shadow(1px 3px 2px #46252940)}
.seal-glint{display:none}
.inner-letter{left:18.4%;top:-21.4291667%;right:auto;bottom:auto;width:63.2%;height:auto;aspect-ratio:100/155;display:block;padding:0;background:none;box-shadow:none;opacity:1;transform:rotate(-90deg);z-index:3;transform-origin:50% 50%;transform-style:flat;will-change:transform}
.suite-main{position:absolute;inset:0;display:block;z-index:2;background:#eee3d5;box-shadow:1px 1px 0 #f7f2eb,-1px -1px 0 #ceb9af,0 4px 9px #3c202328,0 16px 23px -16px #42232666;isolation:isolate;transform-origin:50% 50%;will-change:transform}
.main-paper-art{display:block;position:absolute;inset:0;width:100%;height:100%;object-fit:fill}
.card-copy{position:absolute;inset:23% 19% 23%;display:flex;flex-direction:column;align-items:center;text-align:center;z-index:2;color:#66373c;line-height:1.3;font-family:var(--serif);text-shadow:0 .5px #fcfaf899}
.printed-prelude{font-size:calc(var(--scene-w)*.019);font-style:italic;white-space:nowrap}
.printed-names{font-family:var(--script);font-size:calc(var(--scene-w)*.089);line-height:1.45;margin:2% -20% 6%;white-space:nowrap}
.printed-invitation{font-size:calc(var(--scene-w)*.020);line-height:1.5}
.printed-date{font-size:calc(var(--scene-w)*.020);margin-top:auto;letter-spacing:.03em;white-space:nowrap}
.printed-venue{font-size:calc(var(--scene-w)*.025);margin-top:8%;white-space:nowrap}
.printed-close{font-family:var(--script);font-size:calc(var(--scene-w)*.035);margin-top:8%;white-space:nowrap}
.card-aura{position:absolute;inset:-14%;z-index:0;background:radial-gradient(ellipse,#f9f5f0c9 12%,#f9f5ef60 48%,transparent 73%);filter:blur(15px);opacity:0;pointer-events:none}
.paper-light{position:absolute;inset:0;z-index:3;background:linear-gradient(125deg,#fdfcfaaa,transparent 45%,#f8f4ee90);mix-blend-mode:screen;opacity:0;pointer-events:none}
.cover-instruction{position:absolute;left:0;right:0;top:calc(50% + var(--scene-h)/2 + 38px);justify-content:center;font-size:.8125rem;letter-spacing:.12em;margin:0;color:#7c4349}
.touch-mark{width:5px;height:5px;background:#8c4b52;box-shadow:0 0 0 5px #884a500b;animation:none}
.cover-footer{position:absolute;top:calc(50% + var(--scene-h)/2 + 69px);left:0;right:0;text-align:center;margin:0;letter-spacing:.17em;font-size:.75rem;color:#9e555c}
.is-opening .cover-intro,.is-opening .cover-instruction,.is-opening .cover-footer,.is-opening .cover-corner{opacity:0;transition:opacity .6s}
.is-opening .envelope-seal{animation:none;transition:none}
/* Each hinge carries a complete bird. The upright bird's upper neck covers
   the bowed head, leaving its beak visible. Below this crossing, the curved
   bird remains in front, with its lower neck joined to its wing. */
.waistband{position:absolute;left:-1.5%;top:29%;width:103%;aspect-ratio:100/62;z-index:5;transform-style:flat;--head-region:polygon(59% 0,100% 0,100% 36%,69% 36%,63% 33%,59% 29%)}
.band-leaf,.band-neck,.band-shadow{position:absolute;top:0;bottom:0;width:80%;transform-style:flat;pointer-events:none}
.band-left,.band-neck,.shadow-left{left:0;--swan-mask:var(--art-swan-left-v11-webp);--swan-x:-5%;--swan-y:4.032258%;--swan-width:96.25%;--fold-origin:1.875% 68.951613%;--reverse-fill:linear-gradient(95deg,#d6c4bb 0%,#ebdecd 24%,#f4ece2 60%,#f9f5f0 100%);--surface-shade:linear-gradient(95deg,#5e323740,transparent 78%)}
.band-right,.shadow-right{right:0;--swan-mask:var(--art-swan-right-v13-webp);--swan-x:12.5%;--swan-y:9.677419%;--swan-width:92.5%;--fold-origin:98.125% 68.951613%;--reverse-fill:linear-gradient(265deg,#d9c8c0 0%,#f2e9de 27%,#fcfaf7 72%,#f7f2eb 100%);--surface-shade:linear-gradient(265deg,#5e32372d,transparent 78%)}
.band-left{z-index:3}.band-right{z-index:4}.band-neck{z-index:5}
.leaf-plane,.shadow-plane{position:absolute;inset:0;transform-origin:var(--fold-origin);transform-style:flat;will-change:transform}
.leaf-face,.neck-pass{position:absolute;inset:0;display:block;backface-visibility:visible;-webkit-backface-visibility:visible;transform:none;filter:none}
.swan-art,.swan-reverse,.swan-edge,.swan-shading,.swan-silhouette{position:absolute;left:var(--swan-x);top:var(--swan-y);width:var(--swan-width);height:auto;aspect-ratio:3/2;max-width:none;object-fit:fill;transform:none}
.swan-reverse,.swan-edge,.swan-shading,.swan-silhouette{-webkit-mask:var(--swan-mask) center/100% 100% no-repeat;mask:var(--swan-mask) center/100% 100% no-repeat}
.swan-art{filter:drop-shadow(.3px 1px .7px #6d3a3f3d) drop-shadow(.6px 2.2px 1.7px #63363a19)}
.swan-edge{background:#c0a699;transform:translate(.25px,1.1px)}
.swan-reverse{background:var(--reverse-fill);filter:drop-shadow(-.35px -.35px 0 #fcfaf7b3)}
.swan-shading{background:var(--surface-shade);opacity:var(--front-shade,0)}
.neck-pass .swan-art,.neck-pass .swan-shading{clip-path:var(--head-region)}
.neck-pass .swan-art{filter:drop-shadow(.35px 1.1px .65px #6359444a)}
.belt-paper{position:absolute;top:56.048387%;width:63.75%;height:25.806452%;display:block;background:linear-gradient(180deg,#fcfaf7,#f2eae0 78%,#ddcec7);box-shadow:0 .6px .6px #7841463d,inset 0 .6px #fefdfb;transform:none}
.band-left .belt-paper,.shadow-left .belt-paper{left:0}
.band-right .belt-paper,.shadow-right .belt-paper{right:0}
.leaf-back .belt-paper{background:var(--reverse-fill);box-shadow:0 1px 0 #c2a89b,inset 0 .5px #fbf8f4}
.band-shadow{z-index:0;opacity:var(--cast-opacity,.17);filter:blur(var(--cast-blur,.65px));transform:translate(var(--cast-x,.5px),var(--cast-y,1px));will-change:transform,filter,opacity}
.band-shadow .swan-silhouette,.band-shadow .belt-paper{background:#552e32;box-shadow:none}
.band-crease{position:absolute;top:55.322581%;height:27.258065%;width:2.3%;z-index:2;opacity:var(--crease-opacity,0);background:linear-gradient(90deg,transparent,#5b313555 40%,#fbf8f49c 58%,transparent);pointer-events:none}
.crease-left{left:.5%}.crease-right{right:.5%;transform:scaleX(-1)}
.transition-light{position:fixed;inset:0;z-index:110;pointer-events:none;opacity:0;background:radial-gradient(ellipse at 50% 48%,#f8f4ee 0%,#f5efe7 48%,#f0e7db 100%);will-change:opacity}

/* One stationary sheet fills the viewport; tabs change only its readable content. */
:root{--ink:#562f33;--ink-soft:#6c3a3f;--cocoa:#733e43;--page-gutter:clamp(28px,12vw,100px)}
.invitation{position:fixed;inset:0;width:100%;height:var(--app-height,100svh);margin:0;box-shadow:none;grid-template-rows:clamp(60px,8.5svh,76px) minmax(0,1fr);background:#eee3d5;transform:none;transition:none;opacity:0;isolation:isolate}
.invitation.is-visible{transform:none;opacity:1}.invitation:after{display:none}
.paper-background{position:absolute;inset:0;z-index:-2;overflow:hidden;background:#eee3d5;pointer-events:none}
.paper-art{position:absolute;inset:0;width:100%;height:100%;max-width:none;object-fit:cover;object-position:center;display:block;opacity:.8}
.paper-art-wide{display:none}
.app-header{width:min(1100px,calc(100% - 40px));padding:0 91px 0 0;margin:0 auto;border:0;opacity:0;transition:opacity 1.1s ease;min-width:0;z-index:4}
.has-navigation .app-header{opacity:1}
.wordmark{color:#733e43;letter-spacing:2px;font-size:24px;gap:6px}.replay-icon{opacity:.65}
.header-date{font-size:.8125rem;letter-spacing:.08em;color:#733e43}.header-edition{font-size:.75rem;letter-spacing:.11em;color:#86484e}
.language-button{top:max(17px,env(safe-area-inset-top));background:#f6f0e9ad;border-color:#a8847270;backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px)}
.page-scroll{margin-bottom:calc(var(--nav-height,54px) + max(24px,env(safe-area-inset-bottom)));padding:0;scrollbar-color:#bea395 transparent;scrollbar-width:thin;scroll-behavior:auto;overflow-y:auto;overflow-x:hidden;touch-action:pan-y;scroll-padding:20px}
.pages{padding:clamp(22px,5svh,52px) var(--page-gutter) clamp(16px,2.8svh,30px);min-height:100%;display:grid;align-items:center;position:relative}
.page{position:relative;isolation:isolate;width:100%;max-width:680px;min-height:0;margin:0 auto;padding:0;background:none;box-shadow:none;animation:chapter-enter .42s var(--ease) both}
.page:before,.page:after{content:none}
.page-home{width:min(460px,100%);aspect-ratio:auto;min-height:0;padding:0;align-self:center;background:none;box-shadow:none}
.home-content{position:static;inset:auto;display:grid;justify-items:center;align-content:center;text-align:center;padding:0;row-gap:clamp(11px,1.75svh,20px)}
.home-content>*{max-width:100%;min-width:0;margin:0}
.names{font-family:var(--script);font-weight:400;font-size:clamp(3.7rem,15vw,5.2rem);line-height:1.15;letter-spacing:0;color:#64363b;margin:0;white-space:normal;text-shadow:0 1px #fff9}
.names .ampersand{font-size:.72em;margin:0 .04em}
.home-mv-placeholder{width:245px;max-width:100%;min-width:0;height:auto;min-height:86px;aspect-ratio:auto;display:grid;grid-template-columns:30px 1fr;grid-template-rows:auto auto;align-items:center;justify-content:center;column-gap:11px;row-gap:0;margin:0;padding:16px 20px;border:1px solid #a37d6a50;border-radius:1px;background:#f3ece240;box-shadow:inset 0 1px #fff9}
.home-mv-placeholder .video-symbol{grid-row:1/3;width:28px;height:28px;border-color:#a9847299;color:#985259}
.home-mv-placeholder .video-symbol svg{width:10px;height:10px}
.home-mv-placeholder p{font-size:.9375rem;line-height:1.55;letter-spacing:.01em;align-self:end;color:#6e3b40}
.home-mv-placeholder small{font-size:.75rem;line-height:1.65;align-self:start;color:#924f56}
.date-lockup{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:18px;margin:3px 0 0;width:100%;max-width:308px}
.date-side{width:auto;padding:6px 0;font-size:.875rem;letter-spacing:.035em;border-color:#a85c6460;white-space:normal;overflow-wrap:anywhere;color:#723e43}
.date-middle{font-size:2.4rem;line-height:1.06;letter-spacing:.065em;color:#65363b}
.date-middle span{font-size:.875rem;letter-spacing:.22em;margin-top:3px;line-height:1.45}
.home-place{margin:0}.home-location{font-size:1.125rem;line-height:1.6;letter-spacing:.01em;white-space:normal;color:#63353a}
.home-city{font-size:.8125rem;line-height:1.6;letter-spacing:.15em;margin-top:2px;color:#924f56}
.countdown-wrap{width:100%;max-width:330px;margin:4px 0 0;padding-top:12px;border-top:1px solid #a37c6850}
.countdown-label{font-size:.75rem;line-height:1.6;letter-spacing:.015em;margin-bottom:7px;color:#8c4b52}
.countdown{width:100%;grid-template-columns:repeat(4,minmax(0,1fr));column-gap:4px}.countdown-unit{min-width:0;overflow-wrap:anywhere}
.countdown-value{font-size:2.1rem;line-height:1.1;font-weight:400;color:#713d42}
.countdown-unit:not(:last-child):after{font-size:1.2rem;line-height:1.7;color:#b29181}
.countdown-unit small{font-size:.75rem;letter-spacing:.06em;margin-top:3px;color:#904d54}
.section-header{margin-bottom:22px}
.section-header h1{font-size:1.5rem;letter-spacing:.06em;line-height:1.5;margin:0 0 4px;color:#67383c}
.section-header .english-script{font-size:1.7rem;line-height:1.3;margin:0;color:#a37c69}
.section-header .eyebrow,.section-header .lead{display:none}
.timeline{max-width:430px;padding:0}
.timeline:before{background:#b99c8e;top:12px;bottom:38px}
.timeline-event{padding:0 29px 19px 0;min-height:0}
.timeline-event:nth-child(even){padding:0 0 19px 29px}
.timeline-event .timeline-time{font:1.6rem/1.2 var(--serif);color:#9b535a;letter-spacing:.04em}
.timeline-event h2{font-size:1rem;line-height:1.5;letter-spacing:.015em;margin:3px 0}
.timeline-event p:not(.timeline-time){font-size:.875rem;line-height:1.55;color:#99535a}
.timeline-marker{width:26px;height:26px;right:-13px;background:#f4ece2;border-color:#bb9e90;box-shadow:0 0 0 5px #f4ede4}
.timeline-event:nth-child(even) .timeline-marker{left:-13px}.timeline-marker svg{width:13px;height:13px}
.timeline-ending{font-size:1.5rem;line-height:1.4;color:#a57f6c;margin-top:3px}
.sample-note{font-size:.75rem;line-height:1.65;margin-top:14px;color:#a0565d}
.swatches{gap:10px;max-width:370px;margin:22px auto 26px}
.swatch-name{font-size:.8125rem;line-height:1.5;color:#894a50}
.swatch-color{max-width:57px}
.dress-cards{grid-template-columns:1fr;gap:0}
.dress-card,.dress-card.avoid{border:0;border-bottom:1px solid #b99c8d40;border-radius:0;background:transparent;padding:14px 8px 14px 43px;position:relative}
.dress-card:before{display:none}.dress-card>svg{position:absolute;left:7px;top:18px;width:23px;height:23px;color:#a96067}
.dress-card h2{font-size:.9375rem;letter-spacing:.05em;margin-bottom:4px}.dress-card p{font-size:.875rem;line-height:1.65;color:#965158}
.dress-footnote{margin-top:14px;font-size:.8125rem;color:#9d545c}
.venue-layout{grid-template-columns:1fr;gap:17px;max-width:400px;margin:0 auto}
.venue-art{min-height:118px;border-radius:65% 65% 1px 1px/80% 80% 1px 1px;background:#7e444a;border-color:#99535a25;color:#f5efe6;box-shadow:inset 0 0 0 5px #e2d6d020}
.venue-art:before{background:var(--art-olive-botanical-webp) center/cover;filter:none;opacity:.52}
.venue-art:after{background:#44252825}
.venue-art-title{font-size:2.1rem;text-shadow:none;line-height:1.4}.venue-art-type{font-size:.8125rem;letter-spacing:.18em}.venue-art-date,.venue-address-tag{display:none}
.venue-info{text-align:center}.venue-info h2{font-size:1.25rem;letter-spacing:.015em}.venue-address{font-size:.9375rem;line-height:1.75;margin:10px 0 14px;color:#904e54}
.venue-detail{justify-content:center;text-align:left;margin-bottom:15px;border-color:#c1a79a4d;padding-top:12px}.venue-detail p{font-size:.875rem}.venue-detail small{font-size:.8125rem}
.venue-actions{flex-direction:row;gap:8px;max-width:none}.venue-actions>*{flex:1;font-size:.875rem;min-height:44px;padding:10px 8px;white-space:nowrap}.venue-note{font-size:.75rem;line-height:1.7;margin-top:13px;color:#a85d65}
.gallery-grid{gap:16px}.photo-placeholder{background:#f7f1ea;border-color:#bfa496;box-shadow:0 3px 8px #5c32360e}.placeholder-inner{background:linear-gradient(135deg,#ece0d1,#d7c6be);min-height:230px;color:#9c545b}.placeholder-inner p{font-size:.875rem;text-align:center}.photo-caption{font-size:.8125rem;color:#a1565e}
.demo-banner{font-size:.8125rem;line-height:1.65;padding:9px 11px;margin-bottom:17px;border-color:#bca09266;background:#e3d7d133;color:#924e55;border-radius:2px}
.field,fieldset{margin-bottom:16px}.field-label,fieldset legend{font-size:.9375rem;line-height:1.6;margin-bottom:6px;color:#713d42}
.text-input,select,textarea{min-height:47px;padding:10px 12px;border:1px solid #bea396;background:#fdfcfb9e;border-radius:2px;font-size:1rem;color:#65373b}.text-input::placeholder,textarea::placeholder{color:#a57e6b}
.text-input:focus,select:focus,textarea:focus{border-color:#a95e66;box-shadow:0 0 0 3px #af8d7c1a}
.radio-card{min-height:47px;border-color:#bea396;border-radius:2px;background:#fdfcfa80;font-size:.9375rem;padding:10px}.radio-card:has(input:checked){background:#ded0c94d;border-color:#9f565d;box-shadow:inset 0 0 0 1px #9f565d}.radio-card input{accent-color:#995259}
.field-hint{font-size:.8125rem;line-height:1.65;color:#a0565d}#attendance-details>.field-hint{font-size:.8125rem;line-height:1.65;margin-bottom:14px!important}
.form-row{gap:12px}.attendance-options{gap:10px}textarea{height:92px;min-height:92px}
.primary-button{background:#83474d;border:1px solid #83474d;color:#fdfbf9;min-height:46px;border-radius:3px;box-shadow:0 2px 4px #532c3014}.primary-button:hover{background:#6b3a3f}
.secondary-button{border-color:#ab8876;background:#f6f0e980;color:#83464c;border-radius:3px;min-height:44px}.secondary-button:hover{background:#eee3d480}
.form-submit{gap:5px;margin-top:18px}.form-submit .field-hint{font-size:.75rem}
.drop-zone{background:#e4d8d226;border-color:#b7998a;padding:24px 15px}.drop-zone:hover,.drop-zone.is-dragging{background:#e3d8d277;border-color:#a55961}.drop-zone strong{font-size:.9375rem}.drop-zone span{font-size:.8125rem;line-height:1.6;margin-top:6px}.drop-zone>svg{color:#a5806d}
.photo-preview-grid{max-height:230px}.photo-preview img{height:92px}.photo-save-state{font-size:.75rem}.remove-photo{width:32px;height:32px}
.success-card{background:#f8f4ef;border-color:#c2a99c}.response-summary{border-color:#c5ada188}.upload-success{background:#f0e7db;border-color:#bb9e8f}
.navigation-wrap{position:fixed;left:max(14px,calc((100% - 604px)/2));right:max(14px,calc((100% - 604px)/2));bottom:max(17px,env(safe-area-inset-bottom));padding:5px;border:1px solid #ffffff9e;border-radius:40px;background:#f8f3edde;box-shadow:0 7px 23px #532c301e,inset 0 1px #fff;opacity:0;visibility:hidden;transform:translateY(17px);pointer-events:none;transition:opacity .85s ease,transform 1.05s cubic-bezier(.16,1,.3,1),visibility .85s;z-index:30}
.has-navigation .navigation-wrap{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}
.tab-bar{display:flex;padding:0;gap:0}.tab{min-height:43px;font-size:.8125rem;color:#7d4349;border-radius:30px;letter-spacing:0}.tab svg{width:19px;height:19px}.tab:hover{background:#ceb9af2b;color:#6c3a3f}
.tab[aria-selected=true]{color:#fcfaf8;background:transparent;box-shadow:none}.tab[aria-selected=true]:before{display:none}.tab-indicator{background:linear-gradient(120deg,#82464c,#6f3c41);box-shadow:0 1px 3px #5a313529;border-radius:30px}
.navigation-hint>span:first-child{background:#8a4a51ed;color:#fdfbf9;font-size:.8125rem;letter-spacing:.04em;font-family:var(--cjk);padding:9px 16px;box-shadow:0 5px 10px #65373b20}
.navigation-hint>span:first-child:after{background:#8a4a51}.toast{background:#83474d;color:#fcfaf8}

.navigation-wrap{position:absolute;left:max(14px,calc((100% - 604px)/2));right:max(14px,calc((100% - 604px)/2));bottom:max(16px,env(safe-area-inset-bottom));background:#f8f3ece6;border-color:#fdfcfad9;box-shadow:0 7px 24px #63363a25,inset 0 1px #fcfaf8}
.tab{min-height:44px;font-size:.875rem}.tab svg{width:19px;height:19px}
.page :is(.field,.form-container,.upload-container,.venue-info){min-width:0}
.page :is(p,label,legend,h1,h2,dd){overflow-wrap:anywhere}
.section-header{margin-bottom:22px}.section-header h1{font-size:1.65rem;line-height:1.45;color:#5e3237}.section-header .english-script{font-size:1.85rem;color:#9a535a}
.timeline{max-width:460px}.timeline-event:not(:last-child){margin-bottom:-24px}.timeline-event p:not(.timeline-time){color:#7f444a}.timeline-ending{margin-top:8px}
.swatches{grid-template-columns:repeat(6,minmax(0,1fr));max-width:430px;gap:10px;margin:22px auto 24px}.swatch-name{color:#7d4349}.swatch-color{max-width:61px}
.dress-cards{max-width:440px;margin:auto}.dress-card p{color:#7a4147}.dress-footnote,.sample-note{color:#8d4c52}
.venue-layout{max-width:480px}.venue-art{max-width:100%}.venue-info h2{color:#68383d}
.venue-address{color:#723e43}.venue-note{color:#8d4c52}.venue-detail{color:#7e444a}
.form-container,.upload-container{max-width:510px;margin:0 auto}.demo-banner{color:#81464c;background:#f4eee58c}
.field-label,fieldset legend{color:#68383d}.field-hint{color:#8f4d54}
.text-input,select,textarea{background:#faf7f3bf}.radio-card{background:#faf6f182}.secondary-button{background:#f9f5efb3}
.gallery-grid{max-width:590px;margin:auto}.photo-placeholder{background:#f6efe79e}.placeholder-inner{min-height:260px}
/* Quiet typography still needs enough contrast on the textured sage sheet. */
.page :is(.home-mv-placeholder small,.home-city,.countdown-label,.countdown-unit small,.sample-note,.dress-footnote,.swatch-name,.dress-card p,.venue-note,.venue-detail,.field-hint,.photo-caption,.photo-save-state,.drop-zone span){color:var(--ink-soft)}
.timeline-event p:not(.timeline-time){color:var(--ink-soft)}
.timeline-event .timeline-time,.timeline-ending,.section-header .english-script{color:#7d4349}
.demo-banner{color:#6c3a3f}.text-input::placeholder,textarea::placeholder{color:#7f454a}
@media(min-aspect-ratio:1/1){.paper-art-portrait{display:none}.paper-art-wide{display:block}.pages{padding-top:clamp(22px,4svh,50px)}.page-home{width:min(460px,100%)}.home-content{row-gap:13px}.home-mv-placeholder{min-height:80px}.page-gallery{max-width:760px}.page-dress{max-width:640px}.dress-cards{grid-template-columns:repeat(3,1fr);gap:14px;max-width:640px}.dress-card,.dress-card.avoid{padding:13px 8px 13px 37px}.dress-card>svg{left:5px}.swatches{max-width:570px}.venue-layout{max-width:630px;grid-template-columns:.75fr 1.25fr;gap:28px}.venue-art{min-height:240px}.venue-actions{flex-direction:column}.venue-info{text-align:left}.venue-detail{justify-content:flex-start}.gallery-grid{max-width:620px}}
@media(max-width:760px){
 .cover:after{inset:10px}.cover-corner{left:22px;top:20px;font-size:24px}.language-button{right:18px;top:max(16px,env(safe-area-inset-top));height:32px;min-width:73px}
 .cover-intro{font-size:.8125rem;gap:13px;letter-spacing:.15em;top:calc(50% - var(--scene-h)/2 - 56px);max-width:none}.fine-line{width:24px}.cover-instruction{top:calc(50% + var(--scene-h)/2 + 28px);font-size:.8125rem;letter-spacing:.07em}.cover-footer{top:calc(50% + var(--scene-h)/2 + 57px)}
 .app-header{width:calc(100% - 36px);padding:0 86px 0 0}.wordmark{font-size:22px}.header-date{font-size:.75rem;letter-spacing:.04em}.header-edition{display:none}
 .pages{padding-top:clamp(24px,5svh,42px);padding-bottom:22px}.page-home{width:100%;max-width:380px}.names{font-size:clamp(3.6rem,15vw,4.6rem)}
 .home-content{row-gap:13px}.home-mv-placeholder{width:225px;min-height:78px;padding:12px 17px;column-gap:9px}.home-mv-placeholder p{font-size:.875rem}.date-lockup{gap:15px;max-width:300px}.date-side{font-size:.8125rem}.date-middle{font-size:2.25rem}.date-middle span{font-size:.8125rem}.home-location{font-size:1.0625rem}.home-city{font-size:.8125rem}.countdown-value{font-size:2rem}
 .section-header{margin-bottom:22px}.section-header h1{font-size:1.5rem}.section-header .english-script{font-size:1.8rem}
 .timeline-event{padding:0 26px 18px 0}.timeline-event:nth-child(even){padding:0 0 18px 26px}.timeline-event:not(:last-child){margin-bottom:-28px}.timeline-event h2{font-size:.9375rem;line-height:1.5}.timeline-event .timeline-time{font-size:1.5rem}.timeline-event p:not(.timeline-time){font-size:.8125rem;line-height:1.6}.timeline-ending{font-size:1.35rem;margin-top:5px}
 .swatches{gap:6px;max-width:340px;margin:18px auto 22px}.swatch-color{max-width:52px}.swatch-name{font-size:.75rem;line-height:1.5}
 .dress-cards{grid-template-columns:1fr;gap:0}.dress-card,.dress-card.avoid{padding:12px 0 12px 36px}.dress-card>svg{left:1px;top:15px;width:22px;height:22px}.dress-card p{font-size:.875rem;line-height:1.6}.dress-footnote{font-size:.8125rem}
 .venue-layout{grid-template-columns:1fr;gap:15px}.venue-art{min-height:118px}.venue-info{text-align:center}.venue-detail{justify-content:center}.venue-actions{flex-direction:column;gap:8px}.venue-info h2{font-size:1.25rem}.venue-address{font-size:.9375rem;line-height:1.7}.venue-note{font-size:.75rem}
 .gallery-grid{gap:14px}.placeholder-inner{min-height:230px}.photo-caption{font-size:.8125rem}
 .field-label,fieldset legend{font-size:.9375rem}.field,fieldset{margin-bottom:15px}.radio-card{font-size:.9375rem}.demo-banner{font-size:.8125rem}.form-row,.attendance-options{gap:10px}
 .navigation-wrap{left:14px;right:14px;bottom:max(15px,env(safe-area-inset-bottom));padding:5px}.tab{min-height:44px;font-size:.8125rem;gap:4px}.tab svg{width:18px;height:18px}.navigation-hint>span:first-child{font-size:.75rem;padding:8px 13px}
}
@media(max-width:430px){.form-row,.attendance-options{grid-template-columns:1fr}.gallery-grid{grid-template-columns:1fr}.photo-placeholder:nth-child(2){margin-top:0}}
@media(max-width:359px){:root{--page-gutter:26px}.header-date{display:none}.names{font-size:3.4rem}.home-mv-placeholder{width:210px;min-height:70px}.home-content{row-gap:12px}.date-lockup{gap:10px}.home-location{font-size:1rem}.countdown-value{font-size:1.8rem}.swatches{grid-template-columns:repeat(3,1fr);max-width:245px;gap:13px 18px}.swatch-name{font-size:.8125rem}.section-header h1{font-size:1.4rem}}
@media(max-height:650px){.pages{align-items:start;padding-top:20px;padding-bottom:20px}.page-home{min-height:0;aspect-ratio:auto;align-self:start}.home-content{row-gap:10px}.names{font-size:3.5rem}.home-mv-placeholder{min-height:66px;padding:9px 16px}.date-middle{font-size:2.05rem}.countdown-value{font-size:1.8rem}.countdown-wrap{padding-top:9px}.cover-intro{top:calc(50% - var(--scene-h)/2 - 40px)}.cover-instruction{top:calc(50% + var(--scene-h)/2 + 20px)}.cover-footer{top:calc(50% + var(--scene-h)/2 + 46px)}}
/* The return action shares exactly the same quiet paper pill as language. */
.language-button,.back-button{top:max(17px,env(safe-area-inset-top));height:34px;min-width:76px;padding:0 12px;display:flex;align-items:center;justify-content:center;gap:8px;border:1px solid #a8847270;border-radius:30px;background:#f6f0e9ad;box-shadow:inset 0 1px #fff9;backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);font-family:var(--sans);font-size:.8125rem;font-weight:400;line-height:1;letter-spacing:.05em;color:#733e43;transition:background .2s}
.back-button{position:fixed;left:max(24px,calc((100vw - 1100px)/2));right:auto;white-space:nowrap}
.language-button:hover,.back-button:hover{background:#f9f5f0}
.back-button:focus-visible{outline:2px solid #9f565d;outline-offset:4px}
@media(max-width:760px){.language-button,.back-button{top:max(16px,env(safe-area-inset-top));height:32px;min-width:73px;padding:0 9px;gap:6px}.back-button{left:18px}}
@media(prefers-reduced-motion:reduce){.navigation-wrap,.app-header{transition:none}.card-aura,.paper-light,.transition-light{display:none}.page{animation:none}.band-leaf,.band-shadow,.leaf-plane,.shadow-plane,.envelope-scene,.inner-letter{will-change:auto}}

/* V2-6: traffic details keep the invitation's paper and type palette. */
.home-travel-link{display:inline-flex;align-items:center;gap:9px;min-height:44px;padding:8px 18px;border:1px solid #b2928280;border-radius:24px;background:#f7f2ebc9;color:#67373c;font:inherit;font-size:.8125rem;cursor:pointer}.home-travel-link svg{width:15px;height:15px}.travel-information{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:20px;max-width:680px;margin:32px auto 8px;text-align:left}.travel-information section{padding:24px 22px;border:1px solid #c3a99c60;background:#f9f5eff0;border-radius:5px}.travel-information h2{font-size:1.2rem;font-weight:500;color:#603338;margin:0 0 10px}.travel-information .eyebrow{font-family:var(--english);font-size:.65rem;letter-spacing:.18em;margin-bottom:9px}.travel-lead{font-size:.8125rem;line-height:1.8;color:#80454b;margin:0 0 16px}.parking-link{display:flex;align-items:flex-start;gap:12px;padding:17px 0;border-top:1px solid #c3a99c60;text-decoration:none;color:inherit;min-height:44px}.parking-link:last-child{padding-bottom:0}.parking-number{font:1.25rem 'Cormorant Garamond',serif;color:#a5806d;min-width:24px}.parking-link strong{display:block;font-size:.9375rem;font-weight:500;color:#603338}.parking-address{display:block;font-size:.75rem;line-height:1.8;margin-top:7px;color:#80454b}.parking-map-label{display:inline-block;font-size:.75rem;margin-top:10px;color:#6e3b40;text-decoration:underline;text-underline-offset:4px}.shuttle-station{font-size:1rem;margin:19px 0 0;color:#69383d}.shuttle-departure{display:flex;align-items:baseline;gap:12px;margin:10px 0 20px}.shuttle-departure strong{font:500 2.8rem 'Cormorant Garamond',serif;color:#603438}.shuttle-departure span{font-size:.75rem;color:#83464c}.shuttle-details{margin:0 0 16px;font-size:.8125rem}.shuttle-details div{display:flex;justify-content:space-between;gap:16px;border-top:1px solid #c3a99c60;padding:12px 0}.shuttle-details dt{color:#8a4a51}.shuttle-details dd{margin:0;color:#5e3237}.home-travel-link:focus-visible,.parking-link:focus-visible{outline:2px solid #713d42;outline-offset:4px}.travel-information .travel-lead:last-child{margin-bottom:0}
@media(max-width:760px){.travel-information{grid-template-columns:1fr;max-width:480px;gap:16px;margin-top:24px}.travel-information section{padding:22px 20px}.travel-information .parking-address{font-size:.8125rem}.travel-information h2{font-size:1.125rem}}

/* Source: invitation-v8.css */
/* V2.6 paper and type remain the foundation. Opening surfaces are untouched. */
.invitation .page-scroll{position:absolute;inset:62px 0 calc(86px + env(safe-area-inset-bottom));margin:0;padding:0;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin}
.invitation .pages{min-height:100%;padding:12px clamp(30px,8.5vw,62px) 24px;display:grid;align-items:center}
.invitation .page{max-width:720px;width:100%;margin:auto}
.invitation .section-header{margin:0 0 24px}
.invitation .section-header h1{font-size:clamp(23px,5vw,28px);margin:0 0 4px;letter-spacing:.06em}
.invitation .section-header .english-script{font-size:clamp(28px,6.5vw,36px);line-height:1.1;margin:0;color:var(--ink-soft)}
.invitation .section-header :is(.eyebrow,.lead){display:none}
.paper-wordmark{display:block;aspect-ratio:3/1;width:100%;background:currentColor;-webkit-mask:none center/contain no-repeat;mask:none center/contain no-repeat}
.invitation .page-home{max-width:400px;aspect-ratio:auto;min-height:0}
.invitation .home-content{padding:0;row-gap:14px}
.invitation .names{width:min(100%,310px);margin:0 auto;line-height:1;color:#5f3337;font-size:inherit}
.invitation .home-mv-placeholder{display:grid;grid-template-columns:36px 1fr;grid-template-rows:auto auto;gap:2px 12px;width:min(100%,310px);min-height:0;aspect-ratio:16/8.5;padding:20px 22px;margin:0;border:1px solid #b2928285;border-radius:0;background:#f8f3ec55}
.invitation .home-mv-placeholder .video-symbol{grid-row:1/3;width:32px;height:32px;margin:0}
.invitation .home-mv-placeholder p{align-self:end;font-size:15px;margin:0}
.invitation .home-mv-placeholder small{align-self:start;margin:0;font-size:12px}
.home-film{display:block;width:100%;max-width:330px;aspect-ratio:16/9;background:#48272a;object-fit:contain}
.invitation .date-lockup{max-width:340px;margin:3px 0 0;gap:18px}
.invitation .date-side{font-size:13px;padding:7px 0;width:100px}
.invitation .date-middle{font-size:36px;line-height:1.1;white-space:nowrap}
.invitation .date-middle span{font-size:12px;margin-top:8px}
.invitation .home-location{font-size:19px;letter-spacing:.02em}
.invitation .home-city{font-size:12px;margin-top:5px;letter-spacing:.15em}
.invitation .countdown-wrap{margin:0;padding-top:12px;width:100%}
.invitation .countdown-label{font-size:11px;letter-spacing:.02em;margin-bottom:7px}
.invitation .countdown-value{font-size:34px;line-height:1.1}
.invitation .countdown-unit small{font-size:11px;margin-top:5px}
.invitation .navigation-wrap{left:max(8%,calc((100% - 540px)/2));right:max(8%,calc((100% - 540px)/2));bottom:max(25px,calc(env(safe-area-inset-bottom) + 16px));padding:4px;border-radius:32px;border:1px solid #ffffffcf;background:#f8f3ecdc;box-shadow:0 4px 15px #5e333718;min-height:52px}
.invitation .tab-bar{display:flex;gap:0;padding:0;max-width:none;min-height:44px}
.invitation .tab{flex:1 1 0;min-width:0;min-height:44px;padding:0 4px;display:flex;flex-direction:row;gap:5px;border-radius:26px;font-size:12px;line-height:1;white-space:nowrap;transition:flex .3s,color .3s;--outfit-fill:#f8f3ec}
.invitation .tab[aria-selected=true]{flex:2 1 0;--outfit-fill:#6d3a3f}
.invitation .tab span{display:none;max-width:none;overflow:visible}
.invitation .tab[aria-selected=true] span{display:inline}
.invitation .tab svg{width:20px;height:20px;min-width:20px;stroke-width:1.55}
.invitation .tab-indicator{left:0;top:0;bottom:0;border-radius:26px;box-shadow:none;background:#6d3a3f;transition:transform .3s,width .3s}
.invitation .navigation-hint{position:absolute;inset:auto 0 calc(100% + 13px);height:auto;padding:0;pointer-events:none;display:flex;justify-content:center}
.invitation .navigation-hint[hidden]{display:none}
.invitation .navigation-hint>span:first-child{font-size:12px;letter-spacing:.03em;padding:9px 16px;max-width:100%;white-space:nowrap}
.invitation .navigation-hint>span:last-child{display:none}
.invitation .page-timeline{max-width:490px}
.invitation .timeline{padding:0;max-width:440px;margin:6px auto 0}
.invitation .timeline:before{top:14px;bottom:35px;background:#b69788}
.invitation .timeline-event{width:50%;padding:0 27px 10px 0;min-height:92px;margin:0;text-align:right}
.invitation .timeline-event:nth-child(even){margin-left:50%;padding:0 0 10px 27px;text-align:left}
.invitation .timeline-marker{right:-15px;top:2px;width:30px;height:30px;border-color:#b69788;background:#f4eee5;box-shadow:0 0 0 4px #f8f3ecb3}
.invitation .timeline-event:nth-child(even) .timeline-marker{left:-15px}
.invitation .timeline-marker svg{width:16px;height:16px}
.invitation .timeline-time{display:block;font:500 28px/1.1 var(--serif);letter-spacing:.04em;color:#6c3a3f}
.invitation .timeline-event h2{font-size:15px;line-height:1.45;margin:4px 0}
.invitation .timeline-event p{font-size:11px;line-height:1.6;margin:0;color:var(--ink-soft)}
.invitation .dress-cards{display:grid;grid-template-columns:1fr;max-width:470px;gap:0}
.invitation .dress-card,.invitation .dress-card.avoid{position:relative;display:grid;grid-template-columns:50px 1fr;column-gap:22px;row-gap:5px;padding:24px 6px;background:none;border:0;border-bottom:1px solid #bca09266;border-radius:0;min-height:100px;text-align:left}
.invitation .dress-card:last-child{border-bottom:0}
.invitation .dress-card>svg{position:static;width:44px;height:48px;grid-row:1/3;align-self:center;margin:0;stroke-width:1.2;color:#8b4b51}
.invitation .dress-card h2{font-size:18px;font-weight:500;letter-spacing:.08em;margin:0}
.invitation .dress-card p{font-size:14px;line-height:1.8;margin:0}
.invitation .venue-destination{max-width:580px;margin:0 auto 28px;text-align:center}
.venue-destination h2{font-size:24px;font-weight:500;letter-spacing:.02em;margin:0 0 10px;color:#603338}
.venue-destination p{font-size:14px;line-height:1.8;color:var(--ink-soft);margin:0 0 14px}
.venue-map-link{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:44px;padding:8px 16px;border:1px solid #b99b8c;border-radius:22px;background:#f9f5f0ab;font-size:13px;text-decoration:none}
.venue-map-link svg{width:16px;height:16px}
.invitation .travel-information{margin:0 auto;max-width:680px;gap:18px}
.invitation .travel-information section{padding:22px;border-radius:4px;background:#f9f5f0b8;border-color:#bb9e8f70}
.invitation .travel-information h2{font-size:19px;margin-bottom:14px}
.invitation .parking-link{padding:17px 0}
.invitation .parking-number{font-size:26px}
.invitation .parking-link strong{font-size:15px;line-height:1.7}
.invitation .parking-address{font-size:12px;line-height:1.8;margin-top:7px}
.invitation .parking-map-label{font-size:12px;margin-top:9px}
.invitation .shuttle-departure strong{font-size:46px}
.invitation .page-gallery{max-width:780px}
.gallery-intro{text-align:center;font-size:13px;line-height:1.8;color:var(--ink-soft);margin:-6px 0 22px}
.portrait-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px 12px}
.portrait-tile,.portrait-slot{position:relative;display:block;min-width:0;width:100%;aspect-ratio:3/4;padding:0;border:0;background:#f3ebe0;overflow:hidden;border-radius:2px}
.portrait-tile img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .35s}
.portrait-tile:hover img{transform:scale(1.025)}
.portrait-tile:nth-child(7n+1),.portrait-slot:nth-child(7n+1){grid-column:1/-1;aspect-ratio:3/2}
.portrait-tile span{position:absolute;bottom:8px;right:10px;color:white;text-shadow:0 1px 3px #0009;font:14px var(--serif)}
.portrait-slot{display:flex;align-items:center;justify-content:center;gap:14px;border:1px solid #b7998a70;background:linear-gradient(150deg,#f7f2ebb0,#dfd2cbaa);color:#a95e66}
.portrait-slot span{font:italic 26px var(--serif)}.portrait-slot svg{width:26px;height:26px;stroke-width:1}
.gallery-more{display:block;margin:24px auto 0}
.photo-viewer{position:fixed;inset:0;width:100vw;max-width:none;height:100dvh;max-height:none;margin:0;padding:50px 44px;border:0;background:#2c181af5;color:#fff;overflow:hidden}
.photo-viewer::backdrop{background:#2c181a}
.photo-viewer[open]{display:grid;grid-template-columns:44px minmax(0,1fr) 44px;align-items:center;gap:4px}
.photo-viewer figure{margin:0;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;min-height:0}
.photo-viewer img{max-width:100%;max-height:calc(100% - 44px);object-fit:contain}
.photo-viewer figcaption{font-size:12px;line-height:1.6;padding:12px;text-align:center;color:#f3ebe1}
.photo-viewer button{background:#ffffff12;color:#fff;border:1px solid #ffffff40;border-radius:50%;width:44px;height:44px;font:32px/1 system-ui;cursor:pointer}
.photo-viewer button:disabled{opacity:.2}
.photo-viewer .viewer-close{position:absolute;right:18px;top:max(12px,env(safe-area-inset-top));font-size:26px}
@media(max-width:760px){.invitation .travel-information{grid-template-columns:1fr}.invitation .pages{padding-top:14px}.invitation .page-home{max-width:360px}.invitation .home-content{row-gap:13px}.photo-viewer{padding:60px 6px 20px}.photo-viewer[open]{grid-template-columns:32px minmax(0,1fr) 32px}.photo-viewer button{width:32px;height:44px;border-radius:8px}.photo-viewer .viewer-close{width:44px;border-radius:50%}.invitation .dress-card{padding:22px 3px;column-gap:17px}}
@media(max-height:740px){.invitation .home-content{row-gap:10px}.invitation .names{width:min(85%,270px)}.invitation .home-mv-placeholder{aspect-ratio:3.25;padding:13px 18px}.invitation .timeline-event{min-height:80px}.invitation .section-header{margin-bottom:18px}.invitation .timeline-time{font-size:26px}.invitation .date-middle{font-size:32px}.invitation .countdown-value{font-size:30px}}
@media(max-width:350px){.invitation .navigation-wrap{left:7%;right:7%}.invitation .tab{font-size:11px;gap:3px}.invitation .tab svg{width:18px;height:18px;min-width:18px}.invitation .pages{padding-inline:28px}.invitation .dress-card{grid-template-columns:38px 1fr;column-gap:13px}.invitation .dress-card>svg{width:35px}.venue-destination h2{font-size:21px}.invitation .timeline-event h2{font-size:14px}}
@media(prefers-reduced-motion:reduce){.portrait-tile img,.invitation .tab,.invitation .tab-indicator{transition:none}}

/* Source: guest-albums.css */
#guest-albums{max-width:620px;margin:auto;font-size:14px;line-height:1.8;color:#5e3337}
.album-intro{margin-bottom:24px}.album-intro p{margin:0 0 10px}.album-intro small{display:block;font-size:12px;color:#894a50}
.album-editor{padding:22px;background:#f9f5f0f0;border:1px solid #bda19380;border-radius:5px}
.album-editor .field-label{display:block;font-size:14px;margin:0 0 8px}.album-editor select,.album-editor .text-input{width:100%;font:16px/1.5 'Noto Serif TC',serif;min-height:46px;border:1px solid #bea396;border-radius:4px;background:#fdfcfb;color:#593034;margin-bottom:16px}
.album-current{padding:0 0 16px}.album-current strong,.album-current span{display:block}.album-current strong{font-weight:500;font-size:18px}.album-current span{font-size:12px;color:#88494f;margin-top:5px}
.album-consent{display:flex;gap:10px;align-items:flex-start;font-size:13px;cursor:pointer;padding:5px 0}.album-consent input{width:18px;height:18px;flex-shrink:0;accent-color:#703c41;margin-top:3px}
.album-helper{font-size:12px;line-height:1.8;color:#884a50;margin:8px 0 18px}
.album-code{border-top:1px solid #d1beb4;padding-top:15px;margin-top:20px;font-size:12px}.album-code p{margin:0 0 5px}
.album-text-button{background:transparent;border:0;text-decoration:underline;text-underline-offset:4px;padding:8px 0;color:#6b393e;font:inherit;min-height:44px;font-size:12px;cursor:pointer}
.album-restore{border-top:1px solid #d1beb4;margin-top:14px;padding-top:10px}.album-restore summary{min-height:44px;line-height:44px;cursor:pointer;font-size:13px}.album-restore p{font-size:12px;color:#884a50;margin:4px 0 12px}
.album-error,.album-notice{padding:12px 15px;font-size:13px;line-height:1.8;margin:14px 0;border-left:2px solid #a98573;background:#f8f3ed}.album-error{border-color:#965c42;background:#faf1e6;color:#7b432e}
.album-upload{padding:24px 0}.album-upload .drop-zone{padding:26px 15px;margin-bottom:16px;background:#f9f5f0ab;border-color:#bda193}.album-camera-symbol{display:block;font:34px/1 'Cormorant Garamond',serif;margin-bottom:12px}.album-upload>.primary-button{width:100%}.album-upload>.album-text-button{display:block;margin:4px auto 0}
.album-selected-photos{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:16px 0}
.album-selected-photos article{position:relative;min-width:0;background:#f8f4ef;padding:5px;border:1px solid #cab4a9}.album-selected-photos img{width:100%;aspect-ratio:1;object-fit:cover;display:block}.album-selected-photos small{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;font:11px/1.6 system-ui;padding-top:5px}.album-selected-photos span{display:block;font-size:11px;color:#703d42}.album-selected-photos button{position:absolute;right:8px;top:8px;width:28px;height:28px;border-radius:50%;background:#fcfaf8ed;color:#562e32;border:1px solid #d0bbb2;font:18px/1 system-ui}
.album-progress{margin-top:15px}.album-progress progress{width:100%;accent-color:#7c4248}.album-progress p{font-size:12px;margin-top:5px}
.public-albums{border-top:1px solid #bea39588;padding-top:26px;margin-top:8px}.public-album-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:15px;margin-bottom:16px}.public-album-heading h2{font-size:20px;font-weight:500;line-height:1.5;margin:0 0 5px}.public-album-heading p{font-size:12px;color:#884a50;margin:0}.public-album-heading button{flex-shrink:0;padding-top:0}
.public-album-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.public-album-card{padding:0;background:#f9f5f0;border:1px solid #c7b0a4;text-align:left;overflow:hidden;border-radius:3px;color:inherit;cursor:pointer}.public-album-card>img{width:100%;aspect-ratio:4/3;object-fit:cover;display:block}.public-album-card>span{display:block;padding:12px}.public-album-card strong{font-size:13px;font-weight:500;display:block;overflow-wrap:anywhere}.public-album-card small{display:block;font-size:11px;color:#8a4a51;margin-top:7px}.album-empty{border:1px dashed #c1a89b;padding:26px 18px;font-size:13px;color:#8b4b51;text-align:center;background:#f9f5f080}
.public-album-detail h3{font-size:20px;font-weight:500;margin:8px 0 18px}.guest-public-photos{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:16px}.guest-public-photos button{padding:0;border:0;background:#f0e7db;aspect-ratio:1;cursor:pointer}.guest-public-photos img{width:100%;height:100%;object-fit:cover;display:block}
@media(max-width:560px){.public-album-grid{grid-template-columns:1fr}.public-album-card{display:grid;grid-template-columns:100px 1fr}.public-album-card>img{height:100%;aspect-ratio:1}.album-editor{padding:18px 15px}.album-selected-photos{gap:7px}}

/* Source: invitation-v8-1.css */
/* V2.8.1: the selected button owns its complete background. */
.invitation .tab-bar .tab{flex:1 1 0;transition:color .16s,background-color .16s;justify-content:center;padding:0 3px;min-width:0;color:#82464c;background:transparent;box-shadow:none}
.invitation .tab-bar .tab[aria-selected=true]{flex:2.2 1 0;background:#6d3a3f;color:#fff;--outfit-fill:#6d3a3f}
.invitation .tab-bar .tab span{display:none;opacity:1;transform:none;width:auto;max-width:none;white-space:nowrap}
.invitation .tab-bar .tab[aria-selected=true] span{display:block}
.invitation .tab-bar .tab svg{flex:none;width:21px;height:21px;min-width:21px;stroke-linecap:round;stroke-linejoin:round}
.invitation .tab-bar .tab-indicator{display:none}
html[lang=en] .invitation .tab-bar .tab[aria-selected=true]{flex:2.65 1 0;font-size:11px;gap:4px}
.invitation .tab:focus-visible{outline:2px solid #6d3a3f;outline-offset:2px}
/* Five equidistant nodes; text height cannot move a marker. */
.day-timeline{position:relative;list-style:none;margin:0 auto;padding:0;width:100%;max-width:400px;height:clamp(350px,51svh,420px);display:grid;grid-template-rows:repeat(5,minmax(0,1fr))}
.day-timeline::before{content:"";position:absolute;top:10%;bottom:10%;left:50%;width:1px;background:#b59686;transform:translateX(-50%)}
.day-event{position:relative;display:grid;grid-template-columns:1fr 38px 1fr;column-gap:12px;align-items:center;min-height:0}
.day-marker{grid-column:2;grid-row:1;position:relative;display:grid;place-items:center;width:36px;height:36px;border:1px solid #b59686;border-radius:50%;background:#f5efe6;box-shadow:0 0 0 4px #f3ebe1;color:#82464c}
.day-marker svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round}
.day-event-copy{grid-column:1;grid-row:1;text-align:right;min-width:0}
.day-event:nth-child(even) .day-event-copy{grid-column:3;text-align:left}
.day-event time{display:block;color:#6d3a3f;font:500 25px/1.1 var(--serif);letter-spacing:.035em}
.day-event h2{font-size:15px;line-height:1.3;font-weight:500;margin:4px 0 0;letter-spacing:.02em}
.day-event p{font-size:11px;line-height:1.3;letter-spacing:.02em;margin:3px 0 0;color:#8c4c52}
.invitation .page-timeline .section-header{margin-bottom:10px}
.attire-intro{text-align:center;font-size:14px;line-height:1.7;margin:0 0 15px;color:#6d3b40}
.invitation .dress-cards{max-width:470px;margin:auto}
.invitation .dress-card{padding:18px 4px;min-height:90px}
.invitation .dress-card>svg{width:34px;height:44px;stroke-width:1.1;overflow:visible}
.invitation .dress-card.avoid>svg{width:28px;height:28px}
.invitation .dress-card p{line-height:1.8}
/* Root never scrolls away from the visual viewport when Safari opens a keyboard. */
html.envelope-opened,html.envelope-opened body{height:100%;overflow:hidden;overscroll-behavior:none}
html.envelope-opened body{position:fixed;inset:0;width:100%}
html.envelope-opened .invitation{top:var(--visible-top,0px);bottom:auto;height:var(--app-height,100svh);transform:none}
html.envelope-opened .language-button{top:calc(var(--visible-top,0px) + max(17px,env(safe-area-inset-top)))}
.invitation .page-scroll{overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch;overflow-anchor:none;scroll-padding:20px}
.invitation.is-editing .navigation-wrap{visibility:hidden;pointer-events:none}
.invitation.is-editing .page-scroll{bottom:14px}
.invitation :is(input,select,textarea){font-size:max(16px,1rem);scroll-margin:20px}
.invitation .page-upload{min-width:0}
@media(max-height:700px){.day-timeline{height:330px}.day-event time{font-size:23px}.day-event h2{font-size:14px}.day-event p{font-size:10px}.invitation .page-timeline .section-header{margin-bottom:8px}.invitation .dress-card{padding:14px 4px;min-height:80px}}
@media(max-width:350px){.day-event{column-gap:8px;grid-template-columns:1fr 34px 1fr}.day-marker{width:32px;height:32px}.invitation .tab-bar .tab svg{width:19px;height:19px;min-width:19px}.invitation .tab-bar .tab{gap:3px;font-size:11px}.invitation .dress-card p{font-size:13px}}
@media(prefers-reduced-motion:reduce){.invitation .tab-bar .tab{transition:none}}

/* Source: invitation-v8-2.css */
/* One shared content edge above the floating dock. */
.invitation{--dock-bottom:max(25px,calc(env(safe-area-inset-bottom) + 16px));--content-gap:18px;--content-top:62px;--page-top:32px;--content-bottom:calc(var(--dock-bottom) + var(--nav-height,54px) + var(--content-gap));--page-height:calc(var(--app-height,100svh) - var(--content-top) - var(--content-bottom) - var(--page-top))}
.invitation .navigation-wrap{bottom:var(--dock-bottom)}
.invitation .page-scroll{inset:var(--content-top) 0 var(--content-bottom);scroll-behavior:auto}
.invitation .pages{min-height:100%;padding:var(--page-top) clamp(30px,8.5vw,62px) 0;align-items:stretch}
.invitation .page{margin:0 auto}
.invitation :is(.page-home,.page-timeline,.page-venue,.page-upload){min-height:var(--page-height);display:flex;flex-direction:column}
.invitation .section-header{flex:none;margin:0 0 24px;text-align:center}
.invitation .section-header h1{line-height:1.5;margin:0 0 6px}
.invitation .section-header .english-script,.invitation .section-header h1.english-heading{font-family:var(--script);font-size:clamp(28px,6.9vw,36px);line-height:1.15;font-weight:400;letter-spacing:.01em;color:var(--ink-soft);text-wrap:balance;margin:0;overflow-wrap:normal}
.invitation .section-header h1.english-heading{padding:6px 0 8px}
/* The video receives available vertical space; remaining information follows it. */
.invitation .page-home{max-width:400px}
.invitation .home-content{min-height:var(--page-height);display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(140px,1fr) auto auto auto;gap:12px;align-items:center;justify-items:center;padding:0;width:100%;flex:1}
.invitation .home-mv-placeholder,.invitation .home-film{width:100%;max-width:none;height:100%;min-height:140px;aspect-ratio:auto;margin:0;padding:20px 24px}
.invitation .home-film{padding:0;object-fit:contain}
.invitation .home-mv-placeholder{grid-template-columns:36px 1fr;gap:4px 14px;background:#f8f3ec68}
.invitation .home-mv-placeholder p{font-size:16px}.invitation .home-mv-placeholder small{font-size:12px}
.invitation .date-lockup{margin:2px 0 0}.invitation .countdown-wrap{margin:0;padding-top:12px;max-width:none}
/* Equidistant, larger timeline markers fill the same page frame. */
.invitation .page-timeline{max-width:440px}
.invitation .page-timeline .section-header{margin-bottom:22px}
.invitation .day-timeline{width:100%;max-width:420px;height:auto;min-height:390px;flex:1;margin:0;grid-template-rows:repeat(5,minmax(72px,1fr));gap:0}
.invitation .day-event{grid-template-columns:1fr 42px 1fr;column-gap:14px}
.invitation .day-marker{width:40px;height:40px;box-shadow:0 0 0 4px #f3ebe1}
.invitation .day-marker svg{width:25px;height:25px;stroke-width:1.25}
.invitation .day-event time{font-size:29px;line-height:1.08}
.invitation .day-event h2{font-size:16px;line-height:1.4;margin-top:3px}
.invitation .day-event p{font-size:12px;margin-top:2px;line-height:1.3}
/* A selected label defines its width, including the longer bilingual tab names. */
html[lang] .invitation .tab-bar .tab[aria-selected=true]{flex:0 0 auto;padding:0 10px;font-size:12px;gap:5px}
html[lang=en] .invitation .tab-bar .tab[aria-selected=true]{font-size:11px}
.invitation .tab-bar .tab svg{width:22px;height:22px;min-width:22px}
/* Native disclosure controls: full-width hit areas, visible keyboard focus. */
.paper-fold{width:100%;min-width:0;margin:0;border:1px solid #bda29488;border-radius:5px;background:#f9f5f0df;overflow:visible}
.paper-fold>summary{list-style:none;display:grid;grid-template-columns:28px minmax(0,1fr) 14px;align-items:center;gap:14px;min-height:72px;padding:12px 18px;cursor:pointer;color:#623439}
.paper-fold>summary::-webkit-details-marker{display:none}
.paper-fold>summary::marker{content:""}
.paper-fold>summary:focus-visible{outline:2px solid #6d3a3f;outline-offset:3px;border-radius:5px}
.fold-icon{display:grid;place-items:center;color:#8e4c53}.fold-icon svg{width:25px;height:25px;stroke-width:1.25}
.fold-title{font-size:18px;line-height:1.35;letter-spacing:.02em;min-width:0}
.fold-title small{display:block;font-size:11px;line-height:1.5;color:#955057;margin-top:5px;letter-spacing:0;overflow-wrap:anywhere}
.fold-chevron{width:8px;height:8px;justify-self:center;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg);transition:transform .18s}
.paper-fold[open]>.fold-body{border-top:1px solid #cbb4a970}
.paper-fold[open]>summary .fold-chevron{transform:rotate(225deg)}
.paper-fold>.fold-body{padding:18px}
.invitation .venue-destination{width:100%;margin:0 auto 28px}
.invitation .venue-destination h2{font-size:clamp(22px,5.5vw,28px);line-height:1.4;margin-bottom:12px}
.invitation .venue-destination p{font-size:13px;line-height:1.9;margin-bottom:16px}
.invitation .travel-information.travel-folds{display:grid;grid-template-columns:1fr;width:100%;max-width:600px;gap:14px;margin-top:auto;margin-bottom:0}
.travel-folds .travel-lead{font-size:12px;line-height:1.8}
.travel-folds .parking-link:last-child{padding-bottom:0}
/* A closed snapshot page shows its two controls and the public gallery together. */
.invitation .page-upload{max-width:620px}
.invitation .page-upload .section-header{margin-bottom:18px}
#guest-albums{width:100%;max-width:620px;flex:1;display:flex;flex-direction:column;gap:12px;min-width:0}
#guest-albums .album-intro{margin:0 0 4px;font-size:13px;line-height:1.8;text-align:center}
#guest-albums .album-intro p{margin:0}
#guest-albums .album-editor,#guest-albums .album-upload{padding:0;margin:0}
#guest-albums .album-upload .primary-button{width:100%}
#guest-albums .album-upload .fold-body>.album-text-button{display:block;margin:auto}
#guest-albums .album-helper{font-size:12px;line-height:1.8}
#guest-albums .album-remember{margin:14px 0 0;padding-top:12px;border-top:1px solid #d1beb4}
#guest-albums #album-feedback:empty{display:none}
#guest-albums .album-error,#guest-albums .album-notice{margin:0}
#guest-albums .album-public-intro{margin:0}
#guest-albums .public-albums{margin: auto 0 0;padding-top:18px;flex:none}
#guest-albums .public-album-heading{margin-bottom:12px;gap:10px;align-items:center}
#guest-albums .public-album-heading h2{font-size:18px}
#guest-albums .public-album-heading p{font-size:11px}
#guest-albums .public-album-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
#guest-albums .public-album-card{display:block;min-width:0}
#guest-albums .public-album-card>img{height:48px;aspect-ratio:auto;width:100%}
#guest-albums .public-album-card>span{padding:6px 7px}
#guest-albums .public-album-card strong{font-size:11px;line-height:1.5;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}
#guest-albums .public-album-card small{font-size:10px;line-height:1.4;margin-top:2px}
#guest-albums .album-empty{margin:0;padding:17px 14px;font-size:12px}
.invitation.is-editing{--page-height:0px}.invitation.is-editing .page-scroll{bottom:14px}
@media(max-height:650px){.invitation{--page-top:10px}.invitation .home-content{gap:10px;grid-template-rows:auto minmax(125px,1fr) auto auto auto}.invitation .home-mv-placeholder,.invitation .home-film{min-height:125px}.invitation .day-timeline{min-height:360px;grid-template-rows:repeat(5,minmax(68px,1fr))}.invitation .day-event time{font-size:26px}.invitation .day-event h2{font-size:15px}.invitation .page-timeline .section-header{margin-bottom:16px}}
@media(max-width:350px){html[lang] .invitation .tab-bar .tab[aria-selected=true]{padding:0 7px;gap:4px;font-size:11px}.invitation .tab-bar .tab svg{width:20px;height:20px;min-width:20px}.paper-fold>summary{padding:14px;gap:10px}.fold-title{font-size:16px}.invitation .day-event{column-gap:9px}.invitation .day-marker{width:36px;height:36px}}
@media(prefers-reduced-motion:reduce){.fold-chevron{transition:none}}

/* Source: invitation-v8-3.css */
/* Identical title geometry in Chinese and English, including wrapped titles. */
.invitation .section-header h1.page-heading{margin:0;padding:0;line-height:1.5}
.invitation .heading-zh{display:block;margin-bottom:6px}
.invitation .heading-en.english-script{display:block}
.invitation .heading-zh[aria-hidden=true]{visibility:hidden;user-select:none}
.invitation .page.is-content-update{animation:none}
.timeline-translation-spacer{visibility:hidden;user-select:none}
/* Both translations size the same track, so longer English copy cannot move
   the next attire row or the venue address/button when language changes. */
.translation-slot{display:grid;min-width:0}
.translation-slot>span{grid-area:1/1;min-width:0}
.translation-slot>[aria-hidden=true]{visibility:hidden;pointer-events:none;user-select:none}
/* One connected destination card, instead of separated floating sections. */
.invitation .page-venue{max-width:560px}
.invitation .venue-guide{display:flex;flex-direction:column;flex:1;min-width:0;width:100%;border:1px solid #bca09285;border-radius:7px;background:linear-gradient(160deg,#fbf8f5b8,#f6f0e8d9);box-shadow:inset 0 1px 0 #ffffffb0,0 5px 18px #62343908;overflow:visible}
.invitation .venue-guide .venue-destination{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:14px;flex:1;width:100%;min-width:0;margin:0;padding:24px 18px 26px}
.venue-locality{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;font-size:10px;line-height:1.5;letter-spacing:.12em;color:#934f56}
.venue-locality::before,.venue-locality::after{content:"";flex:1;max-width:38px;height:1px;background:#bda29485}
.venue-locality-mark{display:grid;place-items:center;width:28px;height:28px;flex:none;border:1px solid #b7988988;border-radius:50%;background:#faf7f3b0}
.venue-locality-mark svg{width:16px;height:16px;stroke-width:1.3}
.invitation .venue-guide .venue-destination h2{font-size:clamp(21px,5.5vw,28px);line-height:1.35;margin:0;letter-spacing:.01em}
.invitation .venue-guide .venue-address{width:100%;max-width:390px;margin:0;font-size:12px;line-height:1.8;text-wrap:balance}
.venue-guide .venue-map-link{gap:12px;padding:9px 18px;min-height:44px;font-size:13px;background:#f9f5f0dd;border-color:#b69787}
.venue-guide .venue-map-link:hover{background:#f1e8dc}
.invitation .venue-guide .travel-folds{display:flex;flex-direction:column;flex:none;gap:0;width:100%;margin:0;border-top:1px solid #bda29485}
.venue-guide .paper-fold{border:0;border-radius:0;background:#faf7f3b8}
.venue-guide .paper-fold:last-child{border-radius:0 0 7px 7px}
.venue-guide .paper-fold+.paper-fold{border-top:1px solid #bda29485}
.venue-guide .paper-fold>summary{min-height:78px;padding:14px 18px}
.venue-guide .paper-fold>summary:hover{background:#f3ece26b}
.venue-guide .paper-fold>.fold-body{padding:18px;background:#fbf8f4b3}
.venue-guide .paper-fold[open]>summary{background:#f3ece280}
@media(max-height:650px){.invitation .venue-guide .venue-destination{padding-block:18px;gap:12px}.venue-guide .paper-fold>summary{min-height:72px;padding-block:12px}}
@media(max-width:350px){.invitation .venue-guide .venue-destination{padding-inline:14px}.venue-guide .paper-fold>summary{padding-inline:14px}.venue-locality{gap:7px;font-size:9px}}

/* Source: invitation-v8-4.css */
/* Keep a permanent landing space for the temporary navigation cue.
   Padding participates in the grid, so it moves the information together
   rather than translating the countdown over the venue/date above it. */
.invitation .home-content{padding-bottom:44px;gap:10px;grid-template-rows:auto minmax(100px,1fr) auto auto auto}
.invitation .home-mv-placeholder,.invitation .home-film{min-height:100px}
/* Fit the two closed travel controls beneath a more compact destination.
   The card follows its content height instead of stretching the upper panel. */
.invitation .page-venue{padding-bottom:14px}
.invitation .page-venue .section-header{margin-bottom:18px}
.invitation .venue-guide{flex:0 0 auto}
.invitation .venue-guide .venue-destination{flex:none;gap:9px;padding:14px 18px 16px}
.venue-guide .venue-locality-mark{width:24px;height:24px}
.invitation .venue-guide .venue-address{line-height:1.7}
.venue-guide .paper-fold>summary{min-height:72px;padding-block:12px}
@media(max-width:350px){.invitation .venue-guide .venue-destination{padding-inline:14px}}

/* Source: theme-v3.css */
/* V3.0.1: coffee-burgundy ink, ivory paper, and the supplied homepage monogram. */
:root{--ink:#513638;--ink-soft:#76564d;--cocoa:#71383e;--accent:#71383e;--gold:#a18157;--paper:#f3ecdf;--line:rgba(112,68,60,.22);--wash:rgba(255,249,237,.66);--backdrop:#eee5d8;--muted:#79655a;color-scheme:light}
body.edition-v3{background:#eee5d8;color:var(--ink)}
.edition-v3 .invitation,.edition-v3 .paper-background{background:#f3ecdf}
.edition-v3 .paper-background::before,.edition-v3 .paper-background::after,.edition-v3 .invitation::after{content:none}
.edition-v3 .paper-art{opacity:1;object-fit:cover;object-position:center;filter:none}
.edition-v3 .paper-art-portrait{display:block}.edition-v3 .paper-art-wide{display:none}
.edition-v3 .names{color:#71383e}
.edition-v3 :is(.language-button,.back-button){background:#f8f2e7e8;border-color:#ae8a6d59;color:#65473f;box-shadow:inset 0 1px 0 #fffaf0b3}
.edition-v3 .navigation-wrap{background:#faf4e8eb;border-color:#fff8eccc;box-shadow:0 4px 16px #44252a12,inset 0 1px 0 #fffaf5a6}
.edition-v3 .tab-bar .tab{color:#806154}
.edition-v3 .tab-bar .tab[aria-selected=true]{background:#71383e;color:#fff9ef;--outfit-fill:#71383e}
.edition-v3 .navigation-hint>span:first-child{background:#7b4c49;color:#fff9ef}
.edition-v3 .navigation-hint>span:first-child::after{background:#7b4c49;border-top-color:#7b4c49}
.edition-v3 .home-mv-placeholder{background:#fff9eb45;border-color:#a98b6b66}
.edition-v3 .venue-guide{background:linear-gradient(160deg,#fff9efc2,#f5eddeeb);border-color:#b5977b70;box-shadow:inset 0 1px 0 #fffaf0bf,0 5px 18px #58342b08}
.edition-v3 .paper-fold,.edition-v3 .venue-guide .paper-fold{background:#fff9edbd}
.edition-v3 .paper-fold>summary{color:#68383c}
.edition-v3 .venue-guide .paper-fold>.fold-body{background:#fff9ede6}
.edition-v3 .day-marker{background:#f8f0e2;color:#7e4b49;border-color:#ac8c6d;box-shadow:0 0 0 4px #f3ecdf}
.edition-v3 .toast{background:#6a3c3e;color:#fff8ef}
.rsvp-stationery{background:transparent;color:var(--ink)}
.rsvp-stationery .paper-art{background:#f3ecdf url('/assets/paper-botanical-portrait-v301.webp') center/cover no-repeat;opacity:1;filter:none}
.rsvp-stationery .paper-art::before,.rsvp-stationery .paper-art::after{content:none}
.rsvp-stationery .party-travel-label{background:#eee2d5}
.rsvp-stationery :is(input,textarea,select){accent-color:#71383e}
@media(min-aspect-ratio:1/1){.edition-v3 .paper-art-portrait{display:none}.edition-v3 .paper-art-wide{display:block}.rsvp-stationery .paper-art{background-image:url('/assets/paper-botanical-wide-v301.webp')}}

/* The supplied monogram is used as an alpha mask: exact artwork, matching ink. */
.invitation .home-content{gap:8px}
.invitation .names{display:flex;align-items:center;justify-content:center;width:100%;height:clamp(98px,17svh,124px);margin:0 auto;color:#71383e}
.invitation .home-monogram{display:block;height:100%;aspect-ratio:2400/3411;background:currentColor;-webkit-mask:url('/assets/yi-xiu-monogram-v301.png') center/contain no-repeat;mask:url('/assets/yi-xiu-monogram-v301.png') center/contain no-repeat;flex:none}

/* Source: opening-v3.css */
/* The opening is a layered paper object, independent of the invitation UI. */
:root{--v3-envelope:url('/assets/envelope-burgundy-v301.webp');--v3-liner:url('/assets/floral-liner-v3.jpg');--v3-sheet:url('/assets/paper-botanical-portrait-v301.webp');--scene-w:min(640px,calc(100vw - 44px),calc((100svh - 180px)*.84));--scene-h:calc(var(--scene-w)*5/7)}
.cover-v3{background:#eee5d8;perspective:none;overflow:hidden;isolation:isolate}
.cover-v3::before{content:'';position:absolute;inset:0;z-index:-2;background:#eee5d8;opacity:1}
.cover-v3::after{content:'';position:absolute;inset:0;border:0;z-index:-1;background:radial-gradient(ellipse at 46% 38%,#fffaf1b3,transparent 68%);pointer-events:none}
.cover-v3 .cover-intro{position:absolute;top:max(calc(env(safe-area-inset-top) + 64px),calc(50% - var(--scene-h)*.85 - 42px));left:20px;right:20px;max-width:none;color:#73554c;font-size:12px;letter-spacing:.14em;gap:16px;transition:opacity .45s}
.cover-v3 .fine-line{width:28px;background:#a98a62;opacity:.6}
.cover-v3 .opening-stage{position:absolute;left:50%;top:50%;width:var(--scene-w);height:var(--scene-h);transform:translate(-50%,-50%);aspect-ratio:7/5;border:0;margin:0;padding:0;border-radius:2px;background:none;box-shadow:none;perspective:none;isolation:isolate;opacity:1;cursor:pointer;outline-offset:12px;transition:opacity .45s ease}
.cover-v3 .opening-stage:disabled{opacity:1;cursor:default}
.opening-scene{position:absolute;inset:0;display:block;transform-origin:50% 50%;isolation:isolate}
.opening-back{position:absolute;inset:0;z-index:0;overflow:hidden;border-radius:2px;background:#682628;box-shadow:0 2px 2px #3b10192e,0 16px 24px -14px #452a2999,0 42px 72px -36px #49332d75}
.opening-liner{position:absolute;left:2.6%;right:2.6%;top:0;bottom:0;visibility:hidden;display:block;overflow:hidden;background:none;border:0;box-shadow:none}
.opening-liner:after{content:none}
.opening-pocket{position:absolute;inset:0;display:block;z-index:6;clip-path:polygon(0 7%,50% 65%,100% 7%,100% 100%,0 100%);background:#70272c var(--v3-envelope) center/100% 100% no-repeat;border-radius:2px;pointer-events:none}
.opening-pocket:after{content:none}
.opening-pocket-copy{position:absolute;left:0;right:0;bottom:6.5%;font:400 calc(var(--scene-w)*.019)/1 var(--serif);letter-spacing:.25em;color:#d4b67a;text-align:center;text-shadow:0 1px 1px #32080b66}
.opening-flap{position:absolute;left:0;right:0;top:0;height:65%;z-index:8;display:block;transform-origin:50% 0;transform-style:flat;filter:none;pointer-events:none}
.opening-flap-front,.opening-flap-back{position:absolute;inset:0;display:block;clip-path:polygon(0 0,100% 0,100% 10.77%,50% 100%,0 10.77%);backface-visibility:visible;-webkit-backface-visibility:visible}
.opening-flap-front{background:#782a30 var(--v3-envelope) center top/100% 153.846154% no-repeat}
.opening-flap-back{visibility:hidden;background:#72292e;transform:rotateY(180deg)}
.flap-lining{position:absolute;left:2.6%;right:2.6%;top:0;height:100%;display:block;overflow:hidden;clip-path:polygon(0 0,100% 0,100% 8%,50% 96%,0 8%);background:none}
.liner-upper{position:absolute;inset:0;display:block;overflow:hidden;transform:rotate(180deg)}
.liner-canvas{position:absolute;left:0;top:0;width:100%;height:calc(var(--scene-h)*1.65);max-width:none;object-fit:cover;object-position:center;display:block}
.liner-lower{top:calc(var(--scene-h)*-.65)}
.opening-hinge{position:absolute;left:2.6%;right:2.6%;top:0;height:1px;z-index:2;visibility:hidden;background:#28150f59;box-shadow:0 1px .5px #d8c4a91a;pointer-events:none}
.opening-flap-back:after{content:none}
.flap-inscription{position:absolute;top:21%;left:0;right:0;display:flex;flex-direction:column;align-items:center;gap:calc(var(--scene-w)*.016);color:#d5b77c;text-shadow:0 1px 1px #3007116b;font-family:var(--serif);font-weight:400}
.flap-inscription small{font-size:calc(var(--scene-w)*.020);letter-spacing:.26em;line-height:1.3}
.flap-inscription strong{font-size:calc(var(--scene-w)*.044);letter-spacing:.23em;font-weight:400;line-height:1.1}
.opening-seal{position:absolute;left:39%;top:46.8%;width:22%;z-index:12;display:block;transform-origin:50% 35%;filter:drop-shadow(0 3px 2px #280a0d66);pointer-events:none}
.opening-seal img{width:100%;height:auto;max-width:100%;object-fit:contain;clip-path:none}
.opening-contents{position:absolute;inset:0;z-index:3;display:block;visibility:hidden;clip-path:inset(1px 2px 6px 2px);pointer-events:none}
.opening-contents.is-released{clip-path:inset(-110% -24% 6px -24%)}
.suite-invite{position:absolute;left:39%;top:10%;width:49%;aspect-ratio:988/1326;z-index:2;display:block;transform-origin:50% 100%;background:#f6eddf;box-shadow:0 1px 0 #fff9,1px 4px 10px #25131740,2px 12px 24px -12px #250e1759}
.suite-invite-window{position:absolute;inset:0;overflow:hidden;display:block}
.suite-invite-fallback{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9%;padding:10%;border:1px solid #c6ac8359;background:#f7efdf;color:#71383e;font:400 calc(var(--scene-w)*.018)/1.5 var(--serif);text-align:center}
.suite-invite-fallback strong{font:400 calc(var(--scene-w)*.068)/1.3 var(--script)}
.suite-invite-fallback small{font-size:calc(var(--scene-w)*.013);letter-spacing:.08em}
.opening-scene img.art-unavailable{visibility:hidden}
.suite-photo.art-unavailable{visibility:hidden}
.seal-fallback{display:none;position:absolute;inset:8% 13%;place-items:center;border:4px double #d4b079;border-radius:50%;background:linear-gradient(130deg,#cfa668,#926329 55%,#c69a59);color:#513321;font:400 calc(var(--scene-w)*.07)/1 var(--serif);box-shadow:0 3px 5px #321b1f55}
.opening-seal img.art-unavailable+.seal-fallback{display:grid}
.suite-invite-window img{position:absolute;max-width:none;width:110.728745%;height:auto;left:-5.465587%;top:-6.636501%}
.suite-photo{position:absolute;left:9%;top:15%;width:40%;aspect-ratio:1088/1446;z-index:3;display:block;padding:0;background:transparent;border:0;box-shadow:none;filter:drop-shadow(1px 3px 3px #321b1f30);transform-origin:50% 90%}
.suite-photo-window{position:absolute;left:23%;top:18%;width:65%;height:69%;display:block;overflow:hidden;clip-path:ellipse(50% 50% at 50% 50%);background:#b5aa96}
.suite-photo-crop img{position:absolute;max-width:none;width:619.354839%;height:auto;left:-429.83871%;top:-75.197889%}


.cover-v3 .cover-instruction{position:absolute;left:20px;right:20px;top:calc(50% + var(--scene-h)/2 + 30px);margin:0;color:#76554b;font-size:12px;letter-spacing:.08em;gap:12px}
.cover-v3 .touch-mark{background:#8c654e;box-shadow:0 0 0 5px #8c654e0d}
.cover-v3 .cover-footer{top:auto;bottom:max(25px,calc(env(safe-area-inset-bottom) + 18px));margin:0;color:#876f60;font:12px/1.5 var(--serif);letter-spacing:.20em}
.cover-v3.is-opening :is(.cover-intro,.cover-instruction){opacity:0;transition:opacity .45s;pointer-events:none}
.cover-v3.is-opening .cover-footer{opacity:1;transition:none}
.animation-running :is(.opening-scene,.opening-flap,.opening-seal,.suite-invite,.suite-photo){will-change:transform,opacity}
.transition-light{display:block;background:#f3ecdf;opacity:0;pointer-events:none;z-index:110;will-change:opacity}
html.art-fallback .opening-stage{background:none}
@media(max-width:360px){.cover-v3 .cover-intro{font-size:11px;gap:10px}.cover-v3 .cover-footer{font-size:11px}}
@media(max-height:520px){:root{--scene-w:min(520px,80vw,calc((100svh - 125px)*.84))}.cover-v3 .cover-intro{top:28px;font-size:10px}.cover-v3 .cover-instruction{top:calc(50% + var(--scene-h)/2 + 15px);font-size:11px}.cover-v3 .cover-footer{bottom:12px;font-size:10px}}
@media(prefers-reduced-motion:reduce){.animation-running :is(.opening-scene,.opening-flap,.opening-seal,.suite-invite,.suite-photo,.suite-bouquet){will-change:auto}.cover-v3 *{transition:none!important}.transition-light{display:none}}

.suite-photo-crop{position:absolute;left:0;top:50%;width:100%;aspect-ratio:248/379;display:block;overflow:hidden;transform:translateY(-50%)}
.suite-photo-frame{position:absolute;inset:0;width:100%;height:100%;max-width:none;object-fit:contain;display:block}
/* A complete flat-lay floral piece already rests on the right front of the
   envelope. It never enters the pocket, changes shape, or grows a masked tail.
   The visible outline clears the closed flap's diagonal; the lower foliage stays
   inside the envelope's floor. The scene alone carries it during the handoff. */
.envelope-florals{position:absolute;inset:0;z-index:9;display:block;pointer-events:none}
.suite-bouquet{position:absolute;right:-3%;top:30%;width:36%;aspect-ratio:1078/1459;display:block;filter:drop-shadow(1px 2px 2px #321b1f30);pointer-events:none}
.suite-bouquet img{width:100%;height:100%;max-width:none;object-fit:contain}
/* Opacity is on the entire object: a child with visibility:visible cannot leak. */
html:not(.envelope-ready) #open-envelope{opacity:0!important;visibility:hidden!important;pointer-events:none!important}
html:not(.envelope-ready) #open-envelope .opening-scene{display:none!important}
html:not(.envelope-ready) #cover :is(.cover-intro,.cover-instruction,.cover-footer){opacity:0!important;pointer-events:none!important}
.cover-v3 #cover-loading{position:absolute;inset:auto;left:24px;right:24px;top:45%;transform:translateY(-50%);max-width:420px;margin:0 auto;color:#76554b;font:12px/1.8 var(--cjk);text-align:center}
.loading-wordmark{display:block;margin-bottom:18px;color:#71383e;font:400 25px/1.4 var(--serif);letter-spacing:.24em}
.loading-message{font-size:12px;letter-spacing:.06em}
.loading-stroke{display:block;width:40px;height:1px;margin:23px auto;background:#ad8a69;animation:paper-wait 1.8s ease-in-out infinite}
.loading-actions{display:flex;flex-direction:column;align-items:center;gap:5px;margin-top:16px}
.loading-actions button{min-height:44px;padding:8px 18px;border:1px solid #a98b6b80;border-radius:24px;background:#fff9ed99;color:#71383e;font:13px/1.5 var(--cjk)}
#cover[data-envelope-state=error] .loading-stroke{display:none}
@keyframes paper-wait{0%,100%{opacity:.35;transform:scaleX(.7)}50%{opacity:1;transform:scaleX(1)}}
@media(prefers-reduced-motion:reduce){.loading-stroke{animation:none}.cover-v3 .opening-stage{transition:none}}

/* Source: refinements-v302.css */
/* V3.0.2 — reference lettering, a gently curved schedule, and temporary cue space. */
.cover-v3 .cover-intro{letter-spacing:.08em;gap:13px}
.cover-v3 .cover-intro>span[data-i18n]{max-width:285px;line-height:1.7;text-wrap:balance}
html[lang=en] .cover-v3 .cover-intro{font-size:12px;letter-spacing:.04em}
html[lang=en] .cover-v3 .cover-instruction{font-size:11px;letter-spacing:.03em}

.invitation .home-content{padding-bottom:0;transition:padding-bottom .65s cubic-bezier(.22,.68,.23,1)}
.invitation.has-hint-space .home-content{padding-bottom:44px}
.invitation .navigation-hint{opacity:1;transition:opacity .22s ease}
.invitation .navigation-hint.is-leaving{opacity:0}
.invitation .home-place{width:100%;min-width:0;text-align:center}
.invitation .home-location{margin:0 auto 3px;width:100%;color:#71383e;line-height:1}
.restaurant-lettering{position:relative;display:block;width:100%;aspect-ratio:2172/420;overflow:hidden}
.restaurant-lettering::before{content:"";position:absolute;left:0;top:-43.333333%;width:100%;height:172.380952%;background:currentColor;-webkit-mask:url('/assets/restaurant-lettering-v302.webp') center/100% 100% no-repeat;mask:url('/assets/restaurant-lettering-v302.webp') center/100% 100% no-repeat}

.invitation .section-header .heading-lettering{--lettering-height:clamp(39px,11.5vw,47px);color:#71383e;letter-spacing:0;line-height:1}
.heading-art-line{display:flex;align-items:center;justify-content:center;height:var(--lettering-height)}
.heading-art{display:block;position:relative;overflow:hidden;flex:none;max-width:100%;aspect-ratio:var(--art-ratio);width:min(100%,calc(var(--lettering-height)*var(--art-ratio)))}
.heading-art::before{content:"";position:absolute;background:currentColor;-webkit-mask:url('/assets/heading-lettering-v302.webp') center/100% 100% no-repeat;mask:url('/assets/heading-lettering-v302.webp') center/100% 100% no-repeat;left:var(--art-left);top:var(--art-top);width:var(--art-width);height:var(--art-height)}
.invitation .page-gallery .heading-lettering{--lettering-height:clamp(50px,14vw,58px)}

.invitation .day-timeline{min-height:330px;grid-template-rows:repeat(5,minmax(66px,1fr))}
.invitation .day-timeline::before{top:0;bottom:0;width:84px;height:100%;background:url('/assets/schedule-curve-v302.svg') center/100% 100% no-repeat;opacity:.85}
.invitation .day-event{grid-template-columns:1fr 42px 1fr;column-gap:14px}
.invitation .day-marker{justify-self:center;transform:translateX(var(--curve-offset,0px))}
.invitation .day-event:nth-child(2),.invitation .day-event:nth-child(4){--curve-offset:15.12px}
.invitation .day-event:nth-child(3){--curve-offset:-15.12px}
.invitation .day-event-copy{padding-right:8px}
.invitation .day-event:nth-child(even) .day-event-copy{padding-right:0;padding-left:8px}
@media(max-width:350px){.invitation .day-timeline::before{width:60px}.invitation .day-event:nth-child(2),.invitation .day-event:nth-child(4){--curve-offset:10.8px}.invitation .day-event:nth-child(3){--curve-offset:-10.8px}.invitation .day-event{column-gap:12px}.invitation .day-event-copy{padding-right:6px}.invitation .day-event:nth-child(even) .day-event-copy{padding-left:6px}.invitation .day-event h2[lang=en]{font-size:14px}}
@media(prefers-reduced-motion:reduce){.invitation .home-content,.invitation .navigation-hint{transition:none}}

.heading-art-1{--art-ratio:2.52017937;--art-left:-40.03558719%;--art-top:-100.00000000%;--art-width:182.20640569%;--art-height:688.78923767%;}
.heading-art-2{--art-ratio:3.53299492;--art-left:-24.71264368%;--art-top:-248.22335025%;--art-width:147.12643678%;--art-height:779.69543147%;}
.heading-art-3{--art-ratio:5.51912568;--art-left:-1.28712871%;--art-top:-407.10382514%;--art-width:101.38613861%;--art-height:839.34426230%;}
.heading-art-4{--art-ratio:4.45495495;--art-left:-2.32558140%;--art-top:-449.54954955%;--art-width:103.53892821%;--art-height:691.89189189%;}
.heading-art-5{--art-ratio:2.54910714;--art-left:-38.70402802%;--art-top:-548.21428571%;--art-width:179.33450088%;--art-height:685.71428571%;}

/* Source: refinements-v303.css */
/* V3.0.3 — physical occlusion, a fixed homepage, and editorial attire. */
.invitation:not([data-active-page="home"]){--page-top:12px}
.invitation .page-timeline .section-header{margin-bottom:14px}
.invitation .page-gallery .section-header,.invitation .page-upload .section-header{margin-bottom:16px}
.invitation .page-venue .section-header{margin-bottom:14px}
.invitation .page-venue .venue-guide{flex:1}
.invitation .page-venue .venue-guide .venue-destination{flex:1}

/* The logo grows upward about its existing lower edge. */
.invitation[data-active-page="home"] .home-monogram{transform:scale(1.2);transform-origin:center bottom}
.invitation[data-active-page="home"] .page-scroll{overflow:hidden;overscroll-behavior:none;touch-action:pan-x}
.invitation[data-active-page="home"] .pages{height:100%;min-height:0;display:block;padding-top:32px}
.invitation .page-home{height:100%;min-height:0;display:block;max-width:400px}
.invitation .home-content{height:var(--home-fit-size,100%);width:var(--home-fit-size,100%);min-height:0;flex:none;align-content:stretch;grid-template-rows:auto minmax(56px,1fr) auto auto auto;gap:6px;margin-left:var(--home-fit-offset,0);transform:scale(var(--home-fit-scale,1));transform-origin:center top}
.invitation.has-hint-space .home-content{padding-bottom:var(--home-hint-space,44px)}
.invitation .home-content .home-mv-placeholder,.invitation .home-content .home-film{min-height:56px;padding:10px 18px}
.invitation .home-content .home-film{padding:0;max-height:100%}
.invitation .home-content .date-side{width:auto;min-width:0}

/* Compact keeps the same logo baseline; the video absorbs the available space. */
.invitation[data-home-layout="compact"] .home-content{gap:3px;grid-template-rows:auto minmax(50px,1fr) auto auto auto}
.invitation[data-home-layout="compact"] .home-mv-placeholder,.invitation[data-home-layout="compact"] .home-film{min-height:50px;padding:6px 14px}
.invitation[data-home-layout="compact"] .home-film{padding:0}
.invitation[data-home-layout="compact"] .date-middle{font-size:28px;line-height:1}
.invitation[data-home-layout="compact"] .date-middle span{font-size:10px;line-height:1.2;margin-top:2px}
.invitation[data-home-layout="compact"] .date-side{font-size:12px;padding:5px 0}
.invitation[data-home-layout="compact"] .restaurant-lettering{width:min(100%,228px);margin:auto}
.invitation[data-home-layout="compact"] .home-city{font-size:11px;line-height:1.4;margin-top:2px}
.invitation[data-home-layout="compact"] .countdown-wrap{padding-top:7px}
.invitation[data-home-layout="compact"] .countdown-label{font-size:10px;line-height:1.4;margin-bottom:4px}
.invitation[data-home-layout="compact"] .countdown-value{display:block;font-size:28px;line-height:1}
.invitation[data-home-layout="compact"] .countdown-unit small{font-size:10px;line-height:1.4;margin-top:2px}

/* Short phone viewports pair the logo and film instead of cropping information. */
.invitation[data-home-layout="dense"] .home-content{grid-template-columns:82px minmax(0,1fr);grid-template-areas:"logo film" "date date" "place place" "count count";grid-template-rows:minmax(76px,1fr) auto auto auto;gap:4px 14px}
.invitation[data-home-layout="dense"] .names{grid-area:logo;height:76px;align-self:end}
.invitation[data-home-layout="dense"] :is(.home-mv-placeholder,.home-film){grid-area:film;min-height:60px;max-height:94px;align-self:center;padding:8px;grid-template-columns:1fr;gap:0}
.invitation[data-home-layout="dense"] .home-film{padding:0}
.invitation[data-home-layout="dense"] .home-mv-placeholder .video-symbol{display:none}
.invitation[data-home-layout="dense"] .home-mv-placeholder p{font-size:14px;line-height:1.4}
.invitation[data-home-layout="dense"] .home-mv-placeholder small{font-size:11px;line-height:1.4}
.invitation[data-home-layout="dense"] .date-lockup{grid-area:date}
.invitation[data-home-layout="dense"] .date-middle{font-size:28px;line-height:1}
.invitation[data-home-layout="dense"] .date-middle span{font-size:10px;line-height:1.2;margin-top:2px}
.invitation[data-home-layout="dense"] .date-side{font-size:12px;padding:4px 0}
.invitation[data-home-layout="dense"] .home-place{grid-area:place}
.invitation[data-home-layout="dense"] .restaurant-lettering{width:min(100%,210px);margin:auto}
.invitation[data-home-layout="dense"] .home-city{font-size:11px;line-height:1.4;margin-top:0}
.invitation[data-home-layout="dense"] .countdown-wrap{grid-area:count;padding-top:6px}
.invitation[data-home-layout="dense"] .countdown-label{font-size:10px;line-height:1.4;margin-bottom:3px}
.invitation[data-home-layout="dense"] .countdown-value{display:block;font-size:27px;line-height:1}
.invitation[data-home-layout="dense"] .countdown-unit small{font-size:10px;line-height:1.3;margin-top:2px}

/* Landscape puts the keepsake on the left and the essential details on the right. */
.invitation[data-home-layout="landscape"] .home-content{grid-template-columns:minmax(130px,.8fr) minmax(220px,1.2fr);grid-template-rows:1fr 1fr 1fr;gap:6px 32px;grid-template-areas:"logo date" "logo place" "film count"}
.invitation[data-home-layout="landscape"] .page-home{max-width:680px}
.invitation[data-home-layout="landscape"] .names{grid-area:logo;height:clamp(54px,22svh,100px);align-self:center}
.invitation[data-home-layout="landscape"] :is(.home-mv-placeholder,.home-film){grid-area:film;min-height:38px;padding:4px 8px}
.invitation[data-home-layout="landscape"] .home-film{padding:0}
.invitation[data-home-layout="landscape"] .home-mv-placeholder p{font-size:13px;line-height:1.3}
.invitation[data-home-layout="landscape"] .home-mv-placeholder small{font-size:10px;line-height:1.3}
.invitation[data-home-layout="landscape"] .date-lockup{grid-area:date}
.invitation[data-home-layout="landscape"] .date-middle{font-size:25px;line-height:1}
.invitation[data-home-layout="landscape"] .date-middle span{font-size:10px;line-height:1;margin-top:2px}
.invitation[data-home-layout="landscape"] .date-side{font-size:11px;padding:3px 0}
.invitation[data-home-layout="landscape"] .home-place{grid-area:place}
.invitation[data-home-layout="landscape"] .restaurant-lettering{width:min(100%,208px);margin:auto}
.invitation[data-home-layout="landscape"] .home-city{font-size:10px;line-height:1.2;margin-top:0}
.invitation[data-home-layout="landscape"] .countdown-wrap{grid-area:count;padding-top:4px}
.invitation[data-home-layout="landscape"] .countdown-label{font-size:10px;line-height:1.2;margin-bottom:2px}
.invitation[data-home-layout="landscape"] .countdown-value{display:block;font-size:24px;line-height:1}
.invitation[data-home-layout="landscape"] .countdown-unit small{font-size:10px;line-height:1.2;margin-top:1px}

/* Garment linework is drawn in SVG rather than enlarged navigation icons. */
.invitation .page-dress{min-height:var(--page-height);display:flex;flex-direction:column;max-width:540px}
.invitation .page-dress .section-header{margin-bottom:14px}
.invitation .page-dress .attire-intro{font-size:14px;line-height:1.7;margin:0 0 20px;text-wrap:balance}
.attire-pair{display:grid;grid-template-columns:1fr 1fr;gap:0;margin:0;flex:1;align-content:center;min-height:200px}
.attire-look{display:flex;flex-direction:column;align-items:center;text-align:center;min-width:0;padding:12px 16px 18px}
.attire-look+.attire-look{border-left:1px solid #ae8c7140}
.attire-look .garment-art{width:64px;height:92px;display:block;fill:none;stroke:currentColor;stroke-width:1.45;stroke-linecap:round;stroke-linejoin:round;color:#71383e;flex:none}
.attire-look h2{font-size:19px;font-weight:400;letter-spacing:.06em;line-height:1.5;margin:10px 0 7px}
.attire-look p{font-size:13px;line-height:1.8;color:#76564d;margin:0;text-wrap:balance}
.attire-avoid{display:flex;align-items:flex-start;gap:13px;padding:21px 8px 16px;margin-top:20px;border-top:1px solid #ae8c7159}
.attire-avoid>svg{width:24px;height:24px;flex:none;margin-top:4px;fill:none;stroke:currentColor;stroke-width:1.15;color:#7e4b49}
.attire-avoid p{font-size:13px;line-height:1.9;text-wrap:pretty;margin:0;color:#76564d}
@media(max-height:650px){.invitation:not([data-active-page="home"]){--page-top:0px}.invitation .page-dress .attire-intro{margin-bottom:10px}.attire-pair{min-height:176px}.attire-look{padding:6px 10px 12px}.attire-look .garment-art{width:52px;height:76px}.attire-look h2{margin-top:7px;font-size:17px}.attire-avoid{margin-top:12px;padding-top:15px}.invitation[data-active-page="home"] .pages{padding-top:24px}}
@media(max-width:350px){.attire-look{padding-inline:10px}.attire-look p,.attire-avoid p{font-size:12px}.attire-avoid{padding-inline:0;gap:10px}}
@media(max-height:450px) and (min-width:480px){.invitation[data-active-page="home"] .page-scroll{top:54px}.invitation[data-active-page="home"] .pages{padding-top:6px;padding-inline:35px}}

/* Source: refinements-v304.css */
/* V3.0.4: a stable invitation homepage and optional attire inspiration. */
/* The cue floats above the countdown. Showing/hiding it never resizes a row. */
.invitation[data-active-page="home"] .home-content,
.invitation[data-active-page="home"].has-hint-space .home-content{padding-bottom:0;transition:none}
.invitation[data-active-page="home"] .date-lockup{padding-block:4px}
.invitation[data-active-page="home"] .date-side{padding-block:17px}
.invitation[data-home-layout="dense"] .date-side{padding-block:10px}
.invitation[data-home-layout="landscape"] .date-side{padding-block:6px}
.invitation[data-home-layout="regular"] .restaurant-lettering{width:92%;max-width:368px;margin-inline:auto}
.invitation[data-home-layout="compact"] .restaurant-lettering{width:min(92%,210px)}
.invitation[data-home-layout="dense"] .restaurant-lettering{width:min(92%,193px)}
.invitation[data-home-layout="landscape"] .restaurant-lettering{width:min(92%,191px)}
.invitation[data-active-page="home"] .countdown-wrap{position:relative;border-top:0}
.invitation[data-active-page="home"] .countdown-wrap::before{content:"";position:absolute;top:0;left:50%;width:66.666667%;height:1px;transform:translateX(-50%);background:#8e685a3d;pointer-events:none}

/* The garment pair is intentionally compact; inspiration adds a softer rhythm
   before the practical reminder. Extra height sits between these sections. */
.invitation .page-dress .attire-intro{margin-bottom:14px}
.invitation .page-dress .attire-pair{flex:none;min-height:0;align-content:start}
.invitation .page-dress .attire-look{padding:8px 14px 10px}
.invitation .page-dress .attire-look .garment-art{width:50px;height:75px}
.invitation .page-dress .attire-look h2{font-size:18px;line-height:1.5;margin:8px 0 6px}
.invitation .page-dress .attire-look p{font-size:13px;line-height:1.7}
.invitation .page-dress .attire-look+.attire-look{border-left:0;position:relative}
.invitation .page-dress .attire-look+.attire-look::before{content:"";position:absolute;left:0;top:20px;bottom:22px;width:1px;background:linear-gradient(transparent,#ae8c7145 20%,#ae8c7145 80%,transparent)}
.attire-palette{width:100%;padding-top:8px;margin-top:auto;text-align:center}
.attire-palette h2{font-size:14px;line-height:1.5;font-weight:400;color:#71383e;letter-spacing:.035em;margin:0 0 5px;text-wrap:balance}
.attire-palette .palette-lead{font-size:11px;line-height:1.65;letter-spacing:.01em;color:#76564d;margin:0;text-wrap:balance}
.paint-palette{list-style:none;padding:0;margin:10px 0 0;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;align-items:start}
.paint-palette li{min-width:0;display:flex;align-items:center;flex-direction:column;gap:5px}
.paint-stroke{display:block;width:100%;height:30px;max-width:70px;background:var(--paint);-webkit-mask:none center/100% 100% no-repeat;mask:none center/100% 100% no-repeat;transform:rotate(-5deg)}
.paint-palette li:nth-child(2) .paint-stroke{transform:rotate(4deg) scaleX(-1)}
.paint-palette li:nth-child(3) .paint-stroke{transform:rotate(-2deg)}
.paint-palette li:nth-child(4) .paint-stroke{transform:rotate(5deg) scaleX(-1)}
.paint-palette li:nth-child(5) .paint-stroke{transform:rotate(-4deg)}
.paint-name{font-size:10px;line-height:1.4;letter-spacing:.015em;color:#76564d;text-wrap:balance}
.invitation .page-dress .attire-avoid{padding:15px 4px 12px;margin-top:17px;gap:12px;border-top-color:#ae8c7140}
.invitation .page-dress .attire-avoid p{font-size:13px;line-height:1.8}
.invitation .page-dress .attire-avoid>svg{width:22px;height:22px;margin-top:3px}
@media(max-height:650px){
 .invitation .page-dress .section-header{margin-bottom:11px}
 .invitation .page-dress .attire-intro{margin-bottom:10px;font-size:13px}
 .invitation .page-dress .attire-look{padding:7px 12px 9px}
 .invitation .page-dress .attire-look .garment-art{width:46px;height:69px}
 .invitation .page-dress .attire-look h2{font-size:17px;margin-top:6px;margin-bottom:5px}
 .invitation .page-dress .attire-look p{font-size:12px}
 .attire-palette{padding-top:10px}
 .paint-palette{margin-top:9px}
 .paint-stroke{height:27px}
 .invitation .page-dress .attire-avoid{margin-top:14px;padding-top:13px}
}
@media(max-width:350px){.paint-palette{gap:6px}.invitation .page-dress .attire-look{padding-inline:9px}.invitation .page-dress .attire-avoid{gap:10px;padding-inline:0}}

/* Source: refinements-v305.css */
/* V3.0.5 — complete floral styling, real paint texture, readable reminders. */
.cover-v3 .cover-intro{letter-spacing:.055em;gap:12px}
.cover-v3 .cover-intro>span[data-i18n]{max-width:310px}
.cover-v3 .cover-instruction{letter-spacing:.045em}

/* Three generous, opaque paint daubs with the labels below their own colour.
   The image is a single palette photograph, never a translucent colour mask. */
.attire-palette{padding-top:14px}
.attire-palette .palette-lead{font-size:11px;line-height:1.6;letter-spacing:0}
.paint-study{width:100%;max-width:400px;height:clamp(51px,16vw,76px);margin:11px auto 0;background:none center/100% auto no-repeat;pointer-events:none}
.palette-labels{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;width:100%;max-width:400px;list-style:none;padding:0;margin:3px auto 0}
.palette-labels li{min-width:0;text-align:center;font-size:11px;line-height:1.5;letter-spacing:.015em;color:#76564d}

/* Give the reminder all the available width, retain the original ban icon,
   and wrap at whole garment names. No forced break and no hidden text row. */
.invitation .page-dress .attire-avoid{display:grid;grid-template-columns:20px minmax(0,1fr);align-items:start;gap:10px;width:100%;margin-top:15px;padding:15px 0 10px}
.invitation .page-dress .attire-avoid>svg{width:20px;height:20px;margin-top:2px}
.invitation .page-dress .attire-avoid p{width:100%;min-width:0;max-width:none;margin:0;font-size:13px;line-height:1.85;text-align:left;text-wrap:balance;word-break:normal;overflow-wrap:normal;letter-spacing:0}
.attire-avoid .avoid-term{white-space:nowrap}
@media(max-height:650px){
 .attire-palette{padding-top:10px}
 .paint-study,.palette-labels{max-width:360px}
 .paint-study{height:clamp(47px,15vw,65px);margin-top:8px}
 .invitation .page-dress .attire-avoid{margin-top:12px;padding-top:12px}
}
@media(max-width:350px){
 .cover-v3 .cover-intro{gap:8px;letter-spacing:.035em}
 .cover-v3 .cover-intro .fine-line{width:20px;flex:none}
 .palette-labels{gap:5px}
 .invitation .page-dress .attire-avoid{gap:8px}
 .invitation .page-dress .attire-avoid p{font-size:12px}
}

/* Source: refinements-v306.css */
/* V3.0.6 — everyday neutral colours and a lighter illustrated paint swipe. */
.invitation .page-dress .section-header{margin-bottom:10px}
.invitation .page-dress .attire-intro{margin-bottom:8px}
.invitation .page-dress .attire-look{padding:4px 14px 6px}
.invitation .page-dress .attire-look .garment-art{width:46px;height:69px}
.invitation .page-dress .attire-look h2{margin-top:6px;margin-bottom:4px}
.page-dress .attire-palette{padding-top:10px}
.page-dress .paint-study{max-width:360px;height:clamp(40px,12.5vw,50px);margin-top:6px;background-image:none;background-position:center;background-size:100% auto;background-repeat:no-repeat}
.page-dress .palette-labels{max-width:360px;margin-top:2px}
.invitation .page-dress .attire-avoid{margin-top:12px;padding-top:12px;padding-bottom:6px}
@media(max-height:650px){
 .invitation .page-dress .section-header{margin-bottom:9px}
 .invitation .page-dress .attire-intro{margin-bottom:7px}
 .invitation .page-dress .attire-look{padding:4px 12px 5px}
 .invitation .page-dress .attire-look .garment-art{width:44px;height:66px}
 .page-dress .attire-palette{padding-top:8px}
 .page-dress .paint-study,.page-dress .palette-labels{max-width:326px}
 .page-dress .paint-study{height:clamp(37px,12vw,46px);margin-top:5px}
 .invitation .page-dress .attire-avoid{margin-top:10px;padding-top:10px;padding-bottom:5px}
}

/* Source: refinements-v307.css */
/* V3.0.7 — compact matte pigment studies, placed with the outfit guidance. */
.invitation .page-dress .attire-palette{
  flex:none;
  margin:24px 0 20px;
  padding-top:0;
}
.page-dress .paint-study{
  max-width:340px;
  height:clamp(56px,17.5vw,70px);
  margin-top:8px;
  background-image:none;
  background-size:100% auto;
}
.page-dress .palette-labels{max-width:340px;margin-top:4px}
.invitation .page-dress .attire-avoid{
  flex:none;
  grid-template-columns:18px minmax(0,1fr);
  gap:7px;
  align-items:center;
  margin-top:auto;
  padding:14px 0 10px;
}
.invitation .page-dress .attire-avoid>svg{width:18px;height:18px;margin-top:0}
.invitation .page-dress .attire-avoid p{
  text-wrap:wrap;
  white-space:normal;
  line-height:1.7;
  letter-spacing:0;
}
.invitation .page-dress .attire-avoid p[lang="zh-Hant"]{
  font-size:clamp(11px,3.05vw,12.5px);
}
@media(max-height:650px){
  .invitation .page-dress .attire-palette{margin-top:20px;margin-bottom:18px;padding-top:0}
  .page-dress .paint-study{height:clamp(54px,17vw,65px);margin-top:7px}
  .invitation .page-dress .attire-avoid{padding-top:12px;padding-bottom:7px}
}

/* Source: refinements-v308.css */
/* V3.0.8: the complete attire page stays inside the frame above the dock. */
.invitation[data-active-page="dress"] .page-scroll{
  overflow:hidden;
  overscroll-behavior:none;
  touch-action:pan-x;
}
.invitation[data-active-page="dress"] .pages{
  height:100%;min-height:0;display:block;padding-bottom:0;
}
.invitation .page-dress{
  height:100%;min-height:0;display:block;max-width:540px;
}
.invitation .page-dress .attire-content{
  display:flex;flex-direction:column;width:100%;height:auto;min-height:0;
  transform:scale(var(--dress-fit-scale,1));transform-origin:center top;
}
.invitation .page-dress .attire-content>*{flex:none}
/* Hidden translations must not reserve a taller English row on the Chinese page. */
.invitation .page-dress .translation-slot>[aria-hidden="true"]{display:none}
.invitation .page-dress .section-header{margin-bottom:10px}
.invitation .page-dress .attire-intro{font-size:14px;line-height:1.7;margin:0 0 9px}
.invitation .page-dress .attire-pair{flex:none;min-height:0;align-content:start}
.invitation .page-dress .attire-look{padding:4px 8px 6px}
.invitation .page-dress .attire-look .garment-art{width:46px;height:69px}
.invitation .page-dress .attire-look h2{font-size:18px;line-height:1.5;margin:6px 0 4px}
.invitation .page-dress .attire-look p{font-size:13px;line-height:1.65}
.invitation .page-dress .attire-palette{
  margin:12px 0 0;padding:0;width:100%;text-align:center;
}
.invitation .page-dress .attire-palette h2{
  font-size:14px;line-height:1.5;margin:0 0 4px;letter-spacing:.035em;
}
.invitation .page-dress .palette-lead{
  font-size:11px;line-height:1.6;margin:0;letter-spacing:0;
}
.invitation .page-dress .paint-study{
  width:100%;max-width:400px;height:auto;aspect-ratio:7/1;margin:9px auto 0;
  background-image:none;
  background-position:center;background-size:100% auto;background-repeat:no-repeat;
}
.invitation .page-dress .palette-labels{
  width:100%;max-width:400px;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));
  gap:0;margin:3px auto 0;
}
.invitation .page-dress .palette-labels li{font-size:11px;line-height:1.5;letter-spacing:0}
.invitation .page-dress .attire-avoid{
  display:grid;grid-template-columns:16px minmax(0,1fr);align-items:start;
  gap:7px;width:100%;margin:24px 0 0;padding:13px 0 8px;
  border-top-color:#ae8c7138;
}
.invitation .page-dress .attire-avoid>svg{width:16px;height:16px;margin-top:2px}
.invitation .page-dress .attire-avoid p[lang]{
  margin:0;font-size:clamp(11.5px,3.1vw,12.5px);line-height:1.8;
  letter-spacing:0;white-space:normal;text-wrap:wrap;word-break:normal;overflow-wrap:normal;
}
/* Density is selected from measured content, including the active translation. */
.invitation[data-dress-layout="compact"] .page-dress .section-header{margin-bottom:6px}
.invitation[data-dress-layout="compact"] .page-dress .attire-intro{font-size:13px;margin-bottom:5px}
.invitation[data-dress-layout="compact"] .page-dress .attire-look{padding-block:2px}
.invitation[data-dress-layout="compact"] .page-dress .garment-art{height:57px;width:38px}
.invitation[data-dress-layout="compact"] .page-dress .attire-look h2{font-size:17px;margin-top:4px;margin-bottom:3px}
.invitation[data-dress-layout="compact"] .page-dress .attire-look p{font-size:12px}
.invitation[data-dress-layout="compact"] .page-dress .attire-palette{margin-top:10px}
.invitation[data-dress-layout="compact"] .page-dress .paint-study{max-width:340px;margin-top:7px}
.invitation[data-dress-layout="compact"] .page-dress .palette-labels{max-width:340px}
.invitation[data-dress-layout="compact"] .page-dress .attire-avoid{margin-top:17px;padding-top:10px;padding-bottom:4px}
.invitation[data-dress-layout="dense"] .page-dress .section-header{margin-bottom:5px}
.invitation[data-dress-layout="dense"] .page-dress .heading-zh{font-size:20px;margin-bottom:3px}
.invitation[data-dress-layout="dense"] .page-dress .heading-lettering{--lettering-height:36px}
.invitation[data-dress-layout="dense"] .page-dress .attire-intro{font-size:12px;margin-bottom:3px}
.invitation[data-dress-layout="dense"] .page-dress .attire-look{padding-block:1px}
.invitation[data-dress-layout="dense"] .page-dress .garment-art{height:45px;width:30px}
.invitation[data-dress-layout="dense"] .page-dress .attire-look h2{font-size:16px;margin:3px 0 2px}
.invitation[data-dress-layout="dense"] .page-dress .attire-look p{font-size:12px;line-height:1.5}
.invitation[data-dress-layout="dense"] .page-dress .attire-palette{margin-top:8px}
.invitation[data-dress-layout="dense"] .page-dress .attire-palette h2{font-size:13px;margin-bottom:2px}
.invitation[data-dress-layout="dense"] .page-dress .paint-study{max-width:300px;margin-top:6px}
.invitation[data-dress-layout="dense"] .page-dress .palette-labels{max-width:300px}
.invitation[data-dress-layout="dense"] .page-dress .attire-avoid{margin-top:13px;padding-top:8px;padding-bottom:3px}
/* Landscape puts the outfit pair and inspiration beside one another. */
.invitation[data-dress-layout="landscape"] .page-dress{max-width:760px}
.invitation[data-dress-layout="landscape"] .attire-content{
  display:grid;grid-template-columns:1fr 1fr;gap:5px 24px;
}
.invitation[data-dress-layout="landscape"] .page-dress .section-header{grid-column:1/-1;margin:0}
.invitation[data-dress-layout="landscape"] .page-dress .page-heading{display:flex;justify-content:center;align-items:center;gap:16px}
.invitation[data-dress-layout="landscape"] .page-dress .heading-zh{font-size:20px;margin:0}
.invitation[data-dress-layout="landscape"] .page-dress .heading-lettering{--lettering-height:32px}
.invitation[data-dress-layout="landscape"] .page-dress .attire-intro{grid-column:1/-1;font-size:12px;margin:0 0 2px}
.invitation[data-dress-layout="landscape"] .page-dress .attire-pair{align-self:center}
.invitation[data-dress-layout="landscape"] .page-dress .attire-look{padding:0 8px}
.invitation[data-dress-layout="landscape"] .page-dress .garment-art{width:28px;height:42px}
.invitation[data-dress-layout="landscape"] .page-dress .attire-look h2{font-size:15px;margin:2px 0}
.invitation[data-dress-layout="landscape"] .page-dress .attire-look p{font-size:11px;line-height:1.5}
.invitation[data-dress-layout="landscape"] .page-dress .attire-palette{align-self:center;margin:0}
.invitation[data-dress-layout="landscape"] .page-dress .attire-palette h2{font-size:13px;margin-bottom:2px}
.invitation[data-dress-layout="landscape"] .page-dress .paint-study{max-width:310px;margin-top:5px}
.invitation[data-dress-layout="landscape"] .page-dress .palette-labels{max-width:310px}
.invitation[data-dress-layout="landscape"] .page-dress .attire-avoid{grid-column:1/-1;margin-top:5px;padding:6px 0 2px;justify-self:center;max-width:520px}

/* Source: refinements-v309.css */
/* V3.0.9 — exact supplied vector mark, engraved bronze wax, five distinct colour items. */
.invitation .home-monogram{
  aspect-ratio:924/1240;
  -webkit-mask:url('/assets/yi-xiu-home-v309.svg') center/contain no-repeat;
  mask:url('/assets/yi-xiu-home-v309.svg') center/contain no-repeat;
}
.opening-seal{left:38.5%;top:45.5%;width:23%;aspect-ratio:1122/1402}
.opening-seal img{width:100%;height:100%;object-fit:contain}
.invitation .page-dress .attire-colours{
  display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:6px;
  width:100%;max-width:400px;list-style:none;padding:0;margin:10px auto 0;
}
.invitation .page-dress .attire-colours li{
  display:flex;flex-direction:column;align-items:center;justify-content:flex-start;
  min-width:0;gap:5px;margin:0;padding:0;
}
.invitation .page-dress .attire-pigment{
  display:block;width:min(100%,60px);height:auto;aspect-ratio:var(--pigment-ratio);
  background-image:none;
  background-size:var(--pigment-size) auto;
  background-position:var(--pigment-x) var(--pigment-y);
  background-repeat:no-repeat;flex:none;
}
.invitation .page-dress .attire-colour-name{
  display:block;font-size:11.5px;line-height:1.45;letter-spacing:.025em;
  color:#76564d;text-align:center;
}
.invitation[data-dress-layout="compact"] .page-dress .attire-colours{max-width:340px;margin-top:8px}
.invitation[data-dress-layout="dense"] .page-dress .attire-colours{max-width:300px;margin-top:7px;gap:5px}
.invitation[data-dress-layout="landscape"] .page-dress .attire-colours{max-width:310px;margin-top:6px;gap:4px}
.invitation[data-dress-layout="landscape"] .page-dress .attire-colour-name{font-size:10.5px}

.attire-pigment--beige{--pigment-ratio:412/274;--pigment-size:520.87378641%;--pigment-x:0.98039216%;--pigment-y:47.49455338%}
.attire-pigment--khaki{--pigment-ratio:417/273;--pigment-size:514.62829736%;--pigment-x:25.73742047%;--pigment-y:47.60869565%}
.attire-pigment--camel{--pigment-ratio:420/272;--pigment-size:510.95238095%;--pigment-x:50.69524913%;--pigment-y:47.50542299%}
.attire-pigment--green{--pigment-ratio:413/267;--pigment-size:519.61259080%;--pigment-x:74.55279862%;--pigment-y:47.21030043%}
.attire-pigment--purple{--pigment-ratio:416/275;--pigment-size:515.86538462%;--pigment-x:99.42196532%;--pigment-y:47.59825328%}

/* Source: refinements-v310.css */
/* V3.1.0: a higher shared heading edge and two quiet, three-column photo pages. */
.invitation{--page-top:14px}
.invitation .pages,.invitation[data-active-page="home"] .pages{padding-top:var(--page-top)}
.invitation .page-gallery .section-header,.invitation .page-upload .section-header{margin-bottom:10px}
.invitation:is([data-active-page="gallery"],[data-active-page="upload"]) .page-scroll{overflow-y:auto;overscroll-behavior-y:contain;touch-action:pan-y}
.invitation:is([data-active-page="gallery"],[data-active-page="upload"]) .pages{display:block;padding-bottom:22px}
.invitation .page-gallery,.invitation .page-upload{width:100%;max-width:660px;min-height:0}
.invitation .gallery-intro,.snapshot-intro{font-size:13px;line-height:1.85;text-align:center;margin:0 0 8px;color:#76564d;text-wrap:pretty}
.photo-operation-hint{font-size:11.5px;line-height:1.8;text-align:center;letter-spacing:0;color:#846e61;margin:0 0 14px}
.invitation .page-gallery .portrait-grid,.snapshot-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}
.invitation .page-gallery :is(.portrait-tile,.portrait-slot),.snapshot-tile{position:relative;display:block;grid-column:auto;aspect-ratio:1/1;width:100%;min-width:0;padding:0;border:0;border-radius:3px;overflow:hidden;background:#e4d8c7;color:#795d51}
.invitation .page-gallery .portrait-tile img,.snapshot-tile img{display:block;width:100%;height:100%;object-fit:cover}
.invitation .page-gallery .portrait-slot{border:1px solid #b49c7b30;background:#eee5d570;display:grid;place-items:center}
.invitation .page-gallery .portrait-slot span{font-size:12px;color:#9d8872}
.invitation .page-gallery .portrait-slot svg{width:25px;height:25px;opacity:.32}
.gallery-empty-note{font-size:12px;text-align:center;line-height:1.8;color:#8b7263;margin:16px 0 0}
.snapshot-upload{margin:14px 0 24px;padding:16px;border:1px solid #b49c7b55;border-radius:10px;background:#fbf8f150}
.snapshot-upload>label{display:block;font-size:13px;line-height:1.7;margin-bottom:5px;color:#71473d}
.snapshot-upload input[type="text"]{display:block;width:100%;font:16px/1.6 var(--cjk);padding:10px 12px;border:1px solid #b9a18c66;border-radius:5px;background:#fffaf080;color:#684539;box-sizing:border-box}
.snapshot-upload input[type="text"]:focus{outline:2px solid #8c5b5a;outline-offset:2px}
.snapshot-upload .snapshot-drop{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;min-height:108px;padding:13px 8px;margin:13px 0 0;border:1px dashed #9d7c6666;border-radius:6px;cursor:pointer;text-align:center}
.snapshot-drop>svg{width:26px;height:26px;color:#85685a}
.snapshot-drop strong{font-size:14px;font-weight:500}.snapshot-drop small{font-size:10.5px;line-height:1.7;color:#927b69}
.snapshot-drop input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}
.snapshot-drop:focus-within{outline:2px solid #8c5b5a;outline-offset:3px}
.snapshot-selection{margin-top:14px}.snapshot-selection h3{font-size:12px;font-weight:400;margin:0 0 8px;color:#795d51}
.snapshot-draft{position:relative;min-width:0}
.snapshot-name{position:absolute;right:0;bottom:0;left:0;display:block;text-align:right;font-size:11px;line-height:1.5;color:#fff8ed;padding:15px 6px 5px;background:linear-gradient(transparent,#241818a8);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}
.snapshot-state{position:absolute;left:5px;top:5px;padding:1px 4px;border-radius:3px;background:#f6eedee0;font-size:9px;line-height:1.5;color:#624a3b}
.snapshot-remove{position:absolute;right:-5px;top:-5px;width:28px;height:28px;border-radius:50%;border:1px solid #bda08a;background:#f6eee1;color:#74443f;font:22px/1 system-ui;z-index:1}
.snapshot-sharing{font-size:11px;line-height:1.85;margin:12px 0;color:#806b5f;text-wrap:pretty}
.snapshot-upload-actions{display:flex;align-items:center;gap:12px}
.snapshot-upload-actions .primary-button{flex:1;min-height:42px;margin:0;padding:10px 14px;font-size:13px}
.snapshot-text-button{padding:9px 0;border:0;background:transparent;color:#84564f;font:12px/1.6 var(--cjk);text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.snapshot-text-button:disabled{opacity:.45;cursor:default}
.snapshot-feedback p,.snapshot-offline{font-size:11.5px;line-height:1.8;margin:10px 0 0;color:#7d6654}
.snapshot-feedback:empty{display:none}.snapshot-feedback .snapshot-error,.snapshot-error{color:#8d3b44;font-size:12px;line-height:1.8;overflow-wrap:anywhere}
.snapshot-progress{margin-top:12px}.snapshot-progress progress{width:100%;height:5px;accent-color:#784049}.snapshot-progress p{font-size:11px;line-height:1.8;margin:5px 0 0}
.snapshot-feed{padding-top:2px;border-top:1px solid #b49c7b38}
.snapshot-feed-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:13px 0 5px}
.snapshot-feed-heading h2{font-size:15px;line-height:1.7;font-weight:400;margin:0;color:#74463f}
.snapshot-feed .photo-operation-hint{text-align:left;margin-bottom:12px}
.snapshot-empty{text-align:center;padding:26px 12px 34px;color:#927a67}.snapshot-empty svg{width:30px;height:30px;opacity:.65}.snapshot-empty p{font-size:12px;line-height:1.8}
.snapshot-more{display:block;margin:18px auto 0;font-size:12px}.snapshot-loading{font-size:12px;text-align:center;line-height:1.8;margin:16px 0}.snapshot-sentinel{display:block;height:1px}
.photo-viewer-open .page-scroll{overflow:hidden!important}
.photo-viewer{inset:0;margin:0;width:100%;height:100dvh;max-width:none;max-height:none;padding:max(9px,env(safe-area-inset-top)) 12px max(14px,env(safe-area-inset-bottom));background:#241b1bf5;box-sizing:border-box}
.photo-viewer[open]{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:48px minmax(0,1fr) auto;gap:8px}
.viewer-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%}
.photo-viewer .viewer-toolbar .viewer-close,.photo-viewer .viewer-download{position:static;display:grid;place-items:center;width:44px;height:44px;border:1px solid #eadaca55;border-radius:50%;background:#ffffff0b;color:#f5eadd;text-decoration:none;flex:none}
.viewer-toolbar .viewer-count{font:16px/1.5 var(--serif,serif);letter-spacing:.06em;color:#eadccc}
.photo-viewer svg{width:23px;height:23px}
.photo-viewer figure{display:grid;grid-template-rows:minmax(0,1fr) auto;width:100%;height:100%;min-height:0;margin:0}
.photo-viewer figure img{width:100%;height:100%;max-width:100%;max-height:100%;min-height:0;object-fit:contain;touch-action:none}
.photo-viewer figcaption{padding:9px 38px 0;font-size:12px;line-height:1.65;overflow-wrap:anywhere;color:#efdecc}
.photo-viewer .viewer-prev,.photo-viewer .viewer-next{position:absolute;top:calc(50% - 22px);width:44px;height:44px;display:grid;place-items:center;background:#241b1b70;border:1px solid #f4e4d82b;border-radius:6px}
.photo-viewer .viewer-prev{left:8px}.photo-viewer .viewer-next{right:8px}
.viewer-help{font-size:11px;line-height:1.8;color:#d8c5b5;text-align:center;margin:0 auto;max-width:570px;padding-inline:14px;text-wrap:pretty}
.viewer-image-error{position:absolute;left:15%;right:15%;top:40%;text-align:center;font-size:13px;line-height:1.8}
.loading-actions button{min-height:42px;min-width:112px}
@media(max-height:650px){.invitation{--page-top:0px}.invitation:not([data-active-page="home"]){--page-top:0px}.invitation[data-active-page="home"] .pages{padding-top:12px}}
@media(max-height:450px) and (min-width:480px){.invitation[data-active-page="home"] .pages{padding-top:4px}}
@media(min-width:700px){.snapshot-upload{max-width:480px;margin-inline:auto}.invitation .page-gallery .portrait-grid,.snapshot-feed .snapshot-grid{gap:12px}}

/* Five separately cropped, labelled paint swatches. */
.invitation .page-dress .attire-pigment{background-image:none}
.attire-pigment--beige{--pigment-ratio:414/266;--pigment-size:518.35748792%;--pigment-x:1.32794457%;--pigment-y:48.17987152%}
.attire-pigment--khaki{--pigment-ratio:416/265;--pigment-size:515.86538462%;--pigment-x:26.18497110%;--pigment-y:47.86324786%}
.attire-pigment--camel{--pigment-ratio:418/262;--pigment-size:513.39712919%;--pigment-x:51.21527778%;--pigment-y:47.98301486%}
.attire-pigment--green{--pigment-ratio:411/261;--pigment-size:522.14111922%;--pigment-x:75.15850144%;--pigment-y:47.66949153%}
.attire-pigment--purple{--pigment-ratio:404/266;--pigment-size:531.18811881%;--pigment-x:99.48335247%;--pigment-y:48.17987152%}

/* Source: refinements-v311.css */
/* V3.1.1 — preserve coordinates, pair translations, and use the available frame. */
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}

/* Move the clipping boundary, not the logo. Top + padding remains 62px + 14px.
   The larger border-box and matching padding preserve the home grid's height. */
.invitation[data-active-page="home"]{--home-clip-inset:var(--content-top,62px);--home-page-inset:14px}
.invitation[data-active-page="home"] .page-scroll{top:0}
.invitation[data-active-page="home"] .pages{padding-top:calc(var(--home-clip-inset) + var(--home-page-inset))}
@media(max-height:650px){.invitation[data-active-page="home"]{--home-page-inset:12px}}
@media(max-height:450px) and (min-width:480px){.invitation[data-active-page="home"]{--home-clip-inset:54px;--home-page-inset:4px}}

/* Both copies participate in the same grid track. Hidden copy never receives
   focus or an accessible name; the row's geometry does not depend on language. */
.invitation .translation-slot{display:grid;min-width:0;line-height:inherit;letter-spacing:inherit}
.invitation .translation-slot>span{display:block;grid-area:1/1;min-width:0;line-height:inherit}
.invitation .translation-slot>[lang="en"]{font-family:var(--serif);font-size:.94em;letter-spacing:0;line-height:inherit}
.invitation .translation-slot>[aria-hidden="true"],
.invitation .page-dress .translation-slot>[aria-hidden="true"]{display:block;visibility:hidden;pointer-events:none;user-select:none}
.invitation .day-event h2 .translation-slot>[lang="en"]{font-size:13px}
.invitation .day-event p[lang="en"]{font-size:12px}
.invitation .home-content .translation-slot{line-height:inherit}
.invitation .home-content .date-side .translation-slot>span{white-space:nowrap}
.invitation .home-content .home-city .translation-slot>[lang="en"]{font-size:11px}
.invitation .home-content .countdown-unit .translation-slot>[lang="en"]{font-size:10px}

/* The measured spare space belongs before the inspiration and reminder. */
.invitation .page-dress .attire-palette{margin-top:calc(12px + var(--attire-palette-air,0px))}
.invitation .page-dress .attire-avoid{margin-top:calc(24px + var(--attire-note-air,0px))}
.invitation[data-dress-layout="compact"] .page-dress .attire-palette{margin-top:calc(10px + var(--attire-palette-air,0px))}
.invitation[data-dress-layout="compact"] .page-dress .attire-avoid{margin-top:calc(17px + var(--attire-note-air,0px))}
.invitation[data-dress-layout="dense"] .page-dress .attire-palette{margin-top:calc(8px + var(--attire-palette-air,0px))}
.invitation[data-dress-layout="dense"] .page-dress .attire-avoid{margin-top:calc(13px + var(--attire-note-air,0px))}
.invitation .page-dress .attire-avoid p{margin:0;font-size:clamp(11px,2.96vw,12px);line-height:1.8;letter-spacing:0;text-wrap:wrap;white-space:normal;word-break:normal}
.invitation .page-dress .attire-avoid p .translation-slot>[lang="en"]{font-size:11px;line-height:inherit}
.invitation .page-dress .attire-colour-name .translation-slot>[lang="en"]{font-size:11px;white-space:nowrap}
.invitation .page-dress .attire-intro .translation-slot>[lang="en"]{font-size:12.5px}
.invitation .page-dress .attire-look p .translation-slot>[lang="en"]{font-size:12px}
.invitation .page-dress .palette-lead .translation-slot>[lang="en"]{font-size:11px}
.invitation[data-dress-layout="landscape"] .page-dress .attire-palette{margin:0}
.invitation[data-dress-layout="landscape"] .page-dress .attire-avoid{margin-top:5px}

/* Destination first, two fully visible transport columns below it. */
.invitation[data-active-page="venue"] .page-scroll{overflow:hidden;overscroll-behavior:none;touch-action:pan-x}
.invitation[data-active-page="venue"] .pages{height:100%;min-height:0;display:block;padding-bottom:0}
.invitation .page-venue{display:block;height:100%;min-height:0;max-width:570px;padding-bottom:0}
.venue-content{display:flex;flex-direction:column;width:100%;height:auto;min-height:0;transform:scale(var(--venue-fit-scale,1));transform-origin:center top}
.venue-content>*{flex:none}
.invitation .venue-content .section-header{margin-bottom:12px}
.venue-summary{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;margin:0 0 16px;border-block:1px solid #ae8c7159;background:#fff9ef66}
.venue-summary-copy{min-width:0;text-align:left}
.venue-summary .venue-area{margin:0 0 3px;font-size:10.5px;line-height:17px;color:#89695c;letter-spacing:.06em}
.venue-summary h2{margin:0 0 3px;font:500 clamp(18px,4.8vw,24px)/1.3 var(--serif);letter-spacing:0;color:#653b3d}
.venue-summary .venue-street{margin:0;font-size:11px;line-height:18px;color:#7b6257}
.venue-map-compact{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;flex:none;width:48px;min-height:58px;border-left:1px solid #ae8c7159;padding-left:12px;text-decoration:none;font-size:11px;line-height:17px;color:#743e44}
.venue-map-compact>svg:first-child{width:22px;height:22px;stroke-width:1.3}
.venue-map-compact>svg:last-child{display:none}
.transport-board{display:grid;grid-template-columns:minmax(0,1.12fr) minmax(0,1fr);gap:0;border-top:1px solid #ae8c7159;border-bottom:1px solid #ae8c7159;background:#fff9ef50}
.transport-column{min-width:0;padding:14px 12px 12px}
.transport-column+.transport-column{border-left:1px solid #ae8c7159}
.transport-column h2{display:flex;align-items:center;gap:7px;font-size:16px;font-weight:400;line-height:24px;letter-spacing:.03em;margin:0 0 5px;color:#71383e}
.transport-column h2>svg{height:20px;width:20px;flex:none;stroke-width:1.3}
.transport-caption{margin:0 0 12px;font-size:11px;line-height:17px;color:#8b7263}
.parking-options{display:grid;gap:0}
.parking-option{display:block;min-width:0;padding:9px 0;color:#6f4940;text-decoration:none;min-height:44px}
.parking-option+.parking-option{border-top:1px solid #ae8c7138;margin-top:3px}
.parking-option-top{display:flex;justify-content:space-between;align-items:center;margin:0 0 5px;color:#9a7865}
.parking-index{font:italic 14px/16px var(--serif)}
.parking-option-top svg{width:13px;height:13px;stroke-width:1.2}
.parking-option strong{display:block;font-size:12px;line-height:19px;font-weight:500;margin-bottom:4px}
.parking-street{display:block;font-size:10.5px;line-height:17px;color:#806b5f;overflow-wrap:normal;word-break:normal}
.shuttle-times{display:grid;grid-template-columns:1fr;gap:10px;margin:9px 0 15px}
.shuttle-times>div{display:flex;align-items:baseline;justify-content:space-between;gap:5px}
.shuttle-times>div>span{font-size:11px;line-height:18px;color:#826355}
.shuttle-times time{font:500 29px/1 var(--serif);font-variant-numeric:tabular-nums;color:#71383e;letter-spacing:.01em}
.shuttle-pickup{border-top:1px solid #ae8c7138;padding-top:11px;margin-top:0}
.shuttle-pickup>span{display:block;font-size:11px;line-height:18px;color:#826355}
.shuttle-pickup strong{display:block;font-size:12px;line-height:20px;font-weight:400;margin-top:3px}
.shuttle-reminder{margin:12px 0 0;font-size:10.5px;line-height:17px;color:#806b5f}
.parking-option:hover{color:#71383e;background:#f3e7d850}
.venue-map-compact:focus-visible,.parking-option:focus-visible{outline:2px solid #825454;outline-offset:4px}
.invitation .venue-content .translation-slot>[lang="en"]{font-size:11px;line-height:inherit}
.invitation .venue-content h2 .translation-slot>[lang="en"]{font-size:14px}
.invitation .venue-content .parking-option strong .translation-slot>[lang="en"]{font-size:11.5px}
.invitation .venue-content :is(.parking-street,.shuttle-reminder) .translation-slot>[lang="en"]{font-size:10.5px}
.invitation[data-venue-layout="compact"] .venue-content .section-header{margin-bottom:8px}
.invitation[data-venue-layout="compact"] .venue-summary{padding-block:10px;margin-bottom:10px}
.invitation[data-venue-layout="compact"] .transport-column{padding:10px}
.invitation[data-venue-layout="compact"] .transport-caption{margin-bottom:5px}
.invitation[data-venue-layout="compact"] .parking-option{padding-block:6px}
.invitation[data-venue-layout="compact"] .shuttle-times{gap:7px;margin-bottom:11px}
.invitation[data-venue-layout="dense"] .venue-content .section-header{margin-bottom:6px}
.invitation[data-venue-layout="dense"] .venue-content .heading-zh{font-size:20px;margin-bottom:3px}
.invitation[data-venue-layout="dense"] .venue-content .heading-lettering{--lettering-height:34px}
.invitation[data-venue-layout="dense"] .venue-summary{padding:8px 10px;margin-bottom:8px}
.invitation[data-venue-layout="dense"] .venue-summary .venue-area{display:none}
.invitation[data-venue-layout="dense"] .venue-summary h2{font-size:19px}
.invitation[data-venue-layout="dense"] .transport-column{padding:8px}
.invitation[data-venue-layout="dense"] .transport-caption{margin-bottom:3px}
.invitation[data-venue-layout="dense"] .parking-option{padding-block:5px}
.invitation[data-venue-layout="dense"] .parking-option-top{margin-bottom:2px}
.invitation[data-venue-layout="dense"] .shuttle-times{gap:6px;margin:7px 0 9px}
.invitation[data-venue-layout="dense"] .shuttle-times time{font-size:26px}
.invitation[data-venue-layout="dense"] .shuttle-pickup{padding-top:8px}
.invitation[data-venue-layout="dense"] .shuttle-reminder{margin-top:7px}
.invitation[data-venue-layout="landscape"] .page-venue{max-width:900px}
.invitation[data-venue-layout="landscape"] .venue-content{display:grid;grid-template-columns:minmax(180px,.78fr) minmax(280px,1.22fr);grid-template-rows:auto 1fr;gap:4px 18px}
.invitation[data-venue-layout="landscape"] .venue-content .section-header{grid-column:1;grid-row:1;margin:0;align-self:end}
.invitation[data-venue-layout="landscape"] .venue-content .heading-zh{font-size:19px;margin-bottom:2px}
.invitation[data-venue-layout="landscape"] .venue-content .heading-lettering{--lettering-height:30px}
.invitation[data-venue-layout="landscape"] .venue-summary{grid-column:1;grid-row:2;margin:0;align-self:start;padding:10px 8px;gap:5px}
.invitation[data-venue-layout="landscape"] .venue-summary h2{font-size:18px}
.invitation[data-venue-layout="landscape"] .venue-map-compact{width:36px;padding-left:7px}
.invitation[data-venue-layout="landscape"] .transport-board{grid-column:2;grid-row:1/3}
.invitation[data-venue-layout="landscape"] .transport-column{padding:6px 9px}
.invitation[data-venue-layout="landscape"] .transport-caption{margin-bottom:3px}
.invitation[data-venue-layout="landscape"] .parking-option{padding-block:3px}
.invitation[data-venue-layout="landscape"] .parking-option-top{display:none}
.invitation[data-venue-layout="landscape"] .shuttle-times{gap:5px;margin:6px 0 9px}
.invitation[data-venue-layout="landscape"] .shuttle-times time{font-size:25px}
.invitation[data-venue-layout="landscape"] .shuttle-pickup{padding-top:7px}
.invitation[data-venue-layout="landscape"] .shuttle-reminder{margin-top:6px}

/* Shorter, quieter bilingual photo copy. Input text stays 16px on iOS. */
.invitation .gallery-intro,.invitation .snapshot-intro{font-size:13px;line-height:24px;text-wrap:wrap}
.invitation :is(.gallery-intro,.snapshot-intro) .translation-slot>[lang="en"]{font-size:12.5px}
.invitation .photo-operation-hint{font-size:11px;line-height:20px;text-wrap:wrap}
.invitation .photo-operation-hint .translation-slot>[lang="en"]{font-size:11px}
.invitation .snapshot-upload{padding:14px;margin-top:12px;margin-bottom:20px}
.invitation .snapshot-upload>label{line-height:22px}
.invitation .snapshot-upload>label .translation-slot>[lang="en"]{font-size:12px}
.invitation .snapshot-upload .snapshot-drop{min-height:101px;gap:4px;margin-top:12px;padding:12px 7px}
.invitation .snapshot-drop strong{font-size:13px;line-height:22px}
.invitation .snapshot-drop small{font-size:10.5px;line-height:18px}
.invitation .snapshot-drop small .translation-slot>[lang="en"]{font-size:10.5px}
.invitation .snapshot-sharing{font-size:11px;line-height:20px;text-wrap:wrap;margin:11px 0}
.invitation .snapshot-sharing .translation-slot>[lang="en"]{font-size:11px}
.invitation .snapshot-upload-actions .primary-button{font-family:var(--cjk);letter-spacing:0;line-height:21px}
.invitation .snapshot-upload-actions .primary-button .translation-slot>[lang="en"]{font-size:12px}
.invitation .snapshot-feed-heading h2{line-height:25px}
.invitation .snapshot-feed-heading h2 .translation-slot>[lang="en"]{font-size:14px}
.invitation .snapshot-text-button .translation-slot{line-height:20px}
@media(max-width:350px){.venue-summary{padding-inline:10px}.transport-column{padding-inline:9px}.venue-summary h2{font-size:18px}.invitation .page-dress .attire-colour-name .translation-slot>[lang="en"]{font-size:10px}}

/* Five generated paint swatches, cropped independently from the transparent asset. */
.invitation .page-dress .attire-pigment{background-image:none}
.attire-pigment--beige{--pigment-ratio:411/274;--pigment-size:522.14111922%;--pigment-x:1.03746398%;--pigment-y:48.14814815%}
.attire-pigment--khaki{--pigment-ratio:418/274;--pigment-size:513.39712919%;--pigment-x:25.34722222%;--pigment-y:48.14814815%}
.attire-pigment--brown{--pigment-ratio:413/274;--pigment-size:519.61259080%;--pigment-x:50.20196192%;--pigment-y:48.14814815%}
.attire-pigment--blue{--pigment-ratio:412/275;--pigment-size:520.87378641%;--pigment-x:74.22145329%;--pigment-y:48.03493450%}
.attire-pigment--green{--pigment-ratio:416/276;--pigment-size:515.86538462%;--pigment-x:98.90173410%;--pigment-y:48.14004376%}

/* Source: refinements-v312.css */
/* V3.1.2: a small, consistent lift in English reading size.
   Language is selected on each paired span, not the document, so both copies
   always reserve the same row height before and after the language switch. */
.invitation .translation-slot>[lang="en"]{font-size:1.04em}
.invitation .home-content .home-city .translation-slot>[lang="en"]{font-size:12.5px}
.invitation .home-content .countdown-unit .translation-slot>[lang="en"]{font-size:11.5px}
.invitation .day-event h2 .translation-slot>[lang="en"]{font-size:14.5px}
.invitation .day-event p[lang="en"]{font-size:13px}
.invitation .page-dress .attire-intro .translation-slot>[lang="en"]{font-size:14px}
.invitation .page-dress .attire-look p .translation-slot>[lang="en"]{font-size:13.5px}
.invitation .page-dress .palette-lead .translation-slot>[lang="en"]{font-size:12.5px}
.invitation .page-dress .attire-colour-name .translation-slot>[lang="en"]{font-size:12px}
.invitation .page-dress .attire-avoid p .translation-slot>[lang="en"]{font-size:12.5px}
.invitation .venue-content .translation-slot>[lang="en"]{font-size:12.5px}
.invitation .venue-content h2 .translation-slot>[lang="en"]{font-size:15.5px}
.invitation .venue-content .parking-option strong .translation-slot>[lang="en"]{font-size:13px}
.invitation .venue-content :is(.parking-street,.shuttle-reminder) .translation-slot>[lang="en"]{font-size:12px}
.invitation :is(.gallery-intro,.snapshot-intro) .translation-slot>[lang="en"]{font-size:14px}
.invitation .photo-operation-hint .translation-slot>[lang="en"]{font-size:12.5px}
.invitation .gallery-empty-note .translation-slot>[lang="en"]{font-size:12.5px}
.invitation .snapshot-upload>label .translation-slot>[lang="en"]{font-size:13.5px}
.invitation .snapshot-drop small .translation-slot>[lang="en"]{font-size:11.5px}
.invitation .snapshot-sharing .translation-slot>[lang="en"]{font-size:12.5px}
.invitation .snapshot-upload-actions .primary-button .translation-slot>[lang="en"]{font-size:13.5px}
.invitation .snapshot-feed-heading h2 .translation-slot>[lang="en"]{font-size:15.5px}

/* Six icons drawn for a common 24px grid: open invitation, calendar/clock,
   dress and tie, the existing parking pin, stacked photos, and camera/add. */
.invitation .tab-bar .tab svg.nav-icon{width:23px;height:23px;min-width:23px;display:block;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round;overflow:visible}
.invitation .tab-bar .tab[aria-selected="true"] svg.nav-icon{stroke-width:1.45}
.invitation .tab-bar .tab[data-tab="venue"] svg.nav-icon{width:22px;height:22px;min-width:22px}
.invitation .tab-bar .tab svg.nav-icon .icon-detail{stroke-width:1.15}
html[lang="en"] .invitation .tab-bar .tab[aria-selected="true"]{font-size:12px}
@media(max-width:350px){
 .invitation .page-dress .attire-colour-name .translation-slot>[lang="en"]{font-size:11px}
 .invitation .tab-bar .tab svg.nav-icon{width:21px;height:21px;min-width:21px}
 .invitation .tab-bar .tab[data-tab="venue"] svg.nav-icon{width:21px;height:21px;min-width:21px}
 html[lang="en"] .invitation .tab-bar .tab[aria-selected="true"]{font-size:11.5px}
}

/* Source: photo-stationery-v322.css */
/* V3.2.2: one photographic composition and one surface for both invitations.
   Cover at the photograph's natural ratio puts the couple in the lower third
   on portrait screens; it is 2/3 of the previous 150%-height enlargement. */
:root{
 --stationery-opacity:.72;
 --stationery-side:20px;
 --stationery-max:680px;
 --stationery-inset:14px;
 --stationery-top:max(58px,calc(env(safe-area-inset-top) + 48px));
}
.photo-background{position:absolute;inset:0;overflow:hidden;pointer-events:none;background:#667363;z-index:-3}
.photo-background::before{content:"";position:absolute;inset:0;background-image:url('/assets/yi-xiu-yosemite-v320.webp');background-repeat:no-repeat;background-size:cover;background-position:49.2% 65%;filter:saturate(.84) brightness(.86)}
.photo-background::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,#19251b08,#19251b00 45%,#19251b1c)}

/* Three continuous pieces, with proportional end caps. Only the straight
   middle grows: the crown and corner curves never stretch with a long form.
   Opacity belongs only to this decorative layer, never to the text or fields. */
.invitation-frame{
 position:absolute;inset:0;display:flex;flex-direction:column;pointer-events:none;
 z-index:-1;opacity:var(--stationery-opacity);filter:drop-shadow(0 8px 17px #17211624);
}
.invitation-frame::before,.invitation-frame::after{
 content:"";display:block;flex:0 0 auto;aspect-ratio:10 / 1;
 width:100%;background-position:center;background-size:100% 100%;background-repeat:no-repeat;
}
.invitation-frame::before{background-image:url('/assets/stationery-cap-top-v321.svg')}
.invitation-frame::after{background-image:url('/assets/stationery-cap-bottom-v321.svg')}
.invitation-frame-body{
 display:block;flex:1 1 auto;min-height:0;
 background:url('/assets/stationery-body-v321.svg') center/100% 100% no-repeat;
}
/* A fixed inset:0 layer still changes height as Safari's toolbar collapses.
   Use a stable large viewport instead: scrolling and the keyboard reveal or
   cover the same photograph without changing its scale or focal position.
   100vh is the legacy fallback; orientation/window size changes may reframe. */
.rsvp-stationery>.photo-background{
 position:fixed;inset:0 0 auto;height:100vh;height:100lvh;
 background-color:#eee5d8;
}
@media(max-height:650px){:root{--stationery-top:max(54px,calc(env(safe-area-inset-top) + 44px))}}
@media(max-width:350px){:root{--stationery-side:10px;--stationery-inset:16px}}
@media(max-height:500px) and (min-width:480px){
 :root{--stationery-side:max(12px,env(safe-area-inset-left),env(safe-area-inset-right));--stationery-max:980px;--stationery-top:46px;--stationery-inset:20px}
}

/* Source: refinements-v321.css */
/* One photo, one generously sized, double-rule stationery frame per chapter.
   The frame is decorative: the readable rectangle is inset from every curve,
   so text and interactive elements are never clipped to an ornamental shape. */
.edition-v3 .invitation{
 --frame-side:max(var(--stationery-side),calc((100% - var(--stationery-max))/2));
 --frame-top:var(--stationery-top);
 --frame-bottom:calc(var(--dock-bottom) + var(--nav-height,56px) + 12px);
 --content-inset:var(--stationery-inset);
 --content-top:calc(var(--frame-top) + 22px);
 --content-bottom:calc(var(--frame-bottom) + 24px);
 --page-top:0px;
 --page-height:calc(var(--app-height,100svh) - var(--content-top) - var(--content-bottom));
 --ink:#533b3d;--ink-soft:#58433d;--outfit-fill:#f9f4eb;
 position:fixed;inset:0;top:var(--visible-top,0px);bottom:auto;
 width:100%;height:var(--app-height,100svh);margin:0;box-shadow:none;
 border:0;background:transparent;isolation:isolate;overflow:hidden;
}
.edition-v3 .invitation::after{content:none}
.invitation .invitation-frame{inset:var(--frame-top) var(--frame-side) var(--frame-bottom)}
.invitation .page-scroll,.invitation[data-active-page="home"] .page-scroll{
 inset:var(--content-top) var(--frame-side) var(--content-bottom);
 margin:0;padding:0;scroll-padding:12px;scrollbar-width:thin;
 scrollbar-color:#826c594d transparent;
}
.invitation .pages,.invitation[data-active-page="home"] .pages{
 padding:0 var(--content-inset);min-height:100%;display:block;
}
.invitation :is(.page-home,.page-dress,.page-venue,.page-timeline){height:100%;min-height:0;padding-bottom:0}
.invitation .page{width:100%;margin-inline:auto}
.invitation .page-heading{max-width:100%}
.invitation .section-header .heading-zh{color:#653b3e}
.invitation[data-active-page="home"] .home-monogram{transform:none}
.invitation[data-active-page="home"] .names{height:clamp(108px,18svh,138px);margin:0 auto}
.invitation .home-content{gap:8px}
.invitation .home-content .home-mv-placeholder{border:1px solid #89665345;background:#fffdf53d;box-shadow:inset 0 0 0 3px #fffdf529;border-radius:0}
.invitation .home-content .video-symbol{border-color:#97765980}
.invitation .home-content .date-side{border-color:#8d625954}
.invitation .home-content :is(.home-city,.countdown-label,.countdown-unit small){color:#58433d}
.invitation[data-home-layout="compact"] .home-content{gap:4px}
.invitation[data-home-layout="compact"] .names{height:112px}
.invitation[data-home-layout="dense"] .names{height:82px}
.invitation[data-home-layout="landscape"] .names{height:clamp(62px,22svh,106px)}

/* Surface contrast belongs to the card, not a blur over the couple. */
.invitation :is(.gallery-intro,.snapshot-intro,.photo-operation-hint,.gallery-empty-note,
 .snapshot-sharing,.snapshot-feedback p,.snapshot-offline,.snapshot-drop small,
 .snapshot-empty,.snapshot-loading,.snapshot-name-input,.venue-area,.venue-street,
 .parking-street,.shuttle-reminder,.transport-caption,.attire-colour-name){color:#58433d}
.invitation .page-dress :is(.attire-intro,.attire-look p,.palette-lead,.attire-avoid p){color:#58433d}
.invitation .page-dress .attire-colours{gap:6px}
.invitation .page-dress .attire-pigment--pink{
 --pigment-ratio:411/274;background-image:none;
 background-size:115% auto;background-position:50% 50%;
}
.invitation .page-dress .attire-avoid{border-top-color:#8c6a5345}
.invitation .venue-summary,.invitation .transport-board{background:#fffdf52b;border-color:#89665348}
.invitation .transport-column+.transport-column{border-color:#89665348}
.invitation .parking-option+.parking-option,.invitation .shuttle-pickup{border-color:#89665338}
.invitation .shuttle-times>div>span,.invitation .shuttle-pickup>span{color:#58433d}
.invitation .snapshot-upload{background:#fffdf550;border-color:#89665345;border-radius:2px;box-shadow:inset 0 0 0 3px #fffdf526}
.invitation .snapshot-upload input[type="text"]{background:#fffdf799;border-color:#89665359}
.invitation .snapshot-upload .snapshot-drop{background:#fffdf51f;border-color:#8966536b;border-radius:2px}
.invitation .page-gallery .portrait-slot{background:#f8f4e64d;border-color:#8c6a5340}
.invitation .page-gallery .portrait-slot span{color:#7b6253}
.invitation:is([data-active-page="gallery"],[data-active-page="upload"]) .pages{padding-bottom:18px}
.invitation:is([data-active-page="gallery"],[data-active-page="upload"]) .page-scroll{overflow-y:auto;overflow-x:hidden;touch-action:pan-y;overscroll-behavior-y:contain}
.invitation :is(.page-gallery,.page-upload){min-height:0;max-width:620px}
.invitation.is-editing{--frame-bottom:8px;--content-bottom:26px}
.invitation.is-editing .page-scroll{bottom:var(--content-bottom)}

/* Thin, readable glyphs: a love letter, connected itinerary, formal attire,
   a map pin, a bride beside a groom, and a camera for guest photographs. */
.invitation .navigation-wrap{
 left:max(16px,calc((100% - 540px)/2));right:max(16px,calc((100% - 540px)/2));
 padding:4px;min-height:56px;border:1px solid #fffdf9a6;
 background:rgb(255 253 247 / var(--stationery-opacity));
 backdrop-filter:none;-webkit-backdrop-filter:none;
 box-shadow:0 5px 20px #17211624,inset 0 1px 0 #fffdf966;
}
.invitation .tab-bar .tab{min-height:46px}
.invitation .tab-bar .tab svg.nav-icon{width:24px;height:24px;min-width:24px;stroke-width:1.35}
.invitation .tab-bar .tab[aria-selected="true"] svg.nav-icon{stroke-width:1.4}
.invitation .tab-bar .tab[data-tab="gallery"] svg.nav-icon{width:25px;height:25px;min-width:25px;stroke-width:1.3}
.invitation .tab-bar .tab[data-tab="venue"] svg.nav-icon{width:23px;height:23px;min-width:23px}
.invitation .tab-bar .tab svg.nav-icon .icon-detail{stroke-width:1.05}
html.envelope-opened .language-button,html.main-route .language-button,.invitation .back-button{
 background:#fffaf0ed;border-color:#fffaf0cc;color:#653b3e;box-shadow:0 2px 9px #15251b18;
}
.invitation .back-button{left:max(18px,calc(env(safe-area-inset-left) + 12px),calc((100vw - 1100px)/2))}
html.envelope-opened .language-button,html.main-route .language-button{right:max(18px,calc(env(safe-area-inset-right) + 12px),calc((100vw - 1100px)/2))}
/* The full-width anchor is transparent. Only its small speech bubble has ink. */
.invitation .navigation-hint{background:transparent;color:#fff9ef;border:0;box-shadow:none}
.invitation .navigation-hint>span:first-child{background:#713e43;color:#fff9ef;width:fit-content}
.invitation .navigation-hint>span:first-child::after{background:#713e43;border-top-color:#713e43}
.invitation .tab-bar .tab:not([aria-selected="true"]){color:#58433d}

/* The itinerary uses its own measured fixed frame, including bilingual copy. */
.invitation[data-active-page="timeline"] .page-scroll{overflow:hidden;overscroll-behavior:none;touch-action:pan-x}
.invitation[data-active-page="timeline"] .pages{height:100%;min-height:0}
.invitation .page-timeline{max-width:460px;display:block}
.timeline-content{width:100%;height:auto;min-height:0;transform:scale(var(--timeline-fit-scale,1));transform-origin:center top}
.invitation .timeline-content .section-header{margin-bottom:12px}
.invitation .timeline-content .day-timeline{--timeline-row-min:68px;height:auto;min-height:0;grid-template-rows:repeat(5,minmax(calc(var(--timeline-row-min) + var(--timeline-row-air,0px)),auto));margin-inline:auto}
.invitation .timeline-content .day-marker{background:#faf6ed;box-shadow:0 0 0 3px #f7f1e8;stroke-width:1.35}
.invitation[data-timeline-layout="compact"] .timeline-content .heading-lettering{--lettering-height:39px}
.invitation[data-timeline-layout="compact"] .timeline-content .heading-zh{font-size:22px;margin-bottom:3px}
.invitation[data-timeline-layout="compact"] .timeline-content .day-timeline{--timeline-row-min:55px}
.invitation[data-timeline-layout="compact"] .timeline-content .day-event time{font-size:26px}
.invitation[data-timeline-layout="compact"] .timeline-content .day-event p{display:none}
.invitation[data-timeline-layout="compact"] .timeline-content .day-marker{width:36px;height:36px}
.invitation[data-timeline-layout="dense"] .timeline-content .section-header{margin-bottom:6px}
.invitation[data-timeline-layout="dense"] .timeline-content .heading-zh{font-size:20px;margin-bottom:2px}
.invitation[data-timeline-layout="dense"] .timeline-content .heading-lettering{--lettering-height:31px}
.invitation[data-timeline-layout="dense"] .timeline-content .day-timeline{--timeline-row-min:48px}
.invitation[data-timeline-layout="dense"] .timeline-content .day-event time{font-size:23px}
.invitation[data-timeline-layout="dense"] .timeline-content .day-event h2{font-size:14px;margin-top:1px}
.invitation[data-timeline-layout="dense"] .timeline-content .day-event p{display:none}
.invitation[data-timeline-layout="dense"] .timeline-content .day-marker{width:30px;height:30px}
.invitation[data-timeline-layout="dense"] .timeline-content .day-marker svg{width:19px;height:19px}
.invitation[data-timeline-layout="landscape"] .page-timeline{max-width:none}
.invitation[data-timeline-layout="landscape"] .timeline-content{display:grid;grid-template-columns:minmax(130px,.65fr) minmax(340px,1.35fr);align-items:center;gap:18px}
.invitation[data-timeline-layout="landscape"] .timeline-content .section-header{margin:0}
.invitation[data-timeline-layout="landscape"] .timeline-content .heading-zh{font-size:20px}
.invitation[data-timeline-layout="landscape"] .timeline-content .heading-lettering{--lettering-height:31px}
.invitation[data-timeline-layout="landscape"] .timeline-content .day-timeline{--timeline-row-min:39px}
.invitation[data-timeline-layout="landscape"] .timeline-content .day-event{grid-template-columns:1fr 30px 1fr;column-gap:10px}
.invitation[data-timeline-layout="landscape"] .timeline-content .day-event-copy{display:grid;grid-template-columns:auto auto;align-items:baseline;gap:0 6px}
.invitation[data-timeline-layout="landscape"] .timeline-content .day-event time{font-size:20px}
.invitation[data-timeline-layout="landscape"] .timeline-content .day-event h2{font-size:13px;margin:0}
.invitation[data-timeline-layout="landscape"] .timeline-content .day-event h2 [lang="en"]{font-size:13px}
.invitation[data-timeline-layout="landscape"] .timeline-content .day-event p{display:none}
.invitation[data-timeline-layout="landscape"] .timeline-content .day-marker{width:28px;height:28px}
.invitation[data-timeline-layout="landscape"] .timeline-content .day-marker svg{width:18px;height:18px}

@media(max-height:650px){
 .edition-v3 .invitation{--frame-top:max(54px,calc(env(safe-area-inset-top) + 44px));--content-top:calc(var(--frame-top) + 18px);--content-bottom:calc(var(--frame-bottom) + 20px)}
}
@media(max-width:350px){
 .edition-v3 .invitation{--frame-side:10px;--content-inset:16px}
 .invitation .navigation-wrap{left:12px;right:12px}
 .invitation .tab-bar .tab svg.nav-icon{width:22px;height:22px;min-width:22px}
 .invitation .tab-bar .tab[data-tab="gallery"] svg.nav-icon{width:23px;height:23px;min-width:23px}
 .invitation .tab-bar .tab[data-tab="venue"] svg.nav-icon{width:21px;height:21px;min-width:21px}
}
@media(max-height:500px) and (min-width:480px){
 .edition-v3 .invitation{--frame-side:max(12px,calc(env(safe-area-inset-left) + 4px),calc(env(safe-area-inset-right) + 4px),calc((100% - 980px)/2));--frame-top:46px;--content-top:calc(var(--frame-top) + 14px);--frame-bottom:calc(var(--dock-bottom) + var(--nav-height,56px) + 8px);--content-bottom:calc(var(--frame-bottom) + 15px);--content-inset:20px;--dock-bottom:max(9px,env(safe-area-inset-bottom))}
 .invitation .navigation-wrap{min-height:50px}
 .invitation .tab-bar .tab{min-height:40px}
 .invitation .app-header{height:44px}
 html.envelope-opened .language-button,html.main-route .language-button,.invitation .back-button{top:8px;height:30px}
 .invitation[data-home-layout="landscape"] .page-home{max-width:760px}
}


/* Source: refinements-v324.css */
/* V3.2.4: targeted corrections on the V3.2.2 frame.
   No frame dimensions, cap artwork, background composition, opacity or dock
   placement are changed here. All chapters retain their original order. */
.edition-v3 .invitation{--ink:#462e32;--ink-soft:#54423d;color:var(--ink)}
.edition-v3 .invitation .page{min-width:0;overflow-wrap:anywhere}
.edition-v3 .invitation .page[hidden]{display:none!important}
.edition-v3 .invitation :is(.translation-slot,.translation-slot>span){min-width:0;max-width:100%;overflow-wrap:anywhere}
.edition-v3 .invitation .translation-slot>[lang="en"]{font-size:1.1em;white-space:normal}
.edition-v3 .invitation :is(.gallery-intro,.snapshot-intro,.attire-intro,.attire-look p,.home-city,.date-side,.venue-street,.transport-caption,.shuttle-pickup>span,.shuttle-times>div>span,.palette-lead,.attire-avoid p,.photo-operation-hint,.gallery-empty-note,.snapshot-sharing,.snapshot-drop small,.snapshot-feedback p,.snapshot-offline,.snapshot-empty p,.snapshot-loading){color:#462e32;font-size:14px;font-weight:500;line-height:1.55;opacity:1}
.edition-v3 .invitation :is(.gallery-intro,.snapshot-intro,.attire-intro,.attire-look p,.home-city,.date-side,.venue-street,.transport-caption,.shuttle-pickup>span,.shuttle-times>div>span,.palette-lead,.attire-avoid p,.photo-operation-hint,.gallery-empty-note,.snapshot-sharing,.snapshot-drop small) .translation-slot>[lang="en"]{font-size:16px;line-height:inherit;white-space:normal}
.edition-v3 .invitation :is(.palette-lead,.attire-avoid p,.photo-operation-hint,.gallery-empty-note,.snapshot-sharing,.snapshot-drop small){font-size:12.5px;line-height:1.6}
.edition-v3 .invitation :is(.palette-lead,.attire-avoid p,.photo-operation-hint,.gallery-empty-note,.snapshot-sharing,.snapshot-drop small) .translation-slot>[lang="en"]{font-size:14.5px}
.edition-v3 .invitation .snapshot-upload>label,.edition-v3 .invitation .snapshot-drop strong{font-size:15px;font-weight:500;color:#462e32}
.edition-v3 .invitation .snapshot-upload>label .translation-slot>[lang="en"]{font-size:17px}
.edition-v3 .invitation :is(.snapshot-text-button,.snapshot-more){font-size:14px;color:#63343c}
.edition-v3 .invitation .snapshot-upload{max-width:100%;box-sizing:border-box}
.edition-v3 .invitation .navigation-hint>span:first-child{white-space:normal;text-align:center;overflow-wrap:anywhere}
.edition-v3 .invitation .home-monogram{aspect-ratio:1122/1402;-webkit-mask-image:url('/assets/yi-xiu-logo-v324.svg');mask-image:url('/assets/yi-xiu-logo-v324.svg')}

/* Same centred vertical homepage: tighten spacing before ever clipping text. */
.edition-v3 .invitation .page-home{max-width:440px}
.edition-v3 .invitation .home-content{width:100%;height:100%;margin:0;transform:none;grid-template-columns:minmax(0,1fr);grid-template-areas:none;grid-template-rows:auto minmax(52px,1fr) auto auto auto;gap:6px}
.edition-v3 .invitation .home-content>*{grid-area:auto;min-width:0;max-width:100%}
.edition-v3 .invitation .home-content .home-mv-placeholder{min-width:0;min-height:52px;aspect-ratio:auto;padding:8px 12px}
.edition-v3 .invitation .home-content .home-film{min-width:0;min-height:52px;object-fit:contain}
.edition-v3 .invitation .home-content .home-mv-placeholder p{font-size:17px;line-height:1.3;margin:0}
.edition-v3 .invitation .home-content .home-mv-placeholder small{font-size:13px;line-height:1.4;color:#462e32}
.edition-v3 .invitation .home-content .date-side{padding:10px 0}
.edition-v3 .invitation .home-content .date-side .translation-slot>span{white-space:normal}
.edition-v3 .invitation .home-content .home-city{font-size:13px;margin-top:4px}
.edition-v3 .invitation .home-content .home-city .translation-slot>[lang="en"]{font-size:15px}
.edition-v3 .invitation .home-content .countdown-label,.edition-v3 .invitation .home-content .countdown-unit small{font-size:12px;line-height:1.4;color:#462e32}
.edition-v3 .invitation .home-content .countdown-unit .translation-slot>[lang="en"]{font-size:14px}
.edition-v3 .invitation .home-content .countdown-value{font-size:30px;line-height:1.1}
.edition-v3 .invitation .home-content .date-middle span{font-size:12px;line-height:1.3}
.edition-v3 .invitation[data-home-layout="compact"] .names{height:94px}
.edition-v3 .invitation[data-home-layout="compact"] .home-content{gap:4px}
.edition-v3 .invitation[data-home-layout="compact"] .home-content .date-side{padding:5px 0}
.edition-v3 .invitation[data-home-layout="compact"] .restaurant-lettering{width:min(92%,280px)}
.edition-v3 .invitation[data-home-layout="short"] .names{height:72px}
.edition-v3 .invitation[data-home-layout="short"] .home-content{gap:3px}
.edition-v3 .invitation[data-home-layout="short"] .home-content .date-side{padding:3px 0}
.edition-v3 .invitation[data-home-layout="short"] .restaurant-lettering{width:min(92%,260px);margin:auto}
.edition-v3 .invitation[data-home-layout="short"] .countdown-wrap{padding-top:6px}

/* Replace the five textures with circles without moving the attire sections. */
.edition-v3 .invitation .page-dress .attire-swatch{display:block;width:min(100%,42px);height:auto;aspect-ratio:1;border-radius:50%;background:var(--swatch);border:1px solid #48333633;flex:none}
.attire-swatch--beige{--swatch:#d4be9c}.attire-swatch--khaki{--swatch:#ac936b}.attire-swatch--pink{--swatch:#d5a4a7}.attire-swatch--blue{--swatch:#8eafc4}.attire-swatch--green{--swatch:#3d5a4a}
.edition-v3 .invitation .page-dress .attire-colour-name{font-size:13px;line-height:1.45;font-weight:500;letter-spacing:0;color:#462e32}
.edition-v3 .invitation .page-dress .attire-colour-name .translation-slot>[lang="en"]{font-size:14.5px;white-space:normal}
.edition-v3 .invitation .page-dress .attire-palette h2{font-size:16px;font-weight:500}

/* Restaurant first; every address stays below its place name. Equal columns. */
.edition-v3 .invitation .venue-summary{padding:12px 10px;margin-bottom:12px;gap:12px}
.edition-v3 .invitation .venue-summary-copy{flex:1;min-width:0}
.edition-v3 .invitation .venue-summary h2{font-size:22px;line-height:1.35;font-weight:500;margin:0 0 7px;color:#63343c}
.edition-v3 .invitation .venue-summary .venue-street{font-size:13px;line-height:1.55;margin:0;color:#462e32}
.edition-v3 .invitation .venue-summary .venue-street .translation-slot>[lang="en"]{font-size:14.5px}
.edition-v3 .invitation .venue-map-compact{width:44px;padding-left:9px;font-size:13px;flex:none}
.edition-v3 .invitation .transport-board{grid-template-columns:repeat(2,minmax(0,1fr))}
.edition-v3 .invitation .transport-column{padding:12px 10px;min-width:0}
.edition-v3 .invitation .transport-column h2{font-size:18px;line-height:1.4;font-weight:500;margin-bottom:6px}
.edition-v3 .invitation .transport-column h2 .translation-slot>[lang="en"]{font-size:20px}
.edition-v3 .invitation .transport-caption{font-size:12px;line-height:1.5;margin:0 0 12px}
.edition-v3 .invitation .transport-caption .translation-slot>[lang="en"]{font-size:13.5px}
.edition-v3 .invitation .parking-option{padding:10px 0;min-width:0}
.edition-v3 .invitation .parking-name-row{display:grid;grid-template-columns:minmax(0,1fr) 22px;align-items:start;gap:5px}
.edition-v3 .invitation .parking-option strong{font-size:14px;font-weight:500;line-height:1.6;margin:0;color:#462e32}
.edition-v3 .invitation .parking-option strong .translation-slot>[lang="en"]{font-size:15px}
.edition-v3 .invitation .parking-map-icon{display:grid;place-items:center;width:22px;height:26px;color:#71383e}
.edition-v3 .invitation .parking-map-icon svg{display:block;width:17px;height:17px;stroke-width:1.6}
.edition-v3 .invitation .parking-street{font-size:12px;font-weight:400;color:#54423d;line-height:1.65;margin-top:5px;overflow-wrap:anywhere}
.edition-v3 .invitation .parking-street .translation-slot>[lang="en"]{font-size:13.5px;line-height:1.55}
.edition-v3 .invitation .shuttle-times{gap:12px;margin:10px 0 14px}
.edition-v3 .invitation .shuttle-times>div{display:grid;grid-template-columns:minmax(0,1fr);gap:2px;justify-items:start}
.edition-v3 .invitation .shuttle-times>div>span,.edition-v3 .invitation .shuttle-pickup>span{font-size:13px}
.edition-v3 .invitation .shuttle-times>div>span .translation-slot>[lang="en"],.edition-v3 .invitation .shuttle-pickup>span .translation-slot>[lang="en"]{font-size:14.5px}
.edition-v3 .invitation .shuttle-times time{font-size:30px;font-weight:500;line-height:1.1;white-space:normal;overflow-wrap:anywhere}
.edition-v3 .invitation .shuttle-pickup strong{font-size:14px;line-height:1.5;font-weight:500;color:#462e32}
.edition-v3 .invitation .shuttle-reminder{font-size:12px;line-height:1.6;color:#54423d;margin-top:10px}
.edition-v3 .invitation .shuttle-reminder .translation-slot>[lang="en"]{font-size:13.5px;line-height:1.55}
.edition-v3 .invitation:is([data-venue-density="compact"],[data-venue-density="dense"]) .venue-summary{padding-block:8px;margin-bottom:8px}
.edition-v3 .invitation:is([data-venue-density="compact"],[data-venue-density="dense"]) .transport-column{padding-block:8px}
.edition-v3 .invitation:is([data-venue-density="compact"],[data-venue-density="dense"]) .shuttle-times{gap:7px;margin-block:7px}
.edition-v3 .invitation[data-venue-density="dense"] .parking-option{padding-block:7px}
.edition-v3 .invitation[data-venue-density="dense"] .transport-caption{margin-bottom:7px}

/* The original alternating path, enlarged and spread across available height. */
.edition-v3 .invitation .page-timeline{max-width:460px}
.edition-v3 .invitation .timeline-content{transform:none}
.edition-v3 .invitation .timeline-content .day-timeline{--timeline-row-min:80px}
.edition-v3 .invitation .timeline-content .day-marker{width:46px;height:46px}
.edition-v3 .invitation .timeline-content .day-marker svg{width:28px;height:28px}
.edition-v3 .invitation .timeline-content .day-event time{font-size:34px;line-height:1.05}
.edition-v3 .invitation .timeline-content .day-event h2{font-size:18px;font-weight:500;line-height:1.4;color:#462e32}
.edition-v3 .invitation .timeline-content .day-event h2 .translation-slot>[lang="en"]{font-size:20px}
.edition-v3 .invitation .timeline-content .day-event p[lang="en"]{font-size:16px;line-height:1.3;color:#71383e}
.edition-v3 .invitation[data-timeline-density="compact"] .timeline-content .day-timeline{--timeline-row-min:70px}
.edition-v3 .invitation[data-timeline-density="compact"] .timeline-content .day-marker{width:44px;height:44px}
.edition-v3 .invitation[data-timeline-density="compact"] .timeline-content .day-event time{font-size:32px}
.edition-v3 .invitation[data-timeline-density="dense"] .timeline-content .day-timeline{--timeline-row-min:62px}
.edition-v3 .invitation[data-timeline-density="dense"] .timeline-content .day-marker{width:40px;height:40px}
.edition-v3 .invitation[data-timeline-density="dense"] .timeline-content .day-event time{font-size:30px}
.edition-v3 .invitation[data-timeline-density="dense"] .timeline-content .day-event h2{font-size:17px}
.edition-v3 .invitation[data-timeline-density="dense"] .timeline-content .day-event h2 .translation-slot>[lang="en"]{font-size:19px}

@media(max-width:350px){
 .edition-v3 .invitation .transport-column{padding-inline:7px}
 .edition-v3 .invitation .venue-summary{padding-inline:7px}
 .edition-v3 .invitation .venue-summary h2{font-size:20px}
 .edition-v3 .invitation .parking-name-row{grid-template-columns:minmax(0,1fr) 18px;gap:3px}
 .edition-v3 .invitation .parking-map-icon{width:18px}
}
@media(max-width:300px){
 .edition-v3 .invitation .tab-bar .tab{min-width:0;padding-inline:3px;flex:1}
 .edition-v3 .invitation .tab-bar .tab>span{display:none}
}

/* The original title is outside the body fitter. Its 3.2.2 type, artwork,
   position and language slot are unchanged, even when the body is compact. */
.edition-v3 .invitation:not([data-active-page="home"]) .page-scroll{overflow:hidden;touch-action:pan-x}
.edition-v3 .invitation:not([data-active-page="home"]) .pages{height:100%;min-height:0;padding:0 var(--content-inset)}
.edition-v3 .invitation :is(.page-timeline,.page-dress,.page-venue,.page-gallery,.page-upload){display:flex;flex-direction:column;height:100%;min-height:0;padding-bottom:0}
.edition-v3 .invitation .page>.section-header{flex:0 0 auto}
.edition-v3 .invitation :is(.page-timeline,.page-venue)>.section-header{margin-bottom:12px}
.edition-v3 .invitation .chapter-body{
 --chapter-frame-width:min(calc(100vw - var(--stationery-side) - var(--stationery-side)),var(--stationery-max));
 flex:1 1 auto;min-height:0;min-width:0;width:100%;
 margin-bottom:max(0px,calc(var(--chapter-frame-width)*.07 - 24px));
 overflow-y:auto;overflow-x:hidden;overscroll-behavior-y:contain;
 touch-action:pan-y;scrollbar-width:thin;scrollbar-color:#826c594d transparent;scroll-padding:12px;
}
.edition-v3 .invitation .chapter-body:focus-visible{outline:1px solid #89665375;outline-offset:-1px}
.edition-v3 .invitation .chapter-body :is(.attire-content,.venue-content,.timeline-content){height:auto;min-height:0;transform:none;display:flex;flex-direction:column}
.edition-v3 .invitation .chapter-body :is(.attire-content,.venue-content,.timeline-content)>*{flex:none}
.edition-v3 .invitation:is([data-active-page="dress"][data-dress-overflow="false"],[data-active-page="venue"][data-venue-overflow="false"],[data-active-page="timeline"][data-timeline-overflow="false"]) .chapter-body{overflow-y:hidden}
.photo-viewer-open .chapter-body{overflow:hidden!important}
.edition-v3 .invitation :is(.portrait-grid,.snapshot-grid){grid-template-columns:repeat(3,minmax(0,1fr));min-width:0;max-width:100%}
.edition-v3 .invitation .page-gallery .portrait-slot span{color:#54423d;font-size:13px}
.edition-v3 .invitation .page-gallery .portrait-slot svg{opacity:.6;color:#54423d}

/* Body-only density: reduce illustrations, supporting copy and spacing first. */
.edition-v3 .invitation[data-dress-density="compact"] .attire-look{padding-block:2px}
.edition-v3 .invitation[data-dress-density="compact"] .attire-look .garment-art{height:57px;width:38px}
.edition-v3 .invitation[data-dress-density="compact"] .attire-look h2{font-size:17px;margin-top:4px;margin-bottom:3px}
.edition-v3 .invitation[data-dress-density="compact"] .attire-palette{margin-top:calc(8px + var(--attire-palette-air,0px))}
.edition-v3 .invitation[data-dress-density="compact"] .attire-avoid{margin-top:calc(14px + var(--attire-note-air,0px));padding-top:9px;padding-bottom:4px}
.edition-v3 .invitation[data-dress-density="dense"] .attire-look{padding-block:1px}
.edition-v3 .invitation[data-dress-density="dense"] .attire-look .garment-art{height:45px;width:30px}
.edition-v3 .invitation[data-dress-density="dense"] .attire-look h2{font-size:16px;margin:3px 0 2px}
.edition-v3 .invitation[data-dress-density="dense"] .attire-look p{font-size:13px;line-height:1.5}
.edition-v3 .invitation[data-dress-density="dense"] .attire-look p .translation-slot>[lang="en"]{font-size:14px}
.edition-v3 .invitation[data-dress-density="dense"] .attire-intro{margin-bottom:5px}
.edition-v3 .invitation[data-dress-density="dense"] .attire-palette{margin-top:calc(5px + var(--attire-palette-air,0px))}
.edition-v3 .invitation[data-dress-density="dense"] .attire-palette h2{font-size:15px;margin-bottom:2px}
.edition-v3 .invitation[data-dress-density="dense"] .attire-swatch{width:34px}
.edition-v3 .invitation[data-dress-density="dense"] .attire-colours{margin-top:7px}
.edition-v3 .invitation[data-dress-density="dense"] .attire-avoid{margin-top:calc(9px + var(--attire-note-air,0px));padding-top:7px;padding-bottom:2px}
.edition-v3 .invitation .attire-avoid p{font-size:12px;line-height:1.65}
.edition-v3 .invitation .attire-avoid p .translation-slot>[lang="en"]{font-size:13px}

.edition-v3 .invitation .shuttle-times>div{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:3px 6px}
.edition-v3 .invitation .shuttle-times>div>span{font-size:12px;line-height:1.45}
.edition-v3 .invitation .shuttle-times>div>span .translation-slot>[lang="en"]{font-size:13px}
.edition-v3 .invitation .shuttle-times time{max-width:100%;font-size:30px;line-height:1.1}
.edition-v3 .invitation .shuttle-pickup{display:flex;flex-wrap:wrap;gap:3px 8px;align-items:baseline;padding-top:9px}
.edition-v3 .invitation .shuttle-pickup strong{margin-top:0}
.edition-v3 .invitation .shuttle-reminder{font-size:12px;line-height:1.5;margin-top:8px}
.edition-v3 .invitation .shuttle-reminder .translation-slot>[lang="en"]{font-size:13px}
.edition-v3 .invitation .transport-column h2{flex-wrap:wrap}
.edition-v3 .invitation .parking-street{line-height:1.5}
.edition-v3 .invitation .parking-street .translation-slot>[lang="en"]{font-size:12.5px;line-height:1.5}
.edition-v3 .invitation[data-venue-density="compact"] .parking-option{padding-block:7px}
.edition-v3 .invitation[data-venue-density="dense"] .transport-column{padding:7px 8px}
.edition-v3 .invitation[data-venue-density="dense"] .venue-summary{padding:7px 8px;margin-bottom:7px}
.edition-v3 .invitation[data-venue-density="dense"] .venue-summary h2{font-size:20px;margin-bottom:4px}
.edition-v3 .invitation[data-venue-density="dense"] .venue-street{font-size:12px;line-height:1.5}
.edition-v3 .invitation[data-venue-density="dense"] .venue-street .translation-slot>[lang="en"]{font-size:13px}
.edition-v3 .invitation[data-venue-density="dense"] .parking-option{padding-block:5px}
.edition-v3 .invitation[data-venue-density="dense"] .parking-option strong{font-size:13px;line-height:1.5}
.edition-v3 .invitation[data-venue-density="dense"] .parking-option strong .translation-slot>[lang="en"]{font-size:14px}
.edition-v3 .invitation[data-venue-density="dense"] .shuttle-times{gap:6px;margin:6px 0 9px}
.edition-v3 .invitation[data-venue-density="dense"] .shuttle-times time{font-size:28px}
.edition-v3 .invitation:is([data-timeline-density="compact"],[data-timeline-density="dense"]) .day-event p[lang="en"]{display:none}
.edition-v3 .invitation[data-timeline-density="dense"] .day-marker svg{width:25px;height:25px}
.edition-v3 .invitation .snapshot-drop small{font-size:12px;line-height:1.5}
.edition-v3 .invitation .snapshot-drop small .translation-slot>[lang="en"]{font-size:13px;line-height:1.5}
.edition-v3 .invitation .snapshot-sharing{font-size:12px;line-height:1.6}
.edition-v3 .invitation .snapshot-sharing .translation-slot>[lang="en"]{font-size:13px}

/* The homepage keeps its vertical composition; only extreme zoom scrolls. */
.edition-v3 .invitation[data-active-page="home"][data-home-overflow="true"] .page-scroll{overflow-y:auto;overflow-x:hidden;touch-action:pan-y;overscroll-behavior-y:contain}
.edition-v3 .invitation[data-active-page="home"][data-home-overflow="true"] :is(.pages,.page-home,.home-content){height:auto;min-height:100%}
.edition-v3 .invitation[data-active-page="home"][data-home-overflow="true"] .home-content{grid-template-rows:auto auto auto auto auto}

/* Source: refinements-v327.css */
/* V3.2.7 — content-only corrections. The frame, its caps, opacity, photograph,
   dock dimensions and all chapter headings retain their V3.2.6 geometry. */
.edition-v3 .invitation .page-gallery{animation:none}
.edition-v3 .invitation .portrait-status:empty{display:none}

/* Centre the complete reminder, including its small prohibition symbol. */
.edition-v3 .invitation .page-dress .attire-avoid{
 display:flex;justify-content:center;align-items:center;gap:7px;text-align:center;
}
.edition-v3 .invitation .page-dress .attire-avoid>svg{flex:0 0 16px;margin:0}
.edition-v3 .invitation .page-dress .attire-avoid p{
 flex:0 1 auto;width:auto;min-width:0;max-width:calc(100% - 23px);text-align:center;
}

/* Desktop has less vertical room than a portrait phone. Keep the same frame
   width; reserve its curved bottom edge inside the existing content rectangle.
   Scope IDs intentionally beat legacy home-overflow rules from earlier CSS. */
@media(min-width:700px){
 .edition-v3 #invitation{
  --desktop-frame-width:min(calc(100vw - var(--stationery-side) - var(--stationery-side)),var(--stationery-max));
  --desktop-bottom-clearance:max(0px,calc(var(--desktop-frame-width)*.07 + 8px - (var(--content-bottom) - var(--frame-bottom))));
 }
 .edition-v3 #invitation .page-scroll{
  overflow:hidden;overscroll-behavior:none;touch-action:pan-x;
 }
 .edition-v3 #invitation .pages{
  height:100%;min-height:0;padding:0 var(--content-inset);overflow:hidden;
 }
 .edition-v3 #invitation .page{height:100%;min-height:0;overflow:hidden}
 .edition-v3 #invitation .page>.section-header{flex:0 0 auto}
 .edition-v3 #invitation .chapter-body{
  flex:1 1 0;min-height:0;max-height:100%;margin-bottom:var(--desktop-bottom-clearance);
  overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;scrollbar-width:thin;
  scrollbar-color:#89665370 transparent;scrollbar-gutter:stable;scroll-padding:8px;
  touch-action:pan-y;
 }
 .edition-v3 #invitation .chapter-body::-webkit-scrollbar{width:5px}
 .edition-v3 #invitation .chapter-body::-webkit-scrollbar-track{background:transparent}
 .edition-v3 #invitation .chapter-body::-webkit-scrollbar-thumb{background:#89665370;border-radius:8px}
 .edition-v3 #invitation :is(.page-gallery,.page-upload,.page-venue)>.chapter-body{padding:0 6px 6px 0}
 .edition-v3 #invitation :is(.page-timeline,.page-dress)>.chapter-body{
  overflow:hidden;scrollbar-gutter:auto;touch-action:pan-x;
 }
 .edition-v3 #invitation :is(.timeline-content,.attire-content){
  transform:scale(var(--desktop-body-scale,1));transform-origin:center top;
 }

 /* The familiar vertical homepage; tighten the city/countdown spacing first. */
 .edition-v3 #invitation .page-home{padding-bottom:var(--desktop-bottom-clearance)}
 .edition-v3 #invitation .home-content{
  height:100%;min-height:0;gap:4px;grid-template-rows:auto minmax(52px,1fr) auto auto auto;
 }
 .edition-v3 #invitation .home-content .home-city{margin:2px 0 0}
 .edition-v3 #invitation .home-content .home-location{margin-bottom:2px}
 .edition-v3 #invitation .home-content .countdown-wrap{margin:0;padding-top:5px}
 .edition-v3 #invitation .home-content .countdown-label{margin:0 0 4px}
 .edition-v3 #invitation .home-content .countdown-unit small{margin-top:2px}
 .edition-v3 #invitation[data-home-layout="short"] .home-content{gap:2px}
 /* Only exceptionally short windows need the last, body-only fitting step. */
 .edition-v3 #invitation[data-home-overflow="true"] .home-content{
  height:var(--desktop-home-height);min-height:0;
  grid-template-rows:auto auto auto auto auto;
  transform:scale(var(--desktop-home-scale,1));transform-origin:center top;
 }

 /* Five alternating events, with no heading changes and no vertical scrolling. */
 .edition-v3 #invitation:is([data-timeline-density="tight"],[data-timeline-density="short"]) .day-timeline{--timeline-row-min:50px}
 .edition-v3 #invitation:is([data-timeline-density="tight"],[data-timeline-density="short"]) .day-event p[lang="en"]{display:none}
 .edition-v3 #invitation:is([data-timeline-density="tight"],[data-timeline-density="short"]) .day-event time{font-size:26px;line-height:1.05}
 .edition-v3 #invitation:is([data-timeline-density="tight"],[data-timeline-density="short"]) .day-event h2{font-size:16px;line-height:1.25;margin-top:2px}
 .edition-v3 #invitation:is([data-timeline-density="tight"],[data-timeline-density="short"]) .day-event h2 .translation-slot>[lang="en"]{font-size:17px}
 .edition-v3 #invitation:is([data-timeline-density="tight"],[data-timeline-density="short"]) .day-marker{width:34px;height:34px}
 .edition-v3 #invitation:is([data-timeline-density="tight"],[data-timeline-density="short"]) .day-marker svg{width:22px;height:22px}
 .edition-v3 #invitation[data-timeline-density="short"] .day-timeline{--timeline-row-min:44px}
 .edition-v3 #invitation[data-timeline-density="short"] .day-event time{font-size:23px}
 .edition-v3 #invitation[data-timeline-density="short"] .day-event h2{font-size:14px}
 .edition-v3 #invitation[data-timeline-density="short"] .day-event h2 .translation-slot>[lang="en"]{font-size:15px}
 .edition-v3 #invitation[data-timeline-density="short"] .day-marker{width:30px;height:30px}
 .edition-v3 #invitation[data-timeline-density="short"] .day-marker svg{width:20px;height:20px}
}

/* Source: refinements-v329.css */
/* V3.2.9: icon artwork, curved connectors, colour suggestions and reminder only. */
.edition-v3 #invitation .timeline-content .day-marker{
 border:0;border-radius:0;background:none;box-shadow:none;z-index:1;
}
.edition-v3 #invitation .timeline-content .day-marker>svg.schedule-icon{
 width:100%;height:100%;stroke-width:1.6;overflow:visible;
}
.edition-v3 #invitation .timeline-content .day-timeline::before{display:none}
.edition-v3 #invitation .day-timeline{--schedule-link-gap:46px}
.edition-v3 #invitation[data-timeline-density="compact"] .day-timeline{--schedule-link-gap:44px}
.edition-v3 #invitation[data-timeline-density="dense"] .day-timeline{--schedule-link-gap:40px}
.edition-v3 #invitation[data-timeline-density="tight"] .day-timeline{--schedule-link-gap:34px}
.edition-v3 #invitation[data-timeline-density="short"] .day-timeline{--schedule-link-gap:30px}
.edition-v3 #invitation .day-event:not(:last-child)::after{
 content:"";position:absolute;pointer-events:none;left:50%;
 top:calc(50% + var(--schedule-link-gap)/2);
 width:84px;height:max(0px,calc(100% - var(--schedule-link-gap)));
 transform:translateX(-50%);background-position:center;background-size:100% 100%;background-repeat:no-repeat;
}
.edition-v3 #invitation .day-event:nth-child(1)::after{background-image:url('/assets/icons-v329/link-1.svg')}
.edition-v3 #invitation .day-event:nth-child(2)::after{background-image:url('/assets/icons-v329/link-2.svg')}
.edition-v3 #invitation .day-event:nth-child(3)::after{background-image:url('/assets/icons-v329/link-3.svg')}
.edition-v3 #invitation .day-event:nth-child(4)::after{background-image:url('/assets/icons-v329/link-4.svg')}
@media(max-width:350px){.edition-v3 #invitation .day-event:not(:last-child)::after{width:60px}}

/* Muted autumn colours coordinate with coffee/wine flowers and green foliage. */
.edition-v3 #invitation .attire-swatch--oat{--swatch:#b7aa97}
.edition-v3 #invitation .attire-swatch--cocoa{--swatch:#917b6e}
.edition-v3 #invitation .attire-swatch--clay{--swatch:#b78e83}
.edition-v3 #invitation .attire-swatch--wine{--swatch:#8d686e}
.edition-v3 #invitation .attire-swatch--sage{--swatch:#818a76}
.edition-v3 #invitation .page-dress .attire-avoid{
 flex-direction:column;align-items:center;justify-content:center;gap:4px;text-align:center;
}
.edition-v3 #invitation .page-dress .attire-avoid>svg.attire-reminder-icon{
 flex:none;width:24px;height:24px;margin:0;stroke-width:1.4;
}
.edition-v3 #invitation .page-dress .attire-avoid p{
 flex:none;width:100%;max-width:100%;margin:0;text-align:center;
}

/* Source: opening-v332.css */
/* V3.3.2: date card, two real photographs and autumn florals. Only the cover. */
.cover-v3{--scene-w:min(600px,calc(100vw - 120px),calc((100svh - 180px)*.80));--scene-h:calc(var(--scene-w)*5/7)}
.cover-v3 .opening-contents.is-released{clip-path:inset(-130% -24% 6px -24%)}
.cover-v3 .suite-invite.save-date-card{left:7%;top:13%;width:41%;aspect-ratio:0.74;z-index:2;background:linear-gradient(135deg,#fffaf0,#eee3d0);border:1px solid #c5ac8866;border-radius:45% 45% 2px 2px;display:flex;flex-direction:column;align-items:center;padding:8% 2% 3%;color:#71383e;text-align:center;box-shadow:1px 4px 12px #321b1f30;overflow:hidden}
.date-card-border{position:absolute;inset:4%;border:1px solid #a1815755;border-radius:45% 45% 1px 1px;pointer-events:none}
.date-card-kicker{font:500 calc(var(--scene-w)*.016)/1.4 var(--serif);letter-spacing:.20em}
.date-card-script{font:400 calc(var(--scene-w)*.062)/1.15 var(--script);white-space:nowrap;margin-top:5%}
.date-card-rule{width:22%;height:1px;background:#a1815777;margin:8% 0 7%}
.date-card-month{font:400 calc(var(--scene-w)*.021)/1.2 var(--serif);letter-spacing:.20em}
.date-card-day{font:400 calc(var(--scene-w)*.17)/.90 var(--serif);margin-top:2%;letter-spacing:-.04em}
.date-card-year{font:400 calc(var(--scene-w)*.031)/1.6 var(--serif);letter-spacing:.06em;display:flex;gap:.35em;align-items:center}
.date-card-year>span{font-size:.7em;color:#a18157}
.date-card-footer{font:400 calc(var(--scene-w)*.011)/1.3 var(--serif);letter-spacing:.18em;margin-top:5%}
.cover-v3 .polaroid{position:absolute;display:block;aspect-ratio:.81;padding:0;border:1px solid #ece2d5;background:#fffaf1;box-shadow:1px 3px 9px #321b1f38;filter:none;transform-origin:50% 90%}
.cover-v3 .suite-photo.polaroid{left:47%;top:28%;width:43%;z-index:4}
.cover-v3 .suite-photo-back.polaroid{left:48%;top:6%;width:37%;z-index:1;transform:rotate(-8deg)}
.polaroid-window{position:absolute;left:6%;right:6%;top:5%;height:80%;overflow:hidden;background:#d4c8b6}
.polaroid-window img{display:block;position:absolute;max-width:none!important;height:auto!important;object-fit:fill}
/* Front: original full figures span 2/3 of the photo window height. */
.suite-photo .polaroid-window img{width:139%;left:-19.5%;top:-57%}
.suite-photo-back .polaroid-window img{width:126%;left:-13%;top:-33%}
.polaroid-caption{position:absolute;left:3%;right:3%;bottom:4%;color:#79655a;font:400 calc(var(--scene-w)*.023)/1 var(--script);white-space:nowrap;text-align:center}
.autumn-florals{position:absolute;inset:0;z-index:-1;pointer-events:none}
.autumn-spray{display:block;position:absolute;overflow:hidden;filter:drop-shadow(1px 3px 3px #44252a22);aspect-ratio:1/2}
.autumn-spray img{display:block;width:200%;height:100%;max-width:none;object-fit:fill}
.autumn-spray-left{width:34%;left:-21%;top:10%;transform:rotate(-13deg)}
.autumn-spray-right{width:28%;right:-20%;top:20%;transform:rotate(13deg)}
.autumn-spray-right img{transform:translateX(-50%)}
.animation-running .suite-photo-back{will-change:transform}
@media(max-height:520px){.cover-v3{--scene-w:min(460px,calc(100vw - 120px),calc((100svh - 125px)*.80));--scene-h:calc(var(--scene-w)*5/7)}}
@media(prefers-reduced-motion:reduce){.animation-running .suite-photo-back{will-change:auto}}

/* Source: stationery-frame-v334.css */
/* Shared across /main and /rsvp. No separate caps, body strip or joining edge. */
.invitation-frame.continuous-frame{display:block;background:none;border:0;padding:0}
.invitation-frame.continuous-frame::before,.invitation-frame.continuous-frame::after{content:none;display:none}
.invitation-frame.continuous-frame>.invitation-frame-body{display:none}
.invitation-frame.continuous-frame>.stationery-outline{display:block;position:absolute;inset:0;width:100%;height:100%;max-width:none;overflow:visible;fill:none;stroke:none}
/* Same conspicuous parking note in both views. */
.invitation .parking-note,.rsvp-stationery .parking-note{display:block;width:fit-content;max-width:100%;padding:3px 7px;margin:7px 0 0;border-left:3px solid #783d43;background:#f2e3d5;color:#71343d;font-size:14px;font-weight:600;line-height:1.5}
.invitation .parking-note .copy-pair>[aria-hidden="true"]{display:none}

/* Source: refinements-v336.css */
/* Parking: each lot owns its address, price and map action. */
.edition-v3 #invitation .parking-column .parking-name-row{display:block}
.edition-v3 #invitation .parking-column .parking-option strong{font-size:13px;line-height:1.6;font-weight:500;letter-spacing:0;white-space:nowrap}
.edition-v3 #invitation .parking-column .parking-street{font-size:11px;line-height:1.6;margin-top:5px;letter-spacing:0;overflow-wrap:normal}
.edition-v3 #invitation .parking-column .parking-note{font-size:11px;line-height:1.6;white-space:nowrap;padding:3px 5px;margin-top:7px;letter-spacing:0;border-left-width:2px}
.edition-v3 #invitation .parking-column .parking-directions{display:flex;align-items:center;gap:5px;margin-top:8px;color:#71343d;font-size:11px;text-decoration:underline;text-underline-offset:3px}
.edition-v3 #invitation .parking-directions svg{width:12px;height:12px;flex:none}
.edition-v3 #invitation .parking-column .translation-slot>[aria-hidden="true"]{display:none}
.edition-v3 #invitation .parking-column .parking-option strong .translation-slot>[lang="en"]{font-size:14px;white-space:normal}
.edition-v3 #invitation .parking-column .parking-street .translation-slot>[lang="en"]{font-size:12px}
html[lang="en"] .edition-v3 #invitation .parking-column .parking-note{font-size:12px;white-space:normal}
@media(max-width:360px){
 .edition-v3 #invitation .transport-column{padding-inline:7px}
 .edition-v3 #invitation .parking-column .parking-option strong{font-size:11.5px}
 .edition-v3 #invitation .parking-column .parking-note{font-size:10px;padding-inline:3px}
}

/* Source: cover-art-v339.css */
/* V3.3.9: envelope-mounted floral accents. All dimensions use the envelope,
   so decorative flowers never reduce its width or alter the card animation. */
.cover-v3{
 --scene-w:min(700px,calc(100vw - 44px),calc((100svh - 180px)*.80),calc((100svh - 64px)*.625));
 --scene-h:calc(var(--scene-w)*5/7);
}
.cover-v3 .envelope-florals{position:absolute;inset:0;z-index:9;pointer-events:none;display:block}
.cover-v3 .envelope-flower{position:absolute;display:block;pointer-events:none;filter:drop-shadow(1px 3px 3px #32171842)}
.cover-v3 .envelope-flower img{display:block;width:100%;height:auto;max-width:100%;object-fit:contain}
.cover-v3 .envelope-flower-small{left:2.8%;top:28%;width:29%;transform:rotate(-8deg);transform-origin:50% 70%}
.cover-v3 .envelope-flower-cascade{right:1%;top:39%;width:44%}
.cover-v3 .opening-seal{left:41%;top:49.25%;width:18%;aspect-ratio:1122/1402}
.cover-v3 .opening-seal img{width:100%;height:100%;object-fit:contain}
.cover-v3 .cover-instruction{top:max(calc(50% + var(--scene-h)*.72 + 22px),calc(50% + var(--scene-h)*.80 + 10px))}
.cover-v3 .seal-fallback{background:linear-gradient(130deg,#916344,#493024 60%,#8d6243);border-color:#b58d69;color:#e5bb92}
@media(max-height:520px){
 .cover-v3{--scene-w:min(480px,calc(100vw - 44px),calc((100svh - 125px)*.80),calc((100svh - 64px)*.625))}
 .cover-v3 .cover-instruction{top:max(calc(50% + var(--scene-h)*.72 + 12px),calc(50% + var(--scene-h)*.80 + 10px))}
}

/* Source: brand-v338.css */
/* One updated vector master for both invitation and RSVP. */
.edition-v3 .invitation .home-monogram,.rsvp-stationery .rsvp-monogram{
 aspect-ratio:1122/1402;
 -webkit-mask-image:url('/assets/yi-xiu-logo-v338.svg');
 mask-image:url('/assets/yi-xiu-logo-v338.svg');
}

/* V3.3.11 requested cover and typography corrections */
/* V3.3.11: envelope-mounted floral accents. All dimensions use the envelope,
   so decorative flowers never reduce its width or alter the card animation. */
.cover-v3{
 --scene-w:min(700px,calc(100vw - 44px),calc((100svh - 180px)*.80),calc((100svh - 64px)*.59));
 --scene-h:calc(var(--scene-w)*5/7);
}
.cover-v3 .envelope-florals{position:absolute;inset:0;z-index:9;pointer-events:none;display:block}
.cover-v3 .envelope-flower{position:absolute;display:block;pointer-events:none;filter:drop-shadow(1px 3px 3px #32171842)}
.cover-v3 .envelope-flower img{display:block;width:100%;height:auto;max-width:100%;object-fit:contain}
.cover-v3 .envelope-flower-small{left:max(-5%,calc((var(--scene-w) - 100vw)/2 + 8px));top:2%;width:29%;transform:rotate(-8deg);transform-origin:50% 70%}
.cover-v3 .envelope-flower-cascade{right:max(-23%,calc((var(--scene-w) - 100vw)/2 + 12px - var(--scene-w)*.016));top:18%;width:48%}
.cover-v3 .opening-seal{left:41%;top:49.25%;width:18%;aspect-ratio:1122/1402}
.cover-v3 .opening-seal img{width:100%;height:100%;object-fit:contain}
.cover-v3 .cover-instruction{top:max(calc(50% + var(--scene-h)*.72 + 22px),calc(50% + var(--scene-h)*.86 + 10px))}
.cover-v3 .seal-fallback{background:linear-gradient(130deg,#d5bd96,#b69a73 60%,#d0b68e);border-color:#cbb28a;color:#b49974}
@media(max-height:520px){
 .cover-v3{--scene-w:min(480px,calc(100vw - 44px),calc((100svh - 125px)*.80),calc((100svh - 64px)*.59))}
 .cover-v3 .cover-instruction{top:max(calc(50% + var(--scene-h)*.72 + 12px),calc(50% + var(--scene-h)*.86 + 10px))}
}

/* Improve the two small homepage details without changing the layout. */
.edition-v3 #invitation .home-content .date-middle span{
 font-size:14px;font-weight:600;line-height:1.3;letter-spacing:.16em;color:#63343c;
}
.edition-v3 #invitation .home-content .countdown-unit:not(:last-child)::after{
 font-size:22px;font-weight:600;line-height:1.35;color:#74434a;opacity:1;
}
/* Light-to-dark attire palette: Milk Tea, Clay, Sage, Cocoa, Smoke Grey. */
.edition-v3 #invitation .attire-swatch--smoke{--swatch:#737775}

/* Visual offset only: English heading and document flow remain unchanged. */
.edition-v3 #invitation .section-header .heading-zh{position:relative;top:4px}

/* V3.3.12: original V3.3.9 flowers, below the moving flap. */
.cover-v3{--scene-w:min(700px,calc(100vw - 44px),calc((100svh - 180px)*.80),calc((100svh - 64px)*.575))}
.cover-v3 .envelope-florals{z-index:7}
.cover-v3 .envelope-flower-small{top:12%}
.cover-v3 .envelope-flower-cascade{right:max(-26%,calc((var(--scene-w) - 100vw)/2 + 6px - var(--scene-w)*.04));top:39%;width:48%}
.cover-v3 .cover-instruction{top:max(calc(50% + var(--scene-h)*.72 + 22px),calc(50% + var(--scene-h)*.92 + 10px))}
@media(max-height:520px){
 .cover-v3{--scene-w:min(480px,calc(100vw - 44px),calc((100svh - 125px)*.80),calc((100svh - 64px)*.575))}
 .cover-v3 .cover-instruction{top:max(calc(50% + var(--scene-h)*.72 + 12px),calc(50% + var(--scene-h)*.92 + 10px))}
}
/* Keep recommendations and swatches a single compact group. */
.edition-v3 #invitation .page-dress .attire-intro{margin-bottom:18px}
.edition-v3 #invitation .page-dress .attire-palette{margin-top:calc(24px + var(--attire-palette-air,0px));display:flex;flex-direction:column;align-items:center;gap:0}
.edition-v3 #invitation .page-dress .attire-palette h2{margin:0 0 2px}
.edition-v3 #invitation .page-dress .attire-palette .palette-lead{margin:0}
.edition-v3 #invitation .page-dress .attire-colours{margin-top:6px}
.edition-v3 #invitation[data-dress-density="compact"] .page-dress .attire-intro{margin-bottom:16px}
.edition-v3 #invitation[data-dress-density="compact"] .page-dress .attire-palette{margin-top:calc(20px + var(--attire-palette-air,0px))}
.edition-v3 #invitation[data-dress-density="dense"] .page-dress .attire-intro{margin-bottom:14px}
.edition-v3 #invitation[data-dress-density="dense"] .page-dress .attire-palette{margin-top:calc(18px + var(--attire-palette-air,0px))}
.edition-v3 #invitation .attire-swatch--mist{--swatch:#7a858c}
