/*
 * Location map (templates/location/map.html.twig, location_map_controller.js).
 * Tokens only. Pins: size = protection need, shape + colour = band.
 */
.location-map__toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.75rem 1.25rem;
    margin-bottom: 1rem;
}

.location-map__notice {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem 1rem;
    margin-bottom: 1rem;
    color: var(--fg-2);
    font-size: 0.875rem;
}

.location-map {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 1rem;
    margin-bottom: 1.5rem;
}

@media (min-width: 992px) {
    .location-map:has(.location-map__panel:not([hidden])) {
        grid-template-columns: minmax(0, 1fr) 22rem;
    }
}

.location-map__figure {
    position: relative;
    margin: 0;
    border: 1px solid var(--border);
    border-radius: 12px;
    overflow: hidden;
    background: var(--surface-2);
}

.location-map__svg {
    display: block;
    width: 100%;
    height: auto;
    aspect-ratio: 1000 / 437;
    touch-action: pan-y pinch-zoom;
    cursor: grab;
}

.location-map__svg.is-panning { cursor: grabbing; }

.location-map__sea { fill: var(--surface-2); }

.location-map__land {
    fill: var(--surface-3);
    stroke: var(--border-strong);
    stroke-linejoin: round;
}

.location-map__borders {
    fill: none;
    stroke: var(--border);
    stroke-linejoin: round;
}

/* Third-country layer: countries by GDPR transfer zone. Colour plus fill
   pattern, so the zones stay apart without colour (hatched, dotted). */
.location-map__zones[hidden] { display: none; }
.location-map__zone { stroke: none; pointer-events: none; }
.location-map__zone--eea { fill: var(--primary); fill-opacity: 0.16; }
.location-map__zone--adequacy { fill: var(--success); fill-opacity: 0.18; }
.location-map__zone--dpf { fill: url("#location-map-dots"); }
.location-map__zone--third { fill: url("#location-map-hatch"); }
.location-map__hatch { stroke: var(--danger); stroke-width: 1.2; stroke-opacity: 0.45; }
.location-map__dot { fill: var(--warning); fill-opacity: 0.7; }

.location-map__supplier {
    cursor: pointer;
    outline: none;

    --pin: var(--fg-3);
}

.location-map__supplier > rect {
    fill: var(--surface);
    stroke: var(--pin);
}

.location-map__supplier:hover > rect,
.location-map__supplier:focus-visible > rect,
.location-map__supplier.is-selected > rect { fill: var(--pin); }

.location-map__chain { stroke: var(--fg-3); fill: none; }
.location-map__chain--warn { stroke: var(--warning); }
.location-map__chain--danger { stroke: var(--danger); }

.location-map__pin,
.location-map__cluster {
    cursor: pointer;
    outline: none;

    --pin: var(--fg-3);
}

.location-map__pin > :not(.location-map__ring, .location-map__area),
.location-map__cluster > circle {
    fill: var(--pin);
    stroke: var(--surface);
}

.location-map__pin--ok { --pin: var(--success); }
.location-map__pin--warn { --pin: var(--warning); }
.location-map__pin--danger,
.location-map__pin--crit { --pin: var(--danger); }
.location-map__pin--none { --pin: var(--fg-3); }

.location-map__pin.is-coarse > :not(.location-map__ring) { fill-opacity: 0.55; }

.location-map__area {
    fill: var(--pin);
    fill-opacity: 0.12;
    stroke: var(--pin);
}

.location-map__ring {
    fill: none;
    stroke: var(--danger);
    stroke-opacity: 0.6;
}

.location-map__pin:hover > :not(.location-map__ring),
.location-map__pin:focus-visible > :not(.location-map__ring),
.location-map__pin.is-selected > :not(.location-map__ring),
.location-map__cluster:hover > circle,
.location-map__cluster:focus-visible > circle {
    stroke: var(--fg);
}

.location-map__cluster > text {
    fill: var(--surface);
    font-weight: 700;
    text-anchor: middle;
    dominant-baseline: central;
    pointer-events: none;
}

.location-map__tip {
    position: absolute;
    z-index: 2;
    display: grid;
    gap: 0.125rem;
    max-width: 14rem;
    padding: 0.5rem 0.75rem;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: var(--surface);
    box-shadow: var(--shadow-md);
    color: var(--fg);
    font-size: 0.8125rem;
    pointer-events: none;
}

.location-map__tip[hidden] { display: none; }

.location-map__zoom {
    position: absolute;
    top: 0.5rem;
    right: 0.5rem;
    display: flex;
    flex-wrap: wrap;
    gap: 0.25rem;
    justify-content: flex-end;
}

.location-map__zoom .fa-cyber-btn { background: var(--surface); }

.location-map__legend {
    display: flex;
    flex-wrap: wrap;
    gap: 0.25rem 1rem;
    padding: 0.5rem 0.75rem;
    border-top: 1px solid var(--border);
    background: var(--surface);
    color: var(--fg-2);
    font-size: 0.8125rem;
}

.location-map__legend > [hidden] { display: none; }

.location-map__key {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    margin-right: 0.75rem;
}

.location-map__key::before {
    content: "";
    width: 0.7rem;
    height: 0.7rem;
    background: var(--key, var(--fg-3));
}

.location-map__key--ok::before { --key: var(--success); border-radius: 50%; }
.location-map__key--warn::before { --key: var(--warning); clip-path: polygon(50% 0, 100% 100%, 0 100%); }
.location-map__key--danger::before { --key: var(--danger); clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%); }
.location-map__key--crit::before { --key: var(--danger); clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%); outline: 2px solid var(--danger-tint); }
.location-map__key--region::before { --key: transparent; border: 1px dashed var(--fg-3); border-radius: 50%; }
.location-map__key--none::before { --key: var(--fg-3); border-radius: 50%; }
.location-map__key--supplier::before { --key: transparent; border: 2px solid var(--fg-3); }

.location-map__zone-key {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    margin-right: 0.75rem;
}

.location-map__zone-key::before {
    content: "";
    width: 0.9rem;
    height: 0.7rem;
    border: 1px solid var(--border-strong);
}

.location-map__zone-key--eea::before { background: var(--primary-tint); }
.location-map__zone-key--adequacy::before { background: var(--success-tint); }
.location-map__zone-key--dpf::before { background: radial-gradient(circle, var(--warning) 25%, transparent 30%) 0 0 / 4px 4px; }
.location-map__zone-key--third::before { background: repeating-linear-gradient(45deg, var(--danger) 0 1px, transparent 1px 4px); }

.location-map__event-form {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem;
}

.location-map__event-facts {
    display: grid;
    gap: 0.5rem;
    margin: 0 0 0.75rem;
}

.location-map__event-facts dt {
    color: var(--fg-3);
    font-size: 0.75rem;
    font-weight: 400;
}

.location-map__event-facts dd { margin: 0; }

.location-map__companies,
.location-map__event,
.location-map__sample,
.location-map__suppliers { margin-bottom: 1.5rem; }

.location-map__suppliers[hidden] { display: none; }

.location-map__panel {
    position: relative;
    padding: 1rem 1.25rem;
    border: 1px solid var(--border);
    border-radius: 12px;
    background: var(--surface);
    align-self: start;
}

.location-map__panel[hidden] { display: none; }

.location-map__close {
    position: absolute;
    top: 0.5rem;
    right: 0.5rem;
}

.location-map__panel-title {
    margin: 0 2rem 0.25rem 0;
    font-size: 1.125rem;
}

.location-map__panel-sub {
    margin: 1rem 0 0.5rem;
    font-size: 0.875rem;
    font-weight: 600;
}

.location-map__facts {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.5rem 1rem;
    margin: 0;
}

.location-map__facts dt {
    color: var(--fg-3);
    font-size: 0.75rem;
    font-weight: 400;
}

.location-map__facts dd { margin: 0; }

.location-map__list,
.location-map__checks {
    margin: 0;
    padding: 0;
    list-style: none;
    font-size: 0.875rem;
}

.location-map__list li { padding: 0.125rem 0; }

.location-map__checks li {
    display: grid;
    grid-template-columns: 1.25rem minmax(0, 1fr);
    padding: 0.25rem 0;
}

.location-map__checks .is-ok .location-map__check-mark { color: var(--success); }
.location-map__checks .is-gap .location-map__check-mark { color: var(--danger); font-weight: 700; }

.location-map__links {
    display: flex;
    flex-wrap: wrap;
    gap: 0.25rem 1rem;
    margin-top: 1rem;
    font-size: 0.875rem;
}

.location-map__actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.375rem;
}

.location-map__kpis {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
    gap: 0.75rem;
    margin-bottom: 1rem;
}

.location-map__kpis:empty { display: none; }

.location-map__levers { margin-bottom: 1.5rem; }

.location-map__bulk {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem;
    margin: 1rem 0 0.5rem;
    font-size: 0.875rem;
}

.location-map__bulk-select { width: auto; max-width: 18rem; }

.location-map__row { cursor: pointer; }
.location-map__row.is-selected > td { background: var(--primary-tint); }
.location-map__row[hidden] { display: none; }

.location-map__same { margin-bottom: 1.5rem; }

.location-map__attribution {
    margin-top: 0.5rem;
    font-size: 0.75rem;
}

@media print {
    .location-map__zoom,
    .location-map__toolbar,
    .location-map__bulk { display: none; }
}
