.opening{position:fixed;z-index:5;inset:0;display:grid;place-content:center;text-align:center;background:radial-gradient(ellipse at 50% 48%,#403c35,#171613 48%,#090909 100%);transition:opacity 1.2s,visibility 1.2s}.opening.out{opacity:0;visibility:hidden}.eyebrow{font-size:10px;letter-spacing:2.8px;color:#a39b8d}.opening h1{max-width:94vw;font:500 clamp(44px,7.2vw,104px)/.9 'Playfair Display',serif;letter-spacing:clamp(-3px,-.22vw,-1px);margin:26px auto;white-space:nowrap}.opening p:not(.eyebrow){font:400 16px/1.8 'Noto Serif SC',serif;color:#d6d0c4}.opening button{justify-self:center;margin:28px 0 35px;padding:14px 22px;border:1px solid #bbb1a1;color:#f7f3ea;background:transparent;font:10px 'DM Mono';letter-spacing:1.8px;cursor:pointer;transition:.25s}.opening button:hover{background:#eee8dc;color:#171613}.opening i{font-style:normal;margin-left:30px;font-size:16px}.opening small{font-size:9px;letter-spacing:1.3px;color:#948d82}
.scan{display:none;position:fixed;z-index:6;inset:0;place-content:center;text-align:center;background:radial-gradient(ellipse at 50% 47%,#585044 0,#28241f 42%,#12110f 100%)}.scan.show{display:grid}.scanner{position:relative;width:min(600px,82vw);height:310px;margin:25px auto 8px;perspective:700px}.reader{position:absolute;left:50%;bottom:20px;transform:translateX(-50%) rotateX(58deg);width:390px;height:125px;border:1px solid #93816b;border-radius:8px;background:linear-gradient(145deg,#51463a,#211d18 55%,#493e31);box-shadow:0 25px 35px #0009,inset 0 1px #d4c1a555}.reader span{display:block;width:200px;height:10px;border-radius:50%;margin:28px auto 13px;background:#111;box-shadow:0 0 10px #d3b686}.reader b{font-size:8px;letter-spacing:2px;color:#d5c6b2}.ticket-face{position:absolute;left:50%;bottom:85px;transform:translateX(-50%) rotateX(5deg);width:290px;height:172px;padding:18px;text-align:left;color:#29251f;background:#e9dfcf;box-shadow:0 12px 28px #0008;transition:transform 1s cubic-bezier(.2,.85,.3,1),opacity .7s}.ticket-face small,.ticket-face i{display:block;font-size:8px;letter-spacing:1.2px}.ticket-face strong{display:block;margin:18px 0 8px;font:500 42px 'Noto Serif SC'}.ticket-face em{font:10px 'DM Mono';letter-spacing:1px}.ticket-face i{position:absolute;bottom:16px}.scanline{position:absolute;z-index:2;left:50%;bottom:144px;width:315px;height:2px;transform:translateX(-50%);background:#ffca75;box-shadow:0 0 18px 6px #ffbd5a88;animation:pulse 1.8s infinite}.scan-note{font:13px 'Noto Serif SC';color:#ddd1c0}.scan button{margin-top:18px;padding:13px 20px;border:1px solid #c4b29b;color:#f9f3ea;background:#322b24;font:10px 'DM Mono';letter-spacing:1.6px;cursor:pointer}.scan button i{font-style:normal;margin-left:25px}.scan.passed .ticket-face{transform:translateX(-50%) translateY(130px) rotateX(60deg);opacity:0}.scan.passed .scanline{background:#a8e6b3;box-shadow:0 0 18px 6px #a8e6b388}
.opening h1{font-family:Georgia,serif}.opening p:not(.eyebrow),.ticket-face strong,.scan-note{font-family:"Songti SC",serif}.opening button,.scan button,.ticket-face em{font-family:inherit}.opening .eyebrow,.scan .eyebrow{color:#b4a997;opacity:1}.opening small{letter-spacing:1px}.opening[hidden],.scan[hidden]{display:none!important}.scan button:disabled{cursor:wait;opacity:.65}.scan .scanline{animation:none;opacity:.32}.scan.scanning .scanline{animation:pulse .65s infinite}.scan.passed .scan-note{color:#c4e7c3}.scan.passed .ticket-face{opacity:.35;transform:translateX(-50%) translateY(65px) rotateX(40deg)}body:not([data-phase="gallery"]) header,body:not([data-phase="gallery"]) footer,body:not([data-phase="gallery"]) #instructions{visibility:hidden;pointer-events:none}body:not([data-phase="gallery"]) #viewport{pointer-events:none}#viewport{transition:opacity .8s}body:not([data-phase="gallery"]) #viewport{opacity:0}.tools #replay,.tools #snowToggle{border-radius:20px;width:auto;font-size:11px;padding:0 12px}.scan-note{min-height:22px}#instructions{z-index:3}@media(max-width:700px){.opening{padding:0 18px}.opening h1{max-width:92vw;font-size:clamp(38px,11vw,58px);line-height:.98;white-space:normal}.opening .eyebrow{font-size:8px;letter-spacing:2px}}@media(prefers-reduced-motion:reduce){.ticket-face,.opening,#viewport{transition:none!important}.scanline{animation:none!important}}

/* Selected ticket C, reworked for the four-season exhibition. */
.ticket-face{--ticket-ink:#6f899e;width:min(460px,84vw);height:auto;aspect-ratio:7/3;padding:0;color:var(--ticket-ink);text-align:center;background-color:#f6f5ef;background-image:linear-gradient(105deg,#fff0 0 42%,#dfe4e21c 51%,#fff0 60%),url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.78' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' opacity='.09' filter='url(%23n)'/%3E%3C/svg%3E");box-shadow:0 15px 28px #0006,inset 0 1px 1px #fff,inset 0 -1px 1px #bfc6cb66;border-radius:0;overflow:hidden}
.ticket-face>small{position:absolute;z-index:2;left:7.5%;top:10%;max-width:94px;font:7px/1.55 Georgia,serif;letter-spacing:1.35px;text-align:left}.ticket-face strong{position:absolute;z-index:2;left:0;top:21%;width:100%;margin:0;font:500 clamp(36px,8vw,50px)/1.05 "Songti SC",serif;letter-spacing:8px;text-shadow:0 1px 0 #fff,0 -.5px .3px #546d8255}.ticket-face em{position:absolute;z-index:2;left:0;top:51%;width:100%;font:10px Georgia,serif;letter-spacing:3.2px}.ticket-face i{position:absolute;z-index:2;left:7.5%;bottom:10%;font:7px Georgia,serif;letter-spacing:1.3px}.ticket-number{position:absolute;z-index:2;right:7%;bottom:8%;font:25px Georgia,serif;color:#9aa8b0}.ticket-divider{position:absolute;z-index:2;left:35%;top:64%;display:flex;width:30%;align-items:center;justify-content:space-between;margin:0;color:#7d9ab0;font:9px "Songti SC",serif}.ticket-divider:before,.ticket-divider:after{content:"";width:20%;height:1px;background:#8ba0b1aa}.ticket-divider b{font-weight:400}.ticket-divider b:nth-child(1){color:#8fa18e}.ticket-divider b:nth-child(2){color:#789d98}.ticket-divider b:nth-child(3){color:#ad936b}.ticket-divider b:nth-child(4){color:#7890a5}.ticket-tagline{position:absolute;z-index:2;left:0;top:76%;width:100%;font:6px Georgia,serif;letter-spacing:2px;color:#8b9ba6}.ticket-season{position:absolute;z-index:1;display:block;color:#e6e5de;filter:drop-shadow(.8px 1px .45px #acb2b07a) drop-shadow(-.8px -1px .45px #fff);pointer-events:none}.ticket-season svg{width:100%;height:100%}.ticket-season path{vector-effect:non-scaling-stroke}.season-spring{width:24%;height:58%;left:3%;top:19%;transform:rotate(-8deg);color:#e4e7df}.season-summer{width:22%;height:52%;left:13%;top:51%;transform:rotate(8deg);color:#e1e6e2}.season-autumn{width:24%;height:58%;right:4%;top:11%;transform:rotate(7deg);color:#e9e3d8}.season-winter{width:19%;height:45%;right:7%;top:50%;transform:rotate(-8deg);color:#e3e7e9}

/* Deckled paper edge and ticket notches stay with the ticket throughout scanning. */
.ticket-face{-webkit-mask:url("./ticket-paper-edge.svg?v=four-seasons-ticket-1") 0 0/100% 100% no-repeat;mask:url("./ticket-paper-edge.svg?v=four-seasons-ticket-1") 0 0/100% 100% no-repeat}

/* C reference silhouette: long cotton-paper ticket with concave corners and scalloped edges. */
.ticket-face{bottom:85px}
.ticket-porcelain{position:absolute;z-index:1;inset:2%;display:block;pointer-events:none}.ticket-porcelain svg{width:100%;height:100%}.porcelain-rule,.porcelain-scroll,.porcelain-crackle{fill:none;stroke:#7895aa;stroke-linecap:round;stroke-linejoin:round}.porcelain-rule{stroke-width:1;opacity:.22}.porcelain-scroll{stroke-width:1.15;opacity:.26}.porcelain-crackle{stroke-width:.7;opacity:.11}
.ticket-face>small,.ticket-face strong,.ticket-face em,.ticket-face i,.ticket-number,.ticket-divider,.ticket-tagline{z-index:3}
/* Refined relief set: true underglaze scrollwork and detailed seasonal botanical linework. */
.ticket-porcelain{inset:0;background:url("./design/porcelain-underprint-v2.svg?v=refined-relief-1") center/100% 100% no-repeat}.ticket-porcelain>svg{visibility:hidden}
.season-spring,.season-summer,.season-autumn{background-position:center;background-repeat:no-repeat;background-size:contain}.season-spring>svg,.season-summer>svg,.season-autumn>svg{visibility:hidden}
.season-spring{width:27%;height:72%;left:1.5%;top:8%;transform:rotate(-3deg);background-image:url("./design/motif-spring-bamboo.svg?v=refined-relief-1")}
.season-summer{width:27%;height:62%;left:9%;top:43%;transform:rotate(3deg);background-image:url("./design/motif-summer-lotus.svg?v=refined-relief-1")}
.season-autumn{width:27%;height:72%;right:1.5%;top:5%;transform:rotate(3deg);background-image:url("./design/motif-autumn-ginkgo.svg?v=refined-relief-1")}
body:not([data-phase="gallery"]) header{visibility:visible;pointer-events:none}body:not([data-phase="gallery"]) header .identity,body:not([data-phase="gallery"]) .tools>button:not(#soundToggle){visibility:hidden}body:not([data-phase="gallery"]) #soundToggle{visibility:visible;pointer-events:auto}

body:not([data-phase="gallery"]) header{z-index:7;background:none}
.arrival-snow{position:fixed;inset:0;width:100%;height:100%;z-index:10;pointer-events:auto}

/* Production ticket: use the approved SVG as one self-contained artwork, so
   the paper fibers, letterpress ink and relief match the design proof exactly. */
.ticket-face{z-index:1;width:min(520px,86vw);height:auto;aspect-ratio:7/3;padding:0;background:none;box-shadow:none;border-radius:0;overflow:visible;-webkit-mask:none;mask:none}
.ticket-face::before{content:none}
.ticket-face>.ticket-artwork{position:absolute;z-index:4;inset:0;display:block;width:100%;height:100%;object-fit:contain;pointer-events:none}
.ticket-face.ticket-artwork-ready>:not(.ticket-artwork){display:none!important}
