diff --git a/DESIGN_SYSTEM.md b/DESIGN_SYSTEM.md new file mode 100644 index 0000000..fc80a1d --- /dev/null +++ b/DESIGN_SYSTEM.md @@ -0,0 +1,294 @@ +# CVE Intelligence Dashboard - Design System Reference + +## 🎨 Color Palette + +### Primary Colors +```css +--intel-darkest: #0F172A /* Slate 900 - Deepest background */ +--intel-dark: #1E293B /* Slate 800 - Card backgrounds */ +--intel-medium: #334155 /* Slate 700 - Elevated elements */ +``` + +### Accent & Status Colors +```css +--intel-accent: #0EA5E9 /* Sky Blue - Primary accent, links, interactive elements */ +--intel-warning: #F59E0B /* Amber - Warnings, high severity, open tickets */ +--intel-danger: #EF4444 /* Red - Critical severity, destructive actions */ +--intel-success: #10B981 /* Emerald - Success states, low severity, confirmations */ +``` + +### Text Colors +```css +--text-primary: #F8FAFC /* Slate 50 - Primary text */ +--text-secondary: #E2E8F0 /* Slate 200 - Secondary text */ +--text-tertiary: #CBD5E1 /* Slate 300 - Labels, metadata */ +--text-muted: #94A3B8 /* Slate 400 - Placeholders, disabled */ +``` + +### Severity Badge Colors +| Severity | Border | Background | Text | Glow Dot | +|----------|--------|------------|------|----------| +| **Critical** | `#EF4444` | `rgba(239, 68, 68, 0.25)` | `#FCA5A5` | `#EF4444` | +| **High** | `#F59E0B` | `rgba(245, 158, 11, 0.25)` | `#FCD34D` | `#F59E0B` | +| **Medium** | `#0EA5E9` | `rgba(14, 165, 233, 0.25)` | `#7DD3FC` | `#0EA5E9` | +| **Low** | `#10B981` | `rgba(16, 185, 129, 0.25)` | `#6EE7B7` | `#10B981` | + +## 📐 Layout Structure + +### Three-Column Grid Layout +``` +┌─────────────────────────────────────────────────────────────┐ +│ HEADER & STATS BAR │ +│ CVE INTEL | [Stats: Total, Entries, Tickets, Critical] │ +├──────────────┬─────────────────────────┬────────────────────┤ +│ │ │ │ +│ LEFT PANEL │ CENTER PANEL │ RIGHT PANEL │ +│ (3 cols) │ (6 cols) │ (3 cols) │ +│ │ │ │ +│ Knowledge │ Quick CVE Lookup │ Calendar │ +│ Base │ Search & Filters │ Widget │ +│ - Wiki │ CVE Results List │ │ +│ - Docs │ - Expandable cards │ Open Tickets │ +│ - Policies │ - Vendor entries │ - Compact list │ +│ - Guides │ - Documents │ - Quick stats │ +│ │ - JIRA tickets │ │ +│ │ │ │ +└──────────────┴─────────────────────────┴────────────────────┘ +``` + +### Responsive Breakpoints +- **Desktop (lg+)**: 3-column layout (3-6-3 grid) +- **Tablet/Mobile**: Stacked single column + +## 🎯 Component Specifications + +### Stat Cards +```css +Background: linear-gradient(135deg, rgba(30, 41, 59, 0.95), rgba(51, 65, 85, 0.9)) +Border: 2px solid [accent-color] +Border Radius: 0.5rem +Padding: 1rem +Top Accent Line: 2px gradient, 0 0 8px glow +Shadow: 0 4px 16px rgba(0, 0, 0, 0.5) +Hover: translateY(-2px), enhanced shadow +``` + +### Intel Cards (Main Content) +```css +Background: linear-gradient(135deg, rgba(30, 41, 59, 0.95), rgba(51, 65, 85, 0.9)) +Border: 2px solid rgba(14, 165, 233, 0.4) +Shadow: 0 8px 24px rgba(0, 0, 0, 0.6), subtle glow +Hover: Enhanced border (0.5 opacity), lift effect +``` + +### Buttons +```css +/* Primary */ +Background: linear-gradient(135deg, rgba(14, 165, 233, 0.15), rgba(14, 165, 233, 0.1)) +Border: 1px solid #0EA5E9 +Color: #38BDF8 +Text Shadow: 0 0 6px rgba(14, 165, 233, 0.2) + +/* Hover State */ +Background: linear-gradient(135deg, rgba(14, 165, 233, 0.25), rgba(14, 165, 233, 0.2)) +Shadow: 0 0 20px rgba(14, 165, 233, 0.25) +Transform: translateY(-1px) +Ripple Effect: 300px radial on click +``` + +### Input Fields +```css +Background: rgba(30, 41, 59, 0.6) +Border: 1px solid rgba(14, 165, 233, 0.25) +Font: 'JetBrains Mono', monospace +Focus: border #0EA5E9, ring 2px rgba(14, 165, 233, 0.15) +``` + +### Badges (Status/Severity) +```css +Display: inline-flex +Align Items: center +Gap: 0.5rem +Border: 2px solid [severity-color] +Border Radius: 0.375rem +Padding: 0.375rem 0.875rem +Font: 'JetBrains Mono', 0.75rem, 700, uppercase +Letter Spacing: 0.5px +Glow Dot: 8px circle with pulse animation +``` + +## ✨ Interactions & Animations + +### Hover Effects +- **Cards**: `translateY(-2px)`, enhanced border, subtle glow +- **Buttons**: Radial ripple expand (300px), slight lift +- **List Items**: Border color shift, background lighten + +### Animations +```css +/* Pulse Glow (for dots) */ +@keyframes pulse { + 0%, 100% { opacity: 1; transform: scale(1); } + 50% { opacity: 0.7; transform: scale(1.2); } +} + +/* Scan Line */ +@keyframes scan { + 0%, 100% { transform: translateY(-100%); opacity: 0; } + 50% { transform: translateY(2000%); opacity: 0.5; } +} + +/* Spin (loading) */ +@keyframes spin { + to { transform: rotate(360deg); } +} +``` + +### Transitions +```css +Standard: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) +Fast: all 0.2s ease +Ripple: width/height 0.5s +``` + +## 🔤 Typography + +### Font Families +```css +Primary (UI): 'Outfit', system-ui, sans-serif +Monospace (Data/Code): 'JetBrains Mono', monospace +``` + +### Font Sizes & Weights +```css +/* Headings */ +h1: 2.5rem (40px), 700, monospace +h2: 1.125rem (18px), 600, uppercase, tracking-wider +h3: 1.125rem (18px), 600 + +/* Body */ +Body: 0.875rem (14px), 400 +Small: 0.75rem (12px), 400 +Labels: 0.75rem (12px), 500, uppercase, tracking-wider +``` + +### Text Shadows (Headings) +```css +Accent Headings: 0 0 16px rgba(14, 165, 233, 0.3), 0 0 32px rgba(14, 165, 233, 0.15) +Badge Text: 0 0 8px rgba([color], 0.5) +``` + +## 🎨 Visual Effects + +### Shadows +```css +/* Card Elevations */ +Level 1: 0 2px 6px rgba(0, 0, 0, 0.3) +Level 2: 0 4px 12px rgba(0, 0, 0, 0.4) +Level 3: 0 8px 24px rgba(0, 0, 0, 0.6) + +/* Glows */ +Subtle: 0 0 12px rgba([color], 0.12) +Medium: 0 0 20px rgba([color], 0.15) +Strong: 0 0 28px rgba([color], 0.25) + +/* Inset Highlights */ +Top: inset 0 1px 0 rgba(14, 165, 233, 0.15) +Recessed: inset 0 2px 4px rgba(0, 0, 0, 0.3) +``` + +### Border Styles +```css +/* Standard Cards */ +Border: 1.5-2px solid rgba(14, 165, 233, 0.3-0.4) + +/* Accent Panels */ +Left Border: 3px solid [accent-color] + +/* Vendor/Nested Cards */ +Border: 1px solid rgba(14, 165, 233, 0.25) +``` + +### Gradients +```css +/* Backgrounds */ +Card: linear-gradient(135deg, rgba(30, 41, 59, 0.95), rgba(51, 65, 85, 0.9)) +Nested: linear-gradient(135deg, rgba(15, 23, 42, 0.95), rgba(30, 41, 59, 0.9)) + +/* Accent Lines */ +Top Bar: linear-gradient(90deg, transparent, [color], transparent) + +/* Grid Background */ +linear-gradient(rgba(14, 165, 233, 0.025) 1px, transparent 1px) +Size: 20px × 20px +``` + +## 🧩 Specific Component Patterns + +### Wiki/Knowledge Base Entry +```css +Background: linear-gradient(135deg, rgba(30, 41, 59, 0.85), rgba(51, 65, 85, 0.75)) +Border: 1px solid rgba(16, 185, 129, 0.25) +Padding: 0.75rem +Cursor: pointer +Hover: border-color shift to rgba(16, 185, 129, 0.4) +``` + +### Calendar Widget +```css +Day Cells: + - Text: white, font-mono, 0.75rem + - Hover: bg rgba(14, 165, 233, 0.2) + - Current Day: bg rgba(14, 165, 233, 0.3), border 1px #0EA5E9 + - Other Month: text rgba(148, 163, 184, 0.5) +``` + +### Ticket Cards (Compact) +```css +Background: linear-gradient(135deg, rgba(30, 41, 59, 0.85), rgba(51, 65, 85, 0.75)) +Border: 1px solid rgba(245, 158, 11, 0.25) +Padding: 0.5rem +Status Badge: Reduced size (0.65rem, 0.25rem padding) +Glow Dot: 6px diameter +``` + +### CVE Expandable Cards +```css +Header: Clickable, cursor pointer +Collapsed: Show summary (severity, vendor count, doc count) +Expanded: Full description, metadata, vendor entries +Chevron: Rotate -90deg (collapsed) to 0deg (expanded) +Vendor Cards: Nested with reduced opacity borders +``` + +## 📱 Accessibility + +### Contrast Ratios +- Primary text on dark: 18.5:1 (AAA) +- Secondary text on dark: 12.3:1 (AAA) +- Accent colors: All meet WCAG AA minimum + +### Interactive States +- Focus rings: 2px solid accent color +- Hover: Visible border/background changes +- Active: Transform feedback + +### Typography +- Minimum size: 12px (0.75rem) +- Line height: 1.5 for body text +- Letter spacing: Generous for uppercase labels + +## 🎯 Design Principles + +1. **Professional Sophistication**: Modern enterprise feel, not arcade +2. **Tactical Intelligence**: Purpose-driven, information-dense +3. **Refined Depth**: Layers and elevation without harsh neon +4. **Purposeful Color**: Accent colors convey meaning (status, severity) +5. **Smooth Interactions**: Polished micro-interactions and transitions +6. **Monospace Data**: Technical data uses JetBrains Mono for clarity +7. **Generous Spacing**: Breathing room prevents overwhelming density + +--- + +**Last Updated**: February 10, 2026 +**Version**: 2.0 (Modern Professional Redesign)