feat(design): terminal-SOC aesthetic refresh (sprint 7) #10

Merged
knacky merged 12 commits from sprint/7-design into main 2026-06-10 16:40:20 +00:00
3 changed files with 20 additions and 12 deletions
Showing only changes of commit 6995c4c860 - Show all commits

View File

@@ -1,5 +1,5 @@
import { useEffect, useRef, useState } from 'react'; import { useEffect, useRef, useState } from 'react';
import { ChevronDown, Download, Loader2 } from 'lucide-react'; import { ChevronDown, Download } from 'lucide-react';
import { downloadEngagementExport, type ExportFormat } from '@/api/exports'; import { downloadEngagementExport, type ExportFormat } from '@/api/exports';
import { useToast } from '@/hooks/useToast'; import { useToast } from '@/hooks/useToast';
@@ -88,9 +88,11 @@ export function ExportEngagementButton({ engagementId }: ExportEngagementButtonP
data-testid={`export-format-${value}`} data-testid={`export-format-${value}`}
> >
{loading === value ? ( {loading === value ? (
<Loader2 size={12} className="animate-spin" aria-hidden /> <span className="font-mono text-[11px] animate-pulse" aria-hidden>
EXPORTING
</span>
) : null} ) : null}
{label} {loading !== value ? label : null}
</button> </button>
))} ))}
</div> </div>

View File

@@ -59,12 +59,12 @@ export function Layout(): JSX.Element {
</div> </div>
</div> </div>
{/* nav-bar-top — paper gives dark-mode lift vs canvas body */} {/* nav-bar-top — fixed dark slab, never inverts (same visual family as utility-strip + footer) */}
<header className="bg-paper border-b border-hairline"> <header className="bg-slab text-slab-text">
<div className="mx-auto w-full max-w-page px-xl h-16 flex items-center justify-between"> <div className="mx-auto w-full max-w-page px-xl h-16 flex items-center justify-between">
<Link to="/engagements" className="flex items-center gap-sm" aria-label="Mimic home"> <Link to="/engagements" className="flex items-center gap-sm" aria-label="Mimic home">
<span className="inline-block h-6 w-6 rotate-12 bg-primary" aria-hidden /> <span className="inline-block h-6 w-6 rotate-12 bg-primary" aria-hidden />
<span className="text-[20px] font-medium tracking-tight text-ink">Mimic</span> <span className="text-[20px] font-medium tracking-tight text-slab-text">Mimic</span>
</Link> </Link>
<nav className="flex items-center gap-md"> <nav className="flex items-center gap-md">
@@ -72,7 +72,9 @@ export function Layout(): JSX.Element {
to="/engagements" to="/engagements"
className={({ isActive }) => className={({ isActive }) =>
`text-[16px] py-2 px-md ${ `text-[16px] py-2 px-md ${
isActive ? 'text-ink border-b-2 border-primary -mb-[1px]' : 'text-charcoal' isActive
? 'text-slab-text border-b-2 border-primary'
: 'text-slab-muted hover:text-slab-text'
}` }`
} }
> >
@@ -83,7 +85,9 @@ export function Layout(): JSX.Element {
to="/admin/templates" to="/admin/templates"
className={({ isActive }) => className={({ isActive }) =>
`text-[16px] py-2 px-md ${ `text-[16px] py-2 px-md ${
isActive ? 'text-ink border-b-2 border-primary -mb-[1px]' : 'text-charcoal' isActive
? 'text-slab-text border-b-2 border-primary'
: 'text-slab-muted hover:text-slab-text'
}` }`
} }
> >
@@ -95,7 +99,9 @@ export function Layout(): JSX.Element {
to="/admin/users" to="/admin/users"
className={({ isActive }) => className={({ isActive }) =>
`text-[16px] py-2 px-md ${ `text-[16px] py-2 px-md ${
isActive ? 'text-ink border-b-2 border-primary -mb-[1px]' : 'text-charcoal' isActive
? 'text-slab-text border-b-2 border-primary'
: 'text-slab-muted hover:text-slab-text'
}` }`
} }
> >

View File

@@ -205,10 +205,10 @@ export function UsersAdminPage(): JSX.Element {
// per-row reconciliation (reset-password state leaked across rows). // per-row reconciliation (reset-password state leaked across rows).
<Fragment key={u.id}> <Fragment key={u.id}>
<tr className="border-b border-hairline last:border-0"> <tr className="border-b border-hairline last:border-0">
<td className="px-xl py-md font-mono font-medium text-ink"> <td className="px-xl py-md text-ink">
{u.username} <span className="font-mono font-medium">{u.username}</span>
{isSelf ? ( {isSelf ? (
<span className="ml-sm text-[12px] text-graphite uppercase tracking-[0.5px]"> <span className="ml-sm font-sans text-[12px] text-graphite">
(you) (you)
</span> </span>
) : null} ) : null}