- What this is: A YAML-driven scoring wizard that recommends the right Microsoft agent platform for a given scenario
- Who it's for: Microsoft enterprise customers — business users, IT pros, professional developers, and data/ML engineers evaluating Microsoft agent platforms
- Space/industry: Microsoft productivity & AI tooling, enterprise decision-support tools
- Project type: Single-page web app (multi-step wizard with scored results)
- Distribution: Static site on GitHub Pages, published by Microsoft CAT
- Direction: Fluent 2 — Microsoft's current design language. Layered surfaces, purposeful depth, clean hierarchy. Not flat, not skeuomorphic. Trustworthy without being stiff.
- Decoration level: Intentional — a subtle three-stop diagonal gradient on the canvas background (inspired by Microsoft's modern product pages), soft layered neutrals, nothing loud. Decoration serves depth, not decoration for its own sake.
- Mood: Authoritative and efficient. A user should feel they're using a real Microsoft product, not an internal hack. The tool should feel like it takes their scenario seriously.
-
Body/UI:
"Segoe UI Variable", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, sans-serif- The modern Fluent 2 font. Non-negotiable first-party signal. Segoe UI Variable is available natively on Windows; system-ui picks it up on macOS/Linux with acceptable fallback.
- Use for: all body text, headings, labels, buttons, navigation, descriptions.
-
Data/Scores/Platform labels:
"Geist Mono", "Cascadia Code", "Consolas", monospace- Load from Google Fonts:
https://fonts.googleapis.com/css2?family=Geist+Mono:wght@400;500;600&display=swap - Always use
font-variant-numeric: tabular-numsfor numeric score display. - Use for: platform identifier chips, score numbers, raw score display, step counters (
Question 3 of 8), technical metadata. - Rationale: monospace makes scores feel like outputs of a technical scoring system rather than marketing copy. Enterprise dev tools use this pattern to signal precision.
- Load from Google Fonts:
-
Type scale:
| Token | Size | Weight | Use |
|---|---|---|---|
| display | 32px | 700 | Welcome hero heading, question text |
| heading | 24px | 600/700 | Results heading, section titles |
| subhead | 20px | 600 | Subsection headings |
| body-lg | 16px | 400 | Welcome description, important body |
| body | 14px | 400 | Standard body, option descriptions |
| caption | 12px | 400 | Metadata, hints, secondary info |
| micro | 11px | 500 | Mono platform labels (all-caps) |
-
Approach: Restrained — one primary accent + semantic neutrals. Color is reserved and meaningful.
-
Primary:
#0078D4— Microsoft brand blue. Used for: interactive elements, progress bars, winner highlight, score bars, CTA buttons. -
Primary Dark:
#005A9E— Hover/pressed state for primary elements. -
Primary Light:
#C7E0F4— Badge backgrounds, winner card border accent. -
Primary XLight:
#EFF6FC— Selected state backgrounds, info alert backgrounds, winner card fill. -
Neutrals:
#242424— Text primary (headings, labels, important body)#616161— Text secondary (descriptions, hints, captions)#A0A0A0— Text disabled / placeholder#D1D1D1— Border (default)#E8E8E8— Border subtle (card edges, dividers)#F5F5F5— Canvas background base#FFFFFF— Card/surface background
-
Canvas gradient:
linear-gradient(135deg, #F0F6FF 0%, #F5F5F5 60%, #FAF5FF 100%)- Applied to
bodybackground. Subtle, not loud. Gives the tool a slightly premium feel vs pure neutral.
- Applied to
-
Semantic:
- Success:
#107C10/ bg#DFF6DD— Assessment complete, strong match - Warning:
#C19C00/ bg#FFF4CE— Close match, confidence flag - Error:
#A4262C/ bg#FDE7E9— Load failures, errors - Info:
#0078D4/ bg#EFF6FC— Tips, informational callouts
- Success:
-
Dark mode strategy: Redesign surfaces to dark neutrals; reduce blue saturation ~10%. Canvas
#1A1A1A, card#2A2A2A, primary#2899F5, border#3D3D3D. Canvas gradient:linear-gradient(135deg, #0F1B2D 0%, #1A1A1A 60%, #1A1525 100%). Implement with CSS custom properties under[data-theme="dark"].
- Base unit: 4px
- Density: Comfortable — not cramped, not wasteful. Fluent standard.
| Token | Value | Common use |
|---|---|---|
| sp-1 | 4px | Icon gap, tight inline spacing |
| sp-2 | 8px | Compact gap, badge padding |
| sp-3 | 12px | Component internal padding |
| sp-4 | 16px | Card internal gap, form field spacing |
| sp-5 | 20px | List item padding |
| sp-6 | 24px | Section gap, card padding edge |
| sp-8 | 32px | Major section spacing |
| sp-10 | 40px | Card body horizontal padding |
| sp-12 | 48px | Welcome screen vertical padding |
| sp-16 | 64px | Between major page sections |
-
Approach: Grid-disciplined — strict centering, predictable alignment. Wizard steps always horizontally centered. Results use a 2×2 platform grid.
-
Max content width:
1024px -
Page padding:
0 24px(mobile collapses gracefully) -
Border radius:
sm: 4px — buttons, inputs, small controlsmd: 8px — question options, result cards, badgeslg: 12px — main card container, welcome icon wrapperfull: 9999px — progress bar fill, step dots, round badges
-
Elevation / Shadows:
shadow-sm:0 1px 2px rgba(0,0,0,0.08)— palette swatches, minor elementsshadow-md:0 2px 8px rgba(0,0,0,0.10), 0 1px 2px rgba(0,0,0,0.06)— main cardshadow-lg:0 4px 24px rgba(0,0,0,0.12), 0 2px 6px rgba(0,0,0,0.08)— modals/overlays
- Approach: Minimal-functional — only transitions that aid comprehension or signal state changes. No decoration for its own sake.
- Easing:
enter: ease-out/exit: ease-in/move: cubic-bezier(0.4, 0, 0.2, 1) - Duration:
| Token | Range | Use |
|---|---|---|
| micro | 50–100ms | Button hover states, focus rings |
| short | 150–200ms | Card section fade-in, option hover |
| medium | 300–400ms | Card enter/exit transitions (fade-in) |
| long | 800–1200ms | Score bar animation on results reveal |
- Score bar animation: Ease-out cubic over ~1s. Bars animate from 0% to final width simultaneously on results reveal. Use
IntersectionObserver— trigger when results grid enters viewport, not on page load. - Progress bar: Smooth fill
transition: width 0.4s cubic-bezier(0.4, 0, 0.2, 1)on every question advance. - Card transitions: Existing
.fade-inclass is correct. Keep it.
Each platform gets a short font-family: var(--font-mono) identifier chip shown in all-caps with letter-spacing. Never spell out the full name in the chip — use the ID-style token:
| Platform | Chip label |
|---|---|
| Copilot Studio | COPILOT_STUDIO |
| Microsoft Foundry | MS_FOUNDRY |
| M365 Copilot | M365_COPILOT |
| Agent Builder | AGENT_BUILDER |
| Date | Decision | Rationale |
|---|---|---|
| 2026-03-20 | Initial design system created | Created by /design-consultation. Fluent 2 + CAT identity for APA v2. |
| 2026-03-20 | Geist Mono for scores + labels | Technical authority signal; enterprise dev tools use monospace for precision |
| 2026-03-20 | Real MS brand blue #0078D4 | Replaces oversaturated #0090FF in v1 CSS; correct Fluent token |
| 2026-03-20 | Canvas gradient (subtle) | Matches Microsoft modern product pages; lifts perceived quality vs pure neutral |
| 2026-03-20 | Animated score bars | Makes recommendation feel earned through visible computation, not instant |