|
1 | | -/* |
2 | | - * We use semantic CSS classes with CSS custom properties instead. |
3 | | - */ |
4 | | - |
5 | | -/* ============================================================================= |
6 | | - Design tokens - CSS Custom Properties |
7 | | - |
8 | | - These variables serve as the single source of truth for all colors, spacing, |
9 | | - and typography. They can be used in both scoped CSS and Tailwind classes. |
10 | | - |
11 | | - Future: Can be modified at runtime for user theme customization. |
12 | | - ============================================================================= */ |
| 1 | +/* Design tokens for the Cmdr desktop app. |
| 2 | + * See /.interface-design/system.md for the design system specification. |
| 3 | + * |
| 4 | + * These variables serve as the single source of truth for all colors, spacing, |
| 5 | + * and typography. They can be used in both scoped CSS and Tailwind classes. |
| 6 | + * |
| 7 | + * Future: Can be modified at runtime for user theme customization. */ |
13 | 8 |
|
14 | 9 | :root { |
15 | 10 | /* === Backgrounds === */ |
|
19 | 14 | --color-bg-header: #f0f0f0; |
20 | 15 |
|
21 | 16 | /* === Borders === */ |
22 | | - --color-border-primary: #ccc; |
| 17 | + --color-border-strong: #bbb; |
23 | 18 | --color-border: #ddd; |
24 | | - --color-border-secondary: #e0e0e0; |
| 19 | + --color-border-subtle: #e8e8e8; |
25 | 20 |
|
26 | 21 | /* === Text === */ |
27 | | - --color-text-primary: #000000; |
| 22 | + --color-text-primary: #1a1a1a; |
28 | 23 | --color-text-secondary: #666666; |
29 | 24 | --color-text-tertiary: #888888; |
30 | | - --color-text-muted: #999999; |
31 | 25 |
|
32 | 26 | /* === Interactive States === */ |
33 | | - --color-button-hover: rgba(0, 120, 215, 0.08); |
34 | | - --color-bg-hover: rgba(0, 120, 215, 0.08); |
35 | | - --color-cursor-focused-bg: #88cbff; |
36 | | - --color-cursor-focused-fg: #ffffff; |
37 | | - --color-cursor-unfocused-bg: rgba(104, 128, 147, 0.1); |
38 | | - --color-accent: #0078d4; |
39 | | - --color-accent-hover: #005a9e; |
| 27 | + --color-accent: #007aff; |
| 28 | + --color-accent-hover: color-mix(in oklch, var(--color-accent), white 15%); |
| 29 | + --color-accent-subtle: color-mix(in oklch, var(--color-accent), transparent 85%); |
40 | 30 |
|
41 | 31 | /* === Semantic Colors === */ |
42 | 32 | --color-allow: #2e7d32; |
|
63 | 53 | --spacing-xxs: 2px; |
64 | 54 | --spacing-xs: 4px; |
65 | 55 | --spacing-sm: 8px; |
66 | | - --spacing-md: 16px; |
| 56 | + --spacing-md: 12px; |
| 57 | + --spacing-lg: 16px; |
| 58 | + --spacing-xl: 24px; |
| 59 | + --spacing-2xl: 32px; |
67 | 60 |
|
68 | 61 | /* === Typography === */ |
69 | | - --font-system: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif; |
| 62 | + --font-system: -apple-system, BlinkMacSystemFont, system-ui, sans-serif; |
70 | 63 | --font-mono: ui-monospace, 'SF Mono', SFMono-Regular, Menlo, Monaco, Consolas, monospace; |
71 | | - --font-size-xs: 12px; |
| 64 | + --font-size-xs: 10px; |
72 | 65 | --font-size-sm: 12px; |
73 | | - --font-size-base: 16px; |
| 66 | + --font-size-md: 14px; |
| 67 | + --font-size-lg: 16px; |
| 68 | + --font-size-xl: 20px; |
| 69 | + |
| 70 | + /* === Border radius === */ |
| 71 | + --radius-sm: 4px; |
| 72 | + --radius-md: 6px; |
| 73 | + --radius-lg: 8px; |
| 74 | + --radius-full: 9999px; |
| 75 | + |
| 76 | + /* === Shadows (light) === */ |
| 77 | + --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.12); |
| 78 | + --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.1); |
| 79 | + --shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.15); |
| 80 | + --shadow-focus: 0 0 0 3px var(--color-accent-subtle); |
| 81 | + |
| 82 | + /* === Transitions === */ |
| 83 | + --transition-fast: 100ms ease; |
| 84 | + --transition-base: 150ms ease; |
| 85 | + --transition-slow: 200ms ease; |
| 86 | + |
| 87 | + /* === Z-index scale === */ |
| 88 | + --z-base: 0; |
| 89 | + --z-sticky: 10; |
| 90 | + --z-dropdown: 100; |
| 91 | + --z-overlay: 200; |
| 92 | + --z-modal: 300; |
| 93 | + --z-notification: 400; |
74 | 94 | } |
75 | 95 |
|
76 | 96 | /* Dark Mode - automatically applied when user's system prefers dark mode */ |
|
83 | 103 | --color-bg-header: #252525; |
84 | 104 |
|
85 | 105 | /* === Borders === */ |
86 | | - --color-border-primary: #444444; |
87 | | - --color-border: #555555; |
88 | | - --color-border-secondary: #3a3a3a; |
| 106 | + --color-border-strong: #555555; |
| 107 | + --color-border: #444444; |
| 108 | + --color-border-subtle: #333333; |
89 | 109 |
|
90 | 110 | /* === Text === */ |
91 | | - --color-text-primary: #ffffff; |
| 111 | + --color-text-primary: #e8e8e8; |
92 | 112 | --color-text-secondary: #aaaaaa; |
93 | 113 | --color-text-tertiary: #888888; |
94 | | - --color-text-muted: #808080; |
95 | 114 |
|
96 | 115 | /* === Interactive States === */ |
97 | | - --color-button-hover: rgba(100, 180, 255, 0.12); |
98 | | - --color-bg-hover: rgba(100, 180, 255, 0.12); |
99 | | - --color-cursor-focused-bg: #0a50d0; |
100 | | - --color-cursor-focused-fg: #ffffff; |
101 | | - --color-cursor-unfocused-bg: rgba(10, 80, 208, 0.1); |
102 | | - --color-accent: #4da3ff; |
103 | | - --color-accent-hover: #6eb5ff; |
| 116 | + --color-accent: #0a84ff; |
| 117 | + --color-accent-hover: color-mix(in oklch, var(--color-accent), white 10%); |
| 118 | + --color-accent-subtle: color-mix(in oklch, var(--color-accent), transparent 85%); |
104 | 119 |
|
105 | 120 | /* === Semantic Colors === */ |
106 | 121 | --color-allow: #66bb6a; |
|
116 | 131 | /* === Search Highlight === */ |
117 | 132 | --color-highlight: rgba(255, 213, 100, 0.9); |
118 | 133 | --color-highlight-active: rgba(255, 150, 100, 0.9); |
| 134 | + |
| 135 | + /* === Shadows (dark) === */ |
| 136 | + --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3); |
| 137 | + --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.35); |
| 138 | + --shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.5); |
119 | 139 | } |
120 | 140 | } |
121 | 141 |
|
@@ -353,7 +373,6 @@ body { |
353 | 373 | -webkit-user-select: none; |
354 | 374 | /* Force default cursor everywhere */ |
355 | 375 | cursor: default; |
356 | | - font-size: var(--font-size-base); |
357 | 376 | } |
358 | 377 |
|
359 | 378 | body { |
|
0 commit comments