.race-map{margin:1.25rem 0;padding:1rem;border:1px solid #e6ebf2;border-radius:12px;background:#fff;box-shadow:0 3px 14px rgba(31,41,55,0.07)}.race-map__filters{display:grid;grid-template-columns:repeat(auto-fit, minmax(145px, 1fr));gap:0.65rem;margin-bottom:0.85rem}.race-map__filters label{display:grid;gap:0.25rem;color:#374151;font-size:0.8rem;font-weight:600}.race-map__filters input,.race-map__filters select{width:100%;min-height:2.5rem;padding:0.4rem 0.55rem;border:1px solid #d5dbe4;border-radius:6px;background:white;color:#1f2937;font:inherit}.race-map__summary{margin-bottom:0.45rem;color:#6b7280;font-size:0.85rem}.race-map__canvas{width:100%;height:340px;border-radius:8px;background:#e8f0f3;z-index:0}.race-map--large .race-map__canvas{height:65vh;max-height:640px;min-height:390px}.race-map__timeline{margin:0.9rem 0 0.75rem}.race-map__timeline-heading,.race-map__timeline-ends{display:flex;justify-content:space-between;gap:0.75rem;color:#6b7280;font-size:0.8rem}.race-map__timeline-heading label{margin:0;color:#374151;font-weight:700}.race-map__timeline-heading output{text-align:right;font-variant-numeric:tabular-nums}.race-map__timeline input[type="range"]{display:block;width:100%;min-height:2.75rem;margin:0;accent-color:#ff6a33;cursor:pointer;touch-action:pan-y}.race-map__timeline-ends{font-size:0.72rem}.race-map__legend{display:flex;flex-wrap:wrap;gap:0.55rem 1rem;margin-top:0.75rem;color:#6b7280;font-size:0.78rem}.race-map__legend-filter{display:inline-flex;align-items:center;gap:0.35rem;padding:0.25rem 0.4rem;border:1px solid transparent;border-radius:6px;background:transparent;color:inherit;font:inherit;cursor:pointer}.race-map__legend-filter:hover,.race-map__legend-filter[aria-pressed="true"]{border-color:#e6ebf2;background:#f3f5f8;color:#1f2937}.race-map__legend-filter:focus-visible{outline:2px solid #ff6a33;outline-offset:2px}.race-map__swatch{display:inline-block;width:0.65rem;height:0.65rem;border-radius:50%}.race-map__swatch--trail{background:#16a34a}.race-map__swatch--ultra{background:#f97316}.race-map__swatch--road{background:#2563eb}.race-map__swatch--backyard{background:#7c3aed}.race-map__swatch--halfmarathon{background:#2D5A78}.race-map__swatch--marathon{background:#8B008B}.race-map__popup-title{color:#ff6a33;font-weight:700}.race-map__external-link{display:inline-block;margin:0.3rem 0.35rem 0 0;font-size:0.78rem}.race-map__marker{border:2px solid #fff;border-radius:50%;box-shadow:0 1px 5px rgba(0,0,0,0.45)}.race-map__marker--trail{background:#16a34a}.race-map__marker--ultra{background:#f97316}.race-map__marker--road{background:#2563eb}.race-map__marker--backyard{background:#7c3aed}.race-map__marker--halfmarathon{background:#2D5A78}.race-map__marker--marathon{background:#8B008B}.race-map__marker--trail-ultra{background:conic-gradient(#16a34a 0 50%, #f97316 50% 100%)}.race-map__marker--backyard-ultra{background:conic-gradient(#7c3aed 0 50%, #f97316 50% 100%)}.race-map__marker--backyard-trail-ultra{background:conic-gradient(#7c3aed 0 33.3%, #16a34a 33.3% 66.6%, #f97316 66.6% 100%)}.race-map .marker-cluster-small,.race-map .marker-cluster-medium,.race-map .marker-cluster-large{background:rgba(31,41,55,0.18)}.race-map .marker-cluster div{background:#374151;color:#fff;font-weight:700}.race-map .leaflet-popup-content{line-height:1.5}@media (max-width: 480px){.race-map{padding:0.7rem}.race-map__canvas{height:300px}.race-map--large .race-map__canvas{min-height:350px}}
