* chore: update Google Fonts to Bricolage Grotesque, IBM Plex Sans, JetBrains Mono Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore: update Tailwind config to Slate & Ice theme colors and fonts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: update CSS variables and glass-card utilities for Slate & Ice theme - Replace all color variables with Slate & Ice palette - Add glass system vars (--glass-bg, --glass-blur, --shadow-float) - Replace legacy glass-card with new variable-driven glass classes - Add breatheGlow, bellWobble, slideDown, fadeInRight keyframes - Update font references to IBM Plex Sans and Bricolage Grotesque Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: recolor BrandLogo to cyan gradient, split BrandWordmark for gradient Flow text Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: update TopBar with glassmorphism backdrop and cyan accent styling Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: update Sidebar with glassmorphism backdrop Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add ambient atmosphere gradient orbs behind app shell Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: update QuickStats and SessionsPanel with glass-card styling Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add WeeklyCalendar, QuickActions, OpenSessions, RecentActivity dashboard components Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: redesign dashboard layout with calendar, open sessions, and glass-card panels New layout: greeting → calendar+actions → sessions+stats → activity Replaces old QuickStats and SessionsPanel with new dashboard components Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: replace remaining purple hex references with ice-cyan accent Sweep of hardcoded purple hex values (#818cf8, #6366f1) replaced with new cyan accent (#06b6d4) in QuickActions, RecentActivity, QuickLaunch, and SVG brand assets. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: update CLAUDE.md branding and design system for Slate & Ice Modern Updated Last Updated date, branding section (fonts, colors, glass utilities, atmosphere orbs), component styling rules, and Design System section to reflect the new ice-cyan glassmorphism theme. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: add Slate & Ice Modern design doc and implementation plan Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: redesign login page with Slate & Ice Modern design system Apply glassmorphism styling, atmosphere orbs, branded wordmark, and consistent design tokens to match the updated app shell aesthetic. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: raise TopBar z-index so profile dropdown renders above main content Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add AI assistant with in-session copilot and standalone chat with RAG Implements three-phase AI assistant feature: - Phase 0: RAG infrastructure with pgvector embeddings, Voyage AI integration, tree chunking service, and semantic search over team's flow library - Phase 1: In-session copilot panel during flow navigation with contextual AI help, current step awareness, and suggested related flows - Phase 2: Standalone AI chat page with persistent conversation history, pin/delete, and configurable retention policies (account-level) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add account management, email verification, AI fixes, and user guides - Profile settings, account transfer, delete/leave account flows - Email verification with JWT tokens and Resend integration - AI assistant/copilot fixes: markdown rendering, shared RAG helpers, token tracking, input refocus, model_validate usage - User guides hub + detail pages with 13 topic guides - Sidebar and top bar navigation for guides Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: prevent stale chunk errors after deployments - Set Cache-Control no-cache on index.html in nginx so browsers always fetch fresh chunk references after a deploy - Auto-reload on chunk load failures (stale deploy detection) with loop prevention via sessionStorage - Show friendly "App Updated" message if auto-reload doesn't resolve it Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add email verification toggle to admin settings Adds platform-level toggle to enable/disable email verification. When disabled, the verification banner is hidden and the send endpoint returns 403. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
369 lines
12 KiB
Markdown
369 lines
12 KiB
Markdown
# ResolutionFlow Aesthetic Redesign — Design Document
|
||
|
||
> **Date:** March 3, 2026
|
||
> **Status:** Approved
|
||
> **Reference Mockup:** `/tmp/mockup-j-slate-ice-modern.html`
|
||
|
||
---
|
||
|
||
## Problem Statement
|
||
|
||
The current purple gradient theme (`#818cf8` → `#a78bfa`) feels generic and AI-generated. It doesn't convey the professional credibility MSP engineers expect from their daily tooling. The redesign aims for a **sharp, modern** aesthetic that stands out while remaining easy on the eyes during long troubleshooting sessions.
|
||
|
||
## Design Direction: Slate & Ice Modern
|
||
|
||
Dark glassmorphism with an ice-cyan accent. Cool charcoal backgrounds, frosted-glass cards with backdrop blur, orchestrated page-load animations, and bold display typography.
|
||
|
||
---
|
||
|
||
## Color Palette
|
||
|
||
### Core Colors
|
||
|
||
| Token | Hex | Usage |
|
||
|-------|-----|-------|
|
||
| `--background` | `#101114` | Page background, body |
|
||
| `--surface` | `#14161a` | Sidebar/topbar base behind blur |
|
||
| `--card` / glass-bg | `rgba(24, 26, 31, 0.55)` | Card backgrounds (semi-transparent) |
|
||
| `--card-hover` | `rgba(24, 26, 31, 0.7)` | Card hover state |
|
||
| `--foreground` | `#f8fafc` | Primary text |
|
||
| `--muted-foreground` | `#8891a0` | Secondary text, nav labels |
|
||
| `--muted-dim` | `#5a6170` | Section labels, timestamps |
|
||
| `--border` | `rgba(255, 255, 255, 0.06)` | Default borders |
|
||
| `--border-hover` | `rgba(255, 255, 255, 0.12)` | Hover/active borders |
|
||
|
||
### Accent Colors
|
||
|
||
| Token | Hex | Usage |
|
||
|-------|-----|-------|
|
||
| `--primary` | `#06b6d4` | Accent gradient start, active indicators |
|
||
| `--primary-light` | `#22d3ee` | Accent gradient end, highlights |
|
||
| `--gradient-brand` | `linear-gradient(135deg, #06b6d4, #22d3ee)` | Primary buttons, avatar, active accent bar, logo "Flow" text |
|
||
|
||
### Functional Colors (unchanged semantics)
|
||
|
||
| Token | Hex | Usage |
|
||
|-------|-----|-------|
|
||
| `--success` | `#34d399` / emerald-400 | Completed, positive |
|
||
| `--warning` | `#fbbf24` / amber-400 | In-progress, caution |
|
||
| `--error` | `#f43f5e` / rose-500 | Error, critical, notification dots |
|
||
| `--info` | `#60a5fa` / blue-400 | Informational |
|
||
|
||
### Accessibility Notes
|
||
|
||
- Cyan accent is safe for deuteranopia, protanopia, and tritanopia
|
||
- Always pair status colors with icons (not color alone)
|
||
- Use shape differentiation (filled vs outline icons) alongside color for colorblind users
|
||
- `#f8fafc` on `#101114` background exceeds WCAG AAA contrast ratio
|
||
|
||
---
|
||
|
||
## Typography
|
||
|
||
### Font Stack
|
||
|
||
| Role | Font | Weights | Google Fonts |
|
||
|------|------|---------|-------------|
|
||
| `font-heading` | **Bricolage Grotesque** | 400, 600, 700, 800 | Yes |
|
||
| `font-body` (default) | **IBM Plex Sans** | 400, 500, 600 | Yes |
|
||
| `font-label` | **JetBrains Mono** | 400, 500 | Yes |
|
||
|
||
### Hierarchy
|
||
|
||
| Element | Font | Size | Weight | Color |
|
||
|---------|------|------|--------|-------|
|
||
| Page greeting / hero | Bricolage Grotesque | 36px | 800 | `--foreground` |
|
||
| Stat values | Bricolage Grotesque | 30px | 800 | cyan gradient text |
|
||
| Card titles | Bricolage Grotesque | 16px | 700 | `--foreground` |
|
||
| Body text | IBM Plex Sans | 14px | 400-500 | `--foreground` |
|
||
| Nav items | IBM Plex Sans | 14px | 500 | `--muted-foreground` → `--foreground` on hover/active |
|
||
| Section labels | JetBrains Mono | 10px | 500 | `--muted-dim`, uppercase, `letter-spacing: 0.1em` |
|
||
| Timestamps / metadata | JetBrains Mono | 11-12px | 400 | `--muted-foreground` |
|
||
| Stat labels | IBM Plex Sans | 13px | 500 | `--muted-foreground` |
|
||
|
||
---
|
||
|
||
## Glassmorphism System
|
||
|
||
### Card Variants
|
||
|
||
**Interactive glass card** (`.glass-card`):
|
||
```css
|
||
background: rgba(24, 26, 31, 0.55);
|
||
backdrop-filter: blur(16px);
|
||
border: 1px solid rgba(255, 255, 255, 0.06);
|
||
border-radius: 16px;
|
||
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
|
||
/* Hover */
|
||
transform: scale(1.02);
|
||
border-color: rgba(255, 255, 255, 0.12);
|
||
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.08);
|
||
```
|
||
|
||
**Static glass card** (`.glass-card-static`): Same as above without hover transform.
|
||
|
||
### Shell Blur Levels
|
||
|
||
| Element | Blur | Background |
|
||
|---------|------|-----------|
|
||
| Sidebar | `blur(12px)` | `rgba(16, 17, 20, 0.5)` |
|
||
| Topbar | `blur(20px)` | `rgba(16, 17, 20, 0.6)` |
|
||
| Cards | `blur(16px)` | `rgba(24, 26, 31, 0.55)` |
|
||
|
||
### Ambient Atmosphere
|
||
|
||
Two fixed `pointer-events: none` gradient orbs behind the app shell:
|
||
- **Cyan orb**: top-right, 600x600px, `rgba(6, 182, 212, 0.15)`, blur(60px)
|
||
- **Purple orb**: bottom-left, 500x500px, `rgba(99, 102, 241, 0.08)`, blur(50px)
|
||
|
||
---
|
||
|
||
## Component Specifications
|
||
|
||
### Primary Button
|
||
|
||
```css
|
||
background: linear-gradient(135deg, #06b6d4, #22d3ee);
|
||
color: #101114;
|
||
font-weight: 600;
|
||
border-radius: 10px;
|
||
padding: 10px 20px;
|
||
/* Hover: opacity 0.9; Active: scale(0.97) */
|
||
```
|
||
|
||
### Secondary Button
|
||
|
||
```css
|
||
background: rgba(255, 255, 255, 0.04);
|
||
border: 1px solid rgba(255, 255, 255, 0.06);
|
||
color: #f8fafc;
|
||
border-radius: 10px;
|
||
/* Hover: border brightens to rgba(255, 255, 255, 0.12) */
|
||
```
|
||
|
||
### Search Bar
|
||
|
||
- `width: 320px`, expands to `400px` on focus
|
||
- Background: `rgba(255, 255, 255, 0.04)`, focus: `rgba(255, 255, 255, 0.06)`
|
||
- Focus border: `rgba(6, 182, 212, 0.3)` — cyan tint
|
||
- Rounded: `border-radius: 12px`
|
||
|
||
### Active Nav Item
|
||
|
||
- Background: `rgba(6, 182, 212, 0.1)` with scaleX reveal animation
|
||
- Left accent bar: 3px wide, cyan gradient, `border-radius: 0 3px 3px 0`
|
||
- Text: `--foreground` (white)
|
||
|
||
### Avatar
|
||
|
||
- 34x34px, `border-radius: 10px` (rounded square)
|
||
- Cyan gradient background, dark text
|
||
- Hover: `scale(1.08)`
|
||
|
||
### Notification Dot
|
||
|
||
- 8px circle, `#f43f5e` (rose), 2px solid `#101114` border
|
||
|
||
### Scrollbar
|
||
|
||
- 6px wide, transparent track
|
||
- Thumb: `rgba(255,255,255,0.08)`, hover: `rgba(255,255,255,0.12)`
|
||
|
||
---
|
||
|
||
## Animations
|
||
|
||
### Page Load Sequence (orchestrated)
|
||
|
||
| Element | Animation | Delay | Duration |
|
||
|---------|-----------|-------|----------|
|
||
| Topbar | slideDown (Y: -100% → 0) | 200ms | 400ms |
|
||
| Sidebar | slideInLeft (X: -100% → 0) | 250ms | 400ms |
|
||
| Greeting | fadeInUp (Y: 20px → 0) | 400ms | 400ms |
|
||
| Stat cards | fadeInUp cascade | 500ms, 570ms, 640ms, 710ms | 350ms each |
|
||
| Activity items | fadeInUp stagger | 750ms + 40ms each | 300ms each |
|
||
| Quick actions | fadeInRight (X: 30px → 0) | 800ms | 400ms |
|
||
|
||
### Micro-interactions
|
||
|
||
| Element | Effect |
|
||
|---------|--------|
|
||
| Glass cards | `scale(1.02)` + border/shadow upgrade on hover |
|
||
| Buttons | `scale(0.97)` on `:active` |
|
||
| Notification bell | wobble keyframe (rotate ±8° → 0) on hover |
|
||
| First stat card | `breatheGlow` — pulsing cyan shadow, 3s infinite |
|
||
| Nav items | Background scaleX reveal from left on hover |
|
||
| Search bar | Width expansion 320→400px on focus |
|
||
| Avatar | `scale(1.08)` on hover |
|
||
|
||
### Easing
|
||
|
||
- Primary: `cubic-bezier(0.4, 0, 0.2, 1)` — smooth deceleration
|
||
- Bounce (optional): `cubic-bezier(0.34, 1.56, 0.64, 1)` — slight overshoot
|
||
|
||
---
|
||
|
||
## Dashboard Layout
|
||
|
||
### Grid Structure
|
||
|
||
```
|
||
Row 1: Greeting + date (full width)
|
||
Row 2: Weekly Calendar (flex-grow) + Quick Actions (fixed width) — equal height
|
||
Row 3: My Open Sessions (flex-grow) + Stats 2x2 grid (fixed width) — equal height
|
||
Row 4: Recent Activity (full width)
|
||
```
|
||
|
||
### Weekly Calendar Panel
|
||
|
||
- 5 tall day columns (Mon–Fri), equal width
|
||
- Today column: highlighted with cyan gradient top bar
|
||
- Events appear inline within day columns with colored left border (4px)
|
||
- Cyan left-border: default events
|
||
- Amber left-border: maintenance events
|
||
- Empty days show "No events" in muted text
|
||
- Calendar and quick actions stretch to match height (`align-items: stretch`)
|
||
- Future: Outlook/Gmail/PSA calendar sync integration
|
||
|
||
### Quick Actions Panel
|
||
|
||
4 glass cards in a vertical stack:
|
||
1. New Flow (+ icon, cyan accent)
|
||
2. Resume Session (play icon, emerald accent)
|
||
3. Browse Library (book icon, amber accent)
|
||
4. Invite Team (user-plus icon, purple accent)
|
||
|
||
### My Open Sessions Panel
|
||
|
||
- Shows 3 oldest open sessions
|
||
- Each row: colored dot + flow name + "Step X of Y" + time ago + Resume button
|
||
- Resume button: small cyan gradient pill
|
||
|
||
### Stats Panel (2x2 Grid)
|
||
|
||
4 stat cards:
|
||
1. Active Flows — with `breatheGlow` animation
|
||
2. This Week (sessions)
|
||
3. Avg Resolution (time)
|
||
4. Team Members
|
||
|
||
Each: stat value (30px Bricolage Grotesque, cyan gradient text) + label + trend indicator
|
||
|
||
### Recent Activity Panel
|
||
|
||
- Full width, 5 activity items
|
||
- Each: icon (colored background circle) + description + JetBrains Mono timestamp
|
||
- Staggered fadeInUp animation on page load
|
||
|
||
---
|
||
|
||
## Sidebar Structure
|
||
|
||
1. **Logo bar** (56px height, matches topbar): Decision-tree icon SVG + "Resolution" white + "Flow" cyan gradient
|
||
2. **Pinned Flows**: 3 pinned items with cyan pin icons
|
||
3. **Divider**
|
||
4. **Navigation**:
|
||
- Dashboard (active)
|
||
- All Flows → Troubleshooting / Projects / Maintenance (sub-items)
|
||
- Step Library
|
||
- Sessions
|
||
- Exports
|
||
5. **Divider**
|
||
6. **Footer** (pushed to bottom): User avatar + name + role badge
|
||
|
||
No categories section. No workspace switcher.
|
||
|
||
---
|
||
|
||
## Topbar Structure
|
||
|
||
- Left: Search bar with search icon + "Search flows..." placeholder + keyboard shortcut badge
|
||
- Right: Help icon + Notification bell (with dot) + User avatar (rounded square, cyan gradient)
|
||
- Subtle cyan gradient underline glow at center-bottom
|
||
|
||
---
|
||
|
||
## Logo
|
||
|
||
The existing decision-tree SVG icon is retained but recolored with the cyan gradient (`#06b6d4` → `#22d3ee`). Nodes have decreasing opacity down the tree (0.9 → 0.7 → 0.5). Connector lines use the gradient stroke at 0.4–0.5 opacity.
|
||
|
||
Wordmark: "Resolution" in `#f8fafc` + "Flow" with `background: linear-gradient(135deg, #06b6d4, #22d3ee)` + `-webkit-background-clip: text`.
|
||
|
||
---
|
||
|
||
## Shadow System
|
||
|
||
| Token | Value | Usage |
|
||
|-------|-------|-------|
|
||
| `--shadow-float` | `0 8px 32px rgba(0,0,0,0.3)` | Default card shadow |
|
||
| `--shadow-float-hover` | `0 12px 40px rgba(0,0,0,0.4), 0 0 0 1px rgba(255,255,255,0.08)` | Hovered card |
|
||
| `--shadow-cyan-glow` | `0 8px 32px rgba(6,182,212,0.08)` | Cyan-tinted glow |
|
||
|
||
---
|
||
|
||
## Migration Notes
|
||
|
||
### What Changes
|
||
|
||
| Current | New |
|
||
|---------|-----|
|
||
| Purple gradient (`#818cf8` → `#a78bfa`) | Ice cyan gradient (`#06b6d4` → `#22d3ee`) |
|
||
| Plus Jakarta Sans (headings) | Bricolage Grotesque (headings) |
|
||
| Inter (body) | IBM Plex Sans (body) |
|
||
| Outfit (labels) | JetBrains Mono (labels) |
|
||
| Flat `bg-card` cards | Glassmorphism with `backdrop-filter: blur()` |
|
||
| No page-load animations | Orchestrated entrance sequence |
|
||
| No hover scaling on cards | `scale(1.02)` hover lift |
|
||
| `bg-gradient-brand` = purple | `bg-gradient-brand` = cyan |
|
||
| `text-gradient-brand` = purple | `text-gradient-brand` = cyan |
|
||
|
||
### What Stays the Same
|
||
|
||
- CSS Grid app shell layout (sidebar + topbar + main)
|
||
- Dark-first theme (dark only, no light mode)
|
||
- Lucide React icons
|
||
- Zustand state management
|
||
- Component architecture and routing
|
||
- Functional color semantics (green=success, amber=warning, red=error)
|
||
- "Flows" terminology, "ResolutionFlow" branding
|
||
- BrandLogo.tsx component structure (just recolor the SVG + gradient)
|
||
|
||
### New Dashboard Panels (Feature Work)
|
||
|
||
- **Weekly Calendar**: New component, requires date logic, event display, future calendar sync API
|
||
- **My Open Sessions**: Queries 3 oldest open sessions (existing API with sort + limit)
|
||
- Stat cards and Recent Activity already exist — layout rearrangement only
|
||
|
||
---
|
||
|
||
## Implementation Scope
|
||
|
||
### Phase 1: Design System Foundation
|
||
- Update CSS variables in `index.css`
|
||
- Update `tailwind.config.js` (colors, fonts, gradients)
|
||
- Add Google Fonts imports (Bricolage Grotesque, IBM Plex Sans, JetBrains Mono)
|
||
- Create glassmorphism utility classes
|
||
- Create animation keyframes and stagger classes
|
||
- Update `BrandLogo.tsx` SVG colors
|
||
|
||
### Phase 2: Shell & Navigation
|
||
- Update sidebar glassmorphism + nav item styles
|
||
- Update topbar glassmorphism + search bar
|
||
- Update active nav indicator (purple → cyan accent bar)
|
||
|
||
### Phase 3: Component Updates
|
||
- Update button variants (primary gradient, secondary)
|
||
- Update card components to glass-card pattern
|
||
- Update stat cards, activity items, badges
|
||
- Update form inputs (focus states)
|
||
|
||
### Phase 4: Dashboard Redesign
|
||
- Rearrange dashboard layout (greeting → calendar+actions → sessions+stats → activity)
|
||
- Build Weekly Calendar component
|
||
- Build My Open Sessions panel
|
||
- Add orchestrated page-load animations
|
||
|
||
### Phase 5: Page-by-Page Sweep
|
||
- Update all remaining pages to use new design tokens
|
||
- Ensure consistency across tree editor, session pages, admin pages, etc.
|