/* Stage 21 production 2D map progressive enhancement.
 * The provider-neutral SVG remains the durable offline/failure fallback.
 * Online Trail maps use one stable 3:2 viewport; while the live map is
 * genuinely loading, a neutral loading surface is shown instead of flashing
 * the fallback map and then replacing it. */
.trail-map-stack{
  position:relative;
  width:100%;
  min-width:0;
  aspect-ratio:3 / 2;
  overflow:hidden;
  border-radius:18px;
  background:var(--subtle);
}
.trail-map-stack::after{
  content:"Loading map…";
  position:absolute;
  inset:0;
  z-index:3;
  display:grid;
  place-items:center;
  color:var(--stone);
  background:
    radial-gradient(circle at 72% 28%, color-mix(in srgb,var(--sage) 18%,transparent), transparent 34%),
    linear-gradient(145deg,color-mix(in srgb,var(--subtle) 88%,var(--card)),var(--subtle));
  font-size:12px;
  font-weight:750;
  letter-spacing:.02em;
  opacity:1;
  pointer-events:none;
  transition:opacity .16s ease;
}
.trail-map-stack .trail-map-fallback,
.trail-map-stack .trail-map-live{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  overflow:hidden;
  border-radius:inherit;
  transition:opacity .16s ease;
}
.trail-map-stack .trail-map-fallback{
  z-index:1;
  opacity:0;
  pointer-events:none;
}
.trail-map-stack .trail-map-live{
  z-index:2;
  opacity:0;
  pointer-events:none;
  background:var(--subtle);
}
.trail-map-stack .trail-map-fallback .map-canvas,
.trail-map-stack .trail-map-fallback svg{
  width:100%;
  height:100%;
}
.trail-map-stack .trail-map-fallback .map-canvas{
  border:0;
  border-radius:inherit;
}
.trail-map-stack.is-live::after,
.trail-map-stack.is-fallback::after{opacity:0}
.trail-map-stack.is-live .trail-map-live{
  opacity:1;
  pointer-events:auto;
}
.trail-map-stack.is-fallback .trail-map-fallback{
  opacity:1;
  pointer-events:auto;
}
.trail-map-live .maplibregl-map,
.trail-map-live .maplibregl-canvas-container,
.trail-map-live .maplibregl-canvas{
  width:100%;
  height:100%;
}
.trail-map-live .maplibregl-canvas{display:block}
.trail-map-live .maplibregl-ctrl-top-right{top:8px;right:8px}
.trail-map-live .maplibregl-ctrl-group{
  border-radius:12px;
  overflow:hidden;
  box-shadow:0 3px 12px rgba(31,36,34,.14);
}
.trail-map-live .maplibregl-ctrl-group button{
  width:34px;
  height:34px;
}

/* Stable Sierra Days attribution control.
 * The info button never moves; the attribution panel expands left underneath
 * the same anchored button and every new Trail Detail starts collapsed. */
.trail-map-attribution{
  position:absolute;
  right:8px;
  bottom:8px;
  z-index:7;
  width:22px;
  height:22px;
  margin:0;
  pointer-events:auto;
}
.trail-map-attribution summary{
  position:absolute;
  right:0;
  bottom:0;
  z-index:2;
  display:grid;
  width:22px;
  height:22px;
  margin:0;
  padding:0;
  place-items:center;
  list-style:none;
  cursor:pointer;
  border:0;
  border-radius:50%;
  background:#111;
  color:#fff;
  box-shadow:none;
  -webkit-tap-highlight-color:transparent;
}
.trail-map-attribution summary::-webkit-details-marker{display:none}
.trail-map-attribution summary::marker{content:""}
.trail-map-attribution summary span{
  display:grid;
  width:100%;
  height:100%;
  place-items:center;
  font-family:Georgia,serif;
  font-size:13px;
  font-weight:700;
  font-style:normal;
  line-height:1;
  transform:translateY(-.2px);
}
.trail-map-attribution summary:focus{outline:none}
.trail-map-attribution summary:focus-visible{
  box-shadow:0 0 0 2px rgba(37,93,58,.26);
}
.trail-map-attribution__panel{
  position:absolute;
  right:0;
  bottom:0;
  z-index:1;
  display:none;
  box-sizing:border-box;
  width:min(252px,calc(100vw - 130px));
  min-height:22px;
  padding:3px 29px 3px 7px;
  align-items:center;
  gap:2px;
  border-radius:9px;
  background:rgba(255,255,255,.94);
  color:#202421;
  box-shadow:0 2px 7px rgba(31,36,34,.12);
  font-size:8px;
  line-height:1.12;
}
.trail-map-attribution[open] .trail-map-attribution__panel{
  display:flex;
  flex-wrap:wrap;
}
.trail-map-attribution__panel a{
  color:inherit;
  text-decoration:none;
}
.trail-map-attribution__panel a:focus-visible,
.trail-map-attribution__panel a:hover{text-decoration:underline}

.data-acknowledgements{
  margin-top:16px;
  padding-top:14px;
  border-top:1px solid var(--divider);
}
.data-acknowledgements summary{
  cursor:pointer;
  color:var(--charcoal);
  font-size:13px;
  font-weight:800;
  list-style:none;
}
.data-acknowledgements summary::-webkit-details-marker{display:none}
.data-acknowledgements summary::after{
  content:"+";
  float:right;
  color:var(--stone);
  font-size:16px;
  font-weight:700;
  line-height:1;
}
.data-acknowledgements[open] summary::after{content:"–"}
.data-acknowledgements__body{
  display:grid;
  gap:8px;
  padding-top:12px;
}
.detail-section .data-acknowledgements__body p{
  margin:0;
  color:var(--stone);
  font-size:12px;
  line-height:1.5;
}
.detail-section .data-acknowledgements__body strong{
  color:var(--charcoal);
  font-weight:750;
}
@media(max-width:430px){
  .trail-map-stack{border-radius:16px}
  .trail-map-live .maplibregl-ctrl-group button{width:32px;height:32px}
  .trail-map-attribution{right:7px;bottom:7px}
  .trail-map-attribution__panel{width:min(242px,calc(100vw - 114px))}
}
@media(prefers-reduced-motion:reduce){
  .trail-map-stack::after,
  .trail-map-stack .trail-map-fallback,
  .trail-map-stack .trail-map-live{transition:none}
}
