diff --git a/docs/dashboard-tables.md b/docs/dashboard-tables.md
index 72226f6..5911210 100644
--- a/docs/dashboard-tables.md
+++ b/docs/dashboard-tables.md
@@ -36,10 +36,10 @@ nowrap ones kept everything.
| class | use it for | behaviour |
| ------------ | -------------------------------------------------------------- | ---------------------------------------------------------------------- |
- | *(none)* | short prose, names, tokens, badges | wraps at spaces |
+ | *(none)* | short prose, names, tokens, badges and badge lists | wraps at spaces (a `.badge` is nowrap on its own, so lists wrap between badges) |
| `num` | numbers, money, counts | right-aligned tabular figures; `td.num` never wraps, `th.num` may |
| `cell-tight` | timestamps, dates, ids, a single short token that must not split | `white-space: nowrap`. Nothing longer than ~20 characters |
- | `cell-wrap` | titles, URLs, notes, messages, badge lists, anything free-form | floor 10rem, ceiling 32rem, `overflow-wrap: anywhere` |
+ | `cell-wrap` | titles, URLs, notes, messages, anything free-form | floor 10rem, ceiling 32rem, `overflow-wrap: anywhere` |
Anything long that must not wrap gets an inner block with a Tailwind clamp
(`
`) inside a `cell-wrap` cell; the cell
@@ -57,9 +57,14 @@ nowrap ones kept everything.
- Give every `td` one of the four classes above according to its content.
When in doubt, leave it unclassed: wrapping is the safe default.
- Never `cell-tight` a name, a title, a reason sentence or a free-text field.
-- Check the page at 390, 1280 and 2560px. At 1280 and above the wrapper's
+- Check the page at 390, 1280 and 2560px. At 1440 and above the wrapper's
`scrollWidth` must equal its `clientWidth`; at 390 a wide table is allowed to
- scroll.
+ scroll. A table's floor is the sum of its nowrap columns plus 10rem per
+ `cell-wrap` column: the 13-column articles table bottoms out near 1270px, so
+ it still scrolls a little on a 1280px viewport. Tables inside a `.card`
+ cannot grow past the card (20rem minimum), so a card table with more than
+ four numeric columns (run page: provider usage) scrolls inside its card at
+ 1280px; move such a table to page level if that matters.
## Measuring
diff --git a/src/web/templates/_candidate_row.html b/src/web/templates/_candidate_row.html
index 4208353..0f1e627 100644
--- a/src/web/templates/_candidate_row.html
+++ b/src/web/templates/_candidate_row.html
@@ -11,5 +11,5 @@
{{ candidate.triage }} |
{{ candidate.quality }} |
{{ candidate.fit }} |
-
{% if candidate.exploration %}exploration{% endif %}{% if candidate.auto_include %}auto{% endif %} |
+
{% if candidate.exploration %}exploration{% endif %}{% if candidate.auto_include %}auto{% endif %} |
diff --git a/src/web/templates/dashboard/articles.html b/src/web/templates/dashboard/articles.html
index d19d744..626ce62 100644
--- a/src/web/templates/dashboard/articles.html
+++ b/src/web/templates/dashboard/articles.html
@@ -24,7 +24,7 @@
{{ article.first_seen }} |
{{ article.title }} |
{% if let Some(feed_id) = article.feed_id %}{{ article.feed }}{% else %}{{ article.feed }}{% endif %} |
-
{% for interest in article.interests %}{{ interest.name }}{% if !loop.last %} {% endif %}{% endfor %} |
+
{% for interest in article.interests %}{{ interest.name }}{% if !loop.last %} {% endif %}{% endfor %} |
{{ article.words }} |
{% if let Some(stage) = article.stage %}{{ stage }}{% if let Some(run_id) = article.run_id %} {% if let Some(date) = article.run_date %}{{ date }}{% else %}run {{ run_id }}{% endif %}{% endif %}{% else %}never considered{% endif %} |
{% if let Some(reason) = article.reason %}{{ reason }}{% endif %} |