fix: replace text-secondary with text-muted-foreground in branching components

In Tailwind v4, text-secondary resolves to --color-secondary (#2e3140),
a dark surface color — NOT --color-text-secondary (#848b9b). This made
all secondary text invisible on dark backgrounds.

The correct class is text-muted-foreground which maps to #848b9b.
This matches the pattern used by existing FlowPilot components.

Also reverts the unnecessary index.css variable bump from prior commit.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
chihlasm
2026-03-24 22:36:01 +00:00
parent 4c42522925
commit 01836d6a2d
6 changed files with 27 additions and 27 deletions

View File

@@ -19,7 +19,7 @@ export function BranchRevivalCard({ branch, evidenceSource }: BranchRevivalCardP
<p className="text-xs text-primary mt-1">{branch.evidence_description}</p> <p className="text-xs text-primary mt-1">{branch.evidence_description}</p>
)} )}
{evidenceSource && ( {evidenceSource && (
<p className="text-xs text-secondary mt-0.5">Evidence from: {evidenceSource.label}</p> <p className="text-xs text-muted-foreground mt-0.5">Evidence from: {evidenceSource.label}</p>
)} )}
</div> </div>
) )

View File

@@ -79,7 +79,7 @@ export function HandoffModal({ onClose, onSubmit }: HandoffModalProps) {
'flex-1 rounded-[5px] border px-3 py-2 text-sm font-medium transition-colors', 'flex-1 rounded-[5px] border px-3 py-2 text-sm font-medium transition-colors',
intent === 'park' intent === 'park'
? 'border-accent bg-accent-dim text-accent-text' ? 'border-accent bg-accent-dim text-accent-text'
: 'border-default bg-transparent text-secondary hover:bg-elevated hover:text-primary' : 'border-default bg-transparent text-muted-foreground hover:bg-elevated hover:text-primary'
)} )}
> >
Park Park
@@ -91,13 +91,13 @@ export function HandoffModal({ onClose, onSubmit }: HandoffModalProps) {
'flex-1 rounded-[5px] border px-3 py-2 text-sm font-medium transition-colors', 'flex-1 rounded-[5px] border px-3 py-2 text-sm font-medium transition-colors',
intent === 'escalate' intent === 'escalate'
? 'border-accent bg-accent-dim text-accent-text' ? 'border-accent bg-accent-dim text-accent-text'
: 'border-default bg-transparent text-secondary hover:bg-elevated hover:text-primary' : 'border-default bg-transparent text-muted-foreground hover:bg-elevated hover:text-primary'
)} )}
> >
Escalate Escalate
</button> </button>
</div> </div>
<p className="text-xs text-secondary"> <p className="text-xs text-muted-foreground">
{intent === 'park' {intent === 'park'
? 'Park this session to resume later or hand to another engineer.' ? 'Park this session to resume later or hand to another engineer.'
: 'Escalate to a senior engineer with full context and branch history.'} : 'Escalate to a senior engineer with full context and branch history.'}
@@ -148,7 +148,7 @@ export function HandoffModal({ onClose, onSubmit }: HandoffModalProps) {
type="button" type="button"
onClick={onClose} onClick={onClose}
disabled={isSubmitting} disabled={isSubmitting}
className="rounded-[5px] border border-default px-4 py-2 text-sm text-secondary hover:bg-elevated hover:text-primary transition-colors disabled:opacity-50" className="rounded-[5px] border border-default px-4 py-2 text-sm text-muted-foreground hover:bg-elevated hover:text-primary transition-colors disabled:opacity-50"
> >
Cancel Cancel
</button> </button>

View File

@@ -130,7 +130,7 @@ export function ResolutionOutputPanel({ sessionId, className }: ResolutionOutput
'flex items-center gap-1.5 px-3 py-2.5 text-xs font-medium transition-colors border-b-2 -mb-px', 'flex items-center gap-1.5 px-3 py-2.5 text-xs font-medium transition-colors border-b-2 -mb-px',
isActive isActive
? 'border-accent text-accent-text' ? 'border-accent text-accent-text'
: 'border-transparent text-secondary hover:text-primary hover:border-hover' : 'border-transparent text-muted-foreground hover:text-primary hover:border-hover'
)} )}
> >
<Icon size={13} /> <Icon size={13} />
@@ -184,7 +184,7 @@ export function ResolutionOutputPanel({ sessionId, className }: ResolutionOutput
type="button" type="button"
onClick={handleEditToggle} onClick={handleEditToggle}
disabled={isSaving} disabled={isSaving}
className="rounded-[5px] border border-default px-3 py-1.5 text-xs text-secondary hover:bg-elevated hover:text-primary transition-colors disabled:opacity-50" className="rounded-[5px] border border-default px-3 py-1.5 text-xs text-muted-foreground hover:bg-elevated hover:text-primary transition-colors disabled:opacity-50"
> >
Cancel Cancel
</button> </button>
@@ -196,7 +196,7 @@ export function ResolutionOutputPanel({ sessionId, className }: ResolutionOutput
onClick={handleEditToggle} onClick={handleEditToggle}
disabled={!activeOutput} disabled={!activeOutput}
className={cn( className={cn(
'flex items-center gap-1.5 rounded-[5px] border border-default px-3 py-1.5 text-xs text-secondary', 'flex items-center gap-1.5 rounded-[5px] border border-default px-3 py-1.5 text-xs text-muted-foreground',
'hover:bg-elevated hover:text-primary transition-colors disabled:opacity-40' 'hover:bg-elevated hover:text-primary transition-colors disabled:opacity-40'
)} )}
> >
@@ -211,7 +211,7 @@ export function ResolutionOutputPanel({ sessionId, className }: ResolutionOutput
'flex items-center gap-1.5 rounded-[5px] border border-default px-3 py-1.5 text-xs transition-colors disabled:opacity-40', 'flex items-center gap-1.5 rounded-[5px] border border-default px-3 py-1.5 text-xs transition-colors disabled:opacity-40',
copied copied
? 'border-success text-success' ? 'border-success text-success'
: 'text-secondary hover:bg-elevated hover:text-primary' : 'text-muted-foreground hover:bg-elevated hover:text-primary'
)} )}
> >
{copied ? <Check size={12} /> : <Copy size={12} />} {copied ? <Check size={12} /> : <Copy size={12} />}
@@ -225,7 +225,7 @@ export function ResolutionOutputPanel({ sessionId, className }: ResolutionOutput
'flex items-center gap-1.5 rounded-[5px] border border-default px-3 py-1.5 text-xs transition-colors disabled:opacity-40', 'flex items-center gap-1.5 rounded-[5px] border border-default px-3 py-1.5 text-xs transition-colors disabled:opacity-40',
activeOutput?.status === 'pushed' activeOutput?.status === 'pushed'
? 'border-success text-success' ? 'border-success text-success'
: 'text-secondary hover:bg-elevated hover:text-primary' : 'text-muted-foreground hover:bg-elevated hover:text-primary'
)} )}
> >
<Send size={12} /> <Send size={12} />

View File

@@ -20,7 +20,7 @@
/* ── Text colors ───────────────────────────────── */ /* ── Text colors ───────────────────────────────── */
--color-text-heading: #f0f2f5; --color-text-heading: #f0f2f5;
--color-text-primary: #e2e5eb; --color-text-primary: #e2e5eb;
--color-text-secondary: #a0a7b8; --color-text-secondary: #848b9b;
--color-text-muted: #4f5666; --color-text-muted: #4f5666;
--color-text-rail-label: #e2e5eb; --color-text-rail-label: #e2e5eb;
@@ -54,7 +54,7 @@
--color-secondary: #2e3140; --color-secondary: #2e3140;
--color-secondary-foreground: #e2e5eb; --color-secondary-foreground: #e2e5eb;
--color-muted: #2e3140; --color-muted: #2e3140;
--color-muted-foreground: #a0a7b8; --color-muted-foreground: #848b9b;
--color-accent-tw: #2e3140; --color-accent-tw: #2e3140;
--color-accent-foreground: #e2e5eb; --color-accent-foreground: #e2e5eb;
--color-destructive: #f87171; --color-destructive: #f87171;

View File

@@ -324,7 +324,7 @@ function MockResolutionPanel({ outputs }: { outputs: ResolutionOutputResponse[]
'flex items-center gap-1.5 px-3 py-2.5 text-xs font-medium transition-colors border-b-2 -mb-px', 'flex items-center gap-1.5 px-3 py-2.5 text-xs font-medium transition-colors border-b-2 -mb-px',
isActive isActive
? 'border-accent text-accent-text' ? 'border-accent text-accent-text'
: 'border-transparent text-secondary hover:text-primary hover:border-hover' : 'border-transparent text-muted-foreground hover:text-primary hover:border-hover'
)} )}
> >
<Icon size={13} /> <Icon size={13} />
@@ -371,7 +371,7 @@ function MockResolutionPanel({ outputs }: { outputs: ResolutionOutputResponse[]
<button <button
type="button" type="button"
onClick={handleEditToggle} onClick={handleEditToggle}
className="rounded-[5px] border border-default px-3 py-1.5 text-xs text-secondary hover:bg-elevated hover:text-primary transition-colors" className="rounded-[5px] border border-default px-3 py-1.5 text-xs text-muted-foreground hover:bg-elevated hover:text-primary transition-colors"
> >
Cancel Cancel
</button> </button>
@@ -382,7 +382,7 @@ function MockResolutionPanel({ outputs }: { outputs: ResolutionOutputResponse[]
type="button" type="button"
onClick={handleEditToggle} onClick={handleEditToggle}
disabled={!activeOutput} disabled={!activeOutput}
className="flex items-center gap-1.5 rounded-[5px] border border-default px-3 py-1.5 text-xs text-secondary hover:bg-elevated hover:text-primary transition-colors disabled:opacity-40" className="flex items-center gap-1.5 rounded-[5px] border border-default px-3 py-1.5 text-xs text-muted-foreground hover:bg-elevated hover:text-primary transition-colors disabled:opacity-40"
> >
<Pencil size={12} /> Edit <Pencil size={12} /> Edit
</button> </button>
@@ -392,7 +392,7 @@ function MockResolutionPanel({ outputs }: { outputs: ResolutionOutputResponse[]
disabled={!activeOutput} disabled={!activeOutput}
className={cn( className={cn(
'flex items-center gap-1.5 rounded-[5px] border border-default px-3 py-1.5 text-xs transition-colors disabled:opacity-40', 'flex items-center gap-1.5 rounded-[5px] border border-default px-3 py-1.5 text-xs transition-colors disabled:opacity-40',
copied ? 'border-success text-success' : 'text-secondary hover:bg-elevated hover:text-primary' copied ? 'border-success text-success' : 'text-muted-foreground hover:bg-elevated hover:text-primary'
)} )}
> >
{copied ? <Check size={12} /> : <Copy size={12} />} {copied ? <Check size={12} /> : <Copy size={12} />}
@@ -402,7 +402,7 @@ function MockResolutionPanel({ outputs }: { outputs: ResolutionOutputResponse[]
type="button" type="button"
onClick={() => toast.success('Pushed to PSA (mock)')} onClick={() => toast.success('Pushed to PSA (mock)')}
disabled={!activeOutput} disabled={!activeOutput}
className="flex items-center gap-1.5 rounded-[5px] border border-default px-3 py-1.5 text-xs text-secondary hover:bg-elevated hover:text-primary transition-colors disabled:opacity-40" className="flex items-center gap-1.5 rounded-[5px] border border-default px-3 py-1.5 text-xs text-muted-foreground hover:bg-elevated hover:text-primary transition-colors disabled:opacity-40"
> >
<Send size={12} /> Push to PSA <Send size={12} /> Push to PSA
</button> </button>
@@ -469,7 +469,7 @@ export default function DevBranchingPage() {
toBranch={activeBranch} toBranch={activeBranch}
/> />
) : ( ) : (
<p className="text-xs text-secondary">Click a branch in the sidebar to see the transition bar.</p> <p className="text-xs text-muted-foreground">Click a branch in the sidebar to see the transition bar.</p>
)} )}
</section> </section>
@@ -519,34 +519,34 @@ export default function DevBranchingPage() {
<div className="bg-card border border-default rounded-lg p-4 text-sm"> <div className="bg-card border border-default rounded-lg p-4 text-sm">
<div className="grid grid-cols-2 gap-2"> <div className="grid grid-cols-2 gap-2">
<div> <div>
<span className="text-secondary">Label:</span>{' '} <span className="text-muted-foreground">Label:</span>{' '}
<span className="text-heading">{activeBranch.label}</span> <span className="text-heading">{activeBranch.label}</span>
</div> </div>
<div> <div>
<span className="text-secondary">Status:</span>{' '} <span className="text-muted-foreground">Status:</span>{' '}
<span className="text-heading">{activeBranch.status}</span> <span className="text-heading">{activeBranch.status}</span>
</div> </div>
<div> <div>
<span className="text-secondary">Steps:</span>{' '} <span className="text-muted-foreground">Steps:</span>{' '}
<span className="text-heading">{activeBranch.step_count}</span> <span className="text-heading">{activeBranch.step_count}</span>
</div> </div>
<div> <div>
<span className="text-secondary">Order:</span>{' '} <span className="text-muted-foreground">Order:</span>{' '}
<span className="text-heading">{activeBranch.branch_order}</span> <span className="text-heading">{activeBranch.branch_order}</span>
</div> </div>
</div> </div>
{activeBranch.status_reason && ( {activeBranch.status_reason && (
<div className="mt-2 pt-2 border-t border-default"> <div className="mt-2 pt-2 border-t border-default">
<span className="text-secondary">Reason:</span>{' '} <span className="text-muted-foreground">Reason:</span>{' '}
<span className="text-primary">{activeBranch.status_reason}</span> <span className="text-primary">{activeBranch.status_reason}</span>
</div> </div>
)} )}
{activeBranch.context_summary && ( {activeBranch.context_summary && (
<div className="mt-2 pt-2 border-t border-default"> <div className="mt-2 pt-2 border-t border-default">
<span className="text-secondary">Tried:</span>{' '} <span className="text-muted-foreground">Tried:</span>{' '}
<span className="text-primary">{activeBranch.context_summary.tried.join(', ')}</span> <span className="text-primary">{activeBranch.context_summary.tried.join(', ')}</span>
<br /> <br />
<span className="text-secondary">Concluded:</span>{' '} <span className="text-muted-foreground">Concluded:</span>{' '}
<span className="text-primary">{activeBranch.context_summary.concluded}</span> <span className="text-primary">{activeBranch.context_summary.concluded}</span>
</div> </div>
)} )}
@@ -570,7 +570,7 @@ export default function DevBranchingPage() {
function SectionLabel({ children }: { children: React.ReactNode }) { function SectionLabel({ children }: { children: React.ReactNode }) {
return ( return (
<span className="text-[10px] font-semibold uppercase tracking-wider text-secondary mb-2 block"> <span className="text-[10px] font-semibold uppercase tracking-wider text-muted-foreground mb-2 block">
{children} {children}
</span> </span>
) )

View File

@@ -37,7 +37,7 @@ export default function SessionQueuePage() {
<span className="text-sm font-medium text-heading">{item.problem_summary || 'Untitled session'}</span> <span className="text-sm font-medium text-heading">{item.problem_summary || 'Untitled session'}</span>
{item.priority === 'elevated' && <span className="text-[10px] px-1.5 py-0.5 rounded-full bg-danger-dim text-danger">Elevated</span>} {item.priority === 'elevated' && <span className="text-[10px] px-1.5 py-0.5 rounded-full bg-danger-dim text-danger">Elevated</span>}
</div> </div>
{item.engineer_notes && <p className="text-xs text-secondary">{item.engineer_notes}</p>} {item.engineer_notes && <p className="text-xs text-muted-foreground">{item.engineer_notes}</p>}
<div className="flex items-center gap-2 mt-1 text-xs text-muted"> <div className="flex items-center gap-2 mt-1 text-xs text-muted">
<Clock size={10} /> <Clock size={10} />
<span>{new Date(item.created_at).toLocaleString()}</span> <span>{new Date(item.created_at).toLocaleString()}</span>