/* A lightweight, opaque cover, available before any game module runs. */
html.booting,html.booting body{overflow:hidden}
html.booting #shell{visibility:hidden!important;pointer-events:none}
html.booting .journey-screen{pointer-events:none}
.game-loader{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;min-height:100svh;padding:24px 20px;color:#fff;background:#10245e url('./assets/art/crystal-base-v27.webp') center/cover no-repeat;isolation:isolate;overflow:auto;opacity:1;transition:opacity .28s ease;overscroll-behavior:contain}
.game-loader:before{content:'';position:absolute;inset:0;z-index:-1;background:radial-gradient(ellipse at 50% 45%,#103a9a55,#07194cb8 77%)}
.game-loader[data-state=ready]{opacity:0;pointer-events:none}
.loader-content{width:min(480px,100%);text-align:center;position:relative;text-shadow:0 3px 0 #06183b80}
.loader-brand{display:flex;flex-direction:column;align-items:center;line-height:.98}
.loader-brand>span{font-size:clamp(20px,3vw,27px);color:#d5faff}
.loader-brand>strong{font-family:'Avenir Next','Trebuchet MS',system-ui,sans-serif;font-weight:900;font-size:clamp(48px,8vw,76px);letter-spacing:-2px;color:#ffdb31;text-shadow:0 5px #9c5b13,0 8px 20px #05194e}
.loader-emblem{position:relative;width:210px;height:210px;margin:20px auto 6px;display:grid;place-items:center}
.loader-emblem:before{content:'';position:absolute;inset:7px;border-radius:50%;background:radial-gradient(circle,#06e4ff88,transparent 69%)}
.loader-pick{display:block;position:relative;width:188px;height:188px;background:url('./assets/art/menu-treasures-v19.png') 100% 100%/300% 300% no-repeat;filter:drop-shadow(0 12px 5px #04153d99);transform-origin:45% 80%;animation:loader-dig 1.7s ease-in-out infinite}
.loader-spark{position:absolute;width:9px;height:9px;background:#ffdd38;box-shadow:0 0 18px #ffbb0c;border-radius:2px;transform:rotate(45deg);animation:loader-spark 1.7s ease-out infinite}
.loader-spark:nth-of-type(2){left:26px;top:65px;animation-delay:.15s}.loader-spark:nth-of-type(3){right:11px;top:43px;animation-delay:.5s}.loader-spark:nth-of-type(4){right:34px;bottom:33px;animation-delay:.9s}.loader-spark:nth-of-type(5){left:33px;bottom:18px;animation-delay:1.2s;width:6px;height:6px}
.loader-content h1{font-family:'Avenir Next','Trebuchet MS',system-ui,sans-serif;font-size:clamp(27px,4.4vw,39px);font-weight:900;line-height:1.12;margin:0 0 9px;color:#fff5cc}
.loader-status{font-size:15px;line-height:1.45;margin:0 auto 20px;min-height:22px;color:#d2f5ff}
.loader-track{height:25px;padding:4px;border:2px solid #74dfff;border-radius:20px;background:#041b51;box-shadow:0 5px #041332,inset 0 2px 6px #0007;text-align:left;overflow:hidden}
.loader-track>span{display:block;width:var(--load-progress,3%);height:100%;border-radius:12px;background:linear-gradient(#fff09c,#ffd21c 47%,#ff9c0a);box-shadow:inset 0 2px #fff6a4,0 0 14px #ffcd1f80;transition:width .25s ease}
.loader-steps{display:flex;justify-content:space-between;gap:8px;padding:0;margin:14px 0 24px;list-style:none;font-size:11px;color:#a9c2e8;text-shadow:none}
.loader-steps li{display:flex;align-items:center;gap:6px}.loader-steps li:before{content:'';width:8px;height:8px;flex-shrink:0;transform:rotate(45deg);border:1px solid #829bd0;background:#183d7a;border-radius:1px}
.loader-steps li.active{color:#fff}.loader-steps li.active:before{background:#ffca0a;border-color:#ffe777;box-shadow:0 0 12px #ffcf5380}.loader-steps li.done{color:#7dffe2}.loader-steps li.done:before{background:#44efb3;border-color:#c6ffeb}
.loader-tip{display:flex;justify-content:center;align-items:center;gap:9px;font-size:12px;line-height:1.5;color:#d3e8ff;margin:0 auto;max-width:420px;min-height:40px;text-shadow:0 2px 5px #041132}
.loader-tip>b{color:#ffdb3b;font-size:23px;flex-shrink:0}
.loader-retry{margin:8px auto 12px;border:3px solid #fff098;border-radius:17px;padding:13px 26px;box-shadow:0 5px #a46114;color:#382b13;background:linear-gradient(#ffe55c,#ffb710);font-family:'Avenir Next','Trebuchet MS',system-ui,sans-serif;font-size:21px;font-weight:850;cursor:pointer}
.loader-retry:focus-visible{outline:3px solid white;outline-offset:5px}
.game-loader [hidden]{display:none!important}
.game-loader[data-state=error] .loader-pick,.game-loader[data-state=error] .loader-spark{animation:none}
.loader-noscript{position:fixed;inset:auto 20px 20px;z-index:1001;background:#123474;border:2px solid #37cfff;color:white;border-radius:17px;padding:18px;text-align:center}
@keyframes loader-dig{0%,100%{transform:rotate(-12deg) translateY(0)}40%{transform:rotate(15deg) translateY(-5px)}58%{transform:rotate(-20deg) translateY(6px)}73%{transform:rotate(-9deg)}}
@keyframes loader-spark{0%,65%,100%{opacity:0;transform:translateY(6px) rotate(45deg) scale(.5)}20%,42%{opacity:1;transform:translateY(-9px) rotate(45deg) scale(1)}}
@media(max-height:680px){.loader-emblem{height:140px;width:160px;margin:12px auto 5px}.loader-pick{width:148px;height:148px}.loader-brand>strong{font-size:52px}.loader-content h1{font-size:29px}.loader-status{margin-bottom:14px}.loader-steps{margin-bottom:16px}}
@media(max-width:480px){.game-loader{padding:24px}.loader-emblem{margin-top:28px}.loader-content h1{font-size:30px}.loader-steps{font-size:10px;gap:5px}.loader-steps li{gap:5px}.loader-tip{font-size:12px}.loader-status{font-size:14px}}
@media(prefers-reduced-motion:reduce){.game-loader,.loader-track>span{transition:none}.loader-pick,.loader-spark{animation:none}.loader-spark{opacity:.8}}

/* The camp follows the window instead of living in a fixed 1400px column. */
@media(min-width:961px){
 .journey-screen{padding:18px clamp(24px,2.2vw,64px) 12px}
 .journey-screen[data-mode] .journey-window{width:100%;max-width:none;height:calc(100dvh - 30px)}
 .journey-screen[data-mode=home] .lobby-top{grid-template-columns:minmax(245px,1fr) auto minmax(245px,1fr)}
 .journey-screen[data-mode=home] .profile-plaque{justify-self:start;width:clamp(245px,20vw,340px)}
 .journey-screen[data-mode=home] .lobby-wallet{justify-self:end}
 .journey-screen[data-mode=home] .lobby-layout{grid-template-columns:clamp(165px,15vw,260px) minmax(0,1fr) clamp(300px,24vw,410px);grid-template-rows:minmax(0,1fr) max-content;gap:16px clamp(22px,2.5vw,52px)}
 .journey-screen[data-mode=home] .lobby-rail{grid-column:1;grid-row:1}
 .journey-screen[data-mode=home] .lobby-hero{grid-column:2;grid-row:1}
 .journey-screen[data-mode=home] .lobby-goals{grid-column:3;grid-row:1}
 .journey-screen[data-mode=home] .lobby-festival{grid-column:1/3;grid-row:2;width:min(420px,42%);min-width:310px}
 .journey-screen[data-mode=home] .lobby-launch{grid-column:3;grid-row:2}
 .journey-screen[data-mode=home] .camp-restoration{position:static;grid-column:2;grid-row:2;transform:none;align-self:end;justify-self:center;margin:0;width:auto;max-width:270px}
 .journey-screen[data-mode=home] .lobby-model{inset:40px 0 34px;max-width:840px;margin-inline:auto}
 .journey-screen[data-mode=home] .hero-customize{bottom:2px}
 .journey-screen[data-mode=home] .rail-button{min-height:clamp(76px,8.5vh,112px);padding-left:clamp(58px,5.3vw,92px)}
 .journey-screen[data-mode=home] .rail-button>.ui-art{width:clamp(58px,5.5vw,86px);height:clamp(58px,5.5vw,86px);top:50%;transform:translateY(-50%) rotate(-8deg)}
 .journey-screen[data-mode=home] .rail-button strong{font-size:clamp(15px,1.1vw,21px)}
 .journey-screen[data-mode=home] .rail-button small{font-size:clamp(10px,.75vw,13px)}
 .journey-screen[data-mode=home] .mini-mission>span{max-width:none}
 .journey-screen[data-mode=home] .hero-name h1{font-size:clamp(25px,2vw,38px)}
}
@media(min-width:961px) and (max-height:740px){
 .journey-screen[data-mode=home] .journey-window{min-height:700px}
 .journey-screen[data-mode=home] .lobby-rail{gap:12px}
 .journey-screen[data-mode=home] .rail-button{min-height:70px}
 .journey-screen[data-mode=home] .lobby-goals{display:grid;grid-template-rows:minmax(178px,1fr) minmax(172px,1fr);gap:12px;padding-top:0}
 .journey-screen[data-mode=home] .toy-missions{padding:8px 12px}
 .journey-screen[data-mode=home] .toy-missions .panel-heading strong{font-size:19px}
 .journey-screen[data-mode=home] .toy-missions .panel-heading>.ui-art{width:34px;height:34px;margin:-3px 0 -2px -5px}
 .journey-screen[data-mode=home] .toy-missions .mini-mission{padding:4px 0;font-size:11px}
 .journey-screen[data-mode=home] .toy-missions .meta-meter{height:9px;margin:2px 0}
 .journey-screen[data-mode=home] .toy-missions .panel-link{font-size:11px;padding-top:5px}
 .journey-screen[data-mode=home] .toy-adventure{min-height:0}
 .journey-screen[data-mode=home] .toy-adventure .story-art{min-height:0}
 .journey-screen[data-mode=home] .toy-adventure .story-info{padding:8px 9px 2px;gap:4px}
 .journey-screen[data-mode=home] .toy-adventure .story-info strong{font-size:19px}
}
@media(min-width:961px) and (max-width:1150px){.journey-screen[data-mode=home] .camp-restoration{justify-self:end}}
@media(min-width:601px) and (max-width:960px){
 .journey-screen[data-mode=home] .journey-window{width:100%;height:auto;min-height:calc(100dvh - 24px)}
 .journey-screen[data-mode=home] .journey-content{flex:none}
 .journey-screen[data-mode=home] .lobby-layout{height:auto;grid-template-columns:150px minmax(0,1fr);grid-template-rows:400px auto auto auto;gap:22px 20px}
 .journey-screen[data-mode=home] .lobby-rail{grid-column:1;grid-row:1}
 .journey-screen[data-mode=home] .lobby-hero{grid-column:2;grid-row:1}
 .journey-screen[data-mode=home] .lobby-model{inset:40px 0 28px}
 .journey-screen[data-mode=home] .lobby-goals{grid-column:1/-1;grid-row:2;display:grid;grid-template-columns:1fr 1fr;align-items:stretch;padding:0;gap:16px}
 .journey-screen[data-mode=home] .lobby-festival{grid-column:1;grid-row:3;width:auto;min-width:0;flex-direction:column;text-align:center;padding:12px;gap:4px}
 .journey-screen[data-mode=home] .lobby-festival b,.journey-screen[data-mode=home] .lobby-festival small{display:none}
 .journey-screen[data-mode=home] .lobby-festival strong{font-size:15px}
 .journey-screen[data-mode=home] .lobby-launch{grid-column:2;grid-row:3;align-self:stretch;justify-content:end}
 .journey-screen[data-mode=home] .camp-restoration{position:static;grid-column:1/-1;grid-row:4;transform:none;justify-self:center;margin:0;width:auto;display:flex}
 .journey-screen[data-mode=home] .camp-footer{padding-top:12px}
}
@media(max-width:600px){.journey-screen[data-mode=home] .lobby-model{left:0;right:0}}
