:root{--plum:#220c15;--ivory:#f4ede2;--cream:#e8dcc8}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--plum);color:var(--ivory);font-family:Dotum,Arial,sans-serif}a{color:inherit;text-decoration:none}button,a{-webkit-tap-highlight-color:transparent}button:focus-visible,a:focus-visible{outline:2px solid currentColor;outline-offset:6px}header{height:98px;display:flex;justify-content:space-between;align-items:center;padding:0 6.5%;border-bottom:1px solid #f4ede21a}.wordmark{font-family:Baskerville,'Times New Roman',serif;font-size:25px}.wordmark span{font-style:italic;color:#baa694}.header-date{font-size:12px;letter-spacing:2px}.experience{position:relative;text-align:center;overflow:hidden;background:#f4ede2;padding:62px 20px 44px}.eyebrow{font-size:12px;letter-spacing:3px;line-height:1.7;margin:0 0 21px;color:#c5b2a9}h1,h2{font-family:Baskerville,'Times New Roman',serif;font-weight:400}h1{font-size:clamp(45px,5vw,72px);margin:0;letter-spacing:-2px}.invitation{font-family:Baskerville,'Times New Roman',serif;font-size:20px;color:#d0bfb5;margin:16px 0 0;font-style:italic}.scene-wrap{position:relative;height:440px;max-width:1000px;margin:-6px auto 0}canvas{width:100%;height:100%;display:block;cursor:pointer;touch-action:pan-y}.scene-caption{position:absolute;bottom:10px;left:0;right:0;pointer-events:none;font-size:11px;letter-spacing:2.5px;color:#bca69e}.controls{margin:20px auto 0}button,.calendar{border:1px solid #d0bda166;background:transparent;color:var(--ivory);padding:16px 34px;font:14px Dotum,Arial,sans-serif;letter-spacing:.5px;cursor:pointer;transition:background .2s}button:hover{background:#f4ede210}#hint{font-family:Baskerville,'Times New Roman',serif;font-size:16px;color:#bfa9a1;margin:15px 0 25px}.skip{font-size:13px;color:#d5c6ba;text-decoration:underline;text-underline-offset:5px}.route{display:flex;align-items:center;justify-content:center;gap:20px;font-size:11px;letter-spacing:2px;margin-top:46px}.route-line{width:140px;height:1px;background:#a88d7855;position:relative}.route-line:before,.route-line:after{content:'';position:absolute;width:5px;height:5px;border:1px solid #b49c82;border-radius:50%;top:-2px;background:#220c15}.route-line:before{left:0}.route-line:after{right:0}.route-line i{position:absolute;left:65px;top:-3px;width:8px;height:8px;background:#b49c82;transform:rotate(45deg)}.route-note{font-size:12px;color:#bca69e;margin-top:17px}.details{background:var(--ivory);color:var(--plum);text-align:center;padding:95px 20px 100px;scroll-margin-top:15px}.details .eyebrow{color:#7d635e}h2{font-size:clamp(48px,6vw,76px);margin:20px 0 40px}h2 span{font-style:italic}.date-block{border-top:1px solid #220c1522;border-bottom:1px solid #220c1522;max-width:460px;margin:0 auto;padding:27px}.day{font-size:12px;letter-spacing:3px;margin:0 0 12px}.date{font-family:Baskerville,'Times New Roman',serif;font-size:36px;margin:0}.location{font-size:16px;margin:14px 0 0}.closing{font-family:Baskerville,'Times New Roman',serif;font-style:italic;font-size:23px;margin:38px 0 12px}.formal{font-size:14px;color:#806762;margin-bottom:34px}.calendar{display:inline-block;color:var(--plum);border-color:#220c1555}.calendar:hover{background:#220c1508}footer{display:flex;justify-content:space-between;gap:20px;padding:30px 6.5%;font-size:11px;letter-spacing:1.5px;color:#c2aaa0}footer a{font-size:13px;letter-spacing:0}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}[hidden]{display:none!important}#fallback{padding-top:50px;font-family:Baskerville,serif;font-size:28px}#fallback img{width:180px;border-radius:2px}@media(max-width:600px){header{height:77px;padding:0 23px}.wordmark{font-size:21px}.header-date{font-size:10px;letter-spacing:1px}.experience{padding-top:43px}h1{letter-spacing:-1px}.scene-wrap{height:355px;margin-top:8px}.scene-caption{font-size:10px;letter-spacing:1.5px}.eyebrow{font-size:11px;letter-spacing:2px}.route{gap:14px}.route-line{width:90px}.route-line i{left:42px}.details{padding:72px 20px 75px}footer{flex-direction:column;align-items:center;font-size:10px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important}}
/* Ivory stationery with plum ink. */
body{background:var(--ivory);color:var(--plum)}header{border-bottom-color:#220c151a}.wordmark span{color:#80635e}.experience{background:#f4ede2;padding-top:54px}.eyebrow{color:#80635e}.invitation{color:#80635e}.scene-wrap{height:470px;margin-top:0}.scene-caption{color:#80635e}.controls{margin-top:14px}button{color:var(--plum);border-color:#220c1550;background:#fffaf344}button:hover{background:#220c1508}#hint{color:#80635e}.skip{color:#735751}.route{color:#512443}.route-line{background:#51244355}.route-line:before,.route-line:after{background:#f4ede2;border-color:#80635e}.route-line i{background:#80635e}.route-note{color:#80635e}.details{border-top:1px solid #220c151a;background:#f4ede2}footer{border-top:1px solid #220c151a;color:#80635e}@media(max-width:600px){.experience{padding-top:40px}.scene-wrap{height:360px}.scene-caption{bottom:0}}
/* Names lead; the interaction carries the story. */
.experience{padding:52px 20px 22px}.intro .eyebrow{margin-bottom:22px}h1{font-size:clamp(54px,8.3vw,112px);letter-spacing:-3px;line-height:1.1}.name-and{font-size:.48em;font-style:italic;letter-spacing:-1px;margin:0 .12em}.hero-date{font-family:Baskerville,'Times New Roman',serif;font-size:20px;line-height:1.5;margin:23px 0 0;color:#735751}.hero-date span{padding:0 10px}.scene-wrap{height:420px;margin-top:0}.controls{margin:0}button{padding:12px 32px}.details{padding:25px 20px 42px;border:0}.formal{margin:0 0 22px;font-family:Baskerville,'Times New Roman',serif;font-style:italic;font-size:17px}.calendar{padding:12px 23px;font-size:13px}footer{justify-content:center;padding:23px;border:0}@media(max-width:600px){.experience{padding-top:45px}h1{font-size:60px;letter-spacing:-2px}.name-and{display:block;font-size:25px;margin:6px 0;line-height:1}.hero-date{font-size:18px;margin-top:23px}.hero-date span{display:block;font-size:0;height:5px}.scene-wrap{height:330px;margin-top:10px}.details{padding-top:23px}}
.palace-names{display:block;width:min(690px,92vw);height:auto;margin:0 auto;padding:6px 8px}h1{line-height:1}.experience{padding-top:42px}.scene-wrap{max-width:1120px;height:580px;margin-top:8px}canvas{transition:opacity .5s}.scene-wrap.showing-pass{height:auto;min-height:450px;padding-top:34px;padding-bottom:25px}.showing-pass canvas{position:absolute;inset:0;opacity:0;pointer-events:none}.boarding{position:relative;width:min(1020px,100%);margin:0 auto;display:grid;grid-template-columns:minmax(0,1fr) 230px;background:#fffaf3;border:1px solid #220c1533;border-radius:19px;box-shadow:0 18px 60px #220c1515;text-align:left;overflow:hidden;animation:pass-appear .6s ease both}.pass-header{height:105px;background:#220c15;color:#f4ede2;display:flex;align-items:center;justify-content:space-between;padding:16px 30px;gap:20px}.airline{display:flex;align-items:center;gap:21px;letter-spacing:2px;font-size:16px}.airline img{width:86px;height:76px;object-fit:contain;filter:brightness(0) invert(93%) sepia(8%) saturate(496%) hue-rotate(344deg)}.pass-type{font-size:14px;letter-spacing:1.5px}.pass-content{padding:27px 32px 24px}.pass-field>span,.pass-route>div>span{display:block;font-size:12px;letter-spacing:1.4px;color:#80635e;margin-bottom:7px}.pass-field strong{font-size:18px;font-weight:400;line-height:1.35}.passenger strong{font-size:24px;font-family:Baskerville,'Times New Roman',serif}.pass-route{display:flex;justify-content:space-between;align-items:center;gap:20px;margin:26px 0}.pass-route strong{font-size:43px;font-family:Baskerville,'Times New Roman',serif;font-weight:400}.flight-line{font-size:27px;color:#80635e;flex:1;text-align:center}.flight-fields{display:grid;grid-template-columns:1fr 1.4fr 1fr;gap:20px}.actual-location{font-size:14px;color:#735751;margin:25px 0 0}.pass-band{background:#220c15;color:#f4ede2;padding:11px 32px;font-size:12px;letter-spacing:2px}.pass-stub{border-left:2px dashed #220c1544;padding:0 22px 22px;position:relative;display:flex;flex-direction:column;gap:15px}.stub-title{background:#220c15;color:#f4ede2;margin:0 -22px;padding:44px 17px;height:105px;font-size:12px;letter-spacing:1.2px;text-align:center}.stub-logo{width:66px;height:55px;object-fit:contain;margin:0 auto}.barcode{height:48px;background:url('assets/barcode.svg') center / 100% 100% no-repeat;margin-top:3px}.ticket-number{font-family:monospace;font-size:12px;letter-spacing:2px;text-align:center}.proposal{margin:55px auto 0;max-width:900px;padding:0 25px}.proposal img{display:block;width:100%;height:auto;max-height:850px;object-fit:contain}.details{padding-top:38px}@keyframes pass-appear{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media(max-width:700px){.experience{padding:35px 16px 20px}.palace-names{width:94vw;max-width:540px}.scene-wrap{height:420px;margin-top:10px}.scene-wrap.showing-pass{min-height:0;padding:30px 0}.boarding{grid-template-columns:1fr;border-radius:14px}.pass-header{height:98px;padding:12px 19px}.airline{gap:13px;font-size:13px;letter-spacing:1px}.airline img{width:72px;height:70px}.pass-type{font-size:11px;letter-spacing:1px}.pass-content{padding:23px 21px}.passenger strong{font-size:23px}.pass-route{gap:10px}.pass-route strong{font-size:34px}.flight-fields{grid-template-columns:1fr 1.2fr 1fr;gap:12px}.pass-field strong{font-size:16px}.pass-field>span,.pass-route>div>span{font-size:12px;letter-spacing:1px}.pass-stub{border-left:0;border-top:2px dashed #220c1544;padding:18px 22px;display:grid;grid-template-columns:1fr 1fr;gap:14px;align-items:center}.stub-title,.stub-logo{display:none}.barcode{grid-column:1 / -1;height:35px}.ticket-number{grid-column:1 / -1}.proposal{margin-top:35px;padding:0 20px}.hero-date{margin-top:20px}.hero-date span{display:inline;font-size:18px;padding:0 6px}.actual-location{font-size:13px;line-height:1.5}}@media(prefers-reduced-motion:reduce){.boarding{animation:none}}
/* Airline typography and a bespoke vector flight mark. */
.boarding,.boarding .passenger strong,.boarding .pass-route strong,.boarding .ticket-number{font-family:Arial,Helvetica,sans-serif}.boarding .pass-route strong{font-weight:700;letter-spacing:-1.5px}.boarding .flight-fields strong,.boarding .pass-stub strong{font-weight:700}.boarding .passenger strong{font-weight:400}.flight-line{display:flex;align-items:center;justify-content:center;min-width:42px}.flight-line img{display:block;width:64px;height:auto}.pass-route>div{min-width:0}@media(max-width:700px){.boarding .pass-route strong{font-size:clamp(25px,7.5vw,34px);letter-spacing:-1px}.flight-line img{width:42px}.pass-route{gap:8px}}@media(max-width:360px){.pass-header{gap:10px;padding:12px 15px}.pass-content{padding-left:16px;padding-right:16px}.airline{gap:9px;font-size:12px}.pass-type{font-size:10px}.flight-line img{width:35px}.flight-line{min-width:35px}}
/* Proposal photograph fills the opening scene. */
.experience{isolation:isolate;background:#f4ede2;min-height:100svh;padding-bottom:40px}.hero-photo{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 42%;z-index:-2}.experience:before{content:'';position:absolute;inset:0;background:#f4ede2;z-index:-1;pointer-events:none}.experience .controls button{background:#f4ede2e8;box-shadow:0 4px 20px #220c1510}.experience .controls button:hover{background:#f4ede2}.experience .eyebrow,.experience .hero-date{color:#512443}@media(max-width:700px){.hero-photo{object-position:50% 40%}.experience:before{background:#f4ede2;padding-bottom:35px}}

/* One uniform ivory scrim; classic printed ticket typography. */
.experience:before{background:#f4ede2;opacity:.58}.airline img{filter:none}.boarding,.boarding .passenger strong,.boarding .pass-route strong,.boarding .ticket-number{font-family:'Courier New',Courier,monospace}.boarding .pass-route strong{font-size:39px;letter-spacing:-1.5px}.boarding .passenger strong{font-size:22px}.ticket-capture{position:absolute;left:-20000px;top:0;width:1020px!important;max-width:none!important;grid-template-columns:minmax(0,1fr) 230px!important;animation:none!important;box-shadow:none!important;pointer-events:none}button:disabled{opacity:.65;cursor:wait}@media(max-width:700px){.experience:before{background:#f4ede2;opacity:.58}.boarding .pass-route strong{font-size:clamp(21px,6vw,29px);letter-spacing:-1px}.boarding .passenger strong{font-size:20px}.boarding .pass-type{font-size:10px;letter-spacing:0}.boarding .airline{font-size:12px;letter-spacing:0}.boarding .pass-field strong{font-size:15px}}
/* Monogrammed invitation controls with a fine inset border. */
.experience .controls button{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:15px;padding:18px 32px;border:1px solid #512443;border-radius:5px;background:#f4ede2;color:#220c15;box-shadow:0 6px 16px #220c1514;font-family:Arial,Helvetica,sans-serif;font-size:12px;letter-spacing:1.7px;text-transform:uppercase;transition:background .2s,color .2s,transform .2s,box-shadow .2s}.experience .controls button:before{content:'';position:absolute;inset:4px;border:1px solid #51244355;border-radius:2px;pointer-events:none}.experience .controls button img{width:26px;height:27px;object-fit:contain}.experience .controls button:hover{background:#220c15;color:#f4ede2;box-shadow:0 9px 22px #220c1525;transform:translateY(-2px)}.experience .controls button:hover:before{border-color:#f4ede26e}.experience .controls button:hover img{filter:brightness(0) invert(93%) sepia(8%) saturate(496%) hue-rotate(344deg)}.experience .controls button:active{transform:translateY(0)}.experience .controls button:disabled{transform:none}@media(prefers-reduced-motion:reduce){.experience .controls button{transition:none}}
/* Refined stationery proportions and stronger ticket contrast. */
.experience:before{opacity:.4}.boarding .pass-field>span,.boarding .pass-route>div>span{color:#512443;font-size:14px;letter-spacing:.6px}.boarding .pass-field strong{font-size:20px;font-weight:700}.boarding .passenger strong{font-size:24px;font-weight:400}.boarding .actual-location{color:#512443;font-size:15px}.boarding .pass-type,.boarding .stub-title{font-size:14px;letter-spacing:.6px}.boarding .airline{font-size:17px;letter-spacing:1px}.scene-wrap.showing-pass{padding-top:25px;padding-bottom:22px}.ticket-revealed .controls{margin-top:8px}.experience .controls #replay{padding:13px 23px;font-size:11px;background:#f4ede2d9;box-shadow:none}.experience .controls #replay img{width:21px;height:22px}.calendar{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:15px;padding:18px 32px;border:1px solid #512443;border-radius:5px;background:#f4ede2;color:#220c15;box-shadow:0 6px 16px #220c1514;font-family:Arial,Helvetica,sans-serif;font-size:12px;letter-spacing:1.7px;text-transform:uppercase;transition:background .2s,color .2s,transform .2s}.calendar:before{content:'';position:absolute;inset:4px;border:1px solid #51244355;border-radius:2px;pointer-events:none}.calendar img{width:26px;height:27px;object-fit:contain}.calendar:hover{background:#220c15;color:#f4ede2;transform:translateY(-2px)}.calendar:hover:before{border-color:#f4ede26e}.calendar:hover img{filter:brightness(0) invert(93%) sepia(8%) saturate(496%) hue-rotate(344deg)}@media(max-width:700px){.experience{padding-top:calc(58px + env(safe-area-inset-top,0px))}.palace-names{width:90vw;padding:8px 10px}.hero-date{margin-top:21px;font-size:18px}.scene-wrap{margin-top:105px;height:390px}.hero-photo{height:120%;top:-15%;object-position:50% 35%}.experience:before{opacity:.4}.scene-wrap.showing-pass{margin-top:100px;padding-top:0;padding-bottom:18px}.boarding .passenger strong{font-size:21px}.boarding .pass-field strong{font-size:17px}.boarding .pass-field>span,.boarding .pass-route>div>span{font-size:13px}.boarding .pass-type{font-size:11px}.boarding .airline{font-size:13px}.boarding .actual-location{font-size:14px}.boarding .pass-content{padding-top:27px;padding-bottom:27px}.details{padding-top:32px}.boarding .pass-stub{gap:18px}}@media(prefers-reduced-motion:reduce){.calendar{transition:none}}
/* Theme and real location remain together, over a 90% visible photograph. */
.experience:before{opacity:0}.hero-photo{opacity:.9}.intro{width:fit-content;max-width:820px;margin:0 auto;padding:25px 28px 23px;background:rgba(244,237,226,.84);border:1px solid #f4ede277;border-radius:3px}.intro .palace-names{max-width:100%}.hero-theme{font-family:Baskerville,'Times New Roman',serif;font-size:18px;line-height:1.5;font-style:italic;color:#512443;margin:12px 0 0}.intro .hero-date{margin-top:20px}@media(max-width:700px){.experience:before{opacity:0}.hero-photo{opacity:.9}.intro{width:100%;padding:24px 13px 22px}.hero-theme{font-size:17px;max-width:310px;margin:13px auto 0}.intro .palace-names{width:100%;padding:6px 0}.scene-wrap{margin-top:80px}.scene-wrap.showing-pass{margin-top:75px}}
/* The invitation typography sits directly on the photograph. */
.intro{background:none;border:0;border-radius:0;padding:20px 24px 16px;max-width:820px}.experience .intro .eyebrow,.experience .intro .hero-date,.experience .intro .hero-theme{color:#f4ede2;text-shadow:0 1px 3px #220c15cc,0 3px 14px #220c1580}.intro .palace-names{filter:brightness(0) invert(93%) sepia(8%) saturate(496%) hue-rotate(344deg) drop-shadow(0 2px 4px #220c1599)}.intro .eyebrow{font-weight:500;letter-spacing:3px}.intro .hero-theme{margin-top:14px}@media(max-width:700px){.intro{background:none;border:0;padding:20px 8px 16px}.intro .hero-theme{font-size:17px;max-width:310px}.intro .palace-names{width:100%}}
/* Uniform dark plum photo overlay for clear ivory typography. */
.experience:before{background:#220c15;opacity:.35}@media(max-width:700px){.experience:before{background:#220c15;opacity:.35}}

.hero-photo{opacity:1}@media(max-width:700px){.hero-photo{opacity:1}}
/* Fine cotton paper, warm ivory throughout the boarding pass. */
.boarding{background-color:#f4ede2;background-image:url('assets/ivory-paper.png');background-repeat:repeat;background-size:650px 650px;border:0;border-radius:8px;box-shadow:0 12px 30px #220c1526,0 2px 4px #220c1515}.boarding .pass-main,.boarding .pass-stub,.boarding .pass-content{background-color:transparent}.boarding .pass-stub{border-color:#baa58d}.ticket-capture{box-shadow:none!important}@media(max-width:700px){.boarding{border-radius:7px;background-size:520px 520px}}

/* Plum paper bands share the envelope's tactile stationery finish. */
.boarding .pass-header,.boarding .pass-band,.boarding .stub-title{background-color:#220c15;background-image:url('assets/plum-paper.png');background-repeat:repeat;background-size:650px 650px}.boarding .pass-route strong{text-transform:uppercase}@media(max-width:700px){.boarding .pass-header,.boarding .pass-band,.boarding .stub-title{background-size:520px 520px}}

/* Leave a portrait window above the invitation on phones. */
@media(max-width:700px){.scene-wrap{margin-top:35px}.scene-wrap.showing-pass{margin-top:220px}.hero-photo{top:-20%;object-position:50% 35%}}

/* No perimeter stroke in either the captured pass or the revealed card. */
.boarding.ticket-capture{border:0;border-radius:0}

/* Balance the visible envelope between the theme line and opening control. */
@media(max-width:700px){.scene-wrap:not(.showing-pass) canvas{transform:translateY(-45px)}}

/* Keep the personal seat detail readable. */
.flight-fields .pass-field:last-child strong{display:block;max-width:160px;line-height:1.35}

/* Simple rounded controls let the envelope carry the stationery design. */
.experience .controls button,.calendar{border:0;border-radius:999px;box-shadow:none}.experience .controls button:before,.calendar:before{content:none}.calendar{background:#220c15;color:#f4ede2}.calendar img{filter:brightness(0) invert(93%) sepia(8%) saturate(496%) hue-rotate(344deg)}.calendar:hover{background:#512443}

/* The reveal uses one coordinated fade and layout transition. */
.boarding{animation:none}canvas{transition:opacity .65s ease}.scene-wrap{will-change:transform}.hero-photo{image-rendering:auto}

/* Keep the paper opaque through the matched-position reveal. */
.boarding{transform-origin:0 0}.showing-pass canvas{transition:none}.boarding{opacity:1}

/* Camera dimensions stay fixed; both directions retain opaque paper. */
#scene{transition:none}.scene-wrap{will-change:auto}

/* The photograph and its overlay belong only to the invitation hero. */
.experience{position:relative;overflow:hidden;isolation:isolate}.hero-photo{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.experience:before{position:absolute;inset:0}.details,footer{position:relative;isolation:isolate;background:#f4ede2;color:#220c15}.details{padding:38px 20px 42px}.details .formal{color:#806762}
@media(max-width:700px){.hero-photo{position:absolute;inset:auto 0;top:-20%;width:100%;height:120%;object-position:50% 35%}.scene-wrap{margin-top:35px;height:390px}.scene-wrap.showing-pass{margin-top:300px;height:auto;padding-top:0;padding-bottom:18px}.experience{padding-bottom:32px}.experience .controls{position:relative;margin-top:0}.experience.ticket-revealed .controls{margin-top:8px}.details{padding-top:32px}}

/* Stable stationery stage: opening never changes the portrait or page height. */
.scene-wrap,.scene-wrap.showing-pass{height:var(--scene-height,580px);min-height:0;padding:0;margin:28px auto 0;position:relative}
#scene{position:absolute;inset:0;width:100%;height:100%;transform:none;transition:opacity .18s ease}
.boarding:not(.ticket-capture){position:absolute;left:50%;top:50%;translate:-50% -50%;margin:0;transform-origin:0 0;z-index:2}
.experience .controls,.experience.ticket-revealed .controls{margin-top:8px}
#fallback{position:absolute;inset:0;padding:0;display:grid;place-items:center;cursor:pointer}
.flat-paper{position:relative;width:min(72%,500px);aspect-ratio:1.59;background:#220c15 url('assets/plum-paper.png') center/cover;box-shadow:0 14px 28px #220c1530;isolation:isolate}
.flat-paper:before,.flat-paper:after{content:'';position:absolute;inset:0;background:#220c15 url('assets/plum-paper.png') center/cover;filter:brightness(.78);clip-path:polygon(0 0,50% 55%,0 100%)}
.flat-paper:after{clip-path:polygon(100% 0,50% 55%,100% 100%)}
.flat-flap{position:absolute;inset:0;background:inherit;filter:brightness(1.12);clip-path:polygon(0 0,100% 0,50% 60%);z-index:1}
.flat-seal{position:absolute;z-index:2;left:50%;top:50%;translate:-50% -50%;width:17%;aspect-ratio:1;border-radius:50%;background:#f4ede2 url('assets/ivory-paper.png') center/cover;display:grid;place-items:center;box-shadow:0 2px 4px #0003}
#fallback .flat-seal img{width:72%;border-radius:0;mix-blend-mode:multiply}
.flat-paper>span{position:absolute;bottom:8%;left:0;right:0;z-index:1;font:8px Arial,sans-serif;letter-spacing:1px;color:#f4ede2}
.calendar-picker{position:relative;display:inline-block;text-align:center}.calendar-picker summary{list-style:none;cursor:pointer}.calendar-picker summary::-webkit-details-marker{display:none}.calendar-picker summary:focus-visible{outline:2px solid #512443;outline-offset:5px}.calendar-options{display:grid;margin-top:12px;gap:2px}.calendar-options a{padding:12px 24px;border-radius:6px;font:14px Arial,sans-serif;color:#220c15}.calendar-options a:hover{background:#e8dcc8}
@media(max-width:700px){
 .scene-wrap,.scene-wrap.showing-pass{height:var(--scene-height,440px);margin-top:35px;padding:0}
 .boarding:not(.ticket-capture){width:100%}.boarding:not(.ticket-capture) .pass-header{height:70px;padding:10px 18px}.boarding:not(.ticket-capture) .airline img{width:52px;height:52px}.boarding:not(.ticket-capture) .airline{font-size:11px;gap:12px}.boarding:not(.ticket-capture) .pass-type{font-size:9px}
 .boarding:not(.ticket-capture) .pass-content{padding:19px 20px}.boarding:not(.ticket-capture) .passenger strong{font-size:18px}.boarding:not(.ticket-capture) .pass-field>span,.boarding:not(.ticket-capture) .pass-route>div>span{font-size:11px;margin-bottom:5px}
 .boarding:not(.ticket-capture) .pass-route{margin:19px 0;gap:10px}.boarding:not(.ticket-capture) .pass-route strong{font-size:clamp(21px,6vw,29px)}.boarding:not(.ticket-capture) .flight-line img{width:42px;height:30px}.boarding:not(.ticket-capture) .flight-fields{gap:10px}.boarding:not(.ticket-capture) .pass-field strong{font-size:14px}.boarding:not(.ticket-capture) .actual-location{font-size:12px;line-height:1.5;margin-top:18px}
 .boarding:not(.ticket-capture) .pass-band{padding:9px 20px;font-size:10px}.boarding:not(.ticket-capture) .pass-stub{display:block;padding:14px 20px}.boarding:not(.ticket-capture) .pass-stub .pass-field,.boarding:not(.ticket-capture) .ticket-number{display:none}.boarding:not(.ticket-capture) .barcode{height:28px;margin:0}
 .flat-paper{width:82%}.experience .controls,.experience.ticket-revealed .controls{margin-top:8px}.experience .controls button{min-height:48px}
}
@media(prefers-reduced-motion:reduce){#scene{transition:none}}
/* Both controls occupy one identical row, so swapping labels cannot move the photo. */
.experience .controls{display:flex;justify-content:center;align-items:center;min-height:63px}
.experience .controls button{height:63px;min-height:63px;padding:18px 32px}
/* A longer airline format, with the liner softly printed into the cotton stock. */
.boarding{grid-template-columns:minmax(0,1fr) 190px;border-radius:3px}
.boarding .pass-header{height:76px;padding:10px 26px}
.boarding .airline img{width:68px;height:58px}
.boarding .pass-content{position:relative;isolation:isolate;padding:18px 28px}
.boarding .pass-content:before{content:'';position:absolute;inset:0;z-index:-1;pointer-events:none;background:url('assets/night-market-liner.png') center / 620px auto repeat;opacity:.12;mix-blend-mode:multiply}
.boarding .passenger strong{font-size:21px}
.boarding .pass-route{margin:15px 0}
.boarding .pass-route strong{font-size:35px}
.boarding .pass-field strong{font-size:17px}
.boarding .passenger strong{font-size:21px;font-weight:400}
.boarding .actual-location{margin-top:16px;font-size:14px;line-height:1.4}
.boarding .pass-band{padding:8px 28px}
.boarding .pass-stub{padding:0 18px 16px;gap:11px}
.boarding .stub-title{height:76px;margin:0 -18px;padding:29px 10px;font-size:11px}
.boarding .stub-logo{width:49px;height:39px}
.boarding .barcode{height:36px}
@media(max-width:700px){
 .boarding:not(.ticket-capture){grid-template-columns:minmax(0,1fr) 58px;border-radius:3px}
 .boarding:not(.ticket-capture) .pass-header{height:54px;padding:5px 12px;gap:6px}
 .boarding:not(.ticket-capture) .airline img{width:44px;height:44px}
 .boarding:not(.ticket-capture) .airline{gap:8px;font-size:10px;letter-spacing:.5px}
 .boarding:not(.ticket-capture) .pass-type{display:none}
 .boarding:not(.ticket-capture) .pass-content{padding:13px 13px 12px}
 .boarding:not(.ticket-capture) .pass-content:before{background-size:390px auto}
 .boarding:not(.ticket-capture) .passenger{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:8px;row-gap:3px}
 .boarding:not(.ticket-capture) .passenger strong{font-size:14px}
 .boarding:not(.ticket-capture) .pass-field>span,.boarding:not(.ticket-capture) .pass-route>div>span{font-size:10px;margin-bottom:4px;letter-spacing:.5px}
 .boarding:not(.ticket-capture) .passenger>span{margin:0}
 .boarding:not(.ticket-capture) .pass-route{margin:13px 0;gap:7px}
 .boarding:not(.ticket-capture) .pass-route strong{font-size:clamp(17px,4.8vw,24px);letter-spacing:-.7px}
 .boarding:not(.ticket-capture) .flight-line{min-width:24px}
 .boarding:not(.ticket-capture) .flight-line img{width:28px;height:21px}
 .boarding:not(.ticket-capture) .flight-fields{grid-template-columns:.8fr 1.4fr 1fr;gap:7px}
 .boarding:not(.ticket-capture) .pass-field strong{font-size:12px}
 .boarding:not(.ticket-capture) .passenger strong{font-size:14px}
 .boarding:not(.ticket-capture) .actual-location{font-size:12px;line-height:1.4;margin-top:12px}
 .boarding:not(.ticket-capture) .pass-band{padding:7px 13px;font-size:9px}
 .boarding:not(.ticket-capture) .pass-stub{position:relative;display:block;border-top:0;border-left:2px dashed #baa58d;padding:0;overflow:hidden}
 .boarding:not(.ticket-capture) .stub-title{display:flex;align-items:center;justify-content:center;height:54px;margin:0;padding:8px 4px;font-size:8px;line-height:1.4;letter-spacing:.4px;text-align:center}
 .boarding:not(.ticket-capture) .stub-logo,.boarding:not(.ticket-capture) .pass-stub .pass-field,.boarding:not(.ticket-capture) .ticket-number{display:none}
 .boarding:not(.ticket-capture) .barcode{position:absolute;left:50%;top:61%;width:145px;height:28px;margin:0;transform:translate(-50%,-50%) rotate(90deg)}
}
/* Quiet footer countdown, with open spacing rather than boxed counters. */
.wedding-footer{display:flex;flex-direction:column;align-items:center;gap:28px;padding:35px 20px 30px;color:var(--plum);text-align:center}
.wedding-countdown{width:min(460px,100%)}
.countdown-heading{font:italic 24px Baskerville,'Times New Roman',serif;letter-spacing:0;margin:0 0 20px}
.countdown-values{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:22px}
.countdown-values strong{display:block;font:36px 'Courier New',Courier,monospace;font-variant-numeric:tabular-nums;letter-spacing:-1.5px}
.countdown-values span{display:block;margin-top:7px;font:11px Arial,Helvetica,sans-serif;letter-spacing:1.2px;text-transform:uppercase;color:#735751}
.wedding-footer>a{font:13px Arial,Helvetica,sans-serif;letter-spacing:0}
@media(max-width:420px){.countdown-values{gap:12px}.countdown-values strong{font-size:29px}.countdown-values span{font-size:10px;letter-spacing:.7px}.countdown-heading{font-size:22px}}
