fix(admin): style the Teams admin screen with the site's own classes #162
Reference in New Issue
Block a user
No description provided.
Delete Branch "fix/teams-admin-theming"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What & why
Admin → Teams did not follow the site's branding or theming: unstyled tables, buttons in three
different accidental styles, and content sitting flush against unpadded panels.
The cause is that the three views behind that screen (
TeamsAdmin.jsxand theTeamIntegrations/
TeamVoicepanels it embeds) were written against a stylesheet that was never added.Four classes they use are defined nowhere in the project — not in
client/styles/theme.css,not in
index.html, not inmodule-uo. These views are the only files in the whole client thatreference them:
.tableTeamsAdmin×3,TeamIntegrations×1,TeamVoice×1.kvTeamsAdmin:56<dl>.listTeamsAdmin:132.noticeTeamsAdmin:342The buttons were broken, not merely off-brand.
.btncarries the padding, border-width, radiusand font;
.btn-primary/.btn-ghostcarry only colour. Nine buttons usedclassName="btn-ghost"with no
btn(bare UA controls with a stray background), and eleven used a bareclassName="btn"(no variant, so they fell back to the UA's light button face at full 12×26px pill size inside table
cells).
.panelsupplies no padding (theme.css:140is border + radius + gradient only). Every otherview pairs it with explicit padding; these five panels had none.
Headings were unstyled. There is no base
h1/h2rule in the theme, so raw<h2>rendered inGeorgia at UA sizes instead of Cinzel.
/admin/teamswas also missing fromAdminLayout'sTITLESmap, which is why the topbar read "ADMIN".
A private palette, three near-misses off the house one:
#e08b77vs#d98b84(60 usessite-wide),
#8fbf7avs#7fd0a4(26),#e0b877vs#e0b070(7).What changed
Presentation only — no behaviour, data, routes, schema or config.
docs/describes what thisscreen shows, which is unchanged, so no docs edit is required.
adm-table/adm-th/adm-tdinsidepanel-flat, as the other fourteen admin viewsdo. Wrapped in
overflow-x: auto: a status badge and the action buttons are bothnowrapbydesign, so a narrow viewport can always overflow a row, and
.panel-flatclips rather thanscrolls.
btn btn-primary btn-sq/btn btn-ghost btn-sqtriplet, with real gapsbetween adjacent ones.
padding: 22, matchingModulesAdmin.h2.display; the in-page<h1>Teams</h1>removed in favour of the topbar title, with/admin/teamsadded toTITLES.badge-pub/badge-moderator/badge-ban/badge-draftmodifiers.
.badgealone declares no border, so the old inlineborderColorwas inert..kvblock → a two-column grid usingfield-label; the.listqueue → anadm-table; the.notice→ the existing.notecallout.var(--line-soft)forrgba(255,255,255,0.12),var(--radius-input)forborderRadius: 4.How it was tested
Walked live in the browser against the dev DB as an admin (two Teams, one hidden pending review, a
sync error, and forum-ledger rows), covering every surface on the screen: sync panel, review queue,
All Teams, the forum ledger, the bridge draft form and its acknowledgement dialog. Cancelled out of
both forms; confirmed no rows were written.
One regression was caught and fixed during the walk:
white-space: nowrapon the name/timestampcells pushed the row past
.panel-flat, which hasoverflow: hidden, clipping the "Forum log"button. Reverted, and the scroll wrapper added instead.
npm test --prefix client→ 288/288npm test --prefix server→ 1162/1162npm run build --prefix client→ cleanChecklist
AI-assisted contributions (required)
Claude Code (Opus 5). I have reviewed and understandevery change, and take responsibility for it. AI-authored commits are
marked with a
Co-Authored-By/Assisted-Bytrailer.License
(GNU GPL v3.0 or later), and I have the right to contribute it.