/* Painted places, anonymous travellers, and the same there-and-back scene everywhere. */
.world-card{margin:24px 0;padding:24px;border:1px solid var(--line);border-radius:28px;background:#fffaf5;min-width:0;scroll-margin-top:16px}
.world-heading{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap}.world-heading h2{margin:0 0 12px}.world-level{font-size:13px;color:#624579}.world-progress{width:100%;height:8px;accent-color:#9776b5;display:block;margin:10px 0}.world-progress-copy{margin:0;font-size:14px}.world-note{font-size:12px;color:var(--muted);margin:6px 0 12px}
.world-toolbar,.world-filters,.world-zoom{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.world-toolbar{justify-content:space-between}.world-toolbar button,.world-pan button{padding:7px 12px;min-height:44px;border-radius:12px;font-size:13px}.world-filters [aria-pressed=true]{background:#e8daf2;border-color:#9466bc}.world-count{font-size:12px;min-height:20px;margin:10px 0;color:var(--muted)}
.world-map{height:450px;position:relative;overflow:hidden;isolation:isolate;border-radius:22px;background:#dce9e6;border:1px solid #c3d4cd;touch-action:none;outline-offset:4px;cursor:grab}.world-map:active{cursor:grabbing}.world-map:focus-visible{outline:3px solid #9466bc}.world-content{position:absolute;inset:0;transform-origin:50% 50%;will-change:transform}.world-land{position:absolute;width:100%;height:100%;pointer-events:none}.world-land path{stroke:#ffffff70;stroke-width:.3}.world-route{fill:none;stroke:#674486;stroke-width:.8;stroke-dasharray:2 1;stroke-linecap:round}.world-trails{fill:none;stroke:#9c9479;stroke-width:.5;stroke-dasharray:1 1}
.world-region{position:absolute;translate:-50% -50%;background:transparent;border:0;padding:0;min-height:44px;display:flex;flex-direction:column;align-items:center;gap:2px;z-index:2;max-width:120px}.world-region img{width:85px;height:70px;object-fit:contain;filter:drop-shadow(0 3px 2px #30352e25)}.world-region span{display:flex;align-items:center;justify-content:center;gap:3px;font-size:12px;line-height:1.2;background:#fffaf5ed;padding:4px 7px;border-radius:8px;max-width:120px}.world-region[aria-pressed=true] span{outline:2px solid #9b74b8}.world-region[data-region=office]{pointer-events:none}.world-region[data-region=office] img{width:74px;height:72px}.world-status-icon{flex:none;width:17px;height:17px;padding:2px;border-radius:50%;background:#fffaf5;box-shadow:0 1px 4px #34234535;fill:none;stroke:#725e7d;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}.world-status-here{background:#76539a;stroke:#fffaf5}
.world-marker{position:absolute;translate:-50% -50%;padding:0;border:2px solid #726780;border-radius:50%;background:#fffaf5;min-height:44px;width:44px;height:44px;z-index:4;display:grid;place-items:center;box-shadow:0 2px 5px #49344730}.world-marker .monster-art{width:45px;height:45px;pointer-events:none}.world-marker[data-mine=true]{border-color:#7343a1;box-shadow:0 0 0 3px #d4b2ed}.world-marker[data-friend=true]{border-color:#4d7a5a;border-style:dashed}.world-marker[aria-pressed=true]{outline:3px solid #bc8bd0;outline-offset:4px}.world-marker small{position:absolute;top:-10px;right:-9px;border-radius:12px;background:#fffaf5;color:#4d664b;font-size:10px;padding:1px 4px;border:1px solid #9db39e}.world-cluster{font-weight:700;background:#e9daf1;color:#61477b;border-color:#9376a8}.world-cluster small{background:#fffaf5;color:#61477b;min-width:24px}.world-pan{display:flex;gap:5px;flex-wrap:wrap;margin:8px 0}.world-selection{border-top:1px solid var(--line);padding-top:15px;display:flex;justify-content:space-between;gap:12px;align-items:center;flex-wrap:wrap}.world-selection p{font-size:13px;margin:4px 0 0}.world-selection strong{font-size:16px}.world-detail{font-size:13px;margin:14px 0;min-height:40px}.world-detail h3{font-size:22px}.world-detail p{margin:5px 0}.world-detail .journey-road{margin-top:12px}.world-error{color:#873e50}.world-cluster-list{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}.world-cluster-list button{padding:6px 10px;font-size:12px;min-height:44px}
.world-journey.journey-road{height:220px;background:#e4e8d6;--walker:128px}.world-journey .world-journey-backdrop{position:absolute;inset:0;width:100%!important;height:100%!important;max-width:none!important;object-fit:cover;object-position:center 82%;margin:0!important;border-radius:0!important;transition:opacity .4s;z-index:0}.world-ground{position:absolute;inset:77% 0 0;background:#a9c18490}.world-journey[data-terrain=forest] .world-ground{background:#69886188}.world-journey[data-terrain=coast] .world-ground{background:#d8c59b99}.world-journey[data-terrain=ember] .world-ground{background:#b77a5799}.world-journey:is([data-terrain=snow],[data-terrain=blizzard]) .world-ground{background:#edf3f6bb}.world-journey .journey-path{bottom:24px;background:#e5d2afa3;border-color:#bba47b70}.world-journey .journey-walker{left:calc(43% - var(--walker)/2);bottom:20px;transition:none}.world-journey[data-direction=home] .journey-walker{scale:-1 1}.world-journey[data-courier=diplo][data-direction=home] .journey-walker{scale:1 1}.world-journey[data-direction=home] .journey-path:after{animation-direction:reverse}.world-journey[data-stage=office] .journey-path:after{animation-play-state:paused}.world-journey[data-stage=office] .journey-monster{animation:none}.world-landmark{position:absolute;bottom:29px;width:125px!important;height:130px!important;object-fit:contain!important;max-width:none!important;margin:0!important;z-index:2}.world-scene-label{position:absolute;top:10px;left:10px;right:10px;width:fit-content;max-width:calc(100% - 20px);font-size:12px;line-height:1.4;text-align:left;background:#fffaf5ef;padding:5px 9px;border-radius:10px;z-index:6}.world-weather{position:absolute;inset:-30px;z-index:3;pointer-events:none}.world-journey:is([data-terrain=snow],[data-terrain=blizzard]) .world-weather{background-image:radial-gradient(circle,#fff 0 1.5px,transparent 2px);background-size:39px 37px;animation:world-snow 6s linear infinite;opacity:.75}.world-journey[data-terrain=blizzard] .world-weather{background-size:23px 29px;animation-duration:2s}.world-journey[data-terrain=ember] .world-weather{background-image:radial-gradient(circle,#ffe3a5 0 1px,transparent 2px);background-size:70px 80px;animation:world-snow 12s linear infinite;opacity:.65}.world-transfer-mail{position:absolute;left:62%;bottom:52px;width:30px;height:22px;background:#fff8e9;border:2px solid #896883;border-radius:3px;z-index:5}.world-transfer-mail:after{content:'';position:absolute;inset:1px;clip-path:polygon(0 0,100% 0,50% 80%);background:#ddc6de}.world-journey[data-stage=home] .journey-monster{animation:none}.world-journey .journey-find-spot{bottom:8px;z-index:4}.world-pickup{padding:20px;border:1px solid var(--line);border-radius:22px;background:#fffaf5;margin:18px 0}.world-pickup h2{font-size:26px}.world-pickup-options{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px}.world-pickup-option{display:flex;flex-direction:column;text-align:left;padding:12px;min-height:44px}.world-pickup-option .monster-art{width:65px;height:65px;align-self:center}.world-pickup-option[aria-pressed=true]{outline:2px solid #9b74b8;background:#eee0f3}.world-pickup-option small{font-size:12px}.world-pickup .actions{margin-bottom:0}.world-pickup-eta{font-size:14px;margin:12px 0}.world-estimate{font-size:12px;display:block;margin-top:6px;color:#6c567e}.world-pickup-status{font-size:14px}.world-pickup-pending .journey-road{margin:12px 0}
@keyframes world-snow{to{transform:translate(-24px,37px)}}
@media(max-width:520px){.world-card{padding:14px;border-radius:22px}.world-map{height:370px}.world-region{max-width:84px}.world-region img{width:63px;height:60px}.world-region span{display:flex;align-items:center;justify-content:center;gap:3px;font-size:10px;max-width:84px;padding:3px 5px}.world-region[data-region=office] img{width:64px;height:65px}.world-toolbar{gap:10px}.world-toolbar button{padding:7px 10px}.world-marker{width:38px;height:38px;min-height:38px}.world-marker .monster-art{width:38px;height:38px}.world-selection>button{width:100%}.world-journey.journey-road{height:190px;--walker:110px}.world-landmark{width:100px!important;height:110px!important}.world-scene-label{font-size:11px}.world-pickup{padding:14px}.world-pickup-options{grid-template-columns:1fr 1fr}.world-pickup-option{padding:9px}.world-heading h2{font-size:26px}.world-count{line-height:1.5}}
@media(prefers-reduced-motion:reduce){.world-card *, .world-journey *, .world-pickup *{animation:none!important;transition:none!important}.world-content{will-change:auto}}
/* Keep the illustrated island on a square coordinate plane at every width.
   The inset leaves room for the southern labels without clipping them. */
.world-map{background:#b1e0e5;width:100%;max-width:600px;height:auto;aspect-ratio:1;margin-inline:auto}
.world-content{inset:12px}
.world-map-backdrop{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;pointer-events:none;user-select:none}
@media(max-width:520px){.world-map{height:auto}.world-region img{width:54px;height:47px}.world-region[data-region=office] img{width:54px;height:50px}.world-region span{display:flex;align-items:center;justify-content:center;gap:3px;font-size:10px;max-width:82px}}
.world-cluster-list{max-height:240px;overflow:auto;padding:4px;align-content:start}
/* Couriers stand above their route point, leaving the region name beneath it readable. */
.world-marker{translate:-50% -100%}

/* Two decoded region layers crossfade without resetting the parallax camera. */
.world-journey .world-journey-backdrop,.world-journey .world-journey-incoming{position:absolute;inset:0;width:100%!important;height:100%!important;max-width:none!important;object-fit:cover;object-position:center 65%;margin:0!important;border-radius:0!important;transform:scale(1.10);transition:opacity 1.2s ease-in-out;will-change:transform,opacity;z-index:0;pointer-events:none}
.world-journey .world-ground{display:none}
.world-journey.journey-road .journey-path{bottom:-2px;z-index:1;animation:none;background:var(--journey-ground,#d5a565);border:0}
.world-journey .journey-walker{z-index:3}
.world-journey .world-landmark{transition:left .15s linear}
@media(prefers-reduced-motion:reduce){.world-journey *{animation:none!important;transition:none!important}}

/* Ground and scenery fade together only after both terrain assets decode. */
.world-trail-layer{position:absolute;inset:0;background-position:0 0;background-size:480px auto;background-repeat:repeat-x;transition:opacity 1.2s ease-in-out;pointer-events:none}
/* Ground textures reserve their top 25% for the contour: never offset that safety band. */

/* Each decoded terrain owns its contour, so silhouettes crossfade with the art. */
.world-journey.journey-road .journey-path{-webkit-mask:none;mask:none;background:transparent}
.world-journey .journey-path::before{content:none}
.world-journey .journey-path::after{content:'';position:absolute;inset:28px 0 0;height:auto;background:var(--journey-ground,#d5a565);animation:none;z-index:0}
.world-journey .world-trail-layer{z-index:1}

/* Region deliveries use the same little mailbox as the garden. */
.world-region-mailbox .garden-mailbox{top:auto;bottom:0;left:40px;transform:scale(1.5);transform-origin:bottom center}

/* Opposing parallax: a slower rightward scenery loop behind the leftward trail. */
.world-backdrop-plane{position:absolute;inset:0;will-change:transform;pointer-events:none}
.world-journey .world-backdrop-plane>img{position:absolute;inset:0;width:100%!important;height:100%!important;max-width:none!important;margin:0!important;border-radius:0!important;object-fit:cover;object-position:center 65%;transform:none;transition:opacity 1.2s ease-in-out;will-change:opacity}
.world-journey .world-backdrop-plane>.is-mirrored{left:-100%;right:auto;transform:scaleX(-1)}
.world-journey .world-backdrop-plane>.is-repeated{left:-200%;right:auto}
.world-journey[data-direction=home] .journey-walker{scale:1 1}
.world-journey[data-courier=diplo][data-direction=home] .journey-walker{scale:-1 1}
