/* Exchange world. Scoped to the menu lifecycle; game/table geometry remains owned by v3. */
body.exchange-world{--ew-room-art:url('art/theme/exchange-floor-v1.webp');--ew-room-x:50%;--ew-room-y:45%;--ew-weight:cubic-bezier(.19,.72,.18,1);--ew-panel:linear-gradient(145deg,color-mix(in srgb,var(--ink-3) 96%,transparent),color-mix(in srgb,var(--ink) 96%,transparent));--ew-metal:linear-gradient(110deg,var(--brass-deep),var(--brass-hi) 28%,var(--brass) 45%,var(--brass-deep) 72%,var(--brass-hi));}
#exchangeWorld{display:none;position:fixed;inset:0;z-index:24;overflow:hidden;pointer-events:none;background:var(--ink);perspective:1100px;isolation:isolate}
body.exchange-world #exchangeWorld{display:block}
body.exchange-world.playing #exchangeWorld{display:none}
.ew-scene{position:absolute;inset:-2%;background-image:linear-gradient(180deg,color-mix(in srgb,var(--ink) 18%,transparent),transparent 48%,color-mix(in srgb,var(--ink) 66%,transparent)),var(--ew-room-art);background-size:cover;background-position:center,var(--ew-room-x) var(--ew-room-y);transform:scale(1.045);transition:transform 900ms var(--ew-weight),opacity 420ms ease;transform-style:preserve-3d}
.ew-architecture{position:absolute;inset:0;pointer-events:none;perspective:1100px;transform-style:preserve-3d}
.ew-architecture::before,.ew-architecture::after{content:'';position:absolute;top:-5%;bottom:-5%;width:9%;background:linear-gradient(90deg,var(--ink),var(--ink-2) 34%,var(--brass-deep) 36%,var(--brass) 38%,var(--ink-3) 40%,var(--ink) 72%);box-shadow:0 0 45px color-mix(in srgb,var(--ink) 85%,transparent);transition:transform 950ms var(--ew-weight)}
.ew-architecture::before{left:-3%;transform:perspective(800px) rotateY(12deg)}
.ew-architecture::after{right:-3%;transform:perspective(800px) rotateY(-12deg) scaleX(-1)}
.ew-column{position:absolute;top:5%;bottom:0;width:4%;background:linear-gradient(90deg,var(--ink),var(--brass-deep) 12%,var(--ink-3) 18%,var(--ink) 57%,var(--brass-deep) 84%,var(--ink));border-inline:1px solid var(--hairline);box-shadow:8px 0 25px color-mix(in srgb,var(--ink) 80%,transparent)}
.ew-column-left{left:12%}.ew-column-right{right:12%;transform:scaleX(-1)}
.ew-column::before,.ew-column::after{content:'';position:absolute;left:-18%;right:-18%;height:12px;background:var(--ew-metal);border-block:3px solid var(--ink);box-shadow:0 6px 10px var(--ink)}
.ew-column::before{top:4%}.ew-column::after{bottom:4%}
.ew-ceiling{position:absolute;inset:0 0 auto;height:18%;background:repeating-linear-gradient(0deg,transparent 0 25px,var(--hairline) 26px 27px),linear-gradient(var(--ink),transparent);transform-origin:top;transform:perspective(550px) rotateX(-55deg);border-bottom:3px solid var(--brass-deep)}
.ew-floor{position:absolute;bottom:-35%;left:-30%;right:-30%;height:67%;background:repeating-linear-gradient(90deg,transparent 0 149px,var(--hairline) 150px 151px),repeating-linear-gradient(0deg,transparent 0 119px,var(--hairline) 120px 121px),radial-gradient(ellipse at 50% 0,color-mix(in srgb,var(--brass) 22%,var(--ink-2)),var(--ink));transform:perspective(500px) rotateX(58deg);transform-origin:50% 0;opacity:.72}
.ew-window{position:absolute;top:13%;width:12%;height:44%;border:6px double var(--brass-deep);border-radius:50% 50% 0 0;background:repeating-linear-gradient(90deg,transparent 0 30%,var(--brass-deep) 31% 32%),repeating-linear-gradient(0deg,transparent 0 24%,var(--hairline) 25% 26%),linear-gradient(145deg,color-mix(in srgb,var(--brass-hi) 22%,var(--ink-2)),var(--ink));box-shadow:inset 0 0 32px var(--ink),0 0 65px color-mix(in srgb,var(--brass) 9%,transparent);opacity:.72}
.ew-window-left{left:20%}.ew-window-right{right:20%}
.ew-lintel{position:absolute;top:5%;left:7%;right:7%;height:2%;border-block:2px solid var(--brass-deep);background:linear-gradient(var(--ink-3),var(--ink));box-shadow:0 8px 18px var(--ink)}
.ew-ambient{position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at 48% -10%,color-mix(in srgb,var(--brass-hi) 18%,transparent),transparent 60%);opacity:.8}
.ew-vignette{position:absolute;inset:0;box-shadow:inset 0 0 12vw 3vw var(--ink);background:linear-gradient(transparent 62%,color-mix(in srgb,var(--ink) 66%,transparent));pointer-events:none}
.ew-room-label{position:absolute;top:85px;left:5%;color:var(--brass-hi);font:700 var(--fs-11)/1.5 var(--font-body);letter-spacing:var(--ls-eyebrow);text-transform:uppercase;text-shadow:0 2px 8px var(--ink)}
.ew-room-title{display:block;font:400 var(--fs-24)/1.2 'Bodoni Moda',serif;color:var(--ivory);margin-top:6px;letter-spacing:0}
body.exchange-world[data-exchange-room='collection'],body.exchange-world[data-exchange-room='archive']{--ew-room-x:28%;--ew-room-y:58%}
body.exchange-world[data-exchange-room='house']{--ew-room-x:74%;--ew-room-y:35%}
body.exchange-world[data-exchange-room='friends']{--ew-room-x:85%;--ew-room-y:65%}
body.exchange-world[data-exchange-room='profile']{--ew-room-x:17%;--ew-room-y:65%}
body.exchange-world[data-exchange-room='character']{--ew-room-x:35%;--ew-room-y:30%}
body.exchange-world:not([data-exchange-room='hall']) .ew-scene{transform:scale(1.13)}
body.exchange-world:not([data-exchange-room='hall']) .ew-window{opacity:.3}
body.exchange-world.ew-travelling .ew-scene{transform:scale(1.2) translateX(var(--ew-travel-x,2%));opacity:.62}
body.exchange-world.ew-travelling .ew-architecture::before{transform:translateX(-65%) rotateY(18deg)}
body.exchange-world.ew-travelling .ew-architecture::after{transform:translateX(65%) rotateY(-18deg) scaleX(-1)}
/* The entrance is a pair of hinged, bevelled leaves, not a cut to a movie. */
.ew-doorway{position:absolute;inset:0;z-index:5;perspective:1200px;transform-style:preserve-3d;pointer-events:none;transition:visibility 0s 1900ms}
.ew-door{position:absolute;top:-2%;bottom:-2%;width:50.1%;border:8px solid var(--brass-deep);box-sizing:border-box;background:repeating-linear-gradient(90deg,transparent 0 9%,color-mix(in srgb,var(--brass) 12%,transparent) 9.1% 9.4%,transparent 9.5% 18%),linear-gradient(105deg,var(--ink),var(--ink-3) 28%,var(--ink-2) 48%,var(--ink) 90%);box-shadow:inset 0 0 0 2px var(--brass),inset 0 0 0 10px var(--ink),inset 0 0 0 12px var(--brass-deep),inset 0 0 100px var(--ink),0 0 60px var(--ink);backface-visibility:hidden;transition:transform 1800ms cubic-bezier(.42,0,.12,1),filter 1500ms ease}
.ew-door-left{left:0;transform-origin:left center}.ew-door-right{right:0;transform-origin:right center}
.ew-door::before{content:'';position:absolute;inset:9% 15%;border:5px double var(--brass-deep);clip-path:polygon(0 5%,10% 0,90% 0,100% 5%,100% 95%,90% 100%,10% 100%,0 95%);background:linear-gradient(135deg,color-mix(in srgb,var(--brass) 10%,transparent),transparent 30%,color-mix(in srgb,var(--ink) 80%,transparent));box-shadow:inset 0 0 0 10px var(--ink),inset 0 0 0 11px var(--hairline)}
.ew-door::after{content:'';position:absolute;top:44%;height:16%;width:12px;background:var(--ew-metal);border:2px solid var(--brass-deep);box-shadow:4px 6px 8px var(--ink);border-radius:var(--r-chip)}
.ew-door-left::after{right:7%}.ew-door-right::after{left:7%}
.ew-door-seal{position:absolute;left:50%;top:32%;width:clamp(100px,13vw,168px);aspect-ratio:1;transform:translate(-50%,-50%) rotate(45deg);background:linear-gradient(135deg,var(--ink-3),var(--ink));border:6px double var(--brass);box-shadow:0 12px 30px var(--ink),inset 0 0 0 8px var(--ink),inset 0 0 0 9px var(--hairline);display:grid;place-items:center;color:var(--brass-hi);transition:opacity 420ms ease,transform 600ms var(--ew-weight)}
.ew-door-seal>*{transform:rotate(-45deg)}
.ew-door-seal::before{content:'';position:absolute;inset:20%;background:url('art/theme/exchange-seal.svg') center/contain no-repeat;transform:rotate(-45deg)}
.ew-entry{position:fixed;inset:0;z-index:59;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:14px;padding:0 20px max(13dvh,54px);box-sizing:border-box;text-align:center;color:var(--ivory);background:linear-gradient(transparent 35%,color-mix(in srgb,var(--ink) 70%,transparent));pointer-events:auto;transition:opacity 350ms ease,visibility 0s 350ms}
.ew-entry h1,.ew-entry h2{font:500 clamp(32px,4vw,58px)/1.1 'Bodoni Moda',serif;letter-spacing:var(--ls-label);margin:0;text-shadow:0 4px 20px var(--ink)}
.ew-entry p{font:600 var(--fs-12)/1.6 var(--font-body);letter-spacing:var(--ls-eyebrow);color:var(--brass-hi);margin:0 0 10px;text-transform:uppercase}
.ew-enter{position:relative;min-height:56px;min-width:240px;padding:14px 28px;border:3px double var(--brass-hi);background:linear-gradient(145deg,var(--brass-hi),var(--brass),var(--brass-deep));color:var(--ink);font:800 var(--fs-14)/1.3 var(--font-body);letter-spacing:var(--ls-eyebrow);box-shadow:0 5px 0 var(--brass-deep),0 12px 32px var(--ink),inset 0 1px var(--ivory);cursor:pointer;transition:transform 140ms ease,box-shadow 140ms ease}
.ew-enter:active{transform:translateY(4px);box-shadow:0 1px 0 var(--brass-deep),0 5px 16px var(--ink)}
.ew-skip{min-height:44px;border:0;background:transparent;color:var(--muted);font:700 var(--fs-12) var(--font-body);text-decoration:underline;text-underline-offset:5px;cursor:pointer;padding:8px 20px}
body.ew-entering .ew-door-left,body.ew-arrived .ew-door-left{transform:rotateY(-106deg);filter:brightness(.6)}
body.ew-entering .ew-door-right,body.ew-arrived .ew-door-right{transform:rotateY(106deg);filter:brightness(.6)}
body.ew-entering .ew-door-seal,body.ew-arrived .ew-door-seal{opacity:0;transform:translate(-50%,-50%) rotate(45deg) scale(.86)}
body.ew-entering .ew-entry,body.ew-arrived .ew-entry{opacity:0;visibility:hidden;pointer-events:none}
body.ew-arrived .ew-doorway{visibility:hidden}
body.exchange-world:not(.ew-arrived) #v2title,body.exchange-world:not(.ew-arrived) #metaHeader,body.exchange-world:not(.ew-arrived) #metaNav{opacity:0;pointer-events:none}
body.exchange-world.ew-arrived #v2title{animation:ew-hall-arrival 700ms var(--ew-weight) both}
@keyframes ew-hall-arrival{from{opacity:0;transform:translateY(16px) scale(.98)}to{opacity:1;transform:none}}
/* Semantic menu content sits on the world as a physical directory and card display. */
body.exchange-world #v2title.cardStoryTitle{background:none;justify-content:flex-start;overflow-y:auto;gap:5px;padding:clamp(65px,9dvh,105px) 6vw 100px}
body.exchange-world #v2title::before{display:none}
body.exchange-world #v2title.cardStoryTitle .ttEyebrow{display:none}
body.exchange-world #v2title.cardStoryTitle .tt1{font-size:clamp(38px,5vw,76px);line-height:1.04;text-shadow:0 2px 2px var(--ink),0 8px 30px var(--ink);letter-spacing:.025em}
body.exchange-world #v2title.cardStoryTitle .tt2{font-size:var(--fs-14);letter-spacing:.65em;text-indent:.65em;color:var(--brass-hi)}
body.exchange-world #v2title.cardStoryTitle .titleCardShowcase{--card-width:clamp(75px,11dvh,120px);margin-top:16px;padding-top:12px;height:calc(var(--card-width)*1.45 + 44px);filter:drop-shadow(0 16px 14px var(--ink))}
body.exchange-world #v2title.cardStoryTitle .titleDiscovery{gap:24px;margin-bottom:8px}
body.exchange-world .titleDiscovery button{font-size:var(--fs-11);letter-spacing:var(--ls-eyebrow);text-shadow:0 2px 8px var(--ink);border-bottom:1px solid var(--hairline);transition:color 160ms ease,border-color 160ms ease}
body.exchange-world .titleDiscovery button:hover{color:var(--ivory);border-color:var(--brass)}
body.exchange-world #v2title.cardStoryTitle .playDeck{width:min(1050px,88vw);display:grid;grid-template-columns:minmax(0,1fr) minmax(230px,.37fr);gap:24px;margin-top:8px;padding:20px;border:4px double var(--brass-deep);border-radius:var(--r-chip);background:var(--ew-panel);box-shadow:0 8px 0 var(--ink),0 9px 0 var(--brass-deep),0 28px 48px color-mix(in srgb,var(--ink) 90%,transparent),inset 0 1px var(--hairline);backdrop-filter:none}
body.exchange-world #v2title.cardStoryTitle .playDeck::before{left:0;right:0;background:var(--ew-metal)}
body.exchange-world #v2title.cardStoryTitle .playDeck>.ttmodes{display:flex;flex-wrap:wrap;justify-content:center;align-content:center;gap:10px;width:100%;padding:0;margin:0;border:0}
body.exchange-world #v2title.cardStoryTitle .playDeck .ttmodes>.ttmode{display:grid;flex:1 1 calc(50% - 10px);max-width:calc(50% - 5px);width:auto;min-height:76px;grid-template-columns:30px minmax(0,1fr);grid-template-rows:auto auto;align-content:center;gap:4px 10px;padding:12px 14px;border:1px solid var(--brass-deep);border-radius:var(--r-chip);background:linear-gradient(125deg,var(--ink-3),var(--ink-2) 55%,var(--ink));color:var(--ivory);box-shadow:inset 0 1px var(--hairline),0 3px 0 var(--ink),0 4px 0 var(--brass-deep);font-size:var(--fs-16);letter-spacing:var(--ls-label);text-align:left;transition:transform 180ms var(--ew-weight),box-shadow 180ms ease,border-color 180ms ease;backdrop-filter:none}
body.exchange-world #v2title.cardStoryTitle .playDeck .ttmodes>.ttmode:hover{transform:translateY(-2px);border-color:var(--brass-hi);box-shadow:inset 0 1px var(--hairline),0 5px 0 var(--ink),0 6px 0 var(--brass-deep),0 8px 20px var(--ink)}
body.exchange-world #v2title.cardStoryTitle .playDeck .ttmodes>.ttmode:active{transform:translateY(2px);box-shadow:inset 0 2px 7px var(--ink),0 1px 0 var(--brass-deep)}
body.exchange-world #v2title.cardStoryTitle .playDeck .ttmode>.modeIcon{grid-column:1;grid-row:1/3;display:grid;place-items:center;width:28px;height:32px;color:var(--brass-hi);font-size:var(--fs-20);background:none;border:0;box-shadow:none}
body.exchange-world #v2title.cardStoryTitle .playDeck .ttmode>span:not(.modeIcon){grid-column:2;grid-row:1}
body.exchange-world #v2title.cardStoryTitle .playDeck .ttmode>b{grid-column:2;grid-row:2;color:var(--brass);font:700 var(--fs-11)/1.3 var(--font-body);letter-spacing:var(--ls-eyebrow)}
body.exchange-world #v2title.cardStoryTitle .playDeck .tutorialMode em{display:none}
body.exchange-world #v2title.cardStoryTitle .playDeck .campaignRow small{font-size:var(--fs-11);margin-top:3px}
body.exchange-world #v2title .floorBoard{display:grid;grid-template-rows:repeat(3,1fr);padding:0 0 0 20px;border:0;border-left:1px solid var(--hairline);background:none;box-shadow:none;gap:8px}
body.exchange-world #v2title .floorRow{padding:6px 0;gap:4px 8px}
body.exchange-world #v2title .floorRow>small{font-size:var(--fs-11);color:var(--brass);letter-spacing:var(--ls-eyebrow)}
body.exchange-world #v2title .ttUtilities{width:min(1050px,88vw);margin-top:16px}
body.exchange-world #metaNav{border:3px double var(--brass-deep);border-radius:var(--r-chip);background:linear-gradient(180deg,var(--ink-3),var(--ink));box-shadow:0 5px 0 var(--ink),0 12px 25px var(--ink);padding:5px;gap:4px;backdrop-filter:none}
body.exchange-world #metaNav button{min-width:96px;min-height:54px;border-radius:var(--r-chip);transition:transform 180ms var(--ew-weight),background 180ms ease;color:var(--muted)}
body.exchange-world #metaNav button.on{background:linear-gradient(145deg,var(--brass-deep),var(--ink-3));color:var(--ivory);box-shadow:inset 0 0 0 1px var(--brass)}
body.exchange-world #metaNav button:active{transform:translateY(2px)}
body.exchange-world #metaNav button span{display:grid;place-items:center;min-width:24px;color:var(--brass)}
body.exchange-world #metaHeader button{background:linear-gradient(150deg,var(--ink-3),var(--ink));border-color:var(--brass-deep);box-shadow:inset 0 1px var(--hairline),0 4px 12px var(--ink)}
body.exchange-world #metaPanel{background:linear-gradient(90deg,color-mix(in srgb,var(--ink) 28%,transparent),color-mix(in srgb,var(--ink) 55%,transparent),color-mix(in srgb,var(--ink) 28%,transparent));padding-inline:4vw}
body.exchange-world .metaPanelCard{width:min(1190px,100%);padding-inline:28px;background:linear-gradient(180deg,transparent 55px,color-mix(in srgb,var(--ink) 88%,transparent) 135px);border-inline:1px solid var(--hairline)}
body.exchange-world .metaPanelHead{padding-top:76px;border-bottom:3px double var(--brass-deep);padding-bottom:20px}
body.exchange-world .metaPanelHead h2{font-family:'Bodoni Moda',serif;font-size:clamp(25px,3vw,40px);font-weight:500;color:var(--ivory);line-height:1.2;letter-spacing:0}
body.exchange-world .metaPanelHead small{color:var(--brass);letter-spacing:var(--ls-eyebrow)}
body.exchange-world .metaPanelHead>button{border-radius:var(--r-chip);background:var(--ew-panel);border-color:var(--brass-deep);box-shadow:inset 0 1px var(--hairline),0 3px 0 var(--ink)}
body.exchange-world #metaPanelBody{padding-top:24px;scrollbar-color:var(--brass-deep) var(--ink)}
body.exchange-world .collectionDiscoveryTabs{background:var(--ink);padding-block:10px;border-bottom:3px double var(--brass-deep)}
body.exchange-world :is(.collectionDiscoveryTabs,.discoveryFilters) button{background:var(--ew-panel);border-color:var(--brass-deep);box-shadow:inset 0 1px var(--hairline),0 3px 0 var(--ink)}
body.exchange-world .collectionDiscoveryTabs button[aria-pressed='true']{background:linear-gradient(135deg,var(--brass-hi),var(--brass));color:var(--ink)}
body.exchange-world .discoveryCatalog{gap:28px 24px;padding:12px 8px 36px}
body.exchange-world .discoveryCatalog .discoveryCard{padding:12px 12px 16px;background:linear-gradient(180deg,transparent,color-mix(in srgb,var(--ink-3) 50%,transparent));border-bottom:3px double var(--brass-deep);border-radius:0}
body.exchange-world .discoveryFace{box-shadow:0 12px 20px var(--ink);transition:transform 240ms var(--ew-weight),box-shadow 240ms ease}
body.exchange-world .discoveryCard:hover .discoveryFace{transform:translateY(-5px);box-shadow:0 20px 28px var(--ink)}
body.exchange-world #v2mbox.discoveryModal{background:linear-gradient(125deg,var(--ink-3),var(--ink));border:4px double var(--brass);box-shadow:0 30px 100px var(--ink);border-radius:var(--r-chip)}
body.exchange-world.ew-inspecting .ew-scene{transform:scale(1.2);filter:brightness(.65)}
body.exchange-world.ew-travelling #metaPanelBody{animation:ew-room-contents 650ms var(--ew-weight) both}
@keyframes ew-room-contents{from{opacity:.2;transform:translateX(22px)}to{opacity:1;transform:none}}
/* Phone: portrait hall and thumb-height directory; never scale down desktop control text. */
@media(max-width:900px){
 body.exchange-world{--ew-room-x:50%;--ew-room-y:30%}
 .ew-architecture::before,.ew-architecture::after{width:12%;opacity:.8}
 .ew-column-left{left:5%}.ew-column-right{right:5%}.ew-column{width:6%}
 .ew-window{width:26%;height:40%;top:12%}.ew-window-left{left:17%}.ew-window-right{right:17%}
 .ew-room-label{display:none}.ew-floor{bottom:-26%;height:52%}
 body.exchange-world #v2title.cardStoryTitle{padding:78px 16px calc(110px + env(safe-area-inset-bottom));gap:5px}
 body.exchange-world #v2title.cardStoryTitle .tt1{font-size:clamp(29px,8vw,56px)}
 body.exchange-world #v2title.cardStoryTitle .tt2{font-size:var(--fs-12);letter-spacing:.5em;text-indent:.5em}
 body.exchange-world #v2title.cardStoryTitle .titleCardShowcase{--card-width:clamp(70px,11dvh,104px);margin-top:20px;height:calc(var(--card-width)*1.45 + 42px)}
 body.exchange-world #v2title.cardStoryTitle .titleDiscovery{gap:8px;width:100%;justify-content:space-around;margin-bottom:8px}
 body.exchange-world .titleDiscovery button{padding:8px 4px;letter-spacing:0;min-height:44px}
 body.exchange-world #v2title.cardStoryTitle .playDeck{display:block;width:min(560px,100%);padding:14px;margin-top:5px}
 body.exchange-world #v2title.cardStoryTitle .playDeck .ttmodes>.ttmode{min-height:78px;padding:11px 8px;grid-template-columns:24px minmax(0,1fr);gap:4px 7px;font-size:var(--fs-14)}
 body.exchange-world #v2title.cardStoryTitle .playDeck .ttmode>.modeIcon{width:24px;font-size:var(--fs-16)}
 body.exchange-world #v2title .floorBoard{margin-top:20px;padding:16px 0 0;border:0;border-top:1px solid var(--hairline);grid-template-rows:auto;gap:8px}
 body.exchange-world #v2title .ttUtilities{width:100%;margin-top:16px}
 body.exchange-world #metaNav{left:8px;right:8px;bottom:max(8px,env(safe-area-inset-bottom));transform:none;gap:2px;padding:4px}
 body.exchange-world #metaNav button{min-width:0;flex:1;min-height:54px;padding:4px 2px;flex-direction:column;gap:4px}
 body.exchange-world #metaNav b{font-size:var(--fs-11);letter-spacing:0}
 body.exchange-world #metaPanel{padding-inline:0}
 body.exchange-world .metaPanelCard{padding-inline:16px;border:0;background:linear-gradient(180deg,color-mix(in srgb,var(--ink) 24%,transparent),color-mix(in srgb,var(--ink) 94%,transparent) 180px)}
 body.exchange-world .metaPanelHead{padding-top:76px;padding-bottom:16px;gap:10px}
 body.exchange-world .metaPanelHead h2{font-size:var(--fs-24)}
 body.exchange-world .discoveryCatalog{gap:18px 12px;padding-inline:0}
 body.exchange-world .discoveryCatalog .discoveryCard{padding:8px 4px 16px}
 .ew-door::before{inset:8% 10%;border-width:3px}.ew-door{border-width:5px}.ew-door::after{width:8px}
 .ew-door-seal{top:30%;width:110px}.ew-entry{padding-bottom:max(14dvh,50px)}
}
@media(min-width:901px) and (max-height:780px){
 body.exchange-world #v2title.cardStoryTitle{padding-top:60px}
 body.exchange-world #v2title.cardStoryTitle .tt1{font-size:var(--fs-48)}
 body.exchange-world #v2title.cardStoryTitle .titleCardShowcase{--card-width:72px;margin-top:8px;height:148px}
 body.exchange-world #v2title.cardStoryTitle .playDeck .ttmodes>.ttmode{min-height:64px;padding-block:8px}
 body.exchange-world #v2title.cardStoryTitle .playDeck{padding:14px;margin-top:0}
 body.exchange-world #v2title.cardStoryTitle .titleDiscovery{margin-bottom:0}
}
@media(max-height:520px) and (orientation:landscape){
 body.exchange-world #v2title.cardStoryTitle{padding-top:58px;padding-bottom:90px}
 body.exchange-world #v2title.cardStoryTitle .titleCardShowcase{--card-width:58px;margin-top:6px;height:130px}
 body.exchange-world #v2title.cardStoryTitle .tt1{font-size:var(--fs-32)}
 .ew-door-seal{top:24%;width:64px}.ew-entry{gap:8px;padding-bottom:20px}.ew-entry h1,.ew-entry h2{font-size:var(--fs-32)}.ew-entry p{margin-bottom:0}.ew-enter{min-height:44px;padding:10px 24px}
}
body.exchange-world.ew-reduced :is(.ew-scene,.ew-door,.ew-door-seal,.ew-architecture::before,.ew-architecture::after,.discoveryFace,#metaNav button,.ttmode){transition:none!important}
body.exchange-world.ew-reduced #v2title,body.exchange-world.ew-reduced #metaPanelBody{animation:none!important}
@media(prefers-reduced-motion:reduce){
 body.exchange-world :is(.ew-scene,.ew-door,.ew-door-seal,.ew-architecture::before,.ew-architecture::after,.discoveryFace,#metaNav button,.ttmode){transition:none!important}
 body.exchange-world #v2title,body.exchange-world #metaPanelBody{animation:none!important}
}
/* Integrated entrance keeps its door leaves visible after the copy withdraws. */
body.exchange-world{--ew-room-art:url('art/exchange-world/hall.png')}
body.exchange-world.ew-in-game #exchangeWorld,body.exchange-world.ew-in-game #ewEntrance{display:none}
#ewEntrance.ew-entry{justify-content:center;background:none;padding:0;isolation:isolate}
#ewEntrance .ew-doorway{z-index:0}
.ew-entry-copy{position:absolute;z-index:2;left:16px;right:16px;bottom:max(12dvh,45px);display:flex;flex-direction:column;align-items:center;gap:14px;text-align:center;transition:opacity 280ms ease,transform 350ms var(--ew-weight)}
.ew-entry-copy::before{content:'';position:absolute;inset:-35px -16px -60px;background:radial-gradient(ellipse,var(--ink),transparent 70%);z-index:-1;opacity:.8;pointer-events:none}
body.ew-entering #ewEntrance{opacity:1;visibility:visible;pointer-events:none}
body.ew-entering #ewEntrance .ew-entry-copy{opacity:0;transform:translateY(12px)}
body.ew-arrived #ewEntrance{opacity:0;visibility:hidden;pointer-events:none}
.ew-enter:disabled{cursor:wait;filter:saturate(.35);color:var(--ink-2)}
body.exchange-world #ewHallTabs{display:none}
body.exchange-world #v2title.cardStoryTitle .playDeck .ttmode:not(.tutorialMode):not(.climbMode):not(.campaignRow)>b{display:block}
body.exchange-world #metaPanel.open .metaPanelCard{animation:ew-room-contents 520ms var(--ew-weight) both}
body.exchange-world #v2mbox.discoveryModal{transform-origin:var(--ew-origin-x,50%) var(--ew-origin-y,50%)}
@media(max-width:900px){
 body.exchange-world #ewHallTabs{display:flex;flex-shrink:0;align-items:center;justify-content:center;gap:4px;margin:26px 0 14px;width:min(460px,100%);padding:5px 0;border-block:1px solid var(--hairline);background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--ink) 90%,transparent),transparent)}
 body.exchange-world #ewHallTabs button{position:relative;flex:1;min-height:44px;border:0;border-bottom:2px solid transparent;border-radius:0;background:transparent;color:var(--muted);font:700 var(--fs-12)/1.2 var(--font-body);letter-spacing:var(--ls-eyebrow);text-transform:uppercase;cursor:pointer;transition:color 160ms ease,border-color 160ms ease}
 body.exchange-world #ewHallTabs button[aria-selected='true'],body.exchange-world #ewHallTabs button[aria-pressed='true']{color:var(--brass-hi);border-bottom-color:var(--brass-hi);background:linear-gradient(transparent,color-mix(in srgb,var(--brass-deep) 30%,transparent))}
 body.exchange-world[data-exchange-wing='play'] #v2title .titleCardShowcase,body.exchange-world[data-exchange-wing='play'] #v2title .titleDiscovery,body.exchange-world[data-exchange-wing='house'] #v2title .titleCardShowcase,body.exchange-world[data-exchange-wing='house'] #v2title .titleDiscovery{display:none}
 body.exchange-world[data-exchange-wing='discover'] #v2title .playDeck,body.exchange-world[data-exchange-wing='play'] #v2title .floorBoard,body.exchange-world[data-exchange-wing='house'] #v2title .ttmodes{display:none!important}
 body.exchange-world[data-exchange-wing='house'] #v2title .floorBoard{display:grid!important;margin:0;padding:0;border:0;gap:20px}
 body.exchange-world[data-exchange-wing='play'] #v2title.cardStoryTitle,body.exchange-world[data-exchange-wing='house'] #v2title.cardStoryTitle{padding-top:clamp(100px,24dvh,230px)}
 body.exchange-world[data-exchange-wing='discover'] #v2title.cardStoryTitle{padding-top:clamp(90px,15dvh,160px)}
 body.exchange-world[data-exchange-wing='discover'] #v2title.cardStoryTitle .titleCardShowcase{--card-width:clamp(76px,15dvh,130px);margin-top:32px}
 body.exchange-world[data-exchange-wing='discover'] #ewHallTabs{margin-top:20px}
 body.exchange-world #v2title.cardStoryTitle .playDeck .ttmodes>.ttmode{min-height:88px}
 body.exchange-world #v2title .floorRow{min-height:64px}
 body.exchange-world[data-exchange-wing='house'] .ew-scene{background-position:center,72% 35%}
 body.exchange-world[data-exchange-wing='discover'] .ew-scene{background-position:center,28% 35%}
}
@media(max-height:650px) and (max-width:900px){
 body.exchange-world[data-exchange-wing] #v2title.cardStoryTitle{padding-top:78px}
 body.exchange-world #ewHallTabs{margin-top:16px;margin-bottom:12px}
 body.exchange-world #v2title.cardStoryTitle .playDeck .ttmodes>.ttmode{min-height:70px}
 body.exchange-world[data-exchange-wing='discover'] #v2title.cardStoryTitle .titleCardShowcase{--card-width:76px;margin-top:20px}
 .ew-entry-copy{bottom:20px;gap:8px}
}
body.exchange-world.ew-reduced #metaPanel.open .metaPanelCard{animation:none!important}
@media(prefers-reduced-motion:reduce){body.exchange-world #metaPanel.open .metaPanelCard{animation:none!important}}
/* Completion / recommendation is game state and remains visible on the tutorial plaque. */
body.exchange-world #v2title.cardStoryTitle .playDeck .tutorialMode em{display:block;position:static;grid-column:2;grid-row:3;justify-self:start;max-width:100%;box-sizing:border-box;padding:2px 4px;margin-top:2px;font-size:var(--fs-11);line-height:1.1;letter-spacing:0;white-space:normal}
body.exchange-world #v2title.cardStoryTitle .playDeck .tutorialMode>b{grid-column:2;grid-row:2}
body.exchange-world.ew-in-game :is(#v2title,#metaPanel,#ewHallTabs){pointer-events:none}
/* Painted architecture carries material detail; only near foreground remains geometric. */
body.exchange-world .ew-window,body.exchange-world .ew-ceiling,body.exchange-world .ew-lintel{display:none}
body.exchange-world .ew-column{opacity:.2}
body.exchange-world .ew-floor{opacity:.13}
body.exchange-world .ew-architecture::before,body.exchange-world .ew-architecture::after{width:6%;opacity:.8}
body.exchange-world #metaNav svg{width:22px;height:22px;display:block;overflow:visible}
.ew-door-seal{font-size:0}.ew-door-seal>span{display:none}
.ew-entry-subtitle{font:600 var(--fs-14)/1.4 var(--font-body);letter-spacing:.5em;text-indent:.5em;color:var(--brass-hi);margin-bottom:12px}
.ew-load-state{font:500 var(--fs-12)/1.3 var(--font-body);color:var(--muted)}
.ew-load-state:empty{display:none}
body.exchange-world .ew-replay-entry{flex-shrink:0;min-height:44px;margin-top:6px;padding:8px 16px;border:0;background:none;color:var(--muted);font:600 var(--fs-11)/1.4 var(--font-body);letter-spacing:var(--ls-label);text-decoration:underline;text-underline-offset:5px;cursor:pointer}
html.exchangeReducedUI body.exchange-world :is(.ew-scene,.ew-door,.ew-door-seal,.ew-entry-copy,.discoveryFace,#metaNav button,.ttmode){transition:none!important}
html.exchangeReducedUI body.exchange-world :is(#v2title,#metaPanelBody,.metaPanelCard){animation:none!important}
/* Integration refinements from 1440 / 390 / 320 live captures. */
body.exchange-world #exchangeWorld[hidden],body.exchange-world #ewEntrance[hidden]{display:none!important}
body.exchange-world #v2title.cardStoryTitle .playDeck{box-sizing:border-box}
body.exchange-world #v2title.cardStoryTitle .playDeck>.ttmodes{flex-direction:row;box-sizing:border-box}
body.exchange-world #v2title.patchAvailable .titleCardShowcase{display:flex}
body.exchange-world #v2title .patchBanner{position:absolute;top:clamp(190px,26dvh,270px);left:5vw;width:210px;grid-template-columns:32px minmax(0,1fr) 24px;gap:8px;padding:12px 10px;border:3px double var(--brass-deep);border-radius:var(--r-chip);background:var(--ew-panel);box-shadow:0 12px 28px var(--ink)}
body.exchange-world #v2title .patchBannerCard{width:32px;min-height:44px}
body.exchange-world #v2title .patchBanner strong{font-size:var(--fs-14);line-height:1.15}
body.exchange-world #v2title .patchBanner small{font-size:var(--fs-11);letter-spacing:0;color:var(--brass)}
body.exchange-world #v2title .patchBanner span{font-size:var(--fs-11);line-height:1.2}
body.exchange-world #v2title .patchBannerOpen{min-height:44px}
.ew-travel-mask{position:absolute;inset:-20% auto -20% -32%;width:24%;z-index:4;opacity:0;pointer-events:none;background:linear-gradient(90deg,transparent,var(--ink) 12%,var(--ink-3) 35%,var(--brass-deep) 39%,var(--ink) 44%,var(--ink) 78%,transparent);box-shadow:0 0 30px var(--ink)}
body.exchange-world.ew-travelling .ew-travel-mask{animation:ew-pillar-pass 520ms cubic-bezier(.45,.02,.55,.98) both}
@keyframes ew-pillar-pass{0%{opacity:0;transform:translateX(0)}15%{opacity:1}85%{opacity:1}100%{opacity:0;transform:translateX(650%)}}
body.exchange-world.ew-travelling .ew-scene{transform:scale(1.2) translateX(calc(var(--ew-travel-direction,1)*2%));opacity:.62}
body.exchange-world[data-exchange-room='character'] .ew-scene{background-position:center,32% 35%;transform:scale(1.22)}
body.exchange-world[data-exchange-room='friends'] .ew-scene{background-position:center,80% 65%;transform:scale(1.2)}
body.exchange-world[data-exchange-room='profile'] .ew-scene{background-position:center,14% 80%;transform:scale(1.24)}
@media(max-width:900px){
 body.exchange-world #v2title .patchBanner{position:relative;top:auto;left:auto;width:min(460px,100%);grid-template-columns:28px minmax(0,1fr) 28px;padding:8px 10px;margin-top:14px}
 body.exchange-world #v2title .patchBannerCard{width:28px}
 body.exchange-world[data-exchange-wing='play'] #v2title .patchBanner,body.exchange-world[data-exchange-wing='house'] #v2title .patchBanner{display:none}
 body.exchange-world[data-exchange-wing='play'] #v2title.patchAvailable .titleCardShowcase,body.exchange-world[data-exchange-wing='house'] #v2title.patchAvailable .titleCardShowcase{display:none}
}
html.exchangeReducedUI .ew-travel-mask,body.ew-reduced .ew-travel-mask{display:none}
@media(prefers-reduced-motion:reduce){.ew-travel-mask{display:none}}
/* The audio bridge and motion share one timeline: latch, hinge, then settled hall. */
.ew-door{transition:transform 1250ms cubic-bezier(.42,0,.12,1) 220ms,filter 1250ms ease 220ms;background-image:repeating-linear-gradient(90deg,transparent 0 9%,color-mix(in srgb,var(--brass) 12%,transparent) 9.1% 9.4%,transparent 9.5% 18%),linear-gradient(105deg,color-mix(in srgb,var(--ink) 97%,transparent),color-mix(in srgb,var(--ink-3) 84%,transparent) 28%,color-mix(in srgb,var(--ink-2) 91%,transparent) 48%,color-mix(in srgb,var(--ink) 94%,transparent) 90%),url('art/theme/table-walnut-b31.webp');background-size:auto,auto,cover}
body.exchange-world.meta-open .ew-room-label{display:none}
body.exchange-world{--ew-rest-scale:1.045}
body.exchange-world:not([data-exchange-room='hall']){--ew-rest-scale:1.13}
body.exchange-world[data-exchange-room='character']{--ew-rest-scale:1.22}
body.exchange-world[data-exchange-room='friends']{--ew-rest-scale:1.2}
body.exchange-world[data-exchange-room='profile']{--ew-rest-scale:1.24}
body.exchange-world .ew-scene{transition:none;transform:scale(var(--ew-rest-scale))}
body.exchange-world.ew-travelling .ew-scene{transform:scale(var(--ew-rest-scale));opacity:1;animation:ew-scene-passage 520ms cubic-bezier(.45,.02,.55,.98) both}
@keyframes ew-scene-passage{0%,100%{transform:scale(var(--ew-rest-scale));opacity:1}45%{transform:scale(calc(var(--ew-rest-scale) + .09)) translateX(calc(var(--ew-travel-direction,1)*-1.5%));opacity:.58}55%{transform:scale(calc(var(--ew-rest-scale) + .09)) translateX(calc(var(--ew-travel-direction,1)*1.5%));opacity:.58}}
body.exchange-world .ew-architecture::before,body.exchange-world .ew-architecture::after{transition:none}
body.exchange-world.ew-travelling .ew-architecture::before{transform:perspective(800px) rotateY(12deg)}
body.exchange-world.ew-travelling .ew-architecture::after{transform:perspective(800px) rotateY(-12deg) scaleX(-1)}
body.exchange-world #v2title.cardStoryTitle .playDeck .tutorialMode em{grid-column:1/-1;justify-self:start;white-space:normal}
@media(max-width:380px){
 body.exchange-world #v2title.cardStoryTitle .playDeck .ttmodes>.ttmode{grid-template-columns:minmax(0,1fr);padding:9px 8px;text-align:center;min-height:80px}
 body.exchange-world #v2title.cardStoryTitle .playDeck .ttmode>.modeIcon{display:none}
 body.exchange-world #v2title.cardStoryTitle .playDeck .ttmode>span:not(.modeIcon),body.exchange-world #v2title.cardStoryTitle .playDeck .ttmode>b{grid-column:1}
 body.exchange-world #v2title.cardStoryTitle .playDeck .tutorialMode em{grid-column:1;justify-self:center}
}
body.exchange-world.ew-reduced .ew-scene,html.exchangeReducedUI body.exchange-world .ew-scene{animation:none!important}
@media(prefers-reduced-motion:reduce){body.exchange-world .ew-scene{animation:none!important}}
/* Scrollable surfaces end above the persistent dock; controls never sit underneath it. */
body.exchange-world #v2title.cardStoryTitle{bottom:calc(86px + env(safe-area-inset-bottom));padding-bottom:24px}
body.exchange-world #metaPanel{padding-bottom:calc(96px + env(safe-area-inset-bottom))}
@media(max-width:900px){body.exchange-world #v2title.cardStoryTitle{bottom:calc(84px + env(safe-area-inset-bottom));padding-bottom:24px}body.exchange-world #metaPanel{padding-bottom:calc(86px + env(safe-area-inset-bottom))}}
body.exchange-world #v2title .modeIcon svg{display:block;width:24px;height:24px;max-width:100%}
@media(max-width:380px) and (max-height:650px){body.exchange-world[data-exchange-wing] #v2title.cardStoryTitle{padding-top:62px}body.exchange-world #v2title.cardStoryTitle .playDeck .ttmodes>.ttmode{min-height:74px;padding-block:7px}}
/* Hall tabs remain anchored while only the room contents change on a phone. */
@media(max-width:900px){
 body.exchange-world[data-exchange-wing] #v2title.cardStoryTitle{padding-top:clamp(95px,20dvh,205px)}
 body.exchange-world #v2title>.tt1{order:0}body.exchange-world #v2title>.tt2{order:1}
 body.exchange-world #v2title>#ewHallTabs{order:2;margin-top:24px}
 body.exchange-world #v2title>.titleCardShowcase{order:3}body.exchange-world #v2title>.titleDiscovery{order:4}
 body.exchange-world #v2title>.patchBanner{order:5}body.exchange-world #v2title>.playDeck{order:6}
 body.exchange-world #v2title>.ttUtilities{order:7}body.exchange-world #v2title>.ew-replay-entry{order:8}
}
@media(max-height:650px) and (max-width:900px){body.exchange-world[data-exchange-wing] #v2title.cardStoryTitle{padding-top:78px}body.exchange-world #v2title>#ewHallTabs{margin-top:16px}}
@media(max-width:380px) and (max-height:650px){body.exchange-world[data-exchange-wing] #v2title.cardStoryTitle{padding-top:62px}}
/* The independent skip control remains hit-testable while the doors move. */
#ewEntrance.ew-entry>.ew-skip,body.ew-entering #ewEntrance.ew-entry>.ew-skip{position:absolute;left:50%;bottom:max(24px,env(safe-area-inset-bottom));transform:translateX(-50%);z-index:6;pointer-events:auto;visibility:visible;opacity:1;min-height:44px;margin:0;white-space:nowrap;background:color-mix(in srgb,var(--ink) 80%,transparent);border:1px solid var(--hairline);border-radius:var(--r-chip);padding:8px 20px}
@media(max-width:600px){
 body.exchange-world #metaPanelBody{padding-top:12px}
 body.exchange-world .collectionDiscoveryTabs{margin-bottom:10px;padding-block:6px;gap:6px}
 body.exchange-world .editionBanner{min-height:72px;padding:10px 12px;margin:6px 0 12px;gap:8px;border-radius:var(--r-chip)}
 body.exchange-world .editionBanner b{font-size:var(--fs-20);letter-spacing:var(--ls-label);line-height:1.1}
 body.exchange-world .editionBanner>span:not(.editionBannerMark){gap:3px}
 body.exchange-world .editionBanner small{font-size:var(--fs-11);letter-spacing:0}
 body.exchange-world .editionBanner strong{font-size:var(--fs-11)}
 body.exchange-world .discoveryLead{font-size:var(--fs-14);line-height:1.4;margin-bottom:12px}
 body.exchange-world .discoveryFilters{gap:6px;padding-bottom:10px;margin-bottom:6px}
 body.exchange-world .discoveryFilters button{flex:1 1 calc(33.333% - 6px);padding:6px 5px;min-height:44px;font-size:var(--fs-11);letter-spacing:0;white-space:normal}
 body.exchange-world .discoveryCatalog{padding-top:6px}
}
/* A short screen reserves separate vertical lanes for Enter and Skip. */
@media(max-height:650px){#ewEntrance .ew-entry-copy{bottom:92px;gap:8px}}
@media(max-width:600px){
 body.exchange-world .discoveryFilters{flex-wrap:nowrap;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:thin;padding-bottom:8px}
 body.exchange-world .discoveryFilters button{flex:0 0 auto;min-width:84px;max-width:105px;padding:6px 9px;white-space:normal}
}
@media(max-width:380px){
 body.exchange-world .metaPanelHead{padding-top:62px;padding-bottom:12px}
 body.exchange-world .editionBanner{padding:8px 10px;min-height:62px;margin-bottom:8px}
 body.exchange-world .editionBanner b{font-size:var(--fs-16)}
 body.exchange-world .editionBanner small{font-size:var(--fs-11);line-height:1}
}
/* Final portrait-art audit: the complete card fan stays inside phone edges. */
@media(max-width:900px){body.exchange-world[data-exchange-wing='discover'] #v2title.cardStoryTitle .titleCardShowcase{--card-width:clamp(76px,12.2dvh,104px)}}

/* Build46: room transit and its physical insert share one completion beat. */
body.exchange-world.ew-travelling .ew-scene,body.exchange-world.ew-travelling .ew-travel-mask{animation-duration:640ms}
body.exchange-world.ew-travelling #metaPanelBody{animation:none}

/* The threshold: a deliberate latch, heavy leaves, then the wordmark seats. */
.ew-door{transition:transform 3300ms cubic-bezier(.48,.035,.16,1) 240ms,filter 3300ms ease 240ms;box-shadow:inset 0 0 0 2px var(--brass),inset 0 0 0 10px var(--ink),inset 0 0 0 14px var(--brass-deep),inset 0 0 100px var(--ink),18px 0 0 var(--ink),24px 0 28px var(--ink)}
.ew-door-right{box-shadow:inset 0 0 0 2px var(--brass),inset 0 0 0 10px var(--ink),inset 0 0 0 14px var(--brass-deep),inset 0 0 100px var(--ink),-18px 0 0 var(--ink),-24px 0 28px var(--ink)}
.ew-threshold-air{position:absolute;inset:0;z-index:1;overflow:hidden;pointer-events:none;opacity:0}
.ew-wisp{position:absolute;left:12%;top:10%;width:76%;height:78%;border-radius:50%;background:conic-gradient(from 30deg,transparent 0deg 80deg,color-mix(in srgb,var(--brass-hi) 15%,transparent) 110deg,transparent 155deg 250deg,color-mix(in srgb,var(--brass) 10%,transparent) 285deg,transparent 330deg);mask-image:radial-gradient(ellipse,transparent 28%,#000 48%,transparent 69%);filter:blur(9px);opacity:0}
.ew-wisp-right{left:4%;top:3%;width:92%;height:94%;transform:rotate(100deg)}
.ew-gold-dust{position:absolute;inset:-12%;background-image:radial-gradient(circle,var(--brass-hi) 0 1px,transparent 1.8px),radial-gradient(circle,var(--brass) 0 .7px,transparent 1.5px);background-size:137px 173px,211px 157px;background-position:17px 31px,91px 67px;mask-image:radial-gradient(ellipse,#000,transparent 68%);opacity:0}
body.exchange-world.ew-entering .ew-threshold-air{opacity:1}
body.exchange-world.ew-entering .ew-wisp-left{animation:ew-threshold-swirl 4200ms ease-in-out both}
body.exchange-world.ew-entering .ew-wisp-right{animation:ew-threshold-return 4200ms ease-in-out both}
body.exchange-world.ew-entering .ew-gold-dust{animation:ew-threshold-dust 4200ms ease-out both}
body.exchange-world.ew-entering .ew-scene{animation:ew-threshold-depth 4200ms cubic-bezier(.22,.5,.18,1) both}
body.exchange-world.ew-entering #v2title{opacity:1;animation:none;pointer-events:none}
body.exchange-world.ew-entering #v2title>:not(.tt1):not(.tt2){opacity:0}
body.exchange-world.ew-entering #v2title>.tt1{animation:ew-name-lock 4200ms cubic-bezier(.22,.6,.18,1) both,ew-wordmark-polish 1800ms ease 1900ms both;transform-origin:50% 50%;background:linear-gradient(112deg,var(--ivory) 30%,var(--brass) 43%,var(--brass-hi) 48%,var(--ivory) 53% 100%);background-size:250% 100%;background-clip:text;-webkit-background-clip:text;color:transparent;text-shadow:none}
body.exchange-world.ew-entering #v2title>.tt2{animation:ew-name-subtitle 4200ms ease both}
body.exchange-world.ew-arrived #v2title{animation:none}
body.exchange-world.ew-arrived #v2title>:is(.tt1,.tt2){animation:none}
/* Arrival is one ceremony, removed after completion; ordinary menu updates do not replay it. */
body.exchange-world.ew-arrived #v2title>:not(.tt1):not(.tt2){animation:none}
body.exchange-world.ew-grand-arrival #v2title>:not(.tt1):not(.tt2){animation:ew-grand-menu 850ms var(--ew-weight) both;animation-delay:var(--ew-arrival-delay,0ms)}
body.exchange-world.ew-grand-arrival #ewHallTabs{--ew-arrival-delay:70ms}
body.exchange-world.ew-grand-arrival .playDeck{--ew-arrival-delay:170ms}
body.exchange-world.ew-grand-arrival .titleCardShowcase{--ew-arrival-delay:260ms}
body.exchange-world.ew-grand-arrival .floorBoard{--ew-arrival-delay:300ms}
body.exchange-world.ew-grand-arrival .ttVersion{--ew-arrival-delay:370ms}
body.exchange-world:not(.ew-arrived) #v2badge{opacity:0;pointer-events:none}
body.exchange-world.ew-grand-arrival #metaNav,body.exchange-world.ew-grand-arrival #metaHeader,body.exchange-world.ew-grand-arrival #v2badge{animation:ew-grand-menu 900ms var(--ew-weight) 240ms both}
@keyframes ew-grand-menu{from{opacity:0;transform:perspective(1100px) translateY(28px) rotateX(-5deg) scale(.97)}to{opacity:1;transform:none}}
@keyframes ew-threshold-swirl{0%,12%{opacity:0;transform:rotate(-35deg) scale(.7)}45%{opacity:.8}100%{opacity:0;transform:rotate(65deg) scale(1.45)}}
@keyframes ew-threshold-return{0%,18%{opacity:0;transform:rotate(140deg) scale(.8)}55%{opacity:.65}100%{opacity:0;transform:rotate(40deg) scale(1.35)}}
@keyframes ew-threshold-dust{0%,16%{opacity:0;transform:scale(.82) rotate(-8deg)}50%{opacity:.38}100%{opacity:0;transform:scale(1.22) rotate(6deg) translateY(-3%)}}
@keyframes ew-threshold-depth{from{transform:scale(1);filter:brightness(.66)}to{transform:scale(var(--ew-rest-scale));filter:brightness(1)}}
@keyframes ew-name-lock{0%,27%{opacity:0;transform:perspective(900px) translateY(32px) translateZ(-240px) rotateX(12deg);filter:blur(3px)}56%{opacity:1;filter:blur(0)}80%{transform:perspective(900px) translateY(-2px) translateZ(7px) rotateX(0deg)}84%{transform:perspective(900px) translateY(1px) translateZ(0)}90%,100%{opacity:1;transform:none;filter:blur(0)}}
@keyframes ew-name-subtitle{0%,65%{opacity:0;transform:translateY(6px)}88%,100%{opacity:1;transform:none}}
@media(max-width:600px){.ew-wisp{filter:blur(5px)}.ew-gold-dust{background-size:113px 149px,181px 137px}}
body.exchange-world.ew-reduced .ew-threshold-air,html.exchangeReducedUI .ew-threshold-air{display:none}
body.exchange-world.ew-reduced #v2title>*,html.exchangeReducedUI body.exchange-world #v2title>*{animation:none!important}
@media(prefers-reduced-motion:reduce){.ew-threshold-air{display:none}body.exchange-world #v2title>*{animation:none!important}}


/* Build7: light escaping through the opening, then settling on the hall floor. */
.ew-threshold-rays{position:absolute;inset:-25%;background:conic-gradient(from 248deg at 50% 53%,transparent 0deg 12deg,color-mix(in srgb,var(--brass-hi) 24%,transparent) 17deg,transparent 24deg 55deg,color-mix(in srgb,var(--brass-hi) 15%,transparent) 61deg,transparent 72deg 110deg,color-mix(in srgb,var(--brass) 24%,transparent) 117deg,transparent 126deg 360deg);mask-image:radial-gradient(ellipse,#000 7%,transparent 64%);opacity:0;transform-origin:50% 53%}
.ew-threshold-floor{position:absolute;left:8%;right:8%;top:45%;bottom:0;background:radial-gradient(ellipse at 50% 0%,color-mix(in srgb,var(--brass-hi) 32%,transparent),transparent 65%);clip-path:polygon(48% 0,52% 0,100% 100%,0 100%);opacity:0;transform-origin:50% 0}
body.exchange-world.ew-entering .ew-threshold-rays{animation:ew-hall-rays 4200ms ease-out both}
body.exchange-world.ew-entering .ew-threshold-floor{animation:ew-hall-floor 4200ms ease-out both}
body.exchange-world.ew-preparing .ew-door-seal{filter:drop-shadow(0 0 16px color-mix(in srgb,var(--brass-hi) 60%,transparent));transition:filter 300ms}
@keyframes ew-hall-rays{0%,5%{opacity:0;transform:scaleX(.03)}25%{opacity:.9;transform:scaleX(.6) rotate(-2deg)}57%{opacity:.6}100%{opacity:0;transform:scaleX(1.3) rotate(7deg)}}
@keyframes ew-hall-floor{0%,8%{opacity:0;transform:scaleX(.03)}40%{opacity:.75}100%{opacity:0;transform:scaleX(1.3)}}
@keyframes ew-wordmark-polish{from{background-position:100% 50%}to{background-position:0% 50%}}
@media(prefers-reduced-motion:reduce){body.exchange-world.ew-grand-arrival #metaNav,body.exchange-world.ew-grand-arrival #metaHeader,body.exchange-world.ew-grand-arrival #v2badge{animation:none!important}}
html.exchangeReducedUI body.exchange-world.ew-grand-arrival #metaNav,html.exchangeReducedUI body.exchange-world.ew-grand-arrival #metaHeader,html.exchangeReducedUI body.exchange-world.ew-grand-arrival #v2badge{animation:none!important}

/* Build8: the directory forms from light after the threshold has opened. */
body.exchange-world{--ew-shell-ready:1}
#ewArrival{display:none;position:fixed;inset:0;z-index:58;pointer-events:none;overflow:hidden;contain:strict}
body.exchange-world.ew-grand-arrival #ewArrival{display:block}
.ew-crown-ring{position:absolute;left:50%;top:65%;width:min(100vw,1050px);aspect-ratio:1;border:2px solid color-mix(in srgb,var(--brass-hi) 68%,transparent);border-radius:50%;box-shadow:0 0 32px color-mix(in srgb,var(--brass) 30%,transparent),inset 0 0 24px color-mix(in srgb,var(--brass) 20%,transparent);opacity:0;animation:ew-regal-orbit 4100ms cubic-bezier(.25,.45,.3,1) both}
.ew-crown-ring-inner{width:min(70vw,720px);border:1px dashed color-mix(in srgb,var(--brass-hi) 50%,transparent);animation-delay:160ms}
.ew-arrival-aureole{position:absolute;inset:-30%;background:conic-gradient(from 20deg at 50% 60%,transparent 0deg 20deg,color-mix(in srgb,var(--brass-hi) 20%,transparent) 26deg,transparent 33deg 85deg,color-mix(in srgb,var(--brass) 22%,transparent) 94deg,transparent 110deg 200deg,color-mix(in srgb,var(--ivory) 12%,transparent) 208deg,transparent 220deg 285deg,color-mix(in srgb,var(--brass-hi) 20%,transparent) 297deg,transparent 315deg);mask-image:radial-gradient(ellipse,#000 15%,transparent 64%);animation:ew-regal-rays 4200ms ease-out both}
.ew-arrival-mote{position:absolute;left:var(--mote-x);top:var(--mote-y);width:3px;height:12px;background:linear-gradient(transparent,var(--brass-hi),transparent);border-radius:50%;box-shadow:0 0 8px var(--brass);animation:ew-regal-mote 3500ms ease-out var(--mote-delay) both}
body.exchange-world.ew-grand-arrival #v2title>.playDeck{animation:ew-regal-plinth 1900ms var(--ew-weight) 100ms both}
body.exchange-world.ew-grand-arrival #v2title .ttmodes>.ttmode{animation:ew-regal-button 2300ms cubic-bezier(.25,.55,.3,1) both;animation-delay:calc(240ms + var(--ew-button-order,0)*150ms);transform-origin:50% 100%}
body.exchange-world.ew-grand-arrival #v2title .ttmode:nth-child(2){--ew-button-order:1}
body.exchange-world.ew-grand-arrival #v2title .ttmode:nth-child(3){--ew-button-order:2}
body.exchange-world.ew-grand-arrival #v2title .ttmode:nth-child(4){--ew-button-order:3}
body.exchange-world.ew-grand-arrival #v2title .ttmode:nth-child(5){--ew-button-order:4}
body.exchange-world.ew-grand-arrival #v2title>.tt1{animation:ew-regal-crown 3800ms ease-out both}
body.exchange-world.ew-grand-arrival #metaNav{animation-delay:850ms;animation-duration:1400ms}
@keyframes ew-regal-orbit{0%{opacity:0;transform:translate(-50%,-50%) perspective(1000px) rotateX(66deg) scale(.12)}35%{opacity:.24}100%{opacity:0;transform:translate(-50%,-50%) perspective(1000px) rotateX(66deg) scale(1.5)}}
@keyframes ew-regal-rays{0%{opacity:0;transform:rotate(-12deg) scale(.75)}35%{opacity:.4}100%{opacity:0;transform:rotate(10deg) scale(1.2)}}
@keyframes ew-regal-mote{0%{opacity:0;transform:translateY(60px) scale(.2)}35%{opacity:.45}100%{opacity:0;transform:translate(var(--mote-drift),-160px) scale(.3)}}
@keyframes ew-regal-plinth{from{opacity:0;transform:translateY(14px);filter:brightness(1.08)}to{opacity:1;transform:none;filter:none}}
@keyframes ew-regal-button{from{opacity:0;transform:translateY(18px) scale(.985);filter:blur(3px) brightness(1.12)}to{opacity:1;transform:none;filter:none}}
@keyframes ew-regal-crown{0%{text-shadow:0 0 1px var(--ivory)}32%{text-shadow:0 0 24px color-mix(in srgb,var(--brass-hi) 70%,transparent),0 2px 2px var(--ink)}100%{text-shadow:0 2px 2px var(--ink),0 8px 30px var(--ink)}}
@media(max-width:600px){.ew-crown-ring{top:60%;width:140vw}.ew-crown-ring-inner{width:105vw}.ew-arrival-mote{width:2px;height:8px}}
@media(prefers-reduced-motion:reduce){#ewArrival{display:none!important}body.exchange-world.ew-grand-arrival #v2title .ttmode{animation:none!important}}
html.exchangeReducedUI #ewArrival{display:none!important}html.exchangeReducedUI body.exchange-world.ew-grand-arrival #v2title .ttmode{animation:none!important}

/* Build10: inherited visibility changes must never delay the closed doors behind the boot guard. */
body.exchange-world #ewEntrance,body.exchange-world #ewEntrance .ew-doorway{transition:none}
/* Material pressure without shifting layout; existing entrance choreography retains ownership. */
body.exchange-world:not(.ew-grand-arrival):not(.ew-in-game) :is(#metaNav,#metaPanel,#v2mbox,#v3lobby) button:active:not(:disabled){scale:.985;filter:brightness(1.08)}
@media(prefers-reduced-motion:reduce){body.exchange-world :is(#metaNav,#metaPanel,#v2mbox,#v3lobby) button:active:not(:disabled){scale:1}}
html.exchangeReducedUI body.exchange-world :is(#metaNav,#metaPanel,#v2mbox,#v3lobby) button:active:not(:disabled){scale:1}

/* Build56: the camera belongs to the hall; controls keep their accepted size and position. */
.ew-depth-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.ew-depth-canvas[hidden]{display:none}
.ew-depth-ready>.ew-architecture,.ew-depth-ready>.ew-ambient{visibility:hidden}
body.exchange-world.ew-entering .ew-scene.ew-depth-ready{animation:none;transform:scale(var(--ew-rest-scale));filter:none}
.ew-depth-air{position:absolute;inset:0;overflow:hidden;pointer-events:none;display:none}
.ew-depth-moving>.ew-depth-air{display:block}
.ew-depth-air>i{position:absolute;left:var(--dust-x);top:var(--dust-y);width:var(--dust-size);height:var(--dust-size);border-radius:50%;background:var(--brass-hi);box-shadow:0 0 5px var(--brass);opacity:0;animation:ew-hall-dust var(--dust-time) ease-in-out var(--dust-delay) infinite}
@keyframes ew-hall-dust{0%,100%{opacity:0;transform:translate(0,22px)}30%,65%{opacity:.32}90%{opacity:0;transform:translate(14px,-42px)}}
body.exchange-world.ew-entering .ew-wisp,body.exchange-world.ew-entering .ew-gold-dust,body.exchange-world.ew-grand-arrival #ewArrival{display:none}
body.exchange-world.ew-entering #v2title>.tt1{animation:ew-hall-wordmark 4200ms ease both;transform:none;filter:none}
@keyframes ew-hall-wordmark{0%,38%{opacity:0}82%,100%{opacity:1}}
body.exchange-world.ew-grand-arrival #v2title>:not(.tt1):not(.tt2),body.exchange-world.ew-grand-arrival #v2title>.playDeck,body.exchange-world.ew-grand-arrival #metaNav,body.exchange-world.ew-grand-arrival #metaHeader,body.exchange-world.ew-grand-arrival #v2badge{animation:ew-hall-menu 750ms ease 80ms both}
body.exchange-world.ew-grand-arrival #v2title .ttmodes>.ttmode,body.exchange-world.ew-grand-arrival #v2title>.tt1{animation:none}
@keyframes ew-hall-menu{from{opacity:0}to{opacity:1}}
html.exchangeReducedUI .ew-depth-canvas,html.exchangeReducedUI .ew-depth-air{display:none}
@media(prefers-reduced-motion:reduce){.ew-depth-canvas,.ew-depth-air{display:none}}

/* Build11: a quiet gesture affordance occupies the existing mobile tab-to-board gap. */
body.exchange-world .ew-swipe-hint{display:none}
@media(max-width:900px){
 body.exchange-world #ewHallTabs{position:relative}
 body.exchange-world #ewHallTabs .ew-swipe-hint{position:absolute;inset:auto auto -13px 50%;transform:translateX(-50%);width:max-content;padding:0 9px;border-radius:8px;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--ink) 88%,transparent) 18% 82%,transparent);display:flex;align-items:center;justify-content:center;gap:9px;height:12px;pointer-events:none;color:var(--brass-hi);font:600 9px/12px var(--font-body);letter-spacing:.16em;text-shadow:0 1px 3px var(--ink);white-space:nowrap}
 body.exchange-world #ewHallTabs .ew-swipe-hint>span{font:400 15px/10px var(--font-body);opacity:.8}
}

/* Build59: a single small step into the original monumental hall; no continuous movement. */
.ew-depth-air{display:none!important}
body.exchange-world.ew-entering .ew-door{transition:transform 1400ms cubic-bezier(.35,.1,.2,1) 80ms,filter 1400ms ease 80ms}
body.exchange-world.ew-entering .ew-scene{animation-duration:2800ms}
body.exchange-world.ew-entering #v2title>.tt1{animation:ew-hall-wordmark 2800ms ease both}
body.exchange-world.ew-entering #v2title>.tt2{animation:ew-hall-subtitle 2800ms ease both}
@keyframes ew-hall-wordmark{0%,67%{opacity:0}100%{opacity:1}}
@keyframes ew-hall-subtitle{0%,80%{opacity:0}100%{opacity:1}}
body.exchange-world.ew-grand-arrival #v2title>:not(.tt1):not(.tt2),body.exchange-world.ew-grand-arrival #v2title>.playDeck,body.exchange-world.ew-grand-arrival #metaNav,body.exchange-world.ew-grand-arrival #metaHeader,body.exchange-world.ew-grand-arrival #v2badge{animation-duration:400ms}

/* Build80: architecture-bound light and sparse depth-layered dust; no idle camera travel. */
body.exchange-world .ew-depth-moving>.ew-depth-air{display:block!important;opacity:.55}
.ew-depth-air>i{opacity:0;box-shadow:0 0 7px 1px #e8c87a66;animation-duration:var(--dust-time)}
html.exchangeReducedUI .ew-depth-air{display:none!important}
@media(prefers-reduced-motion:reduce){body.exchange-world .ew-depth-moving>.ew-depth-air{display:none!important}}
