- Session history search now matches the universal search editorial
style (transparent, 40px Cash Sans Light, opacity-10 placeholder),
full-width within the page. Placeholder: "Search session history"
(en + es).
- Chat composer pill expands on focus only — removed the hover
trigger that was creating friction (click target moving as the
user reached for it).
- focus-override added to the chat input and the session-history
search so the global focus-visible ring rule from globals.css
doesn't draw a stray border on click-into.
- Both pickers in the chat pill (model + project) now pin
side="top" explicitly. Both were meant to open upward, but the
model popover would render below when its content was small
enough to fit in the gap below the trigger (no auto-flip needed).
- Defensive empty state in the model picker plus on-open inventory
sync mirroring AgentModelPicker. These do not fully resolve the
data-flow bug where the global pill shows "No models available"
while the in-chat picker shows real models — see
docs/codex/2026-04-29-global-composer-model-picker-empty.md for
the handoff brief.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Card and figure sized down ~20% (w-200→160, h-420→336) for a tighter grid.
- Persona name promoted out of the description paragraph onto its own row
above the body, so the pill reads as a label rather than an inline prefix.
- Gallery container switches from fixed gap-32 to justify-evenly with a gap-8
floor — cards redistribute evenly when the sidebar collapses and fall back
to horizontal scroll when they overflow.
- SkeletonCard updated to match the new dimensions and the split
name/description layout.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Wires useActiveProjectTint into AppShell, gated by activeView === "chat",
applied as an inline --project-tint CSS variable on the bg-dot-grid
wrapper. The dot-grid utility composes the tint via color-mix() over
the base canvas/dot tokens (commit 57b007686e); non-project and non-
chat views resolve to base values automatically. 240ms cross-fade,
prefers-reduced-motion respected.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Pure selector: active session → project → color (or null). Route gating
lives at the application point in AppShell, not here. Unit-tested
against four cases: no active session, no project on session, in-
project, deleted project.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
No behavior change yet — --project-tint is unset everywhere, so both
color-mix() calls resolve to base values (canvas-base, dot-color-base).
Dot weight is intentionally higher than fill weight (12% vs 7%) so dots
remain visible against a tinted fill rather than disappearing into it.
oklch is the mixing color space so perceived tint weight stays
consistent across saturated and cool palette colors. Adds 240ms
cross-fade with prefers-reduced-motion override.
Tinting is wired up by a later commit (the AppShell consumer of
--project-tint).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds canonical "-base" names for the canvas and dot-color tokens,
keeping the original --canvas / --dot-color as one-line aliases for
backward-compat. Updates .bg-dot-grid and --color-canvas-alex to read
the new names. No visual change. Prepares for project-tint composition
in a follow-up commit.
The aliases let other readers (committed BottomFade, in-flight refactors
on adjacent branches) keep working untouched. They can be removed in a
follow-up once all readers migrate.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Approved brainstorm. Tints the dot-grid canvas toward the active
chat's project color via color-mix() on --canvas / --dot-color, gated
by activeView === "chat". Subtle (~7% fill / ~12% dots), 240ms
cross-fade, reduced-motion respected. Dark mode deferred.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace the icons-only collapsed rail with a full hide: outer wrapper width animates to 0 while padding stays constant at 12, so the sidebar's top edge never shifts vertically during the transition. Move the canonical toggle into the topbar (immediately after the macOS traffic-light clearance) and drop the now-redundant in-sidebar collapse button along with its onCollapse prop, dead Button/IconLayoutSidebarFilled imports, and corresponding test prop.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sidebar nav typography lightens (font-light + tighter px-3 py-2) and the panel gains backdrop-blur with a 3/4 height; TopBar surfaces the chat session title when in chat view. Add Cash Sans Light @font-face via the Regulator CDN self-host pattern. Refresh agents and home pages with new persona images (ralph, scout, solo, tulsi) and home person photos; swap world-cube.png and drop unused figure.png.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Grow the global composer pill into a full chat entry point: model/provider picker, project picker, voice dictation, and file attachments. Thread attachments through pending-first-message so submitting from the global composer carries through to the new session. Bump AppShell file-size cap (780 → 830) to cover the new handoff wiring.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Commit 5 of 5 — final commit. See spec at docs/superpowers/specs/2026-04-23-alex-redesign-design.md.
- SessionCard: surface-less re-skin then revised at visual review
to subtle fill (`--surface-tile`, `rounded-xl`, `p-4`, hover
`--surface-install`). Spec §8.1 updated. Title 14px, metadata
10px, snippet 14px on muted token. Menu trigger uses opacity +
focus-within so it stays keyboard-tabbable (matches PersonaCard
pattern from Phase 4).
- SessionHistoryView: removed page header (h1 + subtitle + inline
Import button); Import action moved to TopBar following the
Skills/Agents pattern via useSetTopBarActions; the hidden file
input + handleImportSession stay co-located in this view (TopBar
button just triggers fileInputRef.current.click()). Grouped date
headers restyled with divider-above + 10px opacity-25 label
matching the sidebar Pinned/Recents pattern. max-w-5xl → max-w-7xl.
- BottomFade extracted to src/shared/ui/BottomFade.tsx after the
third use trigger (Skills + Agents + Sessions). The verbatim
inline gradient blocks in Skills + Agents replaced with one-line
imports.
- TopBar height h-12 → h-16 (48 → 64px) for more breathing room
above the breadcrumb on every page, matching Alex's reference
spacing.
Branch is now 5 commits ahead of origin/main; redesign complete.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Commit 4 of 5. See spec at docs/superpowers/specs/2026-04-23-alex-redesign-design.md.
Scope expansion at visual review (2026-04-27): same pattern as Skills.
AgentsView's inline page header / SearchBar / button row were removed;
"Import" + "New Persona" actions moved to TopBar via the existing
TopBarActionsProvider context. The dashed "Create new" card in
PersonaGallery was removed.
What landed:
- PersonaCard: full body replacement. Tall cutout figure (220px,
shared single asset across all personas per spec §7.3), 1px rule
(bg-black/30 — readable mid-grey, matches Alex's reference), name
pill, description with line-clamp-6 rendering persona.systemPrompt
(data model has no `description` field; original card already used
systemPrompt for the body paragraph). Hover-only kebab menu uses
opacity + focus-within so it stays keyboard-tabbable. Active state
is bg-black/[0.03] tint instead of ring-1 ring-ring.
- PersonaGallery: passive grid renderer. useFileImportZone lifted
out; props for dropHandlers + isDragOver. Grid bumped to
minmax(260px,1fr) with gap-x-12 gap-y-16 for editorial spacing
matching Alex's Figma (figures sit as islands, not clustered).
Section wrapper rings up when isDragOver.
- AgentsView: lifted useFileImportZone, pushed Import + New Persona
actions to TopBar via useSetTopBarActions on mount, removed inline
header / search / button row, bumped grid container to max-w-7xl,
added bottom fade gradient (same soft mask + backdrop blur as
Skills page).
- StatusBar: bg-background/80 → bg-transparent (global fix — the
white opaque footer fill was visible on every page).
- Spec §7 + plan Tasks 4.2/4.3 updated to capture corrections
(description→systemPrompt, optionsAria→options, stopPropagation
preserved, accessibility opacity fix) and the TopBar move scope
expansion.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Commit 3 of 5. See spec at docs/superpowers/specs/2026-04-23-alex-redesign-design.md.
Two scope adjustments at visual review (2026-04-27):
- Category hero tiles removed entirely. Cropped photo backgrounds read
as visually chaotic at production fidelity, and categories aren't a
real feature in goose2 yet. CategoryHeroTile component, 6 photo
assets, and tile-mask SVG all dropped. Spec §6.4 + plan Tasks 3.1
and 3.2 marked REMOVED.
- Page-body header, subtitle, SearchBar, and inline toolbar all
removed from SkillsView. Action buttons (List view, Sort, Import,
Add New) moved to global TopBar via a new TopBarActionsProvider
context. Spec §6.5 + plan Task 3.5 revised.
What landed:
- New TopBarActionsContext: views push action JSX on mount and clear
on unmount; TopBar consumes via useTopBarActions(). AppShell wraps
the tree with the Provider so subtrees share the same slot.
- Individual skill cards: 260x260, surface-tile bg, rounded-tile, name
pill cycling pink/olive/blue by index, hover-revealed Install pill
(decorative — no install flow exists yet), hover-revealed menu.
- New-skill empty-state card always renders first in the grid (pill,
italic example, arrow button opens CreateSkillDialog).
- Grid container bumped max-w-5xl → max-w-7xl so 4 columns fit when
the window has space; auto-fill scales further on wider windows.
- Bottom fade gradient: linear-gradient with mask-image so the blur
itself ramps in (avoids the cliff edge of a uniform backdrop-filter).
Bumped h-48 → h-64 + blur 1.5px → 3px for soft progression near
the floating composer pill.
- i18n keys for the new-skill empty state copy in en + es. Decorative
Install / Sort / List view buttons annotated as i18n-check-ignore
with placeholder reasoning.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Commit 2 of 5. See spec at docs/superpowers/specs/2026-04-23-alex-redesign-design.md.
- ChatView wraps conversation+composer in a bounded white card on canvas
with 16px radius (extracted from Figma frame 227:859 → node 269:6771)
- ChatContextPanel now lives inside the chat card (scope expansion from
spec §5.3): card becomes flex-row containing [conversation column |
panel column]; panel's own surface stripped, replaced with a left-
border divider; width animation + toggle position preserved
- ChatInput outer container surface-less (sits on card's own surface);
placeholder updated via en + es i18n to "Type / for skill and @ to
mention"
- HomeView replaces HomeScreen on activeView === "home" with a static
decorative composition (world cube, single figure × 3 positions per
spec §5.4 single-figure pattern, clock, sticky note); HomeScreen
retained for chat-fallback path; ensureHomeSession wiring intact
- Spec §5.3 + plan Task 2.5 updated to reflect panel-inside-card
decision per "spec must match implementation at commit boundary"
constraint
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>