/wiki/manage showed its table in near-black text on the near-black page: the
header row, the tid, Posts and Created columns were effectively invisible.
Root cause
The theme repaints Bootstrap's light colour mode dark ($body-color, $body-bg, $card-bg, …) but never overrode $body-emphasis-color, which
Bootstrap defaults to $black (#09080b here). Everything that chains to --bs-emphasis-color inherited that ink:
--bs-table-color / -striped- / -hover- / -active- on any plain .table
the .text-emphasis / .link-body-emphasis utilities
_controls.scss had already patched this by hand for the two tables anyone had
noticed (notification/table, flags/list) and for post-content tables. Every
other table in the forum was still broken. Fixing the variable once is a smaller
diff than a third per-table patch, and it covers tables that do not exist yet.
The change
One variable in scss/overrides.scss — the file whose stated job is exactly
this — plus a contract test so the next dark-repaint variable that goes missing
fails a check instead of shipping.
Verification
Booted the sow-nodebb dev stack with this working tree mounted
(PLUGIN_PATH=../sow-nodebb-theme), seeded a wiki namespace with topics, and
compared /wiki/manage before and after: unreadable → fully legible, gold rules
and buttons unchanged. Also eyeballed /categories, /notifications, /user/admin, a topic, /wiki and /flags for regressions — none. The ACP is
unaffected: it builds from admin/overrides, not this file.
All tests/*.test.js pass; the new test fails when the variable is reverted.
Closes #36.
## What was wrong
`/wiki/manage` showed its table in near-black text on the near-black page: the
header row, the `tid`, `Posts` and `Created` columns were effectively invisible.
## Root cause
The theme repaints Bootstrap's **light** colour mode dark (`$body-color`,
`$body-bg`, `$card-bg`, …) but never overrode `$body-emphasis-color`, which
Bootstrap defaults to `$black` (`#09080b` here). Everything that chains to
`--bs-emphasis-color` inherited that ink:
- `--bs-table-color` / `-striped-` / `-hover-` / `-active-` on any plain `.table`
- `--bs-tooltip-bg` (dark text on a dark tooltip)
- `--bs-nav-tabs-link-active-color`, `--bs-nav-underline-link-active-color`
- `--bs-list-group-action-hover-color` / `-active-color`
- the `.text-emphasis` / `.link-body-emphasis` utilities
`_controls.scss` had already patched this by hand for the two tables anyone had
noticed (`notification/table`, `flags/list`) and for post-content tables. Every
other table in the forum was still broken. Fixing the variable once is a smaller
diff than a third per-table patch, and it covers tables that do not exist yet.
## The change
One variable in `scss/overrides.scss` — the file whose stated job is exactly
this — plus a contract test so the next dark-repaint variable that goes missing
fails a check instead of shipping.
## Verification
Booted the `sow-nodebb` dev stack with this working tree mounted
(`PLUGIN_PATH=../sow-nodebb-theme`), seeded a wiki namespace with topics, and
compared `/wiki/manage` before and after: unreadable → fully legible, gold rules
and buttons unchanged. Also eyeballed `/categories`, `/notifications`,
`/user/admin`, a topic, `/wiki` and `/flags` for regressions — none. The ACP is
unaffected: it builds from `admin/overrides`, not this file.
All `tests/*.test.js` pass; the new test fails when the variable is reverted.
/wiki/manage rendered its table in near-black on the near-black page.
The theme repaints Bootstrap's LIGHT colour mode dark but never overrode
$body-emphasis-color, which Bootstrap defaults to $black. Any component
that chains to --bs-emphasis-color inherited that ink: plain .table text
and header cells, tooltips (dark text on dark background), nav-tabs and
nav-underline active links, and list-group hover states.
Point it at $wg-text, next to the other body colour overrides, instead of
patching .table per page. Verified in the sow-nodebb dev stack against a
seeded wiki namespace: the manage table, topics, categories, notifications
and account pages all render correctly.
Also refresh AGENTS.md "How To Test" for the current `make dev*` loop and
state that a theme change can always be checked on a live local forum.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
archvillainette
scheduled this pull request to auto merge when all checks succeed 2026-07-20 11:05:19 +00:00
xtul
approved these changes 2026-07-20 11:05:44 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Closes #36.
What was wrong
/wiki/manageshowed its table in near-black text on the near-black page: theheader row, the
tid,PostsandCreatedcolumns were effectively invisible.Root cause
The theme repaints Bootstrap's light colour mode dark (
$body-color,$body-bg,$card-bg, …) but never overrode$body-emphasis-color, whichBootstrap defaults to
$black(#09080bhere). Everything that chains to--bs-emphasis-colorinherited that ink:--bs-table-color/-striped-/-hover-/-active-on any plain.table--bs-tooltip-bg(dark text on a dark tooltip)--bs-nav-tabs-link-active-color,--bs-nav-underline-link-active-color--bs-list-group-action-hover-color/-active-color.text-emphasis/.link-body-emphasisutilities_controls.scsshad already patched this by hand for the two tables anyone hadnoticed (
notification/table,flags/list) and for post-content tables. Everyother table in the forum was still broken. Fixing the variable once is a smaller
diff than a third per-table patch, and it covers tables that do not exist yet.
The change
One variable in
scss/overrides.scss— the file whose stated job is exactlythis — plus a contract test so the next dark-repaint variable that goes missing
fails a check instead of shipping.
Verification
Booted the
sow-nodebbdev stack with this working tree mounted(
PLUGIN_PATH=../sow-nodebb-theme), seeded a wiki namespace with topics, andcompared
/wiki/managebefore and after: unreadable → fully legible, gold rulesand buttons unchanged. Also eyeballed
/categories,/notifications,/user/admin, a topic,/wikiand/flagsfor regressions — none. The ACP isunaffected: it builds from
admin/overrides, not this file.All
tests/*.test.jspass; the new test fails when the variable is reverted.