diff --git a/client/css/style.css b/client/css/style.css index 24587e1..a070e21 100644 --- a/client/css/style.css +++ b/client/css/style.css @@ -418,6 +418,27 @@ input:focus, select:focus { border-color: var(--accent); } so they stay legible instead of being covered by whatever is nearby. The layer needs an explicit z-index because those icons give their own children z-index 2-4, which would otherwise paint over this layer. */ +/* Country names for the far-out political map, drawn as stretched SVG text on + their own layer below the city labels. The SVG has no size of its own; the + overflow is visible so the rotated text can sit anywhere on the map. */ +.country-label-layer { pointer-events: none; z-index: 4; } +.political-label-svg { + position: absolute; + left: 0; + top: 0; + width: 0; + height: 0; + overflow: visible; +} +.political-label-svg text { + font-family: inherit; + font-weight: 700; + pointer-events: none; +} +/* Roads are hidden on the political map: flat country colours read better + without them, while the national borders stay to separate the nations. */ +#map-world.political #layer-roads { display: none; } + .city-label-layer { pointer-events: none; z-index: 5; } .city-label { position: absolute; @@ -510,6 +531,42 @@ input:focus, select:focus { border-color: var(--accent); } text-shadow: 0 1px 2px #000; } +/* Colour scale for the economic map modes, in its own space below the FPS + readout. The gradient itself is painted from the shared ramp in JS. */ +.map-legend { + position: absolute; + right: 14px; + top: 38px; + width: 190px; + padding: 10px 12px; + border-radius: 10px; + background: var(--panel-bg); + border: 1px solid var(--panel-border); + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.55); + pointer-events: none; + z-index: 30; +} +.map-legend-title { + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--muted); + margin-bottom: 6px; +} +.map-legend-bar { + height: 12px; + border-radius: 6px; + border: 1px solid rgba(0, 0, 0, 0.5); +} +.map-legend-scale { + display: flex; + justify-content: space-between; + margin-top: 4px; + font-size: 11px; + color: var(--text); + font-variant-numeric: tabular-nums; +} + /* The inspected tile / city panel is anchored to the bottom right. */ #tile-panel { right: 14px; @@ -579,11 +636,48 @@ input:focus, select:focus { border-color: var(--accent); } flex-direction: column; gap: 4px; } +.dock-buttons { position: relative; display: flex; gap: 8px; pointer-events: auto; } .game-corner .news-button { pointer-events: auto; padding: 6px 14px; font-size: 13px; } +/* The map-mode picker, anchored directly above the buttons. */ +.map-modes-popover { + position: absolute; + left: 0; + bottom: calc(100% + 8px); + min-width: 170px; + padding: 8px; + display: flex; + flex-direction: column; + gap: 2px; + border-radius: 10px; + background: var(--panel-bg); + border: 1px solid var(--panel-border); + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.55); + pointer-events: auto; + z-index: 45; +} +.map-modes-title { + padding: 2px 8px 6px; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--muted); +} +.map-mode-option { + display: flex; + align-items: center; + gap: 8px; + padding: 6px 8px; + border-radius: 6px; + font-size: 13px; + color: var(--text); + cursor: pointer; +} +.map-mode-option:hover { background: rgba(110, 175, 255, 0.2); } +.map-mode-option input { accent-color: #6eafff; cursor: pointer; } .feed-line { align-self: flex-start; max-width: 100%; diff --git a/client/index.html b/client/index.html index c5c5f82..dac234c 100644 --- a/client/index.html +++ b/client/index.html @@ -108,6 +108,7 @@
+
@@ -133,6 +134,17 @@
60 FPS
+ + +