.map-view-page { display: grid; gap: var(--sp-5); } .map-view { position: relative; background: var(--bg); overflow: hidden; min-height: clamp(420px, 68vh, 760px); border: 1px solid var(--border); } .map-view__hint { position: absolute; bottom: var(--sp-5); right: var(--sp-5); font-family: var(--font-mono); font-size: var(--fs-xs); letter-spacing: 0.16em; text-transform: uppercase; color: var(--text-faint); background: rgba(13, 15, 20, 0.6); border: 1px solid var(--border); padding: 6px 10px; pointer-events: none; } /* spinner reused across views */ .spin { animation: spin 900ms linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } .map-view__loading { position: absolute; bottom: var(--sp-5); left: var(--sp-5); display: flex; align-items: center; gap: var(--sp-2); font-size: var(--fs-xs); letter-spacing: 0.16em; text-transform: uppercase; color: var(--text-muted); background: rgba(13, 15, 20, 0.6); border: 1px solid var(--border); padding: 6px 10px; } /* ---------- Legend ---------- */ .map-legend { position: absolute; top: var(--sp-5); left: var(--sp-5); z-index: 4; background: rgba(13, 15, 20, 0.65); border: 1px solid var(--border); padding: var(--sp-3) var(--sp-4); min-width: 220px; } .map-legend__title { margin-bottom: var(--sp-2); } .map-legend__bar { display: grid; grid-template-columns: repeat(5, 1fr); height: 8px; } .map-legend__cell { height: 100%; } .map-legend__scale { display: grid; grid-template-columns: max-content 1fr max-content; align-items: center; column-gap: var(--sp-3); margin-top: var(--sp-2); width: 100%; } .map-legend__scale-label { font-size: var(--fs-xs); letter-spacing: 0.14em; text-transform: uppercase; color: var(--text-faint); white-space: nowrap; } .map-legend__scale-label--low { justify-self: start; } .map-legend__scale-label--high { justify-self: end; } /* Visual bridge so “low” and “high” read as ends of the scale, not a tight pair. */ .map-legend__scale-gap { display: block; height: 1px; min-width: var(--sp-4); background: linear-gradient( 90deg, transparent, var(--border) 35%, var(--border-strong) 50%, var(--border) 65%, transparent ); opacity: 0.85; } /* ---------- Tooltip ---------- */ .map-tooltip { position: fixed; top: 0; left: 0; z-index: 6; background: rgba(13, 15, 20, 0.92); border: 1px solid var(--border-strong); padding: var(--sp-3) var(--sp-4); min-width: 200px; pointer-events: none; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5); } .map-tooltip__name { font-family: var(--font-display); font-size: var(--fs-lg); margin-bottom: var(--sp-2); } .map-tooltip__row { display: flex; justify-content: space-between; align-items: baseline; font-size: var(--fs-xs); margin-top: 2px; } .map-tooltip__row.faint { color: var(--text-faint); letter-spacing: 0.06em; } .map-articles { border: 1px solid var(--border); background: var(--surface); padding: var(--sp-5); } .map-articles__head { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--sp-4); margin-bottom: var(--sp-4); } .map-articles__title { margin-top: 4px; font-family: var(--font-display); } .map-articles__loading { display: flex; align-items: center; gap: var(--sp-2); font-size: var(--fs-xs); letter-spacing: 0.12em; text-transform: uppercase; color: var(--text-muted); } .map-articles__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; } .map-article { padding: var(--sp-4) 0; border-top: 1px dashed var(--border); } .map-article:first-child { border-top: 0; padding-top: 0; } .map-article__title { font-family: var(--font-display); color: var(--text); text-decoration: none; } .map-article__title:hover { text-decoration: underline; } .map-article__meta { margin-top: var(--sp-1); color: var(--text-muted); display: flex; gap: var(--sp-2); font-size: var(--fs-xs); } .map-article__summary { margin-top: var(--sp-2); color: var(--text-muted); line-height: var(--lh-relaxed); } @media (max-width: 900px) { .map-view { min-height: clamp(360px, 56vh, 560px); } .map-legend { top: var(--sp-3); left: var(--sp-3); min-width: 0; width: calc(100% - (2 * var(--sp-3))); max-width: 320px; } .map-view__loading { left: var(--sp-3); bottom: var(--sp-3); } .map-view__hint { right: var(--sp-3); bottom: var(--sp-3); max-width: calc(100% - (2 * var(--sp-3))); } } @media (max-width: 640px) { .map-legend, .map-view__hint { display: none; } .map-articles { padding: var(--sp-4); } }