diff --git a/static/app.js b/static/app.js
index b5d4fb7..f2f1857 100644
--- a/static/app.js
+++ b/static/app.js
@@ -7,7 +7,7 @@ import { initFindButton, setFindLabel } from "./mappicker.js";
import { W, PW, H, PL, PR, plotTop, plotBot, xLabY, setChartWidth, chartPalette,
tempChart, precipChart, dryChart, attachChartHover } from "./chart.js";
import { track } from "./digest.js";
-import { TIER_COLORS, SCALE_TEMP, drynessColor, ord, esc, todayISO, placeLabel,
+import { TIER_COLORS, SCALE_TEMP, drynessColor, pctOrd, esc, todayISO, placeLabel,
fmtPrecip, fmtWind, fmtHumid } from "./shared.js";
let selected = null; // {lat, lon}
@@ -124,7 +124,7 @@ function updateHero(data) {
document.getElementById("hero-where").textContent = `Today in ${placeLabel(data)}`;
document.getElementById("hero-band").textContent = g.grade;
document.getElementById("hero-detail").textContent =
- `${targetDay.tmax === g ? "High temp" : "Low temp"} in the ${ord(Math.round(g.percentile))} percentile`;
+ `${targetDay.tmax === g ? "High temp" : "Low temp"} in the ${pctOrd(g.percentile)} percentile`;
// Band colour rides the same token set as everything else; the band word is
// always present too, so colour is never the only signal.
card.style.setProperty("--cat", TIER_COLORS[g.class] || "");
diff --git a/static/calendar.js b/static/calendar.js
index 614ca1f..f984ed5 100644
--- a/static/calendar.js
+++ b/static/calendar.js
@@ -6,7 +6,7 @@ import { fmtTemp, onUnitChange } from "./units.js";
import "./account.js"; // header sign-in entry + notification bell
import { TTL, chunkedFetch, prefetchViews } from "./cache.js";
import { initFindButton, setFindLabel } from "./mappicker.js";
-import { TIER_COLORS, PRECIP_COLORS, SCALE_TEMP, SCALE_RAIN, drynessColor, ord,
+import { TIER_COLORS, PRECIP_COLORS, SCALE_TEMP, SCALE_RAIN, drynessColor, pctOrd,
fmtPrecip, fmtWind, fmtHumid, MONTHS, isoOfDate, monthStart, monthEnd,
CHUNK_MONTHS, buildChunks, clickOpensPicker, metricBuckets, distStrip,
seasonFilterDropdown, seasonSummaryText, syncSeasonChecks,
@@ -620,7 +620,7 @@ function attachHover(byDate) {
const line = (key, name, g, fmt, color) => {
const rc = key === activeKey ? " tt-r-active" : "";
if (!g) return `${name}—`;
- const pct = g.pct == null ? "" : ` · ${ord(g.pct)} pct`;
+ const pct = g.pct == null ? "" : ` · ${pctOrd(g.pct)} pct`;
const catCls = key === activeKey ? "tt-cat tt-cat-active" : "tt-cat";
const style = color ? ` style="--cat:${color}"` : "";
return `${name}${fmt(g.v)}${pct}${g.g}`;
diff --git a/static/chart.js b/static/chart.js
index 225f26a..13939a9 100644
--- a/static/chart.js
+++ b/static/chart.js
@@ -3,7 +3,7 @@
// palette, and the pointer-driven hover. Extracted from app.js so any page can
// plot a metric series; app.js keeps only its page orchestration (buildChart).
import { fmtTemp, toUnit } from "./units.js";
-import { TIER_COLORS, drynessColor, ord } from "./shared.js";
+import { TIER_COLORS, drynessColor, pctOrd } from "./shared.js";
// #rrggbb -> rgba() with alpha, so band tints derive from the same site colors.
const hexA = (hex, a) => {
@@ -165,7 +165,7 @@ function lineChart(cfg) {
const vy = (y - plotTop < 26 ? y + 15 : y - 15).toFixed(1); // flip below near the top
const pv = getPct ? getPct(d) : null;
const pct = pv == null ? "" :
- `