diff --git a/src/vs/workbench/contrib/cortexide/browser/react/src/onboarding/ExpressOnboardingFlow.tsx b/src/vs/workbench/contrib/cortexide/browser/react/src/onboarding/ExpressOnboardingFlow.tsx
index 66fcde65fc1..3a9967a27fb 100644
--- a/src/vs/workbench/contrib/cortexide/browser/react/src/onboarding/ExpressOnboardingFlow.tsx
+++ b/src/vs/workbench/contrib/cortexide/browser/react/src/onboarding/ExpressOnboardingFlow.tsx
@@ -341,8 +341,7 @@ const ExpressShell = ({ children, onCustomize, onDismiss }: {
type="button"
onClick={onDismiss}
aria-label={t('express.dismiss')}
- className="p-2 rounded-xl transition-colors"
- style={{ color: 'var(--cortex-fg-3, rgba(255,255,255,0.6))' }}
+ className="btn btn-icon btn-ghost p-2"
>
@@ -357,8 +356,7 @@ const ExpressShell = ({ children, onCustomize, onDismiss }: {
@@ -587,19 +567,14 @@ const ErrorPanel = ({ t, message, onRetry, onFallback }: {
{t('express.retry')}
{t('express.useCloudInstead')}
diff --git a/src/vs/workbench/contrib/cortexide/browser/react/src/onboarding/LocalSetupWizard.tsx b/src/vs/workbench/contrib/cortexide/browser/react/src/onboarding/LocalSetupWizard.tsx
index 07191ab324e..db354c7bcc5 100644
--- a/src/vs/workbench/contrib/cortexide/browser/react/src/onboarding/LocalSetupWizard.tsx
+++ b/src/vs/workbench/contrib/cortexide/browser/react/src/onboarding/LocalSetupWizard.tsx
@@ -240,7 +240,7 @@ export const LocalSetupWizard = ({ onComplete, onSkip }: LocalSetupWizardProps)
+ className="btn btn-primary px-6 py-3 font-medium">
Skip Setup
@@ -262,7 +262,7 @@ export const LocalSetupWizard = ({ onComplete, onSkip }: LocalSetupWizardProps)
{progress.canCancel &&
+ className="btn btn-ghost btn-sm text-sm">
Cancel
@@ -304,7 +304,7 @@ const ChoiceStep = ({ onChoice, onBack }: {onChoice: (choice: 'local' | 'cloud'
+ className="btn btn-secondary flex items-center gap-2 px-4 py-2">
Back
@@ -381,7 +381,7 @@ const SystemCheckStep = ({ systemCheck, onInstall, onNext, onBack, canGoBack }:
{canGoBack &&
+ className="btn btn-secondary flex items-center gap-2 px-5 py-3">
Back
@@ -390,7 +390,7 @@ const SystemCheckStep = ({ systemCheck, onInstall, onNext, onBack, canGoBack }:
{!systemCheck.ollamaInstalled &&
+ className="btn btn-primary px-6 py-3 font-medium">
Install Ollama
@@ -398,7 +398,7 @@ const SystemCheckStep = ({ systemCheck, onInstall, onNext, onBack, canGoBack }:
{systemCheck.ollamaRunning &&
+ className="btn btn-secondary px-6 py-3 font-medium">
Next
@@ -429,7 +429,7 @@ const ModelPackStep = ({ selectedPack, onSelect, onDownload, state, onBack, canG
{canGoBack &&
+ className="btn btn-secondary flex items-center gap-2 px-4 py-2">
Back
@@ -506,7 +506,7 @@ const ModelPackStep = ({ selectedPack, onSelect, onDownload, state, onBack, canG
+ className="btn btn-secondary flex items-center gap-2 px-5 py-3 disabled:opacity-50">
Back
@@ -515,7 +515,7 @@ const ModelPackStep = ({ selectedPack, onSelect, onDownload, state, onBack, canG
+ className="btn btn-primary flex-1 px-6 py-3 font-medium disabled:opacity-50">
{isDownloading ? 'Downloading...' : 'Download Models'}
@@ -534,7 +534,7 @@ const VerificationStep = ({ onVerify, onSkip, state, onBack, canGoBack }: {onVer
+ className="btn btn-secondary flex items-center gap-2 px-4 py-2 disabled:opacity-50">
Back
@@ -560,7 +560,7 @@ const VerificationStep = ({ onVerify, onSkip, state, onBack, canGoBack }: {onVer
{canGoBack &&
+ className="btn btn-secondary flex items-center gap-2 px-5 py-3">
Back
@@ -568,14 +568,14 @@ const VerificationStep = ({ onVerify, onSkip, state, onBack, canGoBack }: {onVer
}
+ className="btn btn-primary flex-1 px-6 py-3 font-medium">
Run Verification
{onSkip &&
+ className="btn btn-secondary px-6 py-3 font-medium">
Skip
@@ -596,7 +596,7 @@ const VerificationResultsStep = ({ results, onNext, onBack, canGoBack }: {result
{canGoBack &&
+ className="btn btn-secondary flex items-center gap-2 px-4 py-2">
Back
@@ -626,7 +626,7 @@ const VerificationResultsStep = ({ results, onNext, onBack, canGoBack }: {result
{canGoBack &&
+ className="btn btn-secondary flex items-center gap-2 px-5 py-3">
Back
@@ -634,7 +634,7 @@ const VerificationResultsStep = ({ results, onNext, onBack, canGoBack }: {result
}
+ className="btn btn-primary flex-1 px-6 py-3 font-medium">
{allPassed ? 'Continue' : 'Continue Anyway'}
@@ -665,7 +665,7 @@ const DefaultsStep = ({ onComplete, onBack, canGoBack }: {onComplete: () => void
{canGoBack &&
+ className="btn btn-secondary flex items-center gap-2 px-4 py-2">
Back
diff --git a/src/vs/workbench/contrib/cortexide/browser/react/src/styles.css b/src/vs/workbench/contrib/cortexide/browser/react/src/styles.css
index 7bf1af244b2..e4d5723227e 100644
--- a/src/vs/workbench/contrib/cortexide/browser/react/src/styles.css
+++ b/src/vs/workbench/contrib/cortexide/browser/react/src/styles.css
@@ -416,6 +416,7 @@ body.vscode-light .void-scope .btn-submit:not(:disabled):hover {
transition: border-color var(--cortex-transition-base), box-shadow var(--cortex-transition-base);
}
+.void-scope .input:focus,
.void-scope .input:focus-within,
.void-scope .cortex-composer-shell:focus-within {
border-color: var(--cortex-border-strong);
diff --git a/src/vs/workbench/contrib/cortexide/test/common/designSystem.test.ts b/src/vs/workbench/contrib/cortexide/test/common/designSystem.test.ts
index 1cfb95455c2..2df2d6bce37 100644
--- a/src/vs/workbench/contrib/cortexide/test/common/designSystem.test.ts
+++ b/src/vs/workbench/contrib/cortexide/test/common/designSystem.test.ts
@@ -46,4 +46,30 @@ suite('designSystem (Phase 1 Sprint 2 — composer tokens)', () => {
'expected input border token',
);
});
+
+ test('.input:focus styles native inputs', () => {
+ assert.ok(
+ hasRule(/\.void-scope\s+\.input:focus,/s),
+ 'expected native input focus rule',
+ );
+ });
+});
+
+const expressOnboardingPath = join(dirname(fileURLToPath(import.meta.url)), '../../browser/react/src/onboarding/ExpressOnboardingFlow.tsx');
+const localSetupPath = join(dirname(fileURLToPath(import.meta.url)), '../../browser/react/src/onboarding/LocalSetupWizard.tsx');
+
+suite('designSystem (Phase 1 — onboarding adoption)', () => {
+
+ test('Express onboarding uses btn-primary and btn-secondary', () => {
+ const src = readFileSync(expressOnboardingPath, 'utf8');
+ assert.ok(src.includes('btn btn-primary'), 'expected btn-primary in express onboarding');
+ assert.ok(src.includes('btn btn-secondary'), 'expected btn-secondary in express onboarding');
+ assert.ok(src.includes('className="input '), 'expected .input class on Groq key field');
+ });
+
+ test('Local setup wizard uses design-system nav buttons', () => {
+ const src = readFileSync(localSetupPath, 'utf8');
+ assert.ok(src.includes('btn btn-primary'), 'expected btn-primary in local setup wizard');
+ assert.ok(src.includes('btn btn-secondary'), 'expected btn-secondary in local setup wizard');
+ });
});