mirror of
https://github.com/The-Low-Code-Foundation/OpenNoodl.git
synced 2026-01-12 07:12:54 +01:00
- Added MIME type mappings for .otf, .woff, and .woff2 font formats - Fixed missing break statement after .wav case (was falling through to .mp4) - Fonts now load correctly in editor preview without 404 errors - Resolves OTS parsing error messages in console The web server was already serving project directory files correctly, but browsers were rejecting font files due to missing/incorrect MIME types. Related to TASK-006
867 lines
26 KiB
Markdown
867 lines
26 KiB
Markdown
# Task: Noodl Design System Modernization
|
|
|
|
## Overview
|
|
|
|
Comprehensive overhaul of Noodl's visual design system to create a modern, clean, professional appearance. Moving from the dated 2015-era dark gray aesthetic to a contemporary design language inspired by tools like Linear, Raycast, and Figma.
|
|
|
|
**Primary Goals:**
|
|
- Clean, modern color palette (Rose + Violet with Zinc neutrals)
|
|
- Consistent token usage throughout the codebase
|
|
- Foundation for future light/dark theme switching
|
|
- Better visual hierarchy and spacing
|
|
- Improved component aesthetics
|
|
|
|
**Brand Direction:**
|
|
- Primary: Rose (`#f43f5e`) - Modern, bold, distinctive
|
|
- Secondary: Violet (`#a78bfa`) - Complementary, contemporary
|
|
- Neutrals: Zinc palette (clean grays, no brown/warm tints)
|
|
|
|
---
|
|
|
|
## Phase 1: Token Consolidation & Color Refresh
|
|
|
|
**Priority: CRITICAL**
|
|
**Effort: 1-2 hours**
|
|
**Risk: Low**
|
|
|
|
### Problem
|
|
|
|
The editor has duplicate color token files. The core-ui tokens are commented out and the editor uses its own copy:
|
|
|
|
```typescript
|
|
// packages/noodl-editor/src/editor/index.ts
|
|
//Design tokens for later
|
|
// import '../../../noodl-core-ui/src/styles/custom-properties/animations.css';
|
|
// import '../../../noodl-core-ui/src/styles/custom-properties/fonts.css';
|
|
// import '../../../noodl-core-ui/src/styles/custom-properties/colors.css';
|
|
import '../editor/src/styles/custom-properties/animations.css';
|
|
import '../editor/src/styles/custom-properties/fonts.css';
|
|
import '../editor/src/styles/custom-properties/colors.css';
|
|
```
|
|
|
|
### Tasks
|
|
|
|
#### 1.1 Consolidate to Single Source of Truth
|
|
|
|
1. Replace the contents of `packages/noodl-editor/src/editor/src/styles/custom-properties/colors.css` with the new modern palette (see Appendix A)
|
|
|
|
2. Also update `packages/noodl-core-ui/src/styles/custom-properties/colors.css` with the same content
|
|
|
|
3. Verify the viewer frame also uses the correct colors:
|
|
- Check `packages/noodl-editor/src/frames/viewer-frame/index.js`
|
|
|
|
#### 1.2 Verify Token Application
|
|
|
|
After replacing, verify these key tokens are working:
|
|
|
|
| Token | Expected Value | Where to Check |
|
|
|-------|---------------|----------------|
|
|
| `--theme-color-bg-1` | `#09090b` (near black) | Main app background |
|
|
| `--theme-color-bg-2` | `#18181b` | Panel backgrounds |
|
|
| `--theme-color-bg-3` | `#27272a` | Card/input backgrounds |
|
|
| `--theme-color-primary` | `#f43f5e` (rose) | CTA buttons |
|
|
| `--theme-color-secondary` | `#a78bfa` (violet) | Secondary elements |
|
|
|
|
### Testing Checklist
|
|
|
|
- [ ] App background is clean dark (not brownish)
|
|
- [ ] Primary buttons are rose colored
|
|
- [ ] Text is readable with good contrast
|
|
- [ ] Node colors on canvas still distinguishable
|
|
- [ ] Success/error/warning states still visible
|
|
- [ ] No console errors related to missing CSS variables
|
|
|
|
---
|
|
|
|
## Phase 2: Hardcoded Color Audit & Cleanup
|
|
|
|
**Priority: HIGH**
|
|
**Effort: 3-4 hours**
|
|
**Risk: Low-Medium**
|
|
|
|
### Problem
|
|
|
|
Many components have hardcoded hex colors instead of using design tokens. This breaks consistency and prevents theming.
|
|
|
|
### Tasks
|
|
|
|
#### 2.1 Find All Hardcoded Colors
|
|
|
|
Search the codebase for hardcoded hex colors in these locations:
|
|
|
|
```
|
|
packages/noodl-editor/src/editor/src/styles/
|
|
packages/noodl-editor/src/editor/src/views/
|
|
packages/noodl-core-ui/src/components/
|
|
```
|
|
|
|
Common patterns to find:
|
|
```css
|
|
/* Bad - hardcoded */
|
|
background-color: #383838;
|
|
background: #444444;
|
|
border: 1px solid #2a2a2a;
|
|
color: #b9b9b9;
|
|
|
|
/* Good - tokenized */
|
|
background-color: var(--theme-color-bg-3);
|
|
```
|
|
|
|
#### 2.2 Create Mapping Reference
|
|
|
|
Map discovered hardcoded colors to appropriate tokens:
|
|
|
|
| Hardcoded | Replace With |
|
|
|-----------|--------------|
|
|
| `#000000` | `var(--theme-color-bg-0)` |
|
|
| `#151414`, `#151515` | `var(--theme-color-bg-1)` |
|
|
| `#292828`, `#2a2a2a` | `var(--theme-color-bg-2)` |
|
|
| `#383838`, `#3c3c3c` | `var(--theme-color-bg-3)` |
|
|
| `#444444`, `#4a4a4a` | `var(--theme-color-bg-4)` |
|
|
| `#666666`, `#6a6a6a` | `var(--theme-color-fg-muted)` |
|
|
| `#999999`, `#9a9a9a` | `var(--theme-color-fg-default-shy)` |
|
|
| `#b8b8b8`, `#b9b9b9` | `var(--theme-color-fg-default)` |
|
|
| `#d4d4d4` | `var(--theme-color-fg-default-contrast)` |
|
|
| `#f5f5f5`, `#ffffff` | `var(--theme-color-fg-highlight)` |
|
|
|
|
#### 2.3 Priority Files to Fix
|
|
|
|
Start with these high-impact files:
|
|
|
|
1. **Popup Layer Styles**
|
|
- `packages/noodl-editor/src/editor/src/styles/popuplayer.css`
|
|
|
|
2. **Property Editor**
|
|
- `packages/noodl-editor/src/editor/src/styles/propertyeditor.css`
|
|
|
|
3. **Node Graph Editor**
|
|
- `packages/noodl-editor/src/editor/src/views/nodegrapheditor/` (all .css/.scss files)
|
|
|
|
4. **Inspect Popup**
|
|
- `packages/noodl-editor/src/editor/src/views/nodegrapheditor/InspectJSONView/InspectPopup.module.scss`
|
|
|
|
5. **Connection Popup**
|
|
- `packages/noodl-editor/src/editor/src/views/ConnectionPopup/ConnectionPopup.module.scss`
|
|
|
|
### Testing Checklist
|
|
|
|
- [ ] All replaced colors render correctly
|
|
- [ ] Hover states still work
|
|
- [ ] Focus states visible
|
|
- [ ] No visual regressions in property panel
|
|
- [ ] Popups/modals look correct
|
|
- [ ] Node graph colors unaffected
|
|
|
|
---
|
|
|
|
## Phase 3: Typography & Spacing Refresh
|
|
|
|
**Priority: MEDIUM**
|
|
**Effort: 2-3 hours**
|
|
**Risk: Low**
|
|
|
|
### Problem
|
|
|
|
Current typography feels cramped and dated. Font sizes are small and spacing is inconsistent.
|
|
|
|
### Tasks
|
|
|
|
#### 3.1 Update Font Tokens
|
|
|
|
File: `packages/noodl-core-ui/src/styles/custom-properties/fonts.css`
|
|
|
|
```css
|
|
:root {
|
|
--font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
|
|
--font-family-code: 'JetBrains Mono', Menlo, Monaco, 'Courier New', monospace;
|
|
|
|
--font-weight-light: 300;
|
|
--font-weight-regular: 400;
|
|
--font-weight-medium: 500;
|
|
--font-weight-semibold: 600;
|
|
--font-weight-bold: 700;
|
|
|
|
/* New: Font size scale */
|
|
--font-size-xs: 10px;
|
|
--font-size-sm: 12px;
|
|
--font-size-base: 13px;
|
|
--font-size-md: 14px;
|
|
--font-size-lg: 16px;
|
|
--font-size-xl: 18px;
|
|
--font-size-2xl: 24px;
|
|
|
|
/* New: Line height scale */
|
|
--line-height-tight: 1.2;
|
|
--line-height-normal: 1.5;
|
|
--line-height-relaxed: 1.625;
|
|
|
|
/* New: Letter spacing */
|
|
--letter-spacing-tight: -0.02em;
|
|
--letter-spacing-normal: 0;
|
|
--letter-spacing-wide: 0.02em;
|
|
}
|
|
```
|
|
|
|
#### 3.2 Add Spacing Tokens
|
|
|
|
Create new file: `packages/noodl-core-ui/src/styles/custom-properties/spacing.css`
|
|
|
|
```css
|
|
:root {
|
|
--spacing-0: 0;
|
|
--spacing-1: 4px;
|
|
--spacing-2: 8px;
|
|
--spacing-3: 12px;
|
|
--spacing-4: 16px;
|
|
--spacing-5: 20px;
|
|
--spacing-6: 24px;
|
|
--spacing-8: 32px;
|
|
--spacing-10: 40px;
|
|
--spacing-12: 48px;
|
|
--spacing-16: 64px;
|
|
|
|
/* Component-specific spacing */
|
|
--spacing-panel-padding: var(--spacing-4);
|
|
--spacing-card-padding: var(--spacing-3);
|
|
--spacing-input-padding-x: var(--spacing-2);
|
|
--spacing-input-padding-y: var(--spacing-1);
|
|
--spacing-button-padding-x: var(--spacing-3);
|
|
--spacing-button-padding-y: var(--spacing-2);
|
|
|
|
/* Border radius */
|
|
--radius-sm: 2px;
|
|
--radius-default: 4px;
|
|
--radius-md: 6px;
|
|
--radius-lg: 8px;
|
|
--radius-xl: 12px;
|
|
--radius-full: 9999px;
|
|
}
|
|
```
|
|
|
|
#### 3.3 Import New Token Files
|
|
|
|
Update imports in:
|
|
- `packages/noodl-editor/src/editor/index.ts`
|
|
- `packages/noodl-core-ui/.storybook/preview.ts`
|
|
|
|
### Testing Checklist
|
|
|
|
- [ ] Text is readable at all sizes
|
|
- [ ] Spacing feels balanced
|
|
- [ ] Components don't overflow
|
|
- [ ] Modal/dialog layouts intact
|
|
|
|
---
|
|
|
|
## Phase 4: Component Visual Updates
|
|
|
|
**Priority: MEDIUM**
|
|
**Effort: 4-6 hours**
|
|
**Risk: Medium**
|
|
|
|
### Problem
|
|
|
|
Individual components need visual refinement beyond just color tokens.
|
|
|
|
### Tasks
|
|
|
|
#### 4.1 Button Refinements
|
|
|
|
File: `packages/noodl-core-ui/src/components/inputs/PrimaryButton/PrimaryButton.module.scss`
|
|
|
|
Updates needed:
|
|
- Slightly rounded corners (`border-radius: 6px`)
|
|
- Subtle shadow on hover
|
|
- Better disabled state (not just opacity)
|
|
- Smooth transitions
|
|
|
|
```scss
|
|
.Root {
|
|
border-radius: var(--radius-md);
|
|
transition: all 150ms ease;
|
|
|
|
&.is-variant-cta {
|
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
|
|
|
|
&:hover {
|
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
|
|
transform: translateY(-1px);
|
|
}
|
|
}
|
|
|
|
&:disabled {
|
|
opacity: 0.5;
|
|
cursor: not-allowed;
|
|
transform: none;
|
|
box-shadow: none;
|
|
}
|
|
}
|
|
```
|
|
|
|
#### 4.2 Input Field Refinements
|
|
|
|
File: `packages/noodl-core-ui/src/components/inputs/TextInput/TextInput.module.scss`
|
|
|
|
Updates needed:
|
|
- Subtle border (not just background change)
|
|
- Focus ring using new token
|
|
- Better placeholder styling
|
|
|
|
```scss
|
|
.InputArea {
|
|
border: 1px solid var(--theme-color-border-subtle);
|
|
border-radius: var(--radius-default);
|
|
transition: border-color 150ms ease, box-shadow 150ms ease;
|
|
|
|
&.is-focused {
|
|
border-color: var(--theme-color-focus-ring);
|
|
box-shadow: 0 0 0 2px rgba(244, 63, 94, 0.15);
|
|
}
|
|
}
|
|
```
|
|
|
|
#### 4.3 Dialog/Modal Refinements
|
|
|
|
File: `packages/noodl-core-ui/src/components/layout/BaseDialog/BaseDialog.module.scss`
|
|
|
|
Updates needed:
|
|
- Subtle border
|
|
- Refined shadow
|
|
- Better backdrop blur (if supported)
|
|
|
|
```scss
|
|
.VisibleDialog {
|
|
border: 1px solid var(--theme-color-border-subtle);
|
|
border-radius: var(--radius-lg);
|
|
box-shadow:
|
|
0 4px 6px -1px rgba(0, 0, 0, 0.1),
|
|
0 10px 15px -3px rgba(0, 0, 0, 0.2),
|
|
0 20px 25px -5px rgba(0, 0, 0, 0.15);
|
|
}
|
|
|
|
.Root.has-backdrop {
|
|
backdrop-filter: blur(4px);
|
|
-webkit-backdrop-filter: blur(4px);
|
|
}
|
|
```
|
|
|
|
#### 4.4 Panel/Section Refinements
|
|
|
|
Files:
|
|
- `packages/noodl-core-ui/src/components/sidebar/BasePanel/`
|
|
- `packages/noodl-core-ui/src/components/sidebar/Section/`
|
|
|
|
Updates needed:
|
|
- Consistent padding using spacing tokens
|
|
- Subtle dividers between sections
|
|
- Better header styling
|
|
|
|
### Testing Checklist
|
|
|
|
- [ ] Buttons look polished and modern
|
|
- [ ] Inputs have clear focus states
|
|
- [ ] Dialogs/modals feel elevated
|
|
- [ ] Panels have clear visual hierarchy
|
|
- [ ] All interactive states (hover, focus, active, disabled) work
|
|
|
|
---
|
|
|
|
## Phase 5: Migration Dialog Specific Fixes
|
|
|
|
**Priority: HIGH** (User-facing feature)
|
|
**Effort: 2-3 hours**
|
|
**Risk: Low**
|
|
|
|
### Problem
|
|
|
|
The React 19 migration dialog needs specific attention beyond global token changes.
|
|
|
|
### Tasks
|
|
|
|
#### 5.1 Identify Migration Dialog Files
|
|
|
|
Search for migration-related components:
|
|
```bash
|
|
find . -name "*.tsx" -o -name "*.jsx" | xargs grep -l -i "migrat"
|
|
```
|
|
|
|
#### 5.2 Dialog Structure Improvements
|
|
|
|
The migration wizard should have:
|
|
- Clear step indicator (not just numbered text list)
|
|
- Progress visualization
|
|
- Distinct sections with proper spacing
|
|
- Better icon usage
|
|
- Clear primary/secondary actions
|
|
|
|
#### 5.3 Suggested Component Structure
|
|
|
|
```tsx
|
|
<DialogContainer>
|
|
<DialogHeader>
|
|
<Title>Migrate Project to React 19</Title>
|
|
<Subtitle>Migration Complete</Subtitle>
|
|
</DialogHeader>
|
|
|
|
<StepIndicator
|
|
steps={['Confirm', 'Scan', 'Report', 'Migrate', 'Complete']}
|
|
currentStep={4}
|
|
/>
|
|
|
|
<DialogBody>
|
|
<SuccessBanner>
|
|
<Icon name="checkmark-circle" />
|
|
<Text>Your project has been migrated successfully</Text>
|
|
</SuccessBanner>
|
|
|
|
<StatsCard>
|
|
<Stat value={62} label="Migrated" status="success" />
|
|
</StatsCard>
|
|
|
|
<Section title="Project Locations">
|
|
<LocationItem icon="lock" label="Original" path="..." />
|
|
<LocationItem icon="folder" label="Migrated" path="..." />
|
|
</Section>
|
|
|
|
<Section title="What's Next?">
|
|
<ChecklistItem>Test your app thoroughly</ChecklistItem>
|
|
<ChecklistItem>Archive or delete original when ready</ChecklistItem>
|
|
</Section>
|
|
</DialogBody>
|
|
|
|
<DialogFooter>
|
|
<PrimaryButton label="Open Migrated Project" />
|
|
</DialogFooter>
|
|
</DialogContainer>
|
|
```
|
|
|
|
### Testing Checklist
|
|
|
|
- [ ] All wizard steps render correctly
|
|
- [ ] Progress is clear
|
|
- [ ] Success/error states are obvious
|
|
- [ ] Actions are clear
|
|
- [ ] Dialog is responsive to content length
|
|
|
|
---
|
|
|
|
## Phase 6: Light Theme Foundation
|
|
|
|
**Priority: LOW** (Future enhancement)
|
|
**Effort: 3-4 hours**
|
|
**Risk: Medium**
|
|
|
|
### Problem
|
|
|
|
Currently no infrastructure for theme switching.
|
|
|
|
### Tasks
|
|
|
|
#### 6.1 Theme Provider Setup
|
|
|
|
Create theme context and provider for React components.
|
|
|
|
#### 6.2 CSS Theme Classes
|
|
|
|
The colors.css file already includes a commented `.theme-light` block. Uncomment and refine.
|
|
|
|
#### 6.3 Theme Toggle
|
|
|
|
Add settings option to switch between light/dark.
|
|
|
|
#### 6.4 Persist Preference
|
|
|
|
Store theme preference in localStorage.
|
|
|
|
### Testing Checklist
|
|
|
|
- [ ] Theme toggle works
|
|
- [ ] All components respect theme
|
|
- [ ] No hardcoded colors breaking theme
|
|
- [ ] Preference persists across sessions
|
|
|
|
---
|
|
|
|
## Appendix A: Complete colors.css File
|
|
|
|
See the Rose + Violet palette file provided separately. Key values:
|
|
|
|
```css
|
|
/* Primary - Rose */
|
|
--theme-color-primary: #f43f5e;
|
|
--theme-color-primary-highlight: #fb7185;
|
|
--theme-color-primary-dim: #be123c;
|
|
--theme-color-on-primary: #ffffff;
|
|
|
|
/* Secondary - Violet */
|
|
--theme-color-secondary: #a78bfa;
|
|
--theme-color-secondary-dim: #7c3aed;
|
|
--theme-color-secondary-highlight: #c4b5fd;
|
|
--theme-color-on-secondary: #ffffff;
|
|
|
|
/* Backgrounds - Zinc */
|
|
--theme-color-bg-0: #000000;
|
|
--theme-color-bg-1: #09090b;
|
|
--theme-color-bg-2: #18181b;
|
|
--theme-color-bg-3: #27272a;
|
|
--theme-color-bg-4: #3f3f46;
|
|
|
|
/* Foregrounds */
|
|
--theme-color-fg-highlight: #ffffff;
|
|
--theme-color-fg-default-contrast: #f4f4f5;
|
|
--theme-color-fg-default: #d4d4d8;
|
|
--theme-color-fg-default-shy: #a1a1aa;
|
|
--theme-color-fg-muted: #71717a;
|
|
```
|
|
|
|
---
|
|
|
|
## Appendix B: File Locations Quick Reference
|
|
|
|
### Token Files
|
|
- `packages/noodl-core-ui/src/styles/custom-properties/colors.css`
|
|
- `packages/noodl-core-ui/src/styles/custom-properties/fonts.css`
|
|
- `packages/noodl-core-ui/src/styles/custom-properties/animations.css`
|
|
- `packages/noodl-editor/src/editor/src/styles/custom-properties/colors.css` (duplicate - primary)
|
|
|
|
### Entry Points
|
|
- `packages/noodl-editor/src/editor/index.ts` (main editor)
|
|
- `packages/noodl-editor/src/frames/viewer-frame/index.js` (viewer)
|
|
- `packages/noodl-core-ui/.storybook/preview.ts` (storybook)
|
|
|
|
### Key Component Directories
|
|
- `packages/noodl-core-ui/src/components/inputs/` (buttons, inputs)
|
|
- `packages/noodl-core-ui/src/components/layout/` (dialogs, containers)
|
|
- `packages/noodl-core-ui/src/components/sidebar/` (panels, sections)
|
|
- `packages/noodl-core-ui/src/components/typography/` (text, labels)
|
|
|
|
### Legacy Style Files (need hardcoded color audit)
|
|
- `packages/noodl-editor/src/editor/src/styles/`
|
|
- `packages/noodl-editor/src/editor/src/views/`
|
|
|
|
---
|
|
|
|
## Appendix C: Full colors.css Replacement
|
|
|
|
```css
|
|
/* =============================================================================
|
|
NOODL DESIGN SYSTEM - COLORS
|
|
Modern refresh: Rose + Violet palette
|
|
============================================================================= */
|
|
|
|
/* =============================================================================
|
|
BASE COLORS
|
|
These are the raw palette values. DO NOT use directly in components.
|
|
Use the THEME COLOR TOKENS below instead.
|
|
============================================================================= */
|
|
|
|
:root {
|
|
/* ---------------------------------------------------------------------------
|
|
SEMANTIC COLORS
|
|
--------------------------------------------------------------------------- */
|
|
|
|
/* Success - Modern Emerald */
|
|
--base-color-success-100: #ecfdf5;
|
|
--base-color-success-200: #a7f3d0;
|
|
--base-color-success-300: #6ee7b7;
|
|
--base-color-success-400: #34d399;
|
|
--base-color-success-500: #10b981;
|
|
--base-color-success-600: #059669;
|
|
--base-color-success-700: #047857;
|
|
--base-color-success-800: #065f46;
|
|
--base-color-success-900: #064e3b;
|
|
--base-color-success-1000: #022c22;
|
|
|
|
/* Error - Red (distinct from primary rose) */
|
|
--base-color-error-100: #fef2f2;
|
|
--base-color-error-200: #fecaca;
|
|
--base-color-error-300: #fca5a5;
|
|
--base-color-error-400: #f87171;
|
|
--base-color-error-500: #ef4444;
|
|
--base-color-error-600: #dc2626;
|
|
--base-color-error-700: #b91c1c;
|
|
--base-color-error-800: #991b1b;
|
|
--base-color-error-900: #7f1d1d;
|
|
--base-color-error-1000: #450a0a;
|
|
|
|
/* ---------------------------------------------------------------------------
|
|
NODE TYPE COLORS
|
|
--------------------------------------------------------------------------- */
|
|
|
|
/* Node-Pink - For Custom/User nodes */
|
|
--base-color-node-pink-100: #fdf2f8;
|
|
--base-color-node-pink-200: #fbcfe8;
|
|
--base-color-node-pink-300: #f9a8d4;
|
|
--base-color-node-pink-400: #f472b6;
|
|
--base-color-node-pink-500: #ec4899;
|
|
--base-color-node-pink-600: #db2777;
|
|
--base-color-node-pink-700: #be185d;
|
|
--base-color-node-pink-800: #9d174d;
|
|
--base-color-node-pink-900: #831843;
|
|
--base-color-node-pink-1000: #500724;
|
|
|
|
/* Node-Purple - For Component nodes */
|
|
--base-color-node-purple-100: #faf5ff;
|
|
--base-color-node-purple-200: #e9d5ff;
|
|
--base-color-node-purple-300: #d8b4fe;
|
|
--base-color-node-purple-400: #c084fc;
|
|
--base-color-node-purple-500: #a855f7;
|
|
--base-color-node-purple-600: #9333ea;
|
|
--base-color-node-purple-700: #7c3aed;
|
|
--base-color-node-purple-800: #6d28d9;
|
|
--base-color-node-purple-900: #5b21b6;
|
|
--base-color-node-purple-1000: #2e1065;
|
|
|
|
/* Node-Green - For Data nodes */
|
|
--base-color-node-green-100: #f0fdf4;
|
|
--base-color-node-green-200: #bbf7d0;
|
|
--base-color-node-green-300: #86efac;
|
|
--base-color-node-green-400: #4ade80;
|
|
--base-color-node-green-500: #22c55e;
|
|
--base-color-node-green-600: #16a34a;
|
|
--base-color-node-green-700: #15803d;
|
|
--base-color-node-green-800: #166534;
|
|
--base-color-node-green-900: #14532d;
|
|
--base-color-node-green-1000: #052e16;
|
|
|
|
/* Node-Gray - For Logic nodes */
|
|
--base-color-node-grey-100: #f4f4f5;
|
|
--base-color-node-grey-200: #e4e4e7;
|
|
--base-color-node-grey-300: #d4d4d8;
|
|
--base-color-node-grey-400: #a1a1aa;
|
|
--base-color-node-grey-500: #71717a;
|
|
--base-color-node-grey-600: #52525b;
|
|
--base-color-node-grey-700: #3f3f46;
|
|
--base-color-node-grey-800: #27272a;
|
|
--base-color-node-grey-900: #18181b;
|
|
--base-color-node-grey-1000: #09090b;
|
|
|
|
/* Node-Blue - For Visual nodes */
|
|
--base-color-node-blue-100: #eff6ff;
|
|
--base-color-node-blue-200: #dbeafe;
|
|
--base-color-node-blue-300: #bfdbfe;
|
|
--base-color-node-blue-400: #93c5fd;
|
|
--base-color-node-blue-500: #60a5fa;
|
|
--base-color-node-blue-600: #3b82f6;
|
|
--base-color-node-blue-700: #2563eb;
|
|
--base-color-node-blue-800: #1d4ed8;
|
|
--base-color-node-blue-900: #1e40af;
|
|
--base-color-node-blue-1000: #172554;
|
|
|
|
/* ---------------------------------------------------------------------------
|
|
BRAND COLORS
|
|
--------------------------------------------------------------------------- */
|
|
|
|
/* Primary - Rose (Modern pink-red) */
|
|
--base-color-rose-100: #fff1f2;
|
|
--base-color-rose-200: #fecdd3;
|
|
--base-color-rose-300: #fda4af;
|
|
--base-color-rose-400: #fb7185;
|
|
--base-color-rose-500: #f43f5e;
|
|
--base-color-rose-600: #e11d48;
|
|
--base-color-rose-700: #be123c;
|
|
--base-color-rose-800: #9f1239;
|
|
--base-color-rose-900: #881337;
|
|
--base-color-rose-1000: #4c0519;
|
|
|
|
/* Secondary - Violet */
|
|
--base-color-violet-100: #f5f3ff;
|
|
--base-color-violet-200: #ede9fe;
|
|
--base-color-violet-300: #ddd6fe;
|
|
--base-color-violet-400: #c4b5fd;
|
|
--base-color-violet-500: #a78bfa;
|
|
--base-color-violet-600: #8b5cf6;
|
|
--base-color-violet-700: #7c3aed;
|
|
--base-color-violet-800: #6d28d9;
|
|
--base-color-violet-900: #5b21b6;
|
|
--base-color-violet-1000: #2e1065;
|
|
|
|
/* Amber - For warnings/notices */
|
|
--base-color-amber-100: #fffbeb;
|
|
--base-color-amber-200: #fef3c7;
|
|
--base-color-amber-300: #fcd34d;
|
|
--base-color-amber-400: #fbbf24;
|
|
--base-color-amber-500: #f59e0b;
|
|
--base-color-amber-600: #d97706;
|
|
--base-color-amber-700: #b45309;
|
|
--base-color-amber-800: #92400e;
|
|
--base-color-amber-900: #78350f;
|
|
--base-color-amber-1000: #451a03;
|
|
|
|
/* ---------------------------------------------------------------------------
|
|
UI NEUTRALS - Clean Zinc palette
|
|
--------------------------------------------------------------------------- */
|
|
--base-color-zinc-50: #fafafa;
|
|
--base-color-zinc-100: #f4f4f5;
|
|
--base-color-zinc-200: #e4e4e7;
|
|
--base-color-zinc-300: #d4d4d8;
|
|
--base-color-zinc-400: #a1a1aa;
|
|
--base-color-zinc-500: #71717a;
|
|
--base-color-zinc-600: #52525b;
|
|
--base-color-zinc-700: #3f3f46;
|
|
--base-color-zinc-800: #27272a;
|
|
--base-color-zinc-900: #18181b;
|
|
--base-color-zinc-950: #09090b;
|
|
|
|
/* Transparent variants */
|
|
--base-color-zinc-950-transparent: rgba(9, 9, 11, 0.85);
|
|
--base-color-zinc-950-transparent-light: rgba(9, 9, 11, 0.5);
|
|
--base-color-white-transparent: rgba(255, 255, 255, 0.08);
|
|
|
|
/* ---------------------------------------------------------------------------
|
|
LEGACY ALIASES - For backwards compatibility
|
|
--------------------------------------------------------------------------- */
|
|
|
|
--base-color-grey-100: var(--base-color-zinc-100);
|
|
--base-color-grey-100-transparent: rgba(244, 244, 245, 0.13);
|
|
--base-color-grey-200: var(--base-color-zinc-200);
|
|
--base-color-grey-300: var(--base-color-zinc-300);
|
|
--base-color-grey-400: var(--base-color-zinc-400);
|
|
--base-color-grey-500: var(--base-color-zinc-500);
|
|
--base-color-grey-600: var(--base-color-zinc-600);
|
|
--base-color-grey-700: var(--base-color-zinc-700);
|
|
--base-color-grey-800: var(--base-color-zinc-800);
|
|
--base-color-grey-900: var(--base-color-zinc-900);
|
|
--base-color-grey-1000: var(--base-color-zinc-950);
|
|
--base-color-grey-1000-transparent: var(--base-color-zinc-950-transparent);
|
|
--base-color-grey-1000-transparent-2: var(--base-color-zinc-950-transparent-light);
|
|
|
|
--base-color-teal-100: var(--base-color-violet-100);
|
|
--base-color-teal-200: var(--base-color-violet-200);
|
|
--base-color-teal-300: var(--base-color-violet-300);
|
|
--base-color-teal-400: var(--base-color-violet-400);
|
|
--base-color-teal-500: var(--base-color-violet-500);
|
|
--base-color-teal-600: var(--base-color-violet-600);
|
|
--base-color-teal-700: var(--base-color-violet-700);
|
|
--base-color-teal-800: var(--base-color-violet-800);
|
|
--base-color-teal-900: var(--base-color-violet-900);
|
|
--base-color-teal-1000: var(--base-color-violet-1000);
|
|
|
|
--base-color-yellow-100: var(--base-color-rose-100);
|
|
--base-color-yellow-200: var(--base-color-rose-200);
|
|
--base-color-yellow-300: var(--base-color-rose-300);
|
|
--base-color-yellow-400: var(--base-color-rose-400);
|
|
--base-color-yellow-500: var(--base-color-rose-500);
|
|
--base-color-yellow-600: var(--base-color-rose-600);
|
|
--base-color-yellow-700: var(--base-color-rose-700);
|
|
--base-color-yellow-800: var(--base-color-rose-800);
|
|
--base-color-yellow-900: var(--base-color-rose-900);
|
|
--base-color-yellow-1000: var(--base-color-rose-1000);
|
|
}
|
|
|
|
|
|
/* =============================================================================
|
|
THEME COLOR TOKENS - USE THESE IN COMPONENTS
|
|
============================================================================= */
|
|
|
|
:root {
|
|
/* Backgrounds */
|
|
--theme-color-bg-0: #000000;
|
|
--theme-color-bg-1: var(--base-color-zinc-950);
|
|
--theme-color-bg-1-transparent: var(--base-color-zinc-950-transparent);
|
|
--theme-color-bg-1-transparent-2: var(--base-color-zinc-950-transparent-light);
|
|
--theme-color-bg-2: var(--base-color-zinc-900);
|
|
--theme-color-bg-3: var(--base-color-zinc-800);
|
|
--theme-color-bg-4: var(--base-color-zinc-700);
|
|
--theme-color-bg-5: var(--base-color-zinc-600);
|
|
--theme-color-bg-hover: var(--base-color-white-transparent);
|
|
|
|
/* Foregrounds */
|
|
--theme-color-fg-highlight: #ffffff;
|
|
--theme-color-fg-default-contrast: var(--base-color-zinc-100);
|
|
--theme-color-fg-default: var(--base-color-zinc-300);
|
|
--theme-color-fg-default-shy: var(--base-color-zinc-400);
|
|
--theme-color-fg-muted: var(--base-color-zinc-500);
|
|
--theme-color-fg-transparent: var(--base-color-grey-100-transparent);
|
|
|
|
/* Primary - Rose */
|
|
--theme-color-primary: var(--base-color-rose-500);
|
|
--theme-color-primary-highlight: var(--base-color-rose-400);
|
|
--theme-color-primary-dim: var(--base-color-rose-700);
|
|
--theme-color-on-primary: #ffffff;
|
|
|
|
/* Secondary - Violet */
|
|
--theme-color-secondary: var(--base-color-violet-500);
|
|
--theme-color-secondary-dim: var(--base-color-violet-700);
|
|
--theme-color-secondary-highlight: var(--base-color-violet-400);
|
|
--theme-color-secondary-bright: var(--base-color-violet-300);
|
|
--theme-color-secondary-as-fg: var(--base-color-violet-400);
|
|
--theme-color-on-secondary: #ffffff;
|
|
|
|
/* Node Colors */
|
|
--theme-color-node-data-1: var(--base-color-node-green-700);
|
|
--theme-color-node-data-2: var(--base-color-node-green-600);
|
|
--theme-color-node-data-3: var(--base-color-node-green-500);
|
|
--theme-color-node-data-dim: var(--base-color-node-green-900);
|
|
|
|
--theme-color-node-visual-1: var(--base-color-node-blue-700);
|
|
--theme-color-node-visual-2: var(--base-color-node-blue-600);
|
|
--theme-color-node-visual-2-highlight: var(--base-color-node-blue-500);
|
|
--theme-color-node-visual-highlight: var(--base-color-node-blue-200);
|
|
--theme-color-node-visual-default: var(--base-color-node-blue-300);
|
|
--theme-color-node-visual-shy: var(--base-color-node-blue-400);
|
|
--theme-color-node-visual-dim: var(--base-color-node-blue-900);
|
|
|
|
--theme-color-node-custom-1: var(--base-color-node-pink-700);
|
|
--theme-color-node-custom-2: var(--base-color-node-pink-600);
|
|
--theme-color-node-custom-dim: var(--base-color-node-pink-900);
|
|
|
|
--theme-color-node-logic-1: var(--base-color-node-grey-700);
|
|
--theme-color-node-logic-2: var(--base-color-node-grey-600);
|
|
--theme-color-node-logic-dim: var(--base-color-node-grey-900);
|
|
|
|
--theme-color-node-component-1: var(--base-color-node-purple-700);
|
|
--theme-color-node-component-2: var(--base-color-node-purple-600);
|
|
--theme-color-node-component-dim: var(--base-color-node-purple-900);
|
|
|
|
/* Status Colors */
|
|
--theme-color-success: var(--base-color-success-400);
|
|
--theme-color-success-dim: var(--base-color-success-600);
|
|
--theme-color-success-bg: var(--base-color-success-900);
|
|
|
|
--theme-color-notice: var(--base-color-amber-400);
|
|
--theme-color-notice-dim: var(--base-color-amber-600);
|
|
--theme-color-notice-bg: var(--base-color-amber-900);
|
|
|
|
--theme-color-danger: var(--base-color-error-400);
|
|
--theme-color-danger-light: var(--base-color-error-300);
|
|
--theme-color-danger-dim: var(--base-color-error-600);
|
|
--theme-color-danger-bg: var(--base-color-error-900);
|
|
|
|
/* Connection Colors */
|
|
--theme-color-signal: var(--base-color-rose-400);
|
|
--theme-color-data: var(--base-color-violet-500);
|
|
|
|
/* Border Colors */
|
|
--theme-color-border-default: var(--base-color-zinc-700);
|
|
--theme-color-border-subtle: var(--base-color-zinc-800);
|
|
--theme-color-border-strong: var(--base-color-zinc-600);
|
|
|
|
/* Focus Ring */
|
|
--theme-color-focus-ring: var(--base-color-rose-500);
|
|
--theme-color-focus-ring-offset: var(--base-color-zinc-950);
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Success Criteria
|
|
|
|
### Visual
|
|
- [ ] App feels modern and professional
|
|
- [ ] Colors are consistent throughout
|
|
- [ ] Good contrast and readability
|
|
- [ ] Visual hierarchy is clear
|
|
|
|
### Technical
|
|
- [ ] All colors use design tokens
|
|
- [ ] No hardcoded hex colors in component styles
|
|
- [ ] Token system supports future theming
|
|
- [ ] No visual regressions
|
|
|
|
### User Experience
|
|
- [ ] Migration dialog is clear and professional
|
|
- [ ] Interactive states (hover, focus) are obvious
|
|
- [ ] Success/error feedback is clear
|
|
- [ ] Overall polish matches modern dev tools
|