From 28322b4b82b9a2cd3f0e646193c34ea4e00941a8 Mon Sep 17 00:00:00 2001 From: parththakkar106 Date: Sun, 23 Aug 2026 04:30:08 +0530 Subject: [PATCH] Let a long state chip wrap instead of running off the phone A change chip like "bandit leader aggression +10" was nowrap inside the story column, which has nothing to scroll, so it overran narrow screens. The label may now break as a last resort while the value stays glued together, and the analytics range buttons wrap onto a second row. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01DfMCsN1KBLsTqMkj5hSgrY --- frontend/src/index.css | 11 +++++++++-- frontend/src/pages/Play.jsx | 8 ++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/frontend/src/index.css b/frontend/src/index.css index 15fa0ed..b164672 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -1161,8 +1161,15 @@ button:disabled { opacity: 0.45; cursor: default; transform: none; box-shadow: n background: var(--bg-input); color: var(--text-dim); font-variant-numeric: tabular-nums; - white-space: nowrap; + /* A chip must never be wider than the column it sits in: an NPC stat like + "bandit leader aggression +10" overruns a phone, and the chip row is + inside the story text, which has nothing to scroll. The label may break + mid-word as a last resort; the value is glued to it by its own nowrap so + the sign and number never end up on separate lines. */ + max-width: 100%; + overflow-wrap: anywhere; } +.chg-val { white-space: nowrap; } .chg-up { color: var(--player, #4caf82); border-color: color-mix(in srgb, var(--player, #4caf82) 40%, var(--border)); } .chg-down { color: var(--danger, #e5484d); border-color: color-mix(in srgb, var(--danger, #e5484d) 40%, var(--border)); } .chg-flag { color: var(--accent-bright); } @@ -2345,7 +2352,7 @@ button.primary.compact { padding: 3px 12px; font-size: 0.76rem; margin-left: aut /* Wider than the reading pages: this one is a grid of small figures, not prose, and 960px puts two charts and eight tiles into a column. */ .an-page { max-width: 1180px; } -.an-ranges { display: flex; gap: 6px; } +.an-ranges { display: flex; flex-wrap: wrap; gap: 6px; } /* Four across, not auto-fit: there are eight tiles, and letting them flow leaves a single orphan on the second row at most widths. */ diff --git a/frontend/src/pages/Play.jsx b/frontend/src/pages/Play.jsx index 8d618fe..0a680d9 100644 --- a/frontend/src/pages/Play.jsx +++ b/frontend/src/pages/Play.jsx @@ -1213,7 +1213,7 @@ function StateChangeChips({ changes }) {
{changes.map((c, i) => { if (c.kind === 'flag') { - return {nice(c.label)}: {c.on ? 'on' : 'off'} + return {nice(c.label)}: {c.on ? 'on' : 'off'} } if (c.kind === 'milestone') { return ✓ {nice(c.label)} @@ -1221,7 +1221,11 @@ function StateChangeChips({ changes }) { const d = c.delta const dir = typeof d === 'number' ? (d > 0 ? 'up' : d < 0 ? 'down' : 'flat') : 'flat' const txt = typeof d === 'number' ? (d > 0 ? `+${d}` : `${d}`) : `→ ${c.value}` - return {nice(c.label)} {txt} + return ( + + {nice(c.label)} {txt} + + ) })}
)