diff --git a/apps/postcards/src/features/stats/StatsView.tsx b/apps/postcards/src/features/stats/StatsView.tsx index 55337fb..6e72a57 100644 --- a/apps/postcards/src/features/stats/StatsView.tsx +++ b/apps/postcards/src/features/stats/StatsView.tsx @@ -244,63 +244,68 @@ function CountryRow({ {/* Each tier is tappable — it opens Places filtered to this country + tier, - so you can browse (and add) exactly what it counts. Regions have no - Places list of their own, so that one opens the country's full page. */} - {c.citiesTotal > 0 && - metric( - "stats.country.metricCities", - "stats.country.metricCitiesDetail", - "stats.country.cityBarAria", - c.citiesVisited, - c.citiesTotal, - c.cityPct, - CITY_COLOR, - drill("cities", 0), - )} - {c.bigCitiesTotal > 0 && - metric( - "stats.country.metricBigCities", - "stats.country.metricBigCitiesDetail", - "stats.country.bigCityBarAria", - c.bigCitiesVisited, - c.bigCitiesTotal, - c.bigCityPct, - BIG_COLOR, - drill("cities", 100_000), - )} - {hasMega && - metric( - "stats.country.metricMega", - "stats.country.metricMegaDetail", - "stats.country.megaCityBarAria", - c.megaCitiesVisited, - c.megaCitiesTotal, - c.megaCityPct, - MEGA_COLOR, - drill("cities", 1_000_000), - )} - {c.regionsTotal > 0 && - metric( - "stats.country.metricRegions", - "stats.country.metricRegionsDetail", - "stats.country.regionBarAria", - c.regionsVisited, - c.regionsTotal, - c.regionPct, - REGION_COLOR, - () => useUi.getState().openCountry(c.iso2), - )} - {c.heritageTotal > 0 && - metric( - "stats.country.metricSites", - "stats.country.metricSitesDetail", - "stats.country.heritageBarAria", - c.heritageVisited, - c.heritageTotal, - c.heritagePct, - "var(--stat-want)", - drill("monuments", 0), - )} + so you can browse (and add) exactly what it counts. The three city + tiers share one row; regions + sites sit on the row below. Regions have + no Places list of their own, so that one opens the country's full page. */} +
+ {c.citiesTotal > 0 && + metric( + "stats.country.metricCities", + "stats.country.metricCitiesDetail", + "stats.country.cityBarAria", + c.citiesVisited, + c.citiesTotal, + c.cityPct, + CITY_COLOR, + drill("cities", 0), + )} + {c.bigCitiesTotal > 0 && + metric( + "stats.country.metricBigCities", + "stats.country.metricBigCitiesDetail", + "stats.country.bigCityBarAria", + c.bigCitiesVisited, + c.bigCitiesTotal, + c.bigCityPct, + BIG_COLOR, + drill("cities", 100_000), + )} + {hasMega && + metric( + "stats.country.metricMega", + "stats.country.metricMegaDetail", + "stats.country.megaCityBarAria", + c.megaCitiesVisited, + c.megaCitiesTotal, + c.megaCityPct, + MEGA_COLOR, + drill("cities", 1_000_000), + )} +
+
+ {c.regionsTotal > 0 && + metric( + "stats.country.metricRegions", + "stats.country.metricRegionsDetail", + "stats.country.regionBarAria", + c.regionsVisited, + c.regionsTotal, + c.regionPct, + REGION_COLOR, + () => useUi.getState().openCountry(c.iso2), + )} + {c.heritageTotal > 0 && + metric( + "stats.country.metricSites", + "stats.country.metricSitesDetail", + "stats.country.heritageBarAria", + c.heritageVisited, + c.heritageTotal, + c.heritagePct, + "var(--stat-want)", + drill("monuments", 0), + )} +
{detail && ( <> diff --git a/apps/postcards/src/styles.css b/apps/postcards/src/styles.css index 8ea65d7..7c71303 100644 --- a/apps/postcards/src/styles.css +++ b/apps/postcards/src/styles.css @@ -1773,8 +1773,9 @@ h1.brand { display: none; } .cmeter { - /* Two per row (so up to four tiers stay legible on a phone), growing to fill. */ - flex: 1 1 calc(50% - 12px); + /* Three per row: the city tiers (cities/big/mega) share the top row and regions + wraps to the next — matching the expanded body's layout. */ + flex: 1 1 calc(33.333% - 8px); min-width: 0; display: flex; flex-direction: column; @@ -1829,6 +1830,40 @@ h1.brand { .metric-btn:focus-visible { background: var(--bg-sub); } +/* Tier metrics in rows: the three city tiers on one line, regions + sites on the + next. Each cell grows to fill its row; a narrow cell stacks its label over its + count so it stays readable at a third of the card's width. */ +.tier-grid { + display: flex; + flex-wrap: wrap; + gap: 4px 8px; + margin-top: 8px; +} +.tier-grid > .metric { + flex: 1 1 0; + min-width: 0; + margin-top: 0; +} +.tier-grid .metric-btn { + width: 100%; + margin: 0; + padding: 6px; +} +.tier-grid .metric-label { + flex-direction: column; + align-items: flex-start; + gap: 0; + min-width: 0; +} +.tier-grid .metric-label > span { + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tier-grid .metric-label .muted { + font-size: 10.5px; +} /* "What's left to explore" as plain, scannable text — a label + count, then names as accent links joined by thin separators. Far lighter than the old rounded-chip wall, and it wraps cleanly on a narrow phone. */