/* A single camera moves the whole bank; the vault never leaves its architecture. */
.bank-camera-world{position:absolute;inset:0;isolation:isolate;transform-origin:50% 13%;background:#233744}
.bank-departing .bank-camera-world{animation:bank-camera-in 2.1s cubic-bezier(.55,.03,.8,.6) both}
.bank-departing .bank-camera-world :is(.bank-daily,.bank-wallet,.bank-products,.bank-service){animation:bank-interface-out .5s both}
.bank-departing .bank-camera-world .bank-vault{animation:bank-wheel .45s linear infinite!important}
@keyframes bank-camera-in{0%,12%{transform:translateY(0) scale(1)}55%{transform:translateY(33%) scale(2.8)}100%{transform:translateY(36%) scale(6)}}
@keyframes bank-interface-out{to{opacity:0}}
body #modal.bank-travelling :is(.modal-head,#menu-tabs){visibility:hidden!important;pointer-events:none}
#modal[data-screen=store] .bank-journey{position:absolute;inset:0;z-index:30;overflow:hidden;isolation:isolate;background:#080f19;touch-action:none;outline:none}
#modal[data-screen=store] .bank-journey[data-phase=opening],#modal[data-screen=store] .bank-journey[data-phase=home]{background:transparent}
.mine-ride{position:absolute;inset:0;background:radial-gradient(ellipse at 50% 46%,#816a46 0,#203542 8%,#101c29 40%,#080d16 95%);overflow:hidden;opacity:0;transition:opacity .7s}
.bank-journey:is([data-phase=travel],[data-phase=return]) .mine-ride{opacity:1}
.cart-rim{position:absolute;bottom:-5%;left:19%;width:62%;height:14%;border:8px solid #8a6947;border-radius:50% 50% 0 0;background:linear-gradient(#293c46,#0d1823);box-shadow:0 -4px 0 #ddc798,inset 0 5px 0 #1b2126;animation:cart-rattle .3s ease-in-out infinite alternate;pointer-events:none}
.cart-rim i{position:absolute;top:5%;left:12%;width:20%;height:50%;border:5px solid #909b99;border-bottom:0;border-radius:10px 10px 0 0;rotate:-6deg}.cart-rim i:last-child{left:auto;right:12%;rotate:6deg}
@keyframes cart-rattle{to{transform:translateY(2px) rotate(.15deg)}}
.treasury{position:absolute;inset:0;display:grid;place-items:center;background:radial-gradient(ellipse,#53616a,#111e2b 65%,#080e18);opacity:0;visibility:hidden;transition:opacity .8s}
.bank-journey:is([data-phase=arrive],[data-phase=collect]) .treasury{opacity:1;visibility:visible}
.vault-stage{position:relative;width:min(94vw,calc((100dvh - 170px)*1.5));aspect-ratio:3/2;max-width:97%;flex:none}
.treasury-art{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.treasury-door{transform-box:fill-box;transform-origin:left center;transition:transform 1.4s cubic-bezier(.22,.7,.2,1),opacity 1.4s}
.bank-journey[data-phase=collect] .treasury-door{transform:perspective(1200px) rotateY(-105deg);opacity:0}
.treasury-wheel{transform-origin:600px 405px;animation:vault-unlock 1.8s ease-in-out both}
.bank-journey:not([data-phase=arrive]) .treasury-wheel{animation:none}
@keyframes vault-unlock{to{transform:rotate(540deg)}}
.treasury-coins{position:absolute;inset:0;opacity:0;transition:opacity .5s .7s;pointer-events:none}
.bank-journey[data-phase=collect] .treasury-coins{opacity:1;pointer-events:auto}
#modal[data-screen=store] .bank-journey .journey-coin{position:absolute;left:var(--x);top:var(--y);width:7%;aspect-ratio:1;height:auto;min-height:0;margin:0;padding:0;border:2px solid #fff2b0;border-radius:50%;display:grid;place-items:center;background:linear-gradient(135deg,#fff1ac,#dca33e);box-shadow:0 4px 0 #986625,0 0 16px #ffdc7344;cursor:pointer;transition:opacity .25s,scale .25s;touch-action:none}
#modal[data-screen=store] .bank-journey .journey-coin svg{width:87%;height:87%;max-width:none;max-height:none}
#modal[data-screen=store] .bank-journey .journey-coin.collected{opacity:0;scale:.2;pointer-events:none}
#modal[data-screen=store] .bank-journey .journey-coin:focus-visible{outline:3px solid #fff;outline-offset:3px}
#modal[data-screen=store] .journey-count{position:absolute;bottom:2%;left:50%;transform:translateX(-50%);font:800 15px/1.2 'Trebuchet MS';padding:5px 14px;color:#ffe9ac;background:#0e1c29dd;border:1px solid #9e8658;border-radius:20px;opacity:0;pointer-events:none}
.bank-journey[data-phase=collect] .journey-count{opacity:1!important}
.journey-iris{position:absolute;inset:0;pointer-events:none;background:#080e18;opacity:0}
.bank-journey[data-phase=opening] .journey-iris{animation:iris-in 2.1s both}.bank-journey[data-phase=home] .journey-iris{animation:iris-out 1.2s both}
@keyframes iris-in{0%,48%{opacity:0}100%{opacity:1}}@keyframes iris-out{from{opacity:1}to{opacity:0}}
.bank-journey[data-phase=home] :is(.mine-ride,.treasury){display:none}
.bank-journey[data-motion=false] *{animation:none!important;transition:none!important}.bank-camera-world:has(~.bank-journey[data-motion=false]){animation:none!important}
@media(prefers-reduced-motion:reduce){.bank-camera-world,.bank-journey *{animation:none!important;transition:none!important}}
@media(max-height:600px){.vault-stage{width:min(94vw,calc((100dvh - 105px)*1.5))}.cart-rim{border-width:5px}.cart-rim i{border-width:3px}.royal-glimpse{border-width:2px}.royal-glimpse span{font-size:7px;padding:3px}.royal-glimpse small{font-size:7px}#modal[data-screen=store] .journey-count{font-size:11px;padding:3px 10px}}
body #modal.bank-travelling[data-screen=store]{display:block!important;padding:0!important;gap:0!important;background:#080f19}
body #modal.bank-travelling[data-screen=store] #modal-body{position:absolute;inset:0;width:100%;height:100%;max-width:none;margin:0;padding:0!important;box-sizing:border-box}
#modal.bank-travelling[data-screen=store] .bank{border:0;border-radius:0}
#modal.bank-travelling .vault-stage{width:min(96vw,calc((100dvh - 25px)*1.5))}

.cavern-camera{position:absolute;inset:0}
.cavern-art{width:100%;height:100%;display:block}
.cavern-vignette{position:absolute;inset:0;pointer-events:none;box-shadow:inset 0 0 55px #070e1d88}
.bank-journey:not([data-phase=travel]):not([data-phase=return]) .cart-rim{animation-play-state:paused}
.loot-coins{pointer-events:none!important}
.loot-coin{position:absolute;width:4.8%;aspect-ratio:1;transform:rotate(var(--tilt));filter:drop-shadow(0 3px 1px #6f481a);pointer-events:none}
.loot-coin svg{display:block;width:100%;height:100%}
#modal[data-screen=store] .loot-target{position:absolute;width:18%;height:20%;transform:translate(-38%,-40%);background:transparent;border:0;padding:0;box-shadow:none;min-height:0;pointer-events:auto;cursor:crosshair;border-radius:50%}
#modal[data-screen=store] .loot-target:focus-visible{outline:2px dashed #ffe9a3;outline-offset:2px}
#modal[data-screen=store] .loot-target:disabled{pointer-events:none;opacity:0}
.loot-tongue{position:absolute;inset:0;width:100%;height:100%;overflow:hidden;pointer-events:none;opacity:0}
.loot-tongue path{fill:none;stroke-linecap:round;stroke-dasharray:1100;stroke-dashoffset:1100}
.tongue-shadow{stroke:#571b3b;stroke-width:35}.tongue-body{stroke:#f486ac;stroke-width:26}.tongue-shine{stroke:#ffd1db;stroke-width:7}
.tongue-tip{fill:#f69bb5;stroke:#ffe2dc;stroke-width:4;transform-box:view-box}
.loot-ring{fill:none;stroke:#ffdf9e;stroke-width:4;stroke-dasharray:7 6;transform-box:view-box;opacity:0}
.loot-ring.sweet{stroke:#fff5a4;stroke-width:12;stroke-dasharray:none;filter:drop-shadow(0 0 10px #ffc645)}
.loot-sparks{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.loot-sparks i{position:absolute;width:8px;height:8px;background:#ffed9e;clip-path:polygon(50% 0,65% 35%,100% 50%,65% 65%,50% 100%,35% 65%,0 50%,35% 35%);opacity:0}
.loot-hint{position:absolute;left:15%;right:15%;top:14%;text-align:center;color:#fff2c5;font:800 clamp(11px,1.5vw,20px)/1.3 'Trebuchet MS';text-shadow:0 2px 4px #000,0 0 12px #000;pointer-events:none;opacity:0}
.bank-journey[data-phase=collect] .loot-hint{opacity:1}
.bank-journey[data-phase=collect]:not(.loot-ready) .loot-coins{opacity:0!important}
.loot-coins{transition:none!important}
.loot-coin{will-change:transform,opacity}
.loot-coin img{display:block;width:100%;height:100%;pointer-events:none}
/* Collection hit areas must never inherit the bank's disabled purchase styling. */
#modal[data-screen=store] .bank .loot-target,
#modal[data-screen=store] .bank .loot-target:disabled{background:transparent!important;border:0!important;box-shadow:none!important;transform:translate(-38%,-40%)!important;filter:none!important}
#modal[data-screen=store] .bank .loot-target:disabled{visibility:hidden;opacity:0!important}
.route-layer{position:absolute;inset:0;pointer-events:none}
.route-object{position:absolute;left:0;top:0;transform-origin:0 0;max-width:none!important}
.route-road{position:absolute;inset:0;width:100%;height:100%;max-width:none;max-height:none;overflow:hidden}
.bank-journey[data-phase=collect] .treasury-wheel{transform:rotate(540deg)}
.bank-journey[data-phase=collect] .treasury-door{transform:perspective(1200px) rotateY(-100deg);opacity:0}
/* The original hall is fully covered during the ride; suspend its hidden motion. */
.bank-camera-world:has(~.bank-journey:not([data-phase=opening]):not([data-phase=home])) *{animation-play-state:paused!important}
.bank-journey .mine-ride{contain:strict}
/* The animated SVG stays in normal paint flow: no forced compositor texture. */
