Skip to content

Commit 6a0e93a

Browse files
fix(admin): adopt Kumo's brand colours (#2262)
* fix(admin): adopt Kumo's brand blue The classic theme pinned --color-kumo-brand to the WordPress admin blue (#2271b1), roughly half the chroma of Kumo's own brand, so primary buttons rendered muted. Drop the brand, brand-hover and link overrides so they inherit Kumo and track future updates. --color-kumo-ring goes too: nothing in the admin or Kumo ever read it. Brand text keeps an override. Kumo maps --text-color-kumo-brand to the Cloudflare orange wordmark (#f6821f), which would have recoloured 62 text-kumo-brand sites -- sign-in links, verified badges, and links inside user content -- to orange at roughly 2.6:1 on white. Pointing it at the link colour keeps those blue at 8.5:1 light and 7.7:1 dark, up from 5.2:1. * fix(admin): drop the brand text override Brand text resolves to Kumo's value alongside the fill, so no brand token stays overridden in the classic theme. Accents using text-kumo-brand now render Kumo's orange rather than a blue. * fix(admin): colour links with Kumo's link token Kumo maps --text-color-kumo-brand to the Cloudflare orange wordmark. The admin used text-kumo-brand for links and accent icons, so inheriting Kumo's value rendered them orange at 2.5:1 against the light surface, under the 4.5:1 needed for text and the 3:1 needed for meaningful icons. Point all 62 call sites at text-kumo-link, the token that already means interactive text. Measures 8.8:1, and no theme token stays overridden. Border and background brand utilities are untouched; they read --color-kumo-brand, which is blue in both themes. * test(e2e): follow the renamed locale marker class The current-locale marker moved from text-kumo-brand to text-kumo-link, so the selector no longer matched.
1 parent 8288783 commit 6a0e93a

30 files changed

Lines changed: 68 additions & 72 deletions
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@emdash-cms/admin": patch
3+
---
4+
5+
Updates the admin to Kumo's brand colours: primary buttons and fills become a brighter blue, and links and accent icons pick up Kumo's link colour.

e2e/tests/i18n.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ test.describe("i18n", () => {
108108
await admin.waitForLoading();
109109

110110
// The "current" marker should appear next to EN
111-
const currentMarker = admin.page.locator("span.text-kumo-brand", {
111+
const currentMarker = admin.page.locator("span.text-kumo-link", {
112112
hasText: "current",
113113
});
114114
await expect(currentMarker).toBeVisible();

packages/admin/src/components/ContentList.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,7 @@ export function ContentList({
551551
to="/content/$collection/new"
552552
params={{ collection }}
553553
search={{ locale: activeLocale }}
554-
className="text-kumo-brand underline"
554+
className="text-kumo-link underline"
555555
>
556556
{t`Create your first one`}
557557
</Link>
@@ -883,7 +883,7 @@ function SortableTh({ field, sort, onSortChange, label }: SortableThProps) {
883883
type="button"
884884
onClick={handleClick}
885885
className={cn(
886-
"inline-flex items-center gap-1 rounded text-kumo-default hover:text-kumo-brand",
886+
"inline-flex items-center gap-1 rounded text-kumo-default hover:text-kumo-link",
887887
"focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-kumo-brand",
888888
)}
889889
>
@@ -979,7 +979,7 @@ function ContentListItem({
979979
to="/content/$collection/$id"
980980
params={{ collection, id: item.id }}
981981
search={{ locale: item.locale }}
982-
className="font-medium hover:text-kumo-brand"
982+
className="font-medium hover:text-kumo-link"
983983
>
984984
{title}
985985
</Link>
@@ -1096,7 +1096,7 @@ function TrashedListItem({ item, onRestore, onPermanentDelete }: TrashedListItem
10961096
aria-label={t`Restore ${title}`}
10971097
onClick={() => onRestore?.(item.id)}
10981098
>
1099-
<ArrowCounterClockwise className="h-4 w-4 text-kumo-brand" aria-hidden="true" />
1099+
<ArrowCounterClockwise className="h-4 w-4 text-kumo-link" aria-hidden="true" />
11001100
</Button>
11011101
<Dialog.Root disablePointerDismissal>
11021102
<Dialog.Trigger

packages/admin/src/components/ContentTypeList.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ export function ContentTypeList({
120120
<tr>
121121
<td colSpan={5} className="px-4 py-8 text-center text-kumo-subtle">
122122
{t`No content types yet.`}{" "}
123-
<Link to="/content-types/new" className="text-kumo-brand underline">
123+
<Link to="/content-types/new" className="text-kumo-link underline">
124124
{t`Create your first one`}
125125
</Link>
126126
</td>
@@ -187,7 +187,7 @@ function ContentTypeRow({ collection, onRequestDelete }: ContentTypeRowProps) {
187187
<Link
188188
to="/content-types/$slug"
189189
params={{ slug: collection.slug }}
190-
className="font-medium hover:text-kumo-brand"
190+
className="font-medium hover:text-kumo-link"
191191
>
192192
{collection.label}
193193
</Link>

packages/admin/src/components/DeviceAuthorizePage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ export function DeviceAuthorizePage() {
171171
{/* Header */}
172172
<div className="text-center mb-8">
173173
<div className="inline-flex items-center justify-center w-12 h-12 rounded-xl bg-kumo-brand/10 mb-4">
174-
<TerminalIcon className="w-6 h-6 text-kumo-brand" />
174+
<TerminalIcon className="w-6 h-6 text-kumo-link" />
175175
</div>
176176
<h1 className="text-xl font-semibold tracking-tight">{t`Authorize Device`}</h1>
177177
<p className="text-kumo-subtle text-sm mt-1.5">{t`Enter the code from your terminal`}</p>

packages/admin/src/components/InviteAcceptPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ function RegisterStep({ inviteData, token }: RegisterStepProps) {
3737
<div className="text-center">
3838
<div className="inline-flex items-center justify-center w-16 h-16 rounded-full bg-kumo-brand/10 mx-auto mb-4">
3939
<svg
40-
className="w-8 h-8 text-kumo-brand"
40+
className="w-8 h-8 text-kumo-link"
4141
fill="none"
4242
stroke="currentColor"
4343
viewBox="0 0 24 24"

packages/admin/src/components/LocaleSwitcher.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ export function LocaleBadges({
108108
className={cn(
109109
"rounded px-1 py-0.5 text-[10px] font-semibold uppercase leading-none transition-colors",
110110
exists
111-
? "bg-kumo-brand/10 text-kumo-brand hover:bg-kumo-brand/20"
111+
? "bg-kumo-brand/10 text-kumo-link hover:bg-kumo-brand/20"
112112
: "bg-kumo-tint text-kumo-subtle/50",
113113
onLocaleClick && exists && "cursor-pointer",
114114
(!onLocaleClick || !exists) && "cursor-default",

packages/admin/src/components/LoginPage.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ function MagicLinkForm({ onBack }: MagicLinkFormProps) {
8484
<div className="space-y-6 text-center">
8585
<div className="inline-flex items-center justify-center w-16 h-16 rounded-full bg-kumo-brand/10 mx-auto">
8686
<svg
87-
className="w-8 h-8 text-kumo-brand"
87+
className="w-8 h-8 text-kumo-link"
8888
fill="none"
8989
stroke="currentColor"
9090
viewBox="0 0 24 24"
@@ -333,7 +333,7 @@ export function LoginPage({ redirectUrl = "/_emdash/admin" }: LoginPageProps) {
333333
<p className="text-center mt-4 text-sm text-kumo-subtle">
334334
<Trans>
335335
Don't have an account?{" "}
336-
<Link to="/signup" className="text-kumo-brand hover:underline font-medium">
336+
<Link to="/signup" className="text-kumo-link hover:underline font-medium">
337337
Sign up
338338
</Link>
339339
</Trans>

packages/admin/src/components/MarketplaceBrowse.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ function PluginCard({ plugin, isInstalled }: PluginCardProps) {
249249
{/* Name + meta */}
250250
<div className="min-w-0 flex-1">
251251
<div className="flex items-center gap-2">
252-
<h3 className="truncate font-semibold group-hover:text-kumo-brand">{plugin.name}</h3>
252+
<h3 className="truncate font-semibold group-hover:text-kumo-link">{plugin.name}</h3>
253253
{isInstalled && (
254254
<span
255255
role="link"
@@ -266,7 +266,7 @@ function PluginCard({ plugin, isInstalled }: PluginCardProps) {
266266
</div>
267267
<div className="flex items-center gap-2 text-xs text-kumo-subtle">
268268
<span>{plugin.author.name}</span>
269-
{plugin.author.verified && <ShieldCheck className="h-3 w-3 text-kumo-brand" />}
269+
{plugin.author.verified && <ShieldCheck className="h-3 w-3 text-kumo-link" />}
270270
{plugin.latestVersion?.version && <span>v{plugin.latestVersion.version}</span>}
271271
</div>
272272
</div>
@@ -306,7 +306,7 @@ function PluginCard({ plugin, isInstalled }: PluginCardProps) {
306306
function PluginAvatar({ name }: { name: string }) {
307307
const initial = name.charAt(0).toUpperCase();
308308
return (
309-
<div className="flex h-10 w-10 items-center justify-center rounded-lg bg-kumo-brand/10 text-kumo-brand font-bold text-lg">
309+
<div className="flex h-10 w-10 items-center justify-center rounded-lg bg-kumo-brand/10 text-kumo-link font-bold text-lg">
310310
{initial}
311311
</div>
312312
);

packages/admin/src/components/MarketplacePluginDetail.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ export function MarketplacePluginDetail({
122122
<p className="mt-1 text-sm text-kumo-subtle">
123123
{error instanceof Error ? error.message : t`Plugin not found`}
124124
</p>
125-
<Link to="/plugins/marketplace" className="mt-4 inline-block text-kumo-brand text-sm">
125+
<Link to="/plugins/marketplace" className="mt-4 inline-block text-kumo-link text-sm">
126126
{t`Back to marketplace`}
127127
</Link>
128128
</div>
@@ -153,7 +153,7 @@ export function MarketplacePluginDetail({
153153
aria-label={isImageFlagged ? t`Icon blurred due to image audit` : undefined}
154154
/>
155155
) : (
156-
<div className="flex h-16 w-16 items-center justify-center rounded-xl bg-kumo-brand/10 text-kumo-brand text-2xl font-bold">
156+
<div className="flex h-16 w-16 items-center justify-center rounded-xl bg-kumo-brand/10 text-kumo-link text-2xl font-bold">
157157
{plugin.name.charAt(0).toUpperCase()}
158158
</div>
159159
)}
@@ -162,7 +162,7 @@ export function MarketplacePluginDetail({
162162
<h1 className="text-2xl font-semibold leading-tight">{plugin.name}</h1>
163163
<div className="mt-1 flex items-center gap-2 text-sm text-kumo-subtle">
164164
<span>{plugin.author.name}</span>
165-
{plugin.author.verified && <ShieldCheck className="h-4 w-4 text-kumo-brand" />}
165+
{plugin.author.verified && <ShieldCheck className="h-4 w-4 text-kumo-link" />}
166166
{latest && (
167167
<>
168168
<span aria-hidden="true">&middot;</span>
@@ -219,7 +219,7 @@ export function MarketplacePluginDetail({
219219
href={plugin.repositoryUrl}
220220
target="_blank"
221221
rel="noopener noreferrer"
222-
className="flex items-center gap-1 text-kumo-brand hover:underline"
222+
className="flex items-center gap-1 text-kumo-link hover:underline"
223223
>
224224
<GithubLogo className="h-4 w-4" />
225225
{t`Source`}
@@ -230,7 +230,7 @@ export function MarketplacePluginDetail({
230230
href={plugin.homepageUrl}
231231
target="_blank"
232232
rel="noopener noreferrer"
233-
className="flex items-center gap-1 text-kumo-brand hover:underline"
233+
className="flex items-center gap-1 text-kumo-link hover:underline"
234234
>
235235
<Globe className="h-4 w-4" />
236236
{t`Website`}
@@ -290,7 +290,7 @@ export function MarketplacePluginDetail({
290290
<ul className="space-y-1.5">
291291
{plugin.capabilities.map((cap) => (
292292
<li key={cap} className="flex items-start gap-2 text-xs text-kumo-subtle">
293-
<ShieldCheck className="mt-0.5 h-3 w-3 shrink-0 text-kumo-brand" />
293+
<ShieldCheck className="mt-0.5 h-3 w-3 shrink-0 text-kumo-link" />
294294
<span>{describeCapability(cap)}</span>
295295
</li>
296296
))}

0 commit comments

Comments
 (0)