Repository navigation
feat(studio): docShots can write elsewhere and shoot dark mode - #779
Merged
Merged
Conversation
LOUSHO_DOC_SHOTS_OUT=<dir> overrides the output directory and LOUSHO_DOC_SHOTS_SCHEME=light|dark picks the colour scheme (anything else fails fast), so a restyle can be reviewed before and after in both themes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Studio redesign Design Brief is now the source of truth for the look, implemented by theme.css; the old mockup references no longer apply. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…led base primitives theme.css implements the redesign brief: zinc neutrals with --surface-3 and --border-strong, indigo accent (+ --accent-solid-hover), status tones with new --info-soft and --violet/--violet-soft, chart series, radius, space, shadow (light-dark() layer colours), ring, motion and type-scale tokens. Light --success is #157e3c (brief #15803d reads 4.45:1 on --success-soft). Inter Variable ships as one latin-only woff2 (fonts.css, a single @font-face pointing at @fontsource-variable/inter's latin wght file). lucide-react draws the toast close icon. base.css restyles buttons (secondary/primary/ghost/danger/success, -sm, -icon), sentence-case status pills with a pulsing running dot and a violet tone, fields, inputs, a chevron select, chips, the switch, toggle rows, kbd and the scrollbar; every transition is off under reduced motion. contrast.test.ts gains info, violet, surface-3, accent-solid-hover and accent-soft pairs. The narrow top bar gets min-width: 0 so the wider pill and buttons never widen the page at 375px. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s 24px, docShots scheme checked only when shooting Inter is wider than the old fallback, so the Playground's provider/model row now favours the select (1.4fr / 1fr) and "custom (provider/model)" shows whole. The toast close button gets a 24x24 hit target. LOUSHO_DOC_SHOTS_SCHEME is validated only when LOUSHO_DOC_SHOTS is set, so a stray value cannot break collection of a normal e2e run. Docs: drop a stray triple space. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Picks up the docShots LOUSHO_DOC_SHOTS_OUT / LOUSHO_DOC_SHOTS_SCHEME paragraph in docs/agent-forge.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Foundation of the Studio redesign: zinc/indigo light-dark tokens, Inter Variable (latin only), lucide-react, restyled base primitives, and docShots OUT/SCHEME overrides for before/after review.
Ticket: D1 (Agent Forge Studio redesign, audit/forge-redesign/PLAN.md)
Changes
Verification: focused vitest,
tsc --noEmit, eslint, affected Playwright specs, light + dark screenshots reviewed; full suite and fallow run in CI.Measurements: Studio dist 1,423,135 B (3 files) -> ~1,483,583 B (4 files; one Inter latin woff2, 48,256 B). pack-smoke 859 entries / 4.7 MB packed / 16.4 MB unpacked (budgets 940 / 5 MiB / 18 MiB). size-check tarball 16.36 MB of 16.46 MB budget.
Deviations from the brief:
--successlight#157e3c(brief#15803dis 4.45:1 on--success-soft); new--accent-solid-hover(brief forbidsfilter: brightness);.btn-ghostkeeps a--borderhairline (text ghost actions read as loose text without it; icon ghosts are borderless); shadows written as per-layerlight-dark()colours (renders identically);.fallowrc.jsonignores@fontsource-variable/inter(referenced only from CSSurl()); Playground provider row widened so Inter fits its label.Screenshot overrides for later tickets:
LOUSHO_DOC_SHOTS=1 LOUSHO_DOC_SHOTS_OUT=<dir> LOUSHO_DOC_SHOTS_SCHEME=<light|dark> npx playwright test -c apps/agent-forge/playwright.config.ts docShots.Design Brief (source of truth for theme.css)
Design Brief (binding for every ticket)
Character. Calm, precise, dense where data is (tables, trees), airy elsewhere (cards, forms, empty states). Neutral zinc greys, one indigo accent, status colours only for status. Depth from 1px hairline borders + very soft shadows, never heavy drop shadows. Dark mode is the hero: near-black canvas, slightly lifted surfaces, borders that glow faintly, not grey slabs.
Tokens (theme.css; every colour stays a
light-dark(<light>, <dark>)pair; contrast.test.ts must stay green — adjust a hex by the smallest step if a pair fails, and add new text/background pairs to its PAIRS list).Non-colour tokens (NEW, plain values):
--radius-sm: 6px(pills' inner, small buttons, inputs),--radius: 8px(buttons, inputs, menus),--radius-lg: 12px(cards, panels, dialogs, canvas nodes),--radius-full: 999px(pills, avatars).--space-1: 4px … --space-2: 8px, --space-3: 12px, --space-4: 16px, --space-5: 20px, --space-6: 24px, --space-8: 32px, --space-10: 40px. Page gutter 24px desktop, 16px narrow.--shadow-sm(hairline lift for cards:0 1px 2px rgb(0 0 0 / 0.04)light,0 1px 2px rgb(0 0 0 / 0.5)dark),--shadow(menus/popovers:0 4px 12px -2px rgb(16 16 24 / 0.08), 0 2px 4px -2px rgb(16 16 24 / 0.06)light; dark0 8px 24px -6px rgb(0 0 0 / 0.6)+0 0 0 1px rgb(255 255 255 / 0.04)),--shadow-lg(dialogs, command palette:0 24px 48px -12px rgb(16 16 24 / 0.18)light; dark0 24px 64px -12px rgb(0 0 0 / 0.75)).--ring: 0 0 0 3px color-mix(in srgb, var(--accent) 28%, transparent)plusborder-color: var(--accent)on inputs; buttons useoutline: 2px solid var(--accent); outline-offset: 2pxon :focus-visible.--ease: cubic-bezier(0.2, 0, 0, 1),--dur-fast: 120ms,--dur: 180ms. Wrap transitions so@media (prefers-reduced-motion: reduce)disables them.--chart-1 … --chart-6light#4f46e5 #0891b2 #d97706 #db2777 #059669 #7c3aed, dark#8b8cf8 #22d3ee #fbbf24 #f472b6 #34d399 #c4b5fd(as light-dark pairs).--font-ui: 'Inter Variable', 'Inter', 'Geist', ui-sans-serif, system-ui, 'Segoe UI', sans-serif;--font-mono: 'JetBrains Mono', 'Geist Mono', ui-monospace, 'Cascadia Code', 'SF Mono', Menlo, monospace. Bundle Inter Variable (latin subset only) from@fontsource-variable/interas an agent-forge devDependency, imported once in main.tsx; no CDN.font-feature-settings: 'cv11', 'ss01'on body; tabular numbers (font-variant-numeric: tabular-nums) on every numeric table cell, metric and duration.Icons.
lucide-react(ISC) as an agent-forge devDependency — bundled by Vite, so nothing is added to the SDK's runtime dependencies. 16px in nav, buttons and table actions, 14px inside pills/chips, stroke-width 1.75. Icon-only buttons always carryaria-label. Replace text glyphs (▾ ▸ × + ✓ ⌘) with icons.Components (look).
filter: brightness.ui/PageHeader.tsx, NEW): title (h1 18px 600), optional description (13px muted), right-side actions slot, optional breadcrumbs above title, bottom hairline; 56–64px tall; every routed screen uses it.ui/Skeleton.tsx(NEW) shimmer blocks (surface-2 → surface-3 gradient, reduced-motion = static); tables show 6 skeleton rows; cards show skeleton lines; never a bare "Loading…" text alone.ui/MetricCard.tsx, NEW): label (overline), value 24px, optional delta (▲/▼ icon, success/danger tone) and sparkline (tiny inline SVG, --chart-1).<kbd>styled 18px tall, surface-2, border, radius-sm, mono 11px.Shell.
forge.nav.collapsed; collapsed items show a tooltip and keeparia-label). Logo mark (small indigo rounded square with an anvil/hammer or sparkles icon) + "Agent Forge" wordmark + muted version tag.Pages (each ticket below). Functionality, routes, URL state, test ids, accessible names and keyboard behaviour stay identical unless a ticket says otherwise.
🤖 Generated with Claude Code