/* The drift is local ground at z4: below wildlife (5) and travellers (7). */
.journey-storm{position:absolute;inset:0;z-index:4;pointer-events:none;isolation:isolate;contain:layout style}
.journey-storm[hidden]{display:none!important}
.journey-storm-ground{position:absolute;inset:0;pointer-events:none;mask-image:var(--storm-road-mask,none);mask-size:100% 100%;mask-repeat:no-repeat;mask-position:0 0;-webkit-mask-image:var(--storm-road-mask,none);-webkit-mask-size:100% 100%;-webkit-mask-repeat:no-repeat;-webkit-mask-position:0 0}
.journey-storm-band{position:absolute;inset:0;pointer-events:none}
.journey-storm-drift{position:absolute;width:12%;aspect-ratio:3;transform:translate(-50%,-50%);overflow:hidden;filter:drop-shadow(0 2px 2px #284f672b);pointer-events:none}
.journey-storm[data-storm-phase=blocked] .journey-storm-drift{animation:journey-storm-build 3s ease-out both}
.journey-storm-band{background-image:url('assets/storm-drift-v97.webp'),radial-gradient(ellipse at 45% 63%,#f9fcff 24%,#e1edf7 52%,#b8cedd9e 65%,transparent 72%);background-size:contain;background-repeat:no-repeat;background-position:center;clip-path:polygon(0 var(--storm-band-start),100% var(--storm-band-start),100% var(--storm-band-end),0 var(--storm-band-end));opacity:1}
.journey-storm-band[data-cleared=true]{opacity:0;visibility:hidden}
.journey-storm-marker{position:absolute;left:50%;top:55%;transform:translate(-50%,-50%);width:48px!important;height:48px!important;min-width:48px;min-height:48px;padding:0!important;border:2px solid #f7fbff!important;border-radius:50%!important;background:#37586be8!important;color:#fff9da!important;box-shadow:0 2px 10px #1b35484d!important;font:700 25px/1 system-ui!important;pointer-events:auto;cursor:pointer;touch-action:manipulation}
.journey-storm-marker:focus-visible{outline:3px solid #f6c96f;outline-offset:4px}
.journey-storm[data-storm-phase=cleared] .journey-storm-marker{background:#476951e8!important}
.journey-storm-flakes{position:absolute;inset:0;overflow:hidden;pointer-events:none;mask-image:radial-gradient(ellipse,#000 45%,transparent 74%)}
.journey-storm-flakes i{position:absolute;top:-12%;width:3px;height:3px;border-radius:50%;background:#ffffffd9;animation:journey-storm-fall var(--storm-duration,7s) linear var(--storm-delay,0s) infinite;pointer-events:none}
.journey-storm-dialog{width:min(570px,calc(100% - 20px));max-height:calc(var(--winter-ui-viewport-height,100dvh) - 20px)}
.journey-storm-dialog .winter-panel-body{padding:14px;max-height:calc(var(--winter-ui-viewport-height,100dvh) - 104px);overflow:auto;overscroll-behavior:contain}
.journey-storm-panel{min-width:0;font:15px/1.5 system-ui;color:#254c50;overflow-wrap:anywhere}
.journey-storm-panel [hidden]{display:none!important}
.journey-storm-panel :is(h3,p){margin:10px 0}
.journey-storm-panel h3{font-size:18px;line-height:1.35}
.journey-storm-stage{position:relative;height:clamp(120px,23vh,190px);overflow:hidden;border:1px solid #d5e2e6;border-radius:15px;background:linear-gradient(180deg,#c6dfe9,#ecf4f6 58%,#dce8ee 65%,#edf5f6 84%);isolation:isolate}
.journey-storm-stage::before{content:'';position:absolute;inset:0;background:linear-gradient(158deg,transparent 39%,#fff7 40%,transparent 42%,transparent 61%,#fff5 62%,transparent 64%);background-size:180% 100%;animation:journey-storm-wind 8s ease-in-out infinite alternate;pointer-events:none}
.journey-storm-panel-snow{position:absolute;inset:30% 8% 8%;filter:drop-shadow(0 3px 4px #46607530)}
.journey-storm-panel-snow .journey-storm-band{background-size:contain;background-image:url('assets/storm-drift-v97.webp'),radial-gradient(ellipse,#fbfdff 32%,#d6e6f2 65%,transparent 73%)}
.journey-storm-stage[data-phase=passed] .journey-storm-band{visibility:hidden;opacity:0}
.journey-storm-shovel,.journey-storm-powder{position:absolute;pointer-events:none;opacity:0;object-fit:contain;z-index:2}
.journey-storm-shovel{width:30%;height:72%;left:4%;top:var(--storm-sweep-y,13%);transform-origin:30% 80%;transform:translate3d(0,0,0) rotate(-28deg)}
.journey-storm-powder{width:45%;height:60%;left:43%;top:var(--storm-sweep-y,13%)}
.journey-storm-stage.is-sweeping .journey-storm-shovel{animation:journey-storm-shovel .72s cubic-bezier(.3,.05,.25,1) both}
.journey-storm-stage.is-sweeping .journey-storm-powder{animation:journey-storm-puff .8s ease-out both}
.journey-storm-tools{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:12px 0}
.journey-storm-panel button{box-sizing:border-box;min-width:48px;min-height:48px;max-width:100%;padding:10px 12px;border:1px solid #9cb5ba;border-radius:11px;background:#fbf9ef;color:#294b4b;font:600 14px/1.35 system-ui;white-space:normal;cursor:pointer;touch-action:manipulation}
.journey-storm-panel button:disabled{opacity:.55;cursor:default}
.journey-storm-panel button:focus-visible{outline:3px solid #a56f25;outline-offset:3px}
.journey-storm-tool{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;padding:8px 5px!important}
.journey-storm-tool img{width:64px;height:64px;max-width:100%;object-fit:contain;pointer-events:none}
.journey-storm-tool span{overflow-wrap:anywhere}
.journey-storm-clear-controls{display:grid;gap:8px;margin:12px 0}
.journey-storm-clear-controls button{width:100%;min-height:52px;background:#eaf3ee;text-align:left;touch-action:pan-y}
.journey-storm-clear-controls button[data-cleared=true]{background:#f3f7ef;border-color:#c2d4bb;opacity:.8}
.journey-storm-progress{font-size:13px;font-weight:700;color:#416850}
.journey-storm-status{min-height:1.5em;padding:9px 10px;border-radius:9px;background:#eaf0ee;font-size:13px}
.journey-storm-status.is-error{background:#fff1dc;color:#754c27}
.journey-storm-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.journey-storm-actions button{flex:1 1 150px}
.journey-storm[data-calm=true] .journey-storm-flakes,.journey-storm-panel[data-calm=true] .journey-storm-flakes{visibility:hidden}
.journey-storm[data-paused=true] *,.journey-storm[data-calm=true] *,.journey-storm-panel[data-paused=true] *,.journey-storm-panel[data-calm=true] *,.journey-storm-panel[data-calm=true] .journey-storm-stage::before{animation-play-state:paused!important}
.journey-storm-panel[data-calm=true] :is(.journey-storm-shovel,.journey-storm-powder){display:none}
@keyframes journey-storm-fall{0%{transform:translate3d(-10px,0,0);opacity:0}12%{opacity:.8}85%{opacity:.75}100%{transform:translate3d(30px,210px,0);opacity:0}}
@keyframes journey-storm-wind{from{transform:translateX(-6%);opacity:.25}to{transform:translateX(8%);opacity:.7}}
@keyframes journey-storm-build{from{opacity:.15;clip-path:inset(45% 0 0)}to{opacity:1;clip-path:inset(0)}}
@keyframes journey-storm-shovel{0%{opacity:0;transform:translate3d(-16%,0,0) rotate(-35deg)}15%{opacity:1}60%{opacity:1;transform:translate3d(175%,-8%,0) rotate(8deg)}100%{opacity:0;transform:translate3d(200%,-25%,0) rotate(18deg)}}
@keyframes journey-storm-puff{0%,25%{opacity:0;transform:translate3d(-10%,7%,0) scale(.5)}42%{opacity:.85}100%{opacity:0;transform:translate3d(37%,-20%,0) scale(1.3)}}
@media(max-width:380px){.journey-storm-dialog .winter-panel-body{padding:11px}.journey-storm-panel{font-size:14px}.journey-storm-tool img{width:54px;height:54px}.journey-storm-panel button{font-size:13px;padding:9px}.journey-storm-tools{gap:6px}}
@media(max-height:480px){.journey-storm-stage{height:112px}}
@media(prefers-reduced-motion:reduce){.journey-storm-flakes{display:none}.journey-storm *,.journey-storm-panel *,.journey-storm-stage::before{animation:none!important}.journey-storm-shovel,.journey-storm-powder{display:none}}

/* V107: short, local gust episode; never a fullscreen interaction barrier. */
.journey-storm-weather{position:absolute;width:27%;height:15%;transform:translate(-50%,-50%);opacity:var(--storm-strength,0);pointer-events:none;overflow:hidden;mask-image:radial-gradient(ellipse,#000 22%,transparent 73%)}
.journey-storm-weather::before,.journey-storm-weather::after{content:'';position:absolute;inset:-20%;background:repeating-linear-gradient(165deg,transparent 0 17%,#e8f5ff44 18%,transparent 19% 36%);animation:journey-storm-gust 3.6s ease-in-out infinite}
.journey-storm-weather::after{animation-delay:-1.8s;opacity:.45;transform:scale(.9)}
.journey-storm-weather .journey-storm-flakes{mask-image:none}
.journey-storm[data-storm-phase=blocked] .journey-storm-drift{animation-duration:8s}
.journey-storm[data-calm=true] .journey-storm-weather{display:none}
@keyframes journey-storm-gust{0%{transform:translate3d(-16%,5%,0);opacity:0}35%{opacity:.45}100%{transform:translate3d(17%,-5%,0);opacity:0}}
@media(prefers-reduced-motion:reduce){.journey-storm-weather{display:none}}

/* V111 inline map event controls live in viewport space, never in a dialog. */
.map-event-layer{position:absolute;inset:0;z-index:6;pointer-events:none;isolation:isolate}
.map-event-layer[hidden],.map-event-controls[hidden]{display:none!important}
.map-event-scene{position:absolute;width:26%;min-width:calc(168px * var(--world-ui-scale,1));max-width:calc(min(340px,88vw) * var(--world-ui-scale,1));aspect-ratio:2.4;transform:translate(-50%,-70%);pointer-events:none;--map-event-progress:1}
.map-event-storm .map-event-scene{max-width:calc(min(210px,88vw) * var(--world-ui-scale,1));transform:translate(-50%,10%)}
.map-event-ground{position:absolute;inset:25% 0 0;transform-origin:center bottom;opacity:var(--map-event-progress,1);transform:scaleY(calc(.1 + var(--map-event-progress,1)*.9));pointer-events:none;filter:drop-shadow(0 3px 3px #284f674d)}
.map-event-snow-segment{position:absolute;left:calc(var(--map-event-segment)*33.333%);top:0;width:33.334%!important;height:100%!important;min-width:0!important;min-height:0!important;padding:0!important;border:0!important;border-radius:0!important;background:url('assets/storm-drift-v97.webp') center/300% 100% no-repeat!important;box-shadow:none!important;color:#274c5b!important;pointer-events:auto;touch-action:none;cursor:grab;transition:opacity .25s ease;appearance:none}
.map-event-snow-segment:nth-child(1){background-position:0 50%!important}.map-event-snow-segment:nth-child(2){background-position:50% 50%!important}.map-event-snow-segment:nth-child(3){background-position:100% 50%!important}
.map-event-snow-segment span{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(var(--world-ui-scale,1));display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:#315d6adb;color:#fff9de;font:700 16px/1 system-ui}
.map-event-snow-segment:disabled{cursor:default;opacity:1}.map-event-snow-segment:disabled span{display:none}.map-event-snow-segment[data-cleared=true]{opacity:0;visibility:hidden;pointer-events:none}
.map-event-snow-segment:focus-visible{outline:calc(3px * var(--world-ui-scale,1)) solid #ffd17a!important;outline-offset:calc(3px * var(--world-ui-scale,1))}
.map-event-marker{position:absolute;transform:translate(-50%,-50%) scale(var(--world-ui-scale,1));width:48px!important;height:48px!important;min-width:48px!important;min-height:48px!important;padding:0!important;border:2px solid #e3eddd!important;border-radius:50%!important;background:#315b66e8!important;color:#fff2c4!important;box-shadow:0 2px 8px #193a4a55!important;font:700 24px/1 system-ui!important;pointer-events:auto;touch-action:manipulation;cursor:pointer}
.map-event-layer[data-active=true] .map-event-marker{visibility:hidden;pointer-events:none}
.map-event-layer[data-phase=cleared] .map-event-marker,.map-event-layer[data-phase=returned] .map-event-marker{background:#38664c!important}
.map-event-weather{position:absolute;inset:-90% -40% -20%;opacity:calc(var(--map-event-progress,1)*.75);pointer-events:none;overflow:hidden;mask-image:radial-gradient(ellipse,#000 20%,transparent 72%)}
.map-event-weather::before,.map-event-weather::after{content:'';position:absolute;inset:-30%;background:repeating-linear-gradient(165deg,transparent 0 15%,#effaff9e 16%,transparent 17% 31%);animation:map-event-wind 2.4s linear infinite}
.map-event-weather::after{animation-delay:-1.2s;opacity:.5}
.map-event-layer:not([data-active=true]) .map-event-weather,.map-event-layer[data-phase=cleared] .map-event-weather,.map-event-layer[data-phase=returned] .map-event-weather{display:none}
.map-event-powder,.map-event-shovel{position:absolute;pointer-events:none;opacity:0;z-index:6;object-fit:contain}
.map-event-shovel{width:32%;height:150%;top:-35%;left:var(--map-event-sweep-x,0%);transform-origin:20% 80%}
.map-event-powder{width:75%;height:140%;top:-65%;left:var(--map-event-sweep-x,0%)}
.map-event-scene.is-sweeping .map-event-shovel{animation:map-event-shovel .85s ease-out both}
.map-event-scene.is-sweeping .map-event-powder{animation:map-event-powder .9s ease-out both}
.map-event-scene[data-measured=false][data-revealed=true] .map-event-ground{transition:transform .8s ease-out,opacity .8s ease-out}
.map-event-road-tools{position:absolute;inset:105% 0 auto;pointer-events:none}
.map-event-road-tools[hidden]{display:none!important}
.map-event-road-tool{position:absolute;top:0;transform:translate(-50%,-50%) scale(var(--world-ui-scale,1));transform-origin:50% 50%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;width:58px!important;min-width:48px!important;min-height:48px!important;padding:3px!important;border:1px solid #c9d9cc!important;border-radius:9px!important;background:#f7f5e7e8!important;box-shadow:0 2px 5px #21435345!important;color:#224854!important;pointer-events:auto;touch-action:manipulation;cursor:pointer;font:600 10px/1.15 system-ui!important}
.map-event-road-tool img{width:38px;height:38px;object-fit:contain;pointer-events:none}.map-event-road-tool span{width:100%;overflow-wrap:anywhere}.map-event-road-tool:disabled{opacity:.55;cursor:default}.map-event-road-tool:focus-visible{outline:3px solid #e8b94d;outline-offset:3px}
.map-event-layer[data-paused=true] *,.map-event-layer[data-calm=true] *,.map-event-scene[data-voice-paused=true] *{animation-play-state:paused!important}
.map-event-layer[data-calm=true] .map-event-weather{display:none}
.map-event-layer[data-calm=true] *,.map-event-layer[data-paused=true] *{transition:none!important}
.map-event-layer[data-calm=true] *{animation:none!important}
.map-event-layer[data-calm=true] .map-event-ground{opacity:1!important;transform:none!important}
.map-event-layer[data-calm=true] :is(.map-event-shovel,.map-event-powder){display:none}
.map-event-controls{position:absolute;z-index:36;inset:auto 10px 12px;max-width:640px;margin:auto;padding:10px 12px;border:1px solid #b7ccbb;border-radius:16px;background:#173e46f5;color:#fff9e5;box-shadow:0 4px 16px #122d3f42;font:14px/1.35 system-ui;pointer-events:auto;max-height:45%;overflow:auto;overscroll-behavior:contain}
.map-event-controls h2{margin:0 0 6px;font:700 17px/1.3 system-ui}.map-event-controls p{margin:5px 0}.map-event-controls .map-event-voice-source{font-size:11px;color:#d6dfcf}.map-event-controls .map-event-status{font-size:12px;color:#d4e4d7}.map-event-controls .map-event-status.is-error{color:#ffe0a8}.map-event-controls .map-event-caption:empty{display:none}
.map-event-actions,.map-event-tools{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px}
.map-event-controls button{min-height:44px;min-width:44px;padding:8px 12px;border:1px solid #98bdb7;border-radius:10px;background:#edf2df;color:#183b3d;font:650 14px/1.3 system-ui;cursor:pointer;touch-action:manipulation}
.map-event-controls button:disabled{opacity:.55;cursor:default}.map-event-controls button:focus-visible,.map-event-marker:focus-visible{outline:3px solid #ffd17a;outline-offset:3px}.map-event-controls [hidden]{display:none!important}
.map-event-controls[data-paused=true]{opacity:.85}
.map-event-controls[data-compact=true]:not([data-expanded=true]){padding-block:7px;max-height:30%}
.map-event-controls[data-compact=true]:not([data-expanded=true]) h2{display:none}
.map-event-controls[data-compact=true]:not([data-expanded=true]) .map-event-hint{margin-block:1px;font-size:13px}
.map-event-controls[data-compact=true]:not([data-expanded=true]) .map-event-status{margin-block:3px;font-size:11px}
.map-event-controls[data-compact=true]:not([data-expanded=true]) .map-event-actions{margin-top:4px}
.map-event-controls[data-expanded=true] .map-event-caption{max-height:6em;overflow:auto}
@keyframes map-event-wind{from{transform:translate3d(-18%,10%,0)}to{transform:translate3d(18%,-10%,0)}}
@keyframes map-event-shovel{0%{opacity:0;transform:rotate(-35deg) translateX(-20%)}15%{opacity:1}80%{opacity:1;transform:rotate(15deg) translateX(130%)}100%{opacity:0;transform:rotate(22deg) translateX(150%)}}
@keyframes map-event-powder{0%,20%{opacity:0;transform:scale(.3) translateX(0)}40%{opacity:.9}100%{opacity:0;transform:scale(1.1) translate(70%,-25%)}}
body.map-journey #gameView .journey-actor.journey-event-reach{transform-origin:50% 90%;animation:journey-event-reach .85s ease-in-out both}
body.map-journey #gameView .journey-actor.journey-event-give{transform-origin:50% 90%;animation:journey-event-give 1s ease-in-out both}
body.map-journey #gameView [data-map-event-calm=true] .journey-actor:is(.journey-event-reach,.journey-event-give){animation:none!important}
@keyframes journey-event-reach{0%,100%{transform:translate(-50%,-100%) rotate(0) scaleY(1)}35%,65%{transform:translate(-47%,-94%) rotate(9deg) scaleY(.9)}}
@keyframes journey-event-give{0%,100%{transform:translate(-50%,-100%) rotate(0)}45%{transform:translate(-44%,-96%) rotate(7deg)}70%{transform:translate(-47%,-98%) rotate(3deg)}}
@media(max-width:380px){.map-event-controls{inset-inline:6px;padding:8px}.map-event-controls h2{font-size:15px}.map-event-controls{font-size:13px}.map-event-controls button{font-size:13px;padding:7px 9px}}
@media(max-height:480px){.map-event-controls{max-height:42%;inset-block-end:6px}.map-event-caption{max-height:3.8em;overflow:auto}}
@media(prefers-reduced-motion:reduce){.map-event-layer *{animation:none!important;transition:none!important}.map-event-weather{display:none}.map-event-shovel,.map-event-powder{display:none}body.map-journey #gameView .journey-actor:is(.journey-event-reach,.journey-event-give){animation:none!important}}
