.locator-heading{display:flex;justify-content:space-between;align-items:center;padding:30px max(24px,calc((100vw - 1280px)/2));background:var(--primary);color:#fff}.locator-heading h1{font-size:34px;margin:2px 0}.locator-heading p{margin:0;color:#d8e6e9}.locator-layout{display:grid;grid-template-columns:360px minmax(0,1fr);height:calc(100vh - 78px - 132px);min-height:760px;background:var(--surface-2)}.locator-sidebar{padding:14px;overflow:auto;border-right:1px solid var(--line)}.locator-card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px;margin-bottom:12px;box-shadow:0 2px 8px #11233a0a}.card-title{font-size:13px;font-weight:800;margin-bottom:10px;color:var(--primary)}.search-card label{display:block;font-size:13px;font-weight:750;margin-bottom:7px}.search-row{display:flex;gap:7px}.search-row input{min-width:0;flex:1;border:1px solid #bfcbd9;border-radius:8px;padding:10px 11px;font-size:14px;outline:none}.search-row input:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent)}.search-row button,.map-toolbar button{border:0;border-radius:8px;background:var(--primary-2);color:#fff;font-weight:750;padding:0 15px;cursor:pointer}.examples{display:flex;gap:6px;flex-wrap:wrap;margin-top:9px}.examples button,.text-btn{border:1px solid var(--line);background:var(--surface-2);color:var(--primary);padding:4px 7px;border-radius:6px;font-size:11px;cursor:pointer}.text-btn{border:0}.hint{font-size:11px;color:var(--muted);margin:9px 0 0}.hint.compact{margin-top:-4px;margin-bottom:9px}.status{border-radius:7px;padding:8px 9px;font-size:12px;margin-top:10px}.status.neutral{background:#f2f5f8;color:#657488}.status.success{background:#e7f7ef;color:#17633e}.status.error{background:#fff0ef;color:#9e3028}.status.loading{background:#eef5ff;color:#245d9b}.empty{color:#8290a0;font-size:12px}.location-grid{display:grid;grid-template-columns:100px 1fr;gap:5px 8px;font-size:12px}.location-grid b{color:#657488;font-weight:650}.layer-filters{display:flex;flex-direction:column;gap:7px}.layer-item{display:flex;align-items:center;gap:8px;font-size:12px}.layer-dot{width:10px;height:10px;border-radius:50%;flex:none}.layer-actions{display:flex;gap:6px;flex-wrap:wrap;margin:-3px 0 10px}.layer-label{flex:1;min-width:0}.layer-count{margin-left:auto;min-width:28px;text-align:center;border-radius:999px;background:var(--surface-2);color:#587087;font-size:10px;padding:2px 6px}.nearest-list{display:flex;flex-direction:column;gap:7px}.nearest-item{display:grid;grid-template-columns:25px 1fr auto;gap:7px;align-items:center;border:1px solid #e1e8f0;border-radius:8px;padding:8px;cursor:pointer;background:#fff}.nearest-item:hover{background:var(--surface-2)}.rank{display:grid;place-items:center;width:22px;height:22px;border-radius:50%;background:color-mix(in srgb,var(--accent) 16%,white);color:var(--primary);font-weight:800;font-size:11px}.port-name{font-size:12px;font-weight:750}.port-meta,.distance{font-size:10px;color:#718092}.distance{text-align:right}.map-panel{min-width:0;display:flex;flex-direction:column;padding:14px}.map-toolbar{display:flex;gap:7px;align-items:center;margin-bottom:8px}.map-toolbar button{height:32px;padding:0 11px}.map-toolbar span{margin-left:auto;color:#6d7b8d;font-size:11px}.map-wrap{position:relative;flex:1;min-height:640px;border:1px solid #ccd6e2;border-radius:13px;overflow:hidden;background:linear-gradient(#e9f5fb,#f8fbfd)}#map{width:100%;height:100%;display:block;touch-action:none;cursor:grab;user-select:none}#map.dragging{cursor:grabbing}.country{fill:#f7f4e9;stroke:#798b9c;stroke-width:.22;vector-effect:non-scaling-stroke}.country-ca{fill:#edf5e8}.country-us{fill:#f8f0e5}.grid-line{stroke:#cbd9e4;stroke-width:.13;vector-effect:non-scaling-stroke;stroke-dasharray:1 1}.route-line{stroke:var(--accent);stroke-width:.45;vector-effect:non-scaling-stroke;stroke-dasharray:2 1.5;opacity:.68}.route-line.major-route-line{stroke:var(--primary-2);stroke-width:.52;stroke-dasharray:1.25 1.1;opacity:.78}.port-point{stroke:#fff;stroke-width:.3;vector-effect:non-scaling-stroke;cursor:pointer}.cargo-ring{fill:var(--accent);stroke:#fff;stroke-width:.28;vector-effect:non-scaling-stroke}.cargo-pulse{fill:none;stroke:var(--accent);stroke-width:.25;vector-effect:non-scaling-stroke;opacity:.55}.map-info{position:absolute;left:12px;bottom:12px;max-width:430px;max-height:48%;overflow:auto;min-width:270px;background:#fffffff0;border:1px solid #d9e2ec;border-radius:9px;padding:8px 10px;font-size:11px;box-shadow:0 3px 12px #2539501f}.popup-heading{display:flex;gap:7px;align-items:flex-start;margin-bottom:7px}.popup-heading strong{font-size:13px}.property-table{display:grid;border:1px solid #e0e7ef;border-radius:7px;overflow:hidden;background:#fff}.property-row{display:grid;grid-template-columns:minmax(88px,34%) 1fr;border-bottom:1px solid #e8edf3}.property-row:last-child{border-bottom:0}.property-key,.property-value{padding:5px 7px;line-height:1.35;overflow-wrap:anywhere}.property-key{color:#5c6e82;font-weight:650}.property-value{color:#26384d}.empty-value{color:#9aa6b2}.candidate-section-title{font-size:11px;font-weight:800;color:#425b75;margin:8px 2px 5px;padding-top:7px;border-top:1px solid #e3e9f0}.candidate-section-title:first-child{margin-top:0;padding-top:0;border-top:0}.country-badge{display:inline-block;margin-left:5px;padding:1px 5px;border-radius:999px;background:#eef3f8;color:#516b84;font-size:9px;font-weight:750}.nearest-item.major-port{border-color:#bfd4e8;background:#f8fbff}.location-marker{cursor:pointer;outline:none}.location-marker .marker-shape{stroke:#fff;stroke-width:.28;vector-effect:non-scaling-stroke;filter:drop-shadow(0 .08px .12px #10233f55)}.anchor-halo,.anchor-shape{fill:none;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke;pointer-events:none}.anchor-halo{stroke:#fff;stroke-width:.38}.anchor-shape{stroke-width:.2}.anchor-eye{stroke-width:.18;vector-effect:non-scaling-stroke;pointer-events:none}.location-label{fill:#172033;stroke:#fff;stroke-width:.28;paint-order:stroke fill;stroke-linejoin:round;pointer-events:none;dominant-baseline:middle}.port-label{font-size:1.02px;font-weight:750}.airport-label{font-size:.94px;font-weight:680;fill:#263b56}.nearest-card{padding-bottom:16px}
@media(max-width:900px){.locator-heading{padding:24px 18px}.locator-heading h1{font-size:27px}.locator-badge{display:none}.locator-layout{display:block;height:auto;min-height:0}.locator-sidebar{border-right:0}.map-panel{height:78vh}.map-wrap{min-height:560px}}
