/* ───────── Location map card ───────── */
:root{--spring:linear(0,.18 3%,.58 8%,.9 14%,1.035 20%,1.04 26%,1.01 36%,.998 50%,1);--mint:#2fbf8f}
.locmap-block{padding:clamp(8px,2vw,24px) 0 clamp(48px,7vw,80px)}
.locmap-block .eyebrow{text-align:center}
.locmap-stage{display:flex;justify-content:center;padding-bottom:34px}
.locmap{position:relative;width:100%;display:flex;justify-content:center;perspective:1000px}
.locmap-card{position:relative;overflow:hidden;width:300px;height:150px;border-radius:24px;background:#fff;border:1px solid var(--line);
  box-shadow:0 16px 40px rgba(15,76,92,.08);transform:rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg));transform-style:preserve-3d;
  transition:width 520ms var(--spring),height 520ms var(--spring),box-shadow 300ms ease}
.locmap-card::before{content:"";position:absolute;inset:0;opacity:.07;transition:opacity 300ms ease;
  background-image:linear-gradient(var(--teal) 1px,transparent 1px),linear-gradient(90deg,var(--teal) 1px,transparent 1px);background-size:20px 20px}
.locmap.open .locmap-card{width:min(100%,780px);height:clamp(360px,54vw,460px);box-shadow:0 30px 70px rgba(15,76,92,.16);transform:none}
.locmap.open .locmap-card::before{opacity:0}

/* live Google map (loads on first expand) */
.locmap-live{position:absolute;inset:0;opacity:0;transition:opacity 600ms ease .5s}
.locmap-live iframe{width:100%;height:100%;border:0;display:block}
.locmap.is-live .locmap-live{opacity:1}

/* stylised map art: draws in while Google's tiles load, then fades out */
.locmap-art{position:absolute;inset:0;background:var(--mist);opacity:0;transition:opacity 350ms ease .1s;pointer-events:none}
.locmap.open .locmap-art{opacity:1}
.locmap.is-live .locmap-art{opacity:0;transition:opacity 700ms ease 1.2s}
.roads{position:absolute;inset:0;width:100%;height:100%}
.roads line{stroke:rgba(15,76,92,.3);vector-effect:non-scaling-stroke;stroke-dasharray:1;stroke-dashoffset:1;transition:stroke-dashoffset 800ms var(--ease-out)}
.roads .r1{stroke-width:4}.roads .r2{stroke-width:3;stroke:rgba(15,76,92,.22)}.roads .r3{stroke-width:1.5;stroke:rgba(15,76,92,.12)}
.locmap.open .roads line{stroke-dashoffset:0}
.locmap.open .roads .r1{transition-delay:.15s}.locmap.open .roads .r2{transition-delay:.3s}.locmap.open .roads .r3{transition-delay:.5s}
.bld{position:absolute;border-radius:3px;background:rgba(15,76,92,.14);border:1px solid rgba(15,76,92,.12);opacity:0;transform:scale(.85);transition:opacity 400ms ease,transform 400ms var(--ease-out)}
.locmap.open .bld{opacity:1;transform:none}
.locmap.open .bld:nth-of-type(1){transition-delay:.45s}.locmap.open .bld:nth-of-type(2){transition-delay:.5s}.locmap.open .bld:nth-of-type(3){transition-delay:.55s}
.locmap.open .bld:nth-of-type(4){transition-delay:.6s}.locmap.open .bld:nth-of-type(5){transition-delay:.65s}.locmap.open .bld:nth-of-type(6){transition-delay:.7s}
.pin{position:absolute;top:50%;left:50%;margin:-34px 0 0 -17px;opacity:0;transform:translateY(-22px) scale(.6);filter:drop-shadow(0 6px 10px rgba(15,76,92,.3));transition:opacity 250ms ease,transform 520ms cubic-bezier(.34,1.56,.64,1)}
.locmap.open .pin{opacity:1;transform:none;transition-delay:.3s}

/* chrome */
.locmap-icon{position:absolute;top:18px;left:20px;color:var(--mint);transition:opacity 250ms ease;filter:drop-shadow(0 0 5px rgba(47,191,143,.35))}
.locmap.open .locmap-icon{opacity:0}
.locmap-chip{position:absolute;top:14px;right:16px;z-index:3;display:inline-flex;align-items:center;gap:7px;padding:5px 11px;border-radius:100px;background:rgba(15,76,92,.06);
  font-size:10.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);transition:right 350ms var(--ease-out),background-color 250ms ease}
.locmap.open .locmap-chip{right:62px;background:rgba(255,255,255,.92);box-shadow:0 2px 8px rgba(15,76,92,.12)}
.locmap-chip i{width:6px;height:6px;border-radius:50%;background:var(--mint)}
.locmap-close{position:absolute;top:10px;right:12px;z-index:6;width:40px;height:40px;border-radius:50%;border:0;background:rgba(255,255,255,.94);color:var(--teal);font-size:14px;cursor:pointer;
  box-shadow:0 2px 10px rgba(15,76,92,.18);opacity:0;pointer-events:none;transform:scale(.9);transition:opacity 250ms ease,transform 160ms var(--ease-out)}
.locmap.open .locmap-close{opacity:1;pointer-events:auto;transform:none;transition-delay:.15s,0s}
.locmap-close:active{transform:scale(.94)}

.locmap-info{position:absolute;left:0;right:0;bottom:0;z-index:4;padding:0 20px 18px;pointer-events:none;transition:padding 400ms var(--ease-out)}
.locmap-info h3{font-family:var(--sans);font-weight:600;font-size:14px;line-height:1.3;letter-spacing:-.01em;color:var(--ink);margin-bottom:6px;transition:transform 300ms var(--ease-out)}
.extra{display:grid;grid-template-rows:0fr;transition:grid-template-rows 450ms var(--ease-out)}
.extra-in{overflow:hidden;min-height:0;opacity:0;transition:opacity 300ms ease}
.locmap.open .extra{grid-template-rows:1fr}
.locmap.open .extra-in{opacity:1;transition-delay:.35s}
.coords{font:400 12px/1.4 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted);margin-bottom:12px}
.locmap-links{display:flex;gap:8px;flex-wrap:wrap;padding-bottom:6px}
.locmap-links .btn{padding:11px 18px;font-size:13px;pointer-events:auto}
.btn-line{background:#fff;border-color:var(--line);color:var(--teal)}
.locmap-line{display:block;height:1px;background:linear-gradient(90deg,rgba(47,191,143,.55),rgba(47,191,143,.25),transparent);transform:scaleX(.3);transform-origin:left;transition:transform 400ms var(--ease-out)}
.locmap.open .locmap-info{padding:44px 14px 14px;background:linear-gradient(0deg,rgba(255,255,255,.96) 55%,rgba(255,255,255,0))}
.locmap.open .locmap-line{opacity:0}

/* shown in the open card until the visitor allows Google Maps */
.locmap-consent{position:absolute;left:50%;top:27%;z-index:3;width:min(88%,380px);transform:translate(-50%,-50%);padding:16px 18px;border-radius:16px;text-align:center;
  background:rgba(255,255,255,.95);box-shadow:0 10px 30px rgba(15,76,92,.18);opacity:0;visibility:hidden;pointer-events:none;transition:opacity 300ms ease .35s,visibility 0s linear .35s}
.locmap.open.needs-consent .locmap-consent{opacity:1;visibility:visible;pointer-events:auto}
.locmap-consent p{font-size:13px;line-height:1.55;color:var(--muted);margin-bottom:12px}
.locmap-consent-row{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}
.locmap-consent .btn{padding:10px 16px;font-size:12.5px}

.locmap-open{position:absolute;inset:0;z-index:5;border:0;background:transparent;cursor:pointer;border-radius:inherit}
.locmap-open:focus-visible{outline:2px solid var(--sky);outline-offset:-5px}
.locmap.open .locmap-open{display:none}
.locmap-close:focus-visible,.locmap-links a:focus-visible{outline:2px solid var(--sky);outline-offset:2px}

.locmap-hint{position:absolute;left:50%;bottom:-30px;transform:translate(-50%,4px);font-size:11px;color:var(--muted);white-space:nowrap;opacity:0;transition:opacity 200ms ease,transform 200ms ease;pointer-events:none}
@media (hover:hover) and (pointer:fine){
  .locmap:not(.open):hover .locmap-hint{opacity:1;transform:translate(-50%,0)}
  .locmap:not(.open):hover .locmap-info h3{transform:translateX(4px)}
  .locmap:not(.open):hover .locmap-line{transform:scaleX(1)}
  .locmap:not(.open):hover .locmap-card{box-shadow:0 22px 50px rgba(15,76,92,.14)}
}
@media (max-width:600px){.locmap-card{width:100%;max-width:340px}.locmap.open .locmap-card{max-width:none;height:400px}.locmap.open .locmap-chip{display:none}}
@media (prefers-reduced-motion:reduce){
  .locmap-card,.roads line,.bld,.pin,.extra,.extra-in,.locmap-live,.locmap-art,.locmap-chip{transition-duration:.01ms!important;transition-delay:0s!important}
}
