.im-layer-row{display:flex;align-items:center;gap:28px;flex-wrap:wrap;min-width:0;max-width:100%;width:100%}
/* Terminal sweep: 1120 ms travel + 840 ms soft fade; no scale or vertical jump. */
.inflation-map .im-plot.reveal{opacity:1;transform:none;transition:none}
.im-base-map{display:block;position:absolute;top:0;left:0;width:100%;height:auto;pointer-events:none;z-index:0}
.im-base-map path{stroke:rgba(0,0,0,.42);stroke-width:.5px;vector-effect:non-scaling-stroke}
.im-plot>.im-svg{position:relative;z-index:1;background:transparent}
@media(max-width:760px){.im-base-map{width:250%;max-width:none}.im-base-map path{stroke:none}}
.im-svg.im-map-pending{opacity:0}
.im-svg.im-map-enter{animation:im-world-sweep 1.96s linear both;mask-image:linear-gradient(to right,#000 36.3636%,transparent 63.6364%);mask-size:275% 100%;mask-repeat:no-repeat;-webkit-mask-image:linear-gradient(to right,#000 36.3636%,transparent 63.6364%);-webkit-mask-size:275% 100%;-webkit-mask-repeat:no-repeat}
@keyframes im-world-sweep{from{mask-position:100% 0;-webkit-mask-position:100% 0}to{mask-position:0% 0;-webkit-mask-position:0% 0}}
@media(prefers-reduced-motion:reduce){.im-svg.im-map-pending{opacity:1}.im-svg.im-map-enter{animation:none;mask:none;-webkit-mask:none}}
.im-layer-picker{display:flex;align-items:center;gap:26px;min-width:0;max-width:100%;overflow-x:auto;padding:5px 3px 7px;scrollbar-width:thin;scrollbar-color:#333 transparent}
.im-layer-label{appearance:none;flex:none;background:none;color:#828a95;border:0;border-bottom:2px solid transparent;border-radius:0;padding:10px 0;font:600 18px/1.3 var(--font-display,sans-serif);letter-spacing:-.2px;white-space:nowrap;cursor:pointer;transition:color .25s ease,border-color .25s ease}
.im-layer-label:hover{color:#eef0f3}.im-layer-label[aria-pressed="true"]{color:#ff9900;border-bottom-color:#ff9900}
.im-head.reveal:not(.visible) .im-layer-label{opacity:0;transform:translateX(-16px)}
.im-head.reveal.visible .im-layer-label{animation:im-label-enter .7s cubic-bezier(.16,1,.3,1) var(--im-enter-delay) both}
@keyframes im-label-enter{from{opacity:0;transform:translateX(-16px)}to{opacity:1;transform:translateX(0)}}
.im-layer-label:focus-visible,.im-forecast button:focus-visible,.im-forecast input:focus-visible{outline:2px solid #ff9900;outline-offset:3px}
.im-forecast{display:flex;align-items:center;flex-wrap:wrap;gap:14px;max-width:650px;margin:24px auto 0;color:#aab4c0;font-size:12px}
.im-forecast[hidden]{display:none}.im-forecast button{flex:none;background:#10151b;color:#e6edf5;border:1px solid #303944;border-radius:7px;padding:9px 14px;font:600 12px var(--font-display,sans-serif);cursor:pointer;min-width:72px}
.im-forecast input{flex:1;min-width:120px;accent-color:#70b9d9;cursor:pointer}.im-forecast output{min-width:135px;font-variant-numeric:tabular-nums;color:#e5eaf1}.im-forecast-caption{flex-basis:100%;text-align:center;font-size:11px;color:#738190}
.im-layer-status{min-height:16px;margin:8px 0 0;color:#bfc7d0;font-size:12px}.im-layer-status:empty{display:none}
.im-company-map{pointer-events:none}.im-company-pin{pointer-events:auto;cursor:help;opacity:.9}.im-company-pin.is-bank{opacity:.68}.im-company-pin:hover{opacity:1;filter:drop-shadow(0 0 12px #8ca2be)}
.im-svg .im-company-pin rect,.im-svg .im-company-pin circle{stroke:none}
/* Company locations appear west to east; the base map stays fixed. */
.im-company-map.is-pending .im-company-batch{opacity:0}
.im-company-map.is-entering .im-company-batch{animation:im-company-arrive 420ms ease-out var(--im-company-delay,0ms) both}
@keyframes im-company-arrive{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:reduce){.im-company-map.is-pending .im-company-batch,.im-company-map.is-entering .im-company-batch{animation:none;opacity:1}}

.im-svg .im-weather-image{pointer-events:none;transition:opacity .4s ease}
.im-legend.is-weather .im-ticks span{justify-self:center;transform:none;font-size:10px}
.im-legend.is-weather .im-ramp{opacity:.65}
.im-legend.is-continuous .im-ticks{display:flex;justify-content:space-between}
.im-legend.is-continuous .im-ticks span{transform:none}
.im-legend.is-continuous .im-ramp{display:block}
.im-svg[data-layer="fwi"] path[data-n]{stroke:none;filter:none}
.im-legend[hidden],.im-foot[hidden],.im-logistics-panel[hidden]{display:none}
.im-logistics-map{pointer-events:none}.im-vessel,.im-trade-port{pointer-events:auto;cursor:help}
.im-svg[data-layer="vessels"] .im-data-layer>path[data-n]{pointer-events:none}
.im-svg .im-vessel{stroke:none;opacity:.85}.im-svg .im-vessel:hover{opacity:1;filter:drop-shadow(0 0 9px currentColor)}
.im-svg .im-logistics-map .im-trade-arc,.im-svg .im-logistics-map .im-trade-motion{pointer-events:none;stroke:var(--im-trade-ink);vector-effect:none}
.im-svg .im-logistics-map .im-trade-motion{stroke-width:10px}
.im-trade-arc{animation:im-flow-enter .8s ease var(--im-flow-delay) both}
.im-trade-motion{animation:im-flow-travel 5s linear infinite;stroke-linecap:round}
@keyframes im-flow-enter{from{opacity:0}to{opacity:.55}}
@keyframes im-flow-travel{from{stroke-dashoffset:0}to{stroke-dashoffset:-100}}
.im-logistics-panel{max-width:1000px;margin:25px auto 0}
.im-motion-paused .im-trade-motion{animation-play-state:paused}
.im-trade-title{font-size:19px;margin:0;color:var(--im-trade-ink)}
.im-trade-subtitle{font-size:12px;color:#8993a0;margin:7px 0 16px}
.im-trade-partners{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px 24px;list-style:none;padding:0;margin:0}
.im-trade-partners li{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 0;border-bottom:1px solid #1e242b;font-size:12px;color:#aab4c0}
.im-trade-partners strong{font-variant-numeric:tabular-nums;color:#e1e7ee;white-space:nowrap}.im-partner-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(max-width:760px){.im-trade-partners{grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 20px}}
@media(prefers-reduced-motion:reduce){.im-trade-arc{animation:none}.im-trade-motion{display:none}}
@media(max-width:760px){.im-layer-row{gap:8px}.im-layer-picker{gap:22px}.im-layer-label{font-size:15px}.im-forecast{gap:10px}.im-forecast output{min-width:125px}.im-legend.is-weather .im-ticks span{font-size:8px}.im-forecast-caption{text-align:left}}
@media(prefers-reduced-motion:reduce){.im-svg .im-weather-image,.im-layer-label{transition:none}.im-head.reveal.visible .im-layer-label{animation:none}}
