Microsoft Foundry NextGen Frontend Skill
Build elegant, production-ready interfaces following Microsoft Foundry's NextGen Design System - a refined neutral dark-themed design language with minimal purple accents for primary actions only.
⚠️ CRITICAL: Color Usage Rules
Purple (#8251EE / #A37EF5) is ONLY for:
- Primary action buttons (filled background)
- Active tab indicators (2px underline)
- Row selection indicators (left border bar)
- Active sidebar navigation icons
- Links and interactive text
- Progress indicators and sliders (track fill)
- Focus rings on inputs
Everything else uses NEUTRAL DARK GREYS:
- Backgrounds: Near-black and dark greys (#0A0A0A, #141414, #1C1C1C)
- Cards/Surfaces: Dark grey (NOT purple-tinted)
- Text: White (#FFFFFF), grey (#A1A1A1), muted (#6B6B6B)
- Secondary buttons: Grey outline with white text (NOT purple)
- Borders: Subtle dark grey (#2A2A2A, #333333)
- Inactive tabs: Grey text (#6B6B6B)
Preferred Stack
Vite + React + pnpm - Fast, modern, elegant.
pnpm create vite@latest my-foundry-app --template react-ts
cd my-foundry-app
pnpm install
pnpm add lucide-react recharts
Core Design Tokens
:root {
/* =================================
BACKGROUNDS - Neutral Dark Greys
================================= */
--bg-page: #0A0A0A; /* Page background - near black */
--bg-sidebar: #0D0D0D; /* Sidebar and topbar */
--bg-card: #141414; /* Cards, panels, dialogs - dark grey */
--bg-surface: #1C1C1C; /* Elevated surfaces */
--bg-elevated: #242424; /* Dropdowns, popovers */
--bg-hover: #2A2A2A; /* Hover states */
--bg-active: #333333; /* Pressed states */
/* =================================
TEXT - Neutral Whites/Greys
================================= */
--text-primary: #FFFFFF; /* Main body text - pure white */
--text-secondary: #A1A1A1; /* Secondary text - medium grey */
--text-muted: #6B6B6B; /* Placeholder, disabled, inactive tabs */
--text-disabled: #4A4A4A; /* Disabled text */
--text-link: #A37EF5; /* Links - this can be purple */
/* =================================
BRAND PURPLE - Use Sparingly!
================================= */
--brand-primary: #8251EE; /* Primary buttons, active indicators */
--brand-hover: #9366F5; /* Hover on purple elements */
--brand-light: #A37EF5; /* Links, active sidebar icons */
--brand-muted: rgba(130, 81, 238, 0.2); /* Focus shadows */
--accent-cta: #E91E8C; /* Magenta for sliders, critical CTAs */
/* =================================
BORDERS - Subtle Dark Grey
================================= */
--border-subtle: #1F1F1F; /* Very subtle dividers */
--border-default: #2A2A2A; /* Standard borders */
--border-strong: #333333; /* Emphasized borders */
--border-focus: #8251EE; /* Focus rings */
/* =================================
STATUS COLORS
================================= */
--success: #10B981;
--success-muted: rgba(16, 185, 129, 0.15);
--warning: #F59E0B;
--warning-muted: rgba(245, 158, 11, 0.15);
--error: #EF4444;
--error-muted: rgba(239, 68, 68, 0.15);
--info: #3B82F6;
/* Spacing */
--space-1: 4px;
--space-2: 8px;
--space-3: 12px;
--space-4: 16px;
--space-6: 24px;
--space-8: 32px;
/* Border Radius */
--radius-sm: 4px;
--radius-md: 6px;
--radius-lg: 8px;
--radius-xl: 12px;
/* Typography */
--font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
}
Component Color Summary Table
| Component |
Uses Purple? |
Actual Colors |
| Primary Button |
✅ YES |
Purple bg (#8251EE), white text |
| Secondary Button |
❌ NO |
Transparent bg, grey border (#333), white text |
| Cards |
❌ NO |
Dark grey bg (#141414), grey border (#2A2A2A) |
| Page Background |
❌ NO |
Near-black (#0A0A0A) |
| Sidebar |
❌ NO |
Dark grey bg (#0D0D0D) |
| Active Tab |
✅ YES |
White text + purple underline |
| Inactive Tab |
❌ NO |
Grey text (#6B6B6B) |
| Row Selection |
✅ YES |
Purple left indicator bar |
| Sidebar Active Icon |
✅ YES |
Purple icon color |
| Sidebar Inactive Icon |
❌ NO |
Grey icons (#6B6B6B) |
| Input Fields |
❌ NO |
Dark grey bg (#1C1C1C), grey border |
| Primary Text |
❌ NO |
White (#FFFFFF) |
| Secondary Text |
❌ NO |
Grey (#A1A1A1) |
| Data Table Headers |
❌ NO |
Grey text (#A1A1A1) |
| Links |
✅ YES |
Purple text (#A37EF5) |
Button Examples
{/* ✅ CORRECT: Primary button uses purple */}
<button className="btn-primary">Create</button>
{/* ✅ CORRECT: Secondary button uses GREY, not purple */}
<button className="btn-secondary">Cancel</button>
{/* ❌ WRONG: Don't use purple for secondary buttons! */}
<button className="bg-purple-900 border-purple-700">Cancel</button>
.btn-primary {
background: var(--brand-primary);
color: white;
border: none;
padding: 8px 16px;
border-radius: var(--radius-md);
}
.btn-primary:hover { background: var(--brand-hover); }
.btn-secondary {
background: transparent;
color: var(--text-primary);
border: 1px solid var(--border-strong);
padding: 8px 16px;
border-radius: var(--radius-md);
}
.btn-secondary:hover { background: var(--bg-hover); }
Card Examples
{/* ✅ CORRECT: Card uses neutral dark grey */}
<div className="card">
<h3>Card Title</h3>
<p>Description in grey</p>
</div>
{/* ❌ WRONG: Don't use purple for cards! */}
<div className="bg-purple-900 border-purple-700">...</div>
<div style={{background: '#2B1D44'}}>...</div>
/* Cards are NEUTRAL GREY, not purple */
.card {
background: var(--bg-card); /* #141414 */
border: 1px solid var(--border-default); /* #2A2A2A */
border-radius: var(--radius-lg);
padding: var(--space-4);
}
Critical Don'ts ❌
- Don't use purple backgrounds for cards, panels, or surfaces - use #141414
- Don't use purple-tinted backgrounds (#2B1D44, #1A1326) - use #141414, #1C1C1C
- Don't use lavender/purple text (#E1CEFC, #AF86F5) - use white #FFFFFF or grey #A1A1A1
- Don't use purple borders except on focused inputs
- Don't make everything purple - purple is ONLY for primary CTAs and active indicators
- Don't use purple for secondary buttons - use grey outline
- Don't use light backgrounds - dark-theme-only system
- Don't use rounded-full buttons - use 4-8px radius
- Don't over-animate - subtlety is elegance
Critical Do's ✅
- Use neutral dark greys (#0A0A0A, #141414, #1C1C1C) for ALL backgrounds
- Use white (#FFFFFF) for primary text
- Use grey (#A1A1A1) for secondary/muted text
- Reserve purple (#8251EE) ONLY for:
- Primary buttons
- Active tab underlines
- Active sidebar icons
- Row selection indicators
- Links
- Use grey outlines for secondary buttons
- Use subtle grey borders (#2A2A2A) sparingly
File References
- Design Tokens: See
references/design-tokens.md for complete color, typography, and spacing scales
- Components: See
references/components.md for Badge, Button, DataGrid, Tabs, Input, Panel specs
- Patterns: See
references/patterns.md for page layouts (Entity List, Detail Page, Dashboard)
1---2name: foundry-nextgen-frontend3description: Build elegant frontend UIs following Microsoft Foundry's NextGen Design System using Vite + React + pnpm. Use when creating dashboards, agent builders, data grids, entity management interfaces, or any application matching Foundry's refined dark-themed aesthetic. Triggers on requests for Foundry-style UI, NextGen design system, Microsoft Foundry interfaces, or enterprise admin dashboards with data tables, detail panels, and charts.4---56# Microsoft Foundry NextGen Frontend Skill78Build elegant, production-ready interfaces following Microsoft Foundry's NextGen Design System - a refined **neutral dark-themed** design language with **minimal purple accents** for primary actions only.910## ⚠️ CRITICAL: Color Usage Rules1112**Purple (#8251EE / #A37EF5) is ONLY for:**13- Primary action buttons (filled background)14- Active tab indicators (2px underline)15- Row selection indicators (left border bar)16- Active sidebar navigation icons17- Links and interactive text18- Progress indicators and sliders (track fill)19- Focus rings on inputs2021**Everything else uses NEUTRAL DARK GREYS:**22- Backgrounds: Near-black and dark greys (#0A0A0A, #141414, #1C1C1C)23- Cards/Surfaces: Dark grey (NOT purple-tinted)24- Text: White (#FFFFFF), grey (#A1A1A1), muted (#6B6B6B)25- Secondary buttons: Grey outline with white text (NOT purple)26- Borders: Subtle dark grey (#2A2A2A, #333333)27- Inactive tabs: Grey text (#6B6B6B)2829## Preferred Stack3031**Vite + React + pnpm** - Fast, modern, elegant.3233```bash34pnpm create vite@latest my-foundry-app --template react-ts35cd my-foundry-app36pnpm install37pnpm add lucide-react recharts38```3940## Core Design Tokens4142```css43:root {44 /* =================================45 BACKGROUNDS - Neutral Dark Greys46 ================================= */47 --bg-page: #0A0A0A; /* Page background - near black */48 --bg-sidebar: #0D0D0D; /* Sidebar and topbar */49 --bg-card: #141414; /* Cards, panels, dialogs - dark grey */50 --bg-surface: #1C1C1C; /* Elevated surfaces */51 --bg-elevated: #242424; /* Dropdowns, popovers */52 --bg-hover: #2A2A2A; /* Hover states */53 --bg-active: #333333; /* Pressed states */5455 /* =================================56 TEXT - Neutral Whites/Greys57 ================================= */58 --text-primary: #FFFFFF; /* Main body text - pure white */59 --text-secondary: #A1A1A1; /* Secondary text - medium grey */60 --text-muted: #6B6B6B; /* Placeholder, disabled, inactive tabs */61 --text-disabled: #4A4A4A; /* Disabled text */62 --text-link: #A37EF5; /* Links - this can be purple */6364 /* =================================65 BRAND PURPLE - Use Sparingly!66 ================================= */67 --brand-primary: #8251EE; /* Primary buttons, active indicators */68 --brand-hover: #9366F5; /* Hover on purple elements */69 --brand-light: #A37EF5; /* Links, active sidebar icons */70 --brand-muted: rgba(130, 81, 238, 0.2); /* Focus shadows */71 --accent-cta: #E91E8C; /* Magenta for sliders, critical CTAs */7273 /* =================================74 BORDERS - Subtle Dark Grey75 ================================= */76 --border-subtle: #1F1F1F; /* Very subtle dividers */77 --border-default: #2A2A2A; /* Standard borders */78 --border-strong: #333333; /* Emphasized borders */79 --border-focus: #8251EE; /* Focus rings */8081 /* =================================82 STATUS COLORS83 ================================= */84 --success: #10B981;85 --success-muted: rgba(16, 185, 129, 0.15);86 --warning: #F59E0B;87 --warning-muted: rgba(245, 158, 11, 0.15);88 --error: #EF4444;89 --error-muted: rgba(239, 68, 68, 0.15);90 --info: #3B82F6;9192 /* Spacing */93 --space-1: 4px;94 --space-2: 8px;95 --space-3: 12px;96 --space-4: 16px;97 --space-6: 24px;98 --space-8: 32px;99100 /* Border Radius */101 --radius-sm: 4px;102 --radius-md: 6px;103 --radius-lg: 8px;104 --radius-xl: 12px;105106 /* Typography */107 --font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;108}109```110111## Component Color Summary Table112113| Component | Uses Purple? | Actual Colors |114|-----------|--------------|---------------|115| Primary Button | ✅ YES | Purple bg (#8251EE), white text |116| Secondary Button | ❌ NO | Transparent bg, grey border (#333), white text |117| Cards | ❌ NO | Dark grey bg (#141414), grey border (#2A2A2A) |118| Page Background | ❌ NO | Near-black (#0A0A0A) |119| Sidebar | ❌ NO | Dark grey bg (#0D0D0D) |120| Active Tab | ✅ YES | White text + purple underline |121| Inactive Tab | ❌ NO | Grey text (#6B6B6B) |122| Row Selection | ✅ YES | Purple left indicator bar |123| Sidebar Active Icon | ✅ YES | Purple icon color |124| Sidebar Inactive Icon | ❌ NO | Grey icons (#6B6B6B) |125| Input Fields | ❌ NO | Dark grey bg (#1C1C1C), grey border |126| Primary Text | ❌ NO | White (#FFFFFF) |127| Secondary Text | ❌ NO | Grey (#A1A1A1) |128| Data Table Headers | ❌ NO | Grey text (#A1A1A1) |129| Links | ✅ YES | Purple text (#A37EF5) |130131## Button Examples132133```jsx134{/* ✅ CORRECT: Primary button uses purple */}135<button className="btn-primary">Create</button>136137{/* ✅ CORRECT: Secondary button uses GREY, not purple */}138<button className="btn-secondary">Cancel</button>139140{/* ❌ WRONG: Don't use purple for secondary buttons! */}141<button className="bg-purple-900 border-purple-700">Cancel</button>142```143144```css145.btn-primary {146 background: var(--brand-primary);147 color: white;148 border: none;149 padding: 8px 16px;150 border-radius: var(--radius-md);151}152.btn-primary:hover { background: var(--brand-hover); }153154.btn-secondary {155 background: transparent;156 color: var(--text-primary);157 border: 1px solid var(--border-strong);158 padding: 8px 16px;159 border-radius: var(--radius-md);160}161.btn-secondary:hover { background: var(--bg-hover); }162```163164## Card Examples165166```jsx167{/* ✅ CORRECT: Card uses neutral dark grey */}168<div className="card">169 <h3>Card Title</h3>170 <p>Description in grey</p>171</div>172173{/* ❌ WRONG: Don't use purple for cards! */}174<div className="bg-purple-900 border-purple-700">...</div>175<div style={{background: '#2B1D44'}}>...</div>176```177178```css179/* Cards are NEUTRAL GREY, not purple */180.card {181 background: var(--bg-card); /* #141414 */182 border: 1px solid var(--border-default); /* #2A2A2A */183 border-radius: var(--radius-lg);184 padding: var(--space-4);185}186```187188## Critical Don'ts ❌189190- **Don't use purple backgrounds for cards, panels, or surfaces** - use #141414191- **Don't use purple-tinted backgrounds** (#2B1D44, #1A1326) - use #141414, #1C1C1C192- **Don't use lavender/purple text** (#E1CEFC, #AF86F5) - use white #FFFFFF or grey #A1A1A1193- **Don't use purple borders** except on focused inputs194- **Don't make everything purple** - purple is ONLY for primary CTAs and active indicators195- **Don't use purple for secondary buttons** - use grey outline196- Don't use light backgrounds - dark-theme-only system197- Don't use rounded-full buttons - use 4-8px radius198- Don't over-animate - subtlety is elegance199200## Critical Do's ✅201202- Use neutral dark greys (#0A0A0A, #141414, #1C1C1C) for ALL backgrounds203- Use white (#FFFFFF) for primary text204- Use grey (#A1A1A1) for secondary/muted text205- Reserve purple (#8251EE) ONLY for:206 - Primary buttons207 - Active tab underlines208 - Active sidebar icons209 - Row selection indicators210 - Links211- Use grey outlines for secondary buttons212- Use subtle grey borders (#2A2A2A) sparingly213214## File References215216- **Design Tokens**: See `references/design-tokens.md` for complete color, typography, and spacing scales217- **Components**: See `references/components.md` for Badge, Button, DataGrid, Tabs, Input, Panel specs218- **Patterns**: See `references/patterns.md` for page layouts (Entity List, Detail Page, Dashboard)