@motor-cms/ui-admin 1.0.1-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +77 -0
- package/app/components/form/inputs/CategoryTreeInput.vue +154 -0
- package/app/components/form/inputs/CategoryTreePicker.vue +355 -0
- package/app/components/form/inputs/NestedDraggable.vue +217 -0
- package/app/components/form/inputs/QuicklinksInput.vue +186 -0
- package/app/lang/de/motor-admin/CLAUDE.md +21 -0
- package/app/lang/de/motor-admin/ai_system_prompts.json +12 -0
- package/app/lang/de/motor-admin/categories.json +12 -0
- package/app/lang/de/motor-admin/category_trees.json +14 -0
- package/app/lang/de/motor-admin/clients.json +26 -0
- package/app/lang/de/motor-admin/config_variables.json +14 -0
- package/app/lang/de/motor-admin/domains.json +19 -0
- package/app/lang/de/motor-admin/email_templates.json +38 -0
- package/app/lang/de/motor-admin/global.json +5 -0
- package/app/lang/de/motor-admin/languages.json +16 -0
- package/app/lang/de/motor-admin/permissions.json +14 -0
- package/app/lang/de/motor-admin/roles.json +15 -0
- package/app/lang/de/motor-admin/users.json +22 -0
- package/app/lang/en/motor-admin/CLAUDE.md +7 -0
- package/app/lang/en/motor-admin/ai_system_prompts.json +12 -0
- package/app/lang/en/motor-admin/categories.json +12 -0
- package/app/lang/en/motor-admin/category_trees.json +14 -0
- package/app/lang/en/motor-admin/clients.json +26 -0
- package/app/lang/en/motor-admin/config_variables.json +14 -0
- package/app/lang/en/motor-admin/domains.json +18 -0
- package/app/lang/en/motor-admin/email_templates.json +33 -0
- package/app/lang/en/motor-admin/global.json +5 -0
- package/app/lang/en/motor-admin/languages.json +16 -0
- package/app/lang/en/motor-admin/permissions.json +14 -0
- package/app/lang/en/motor-admin/roles.json +15 -0
- package/app/lang/en/motor-admin/users.json +22 -0
- package/app/pages/dashboard.vue +5 -0
- package/app/pages/index.vue +39 -0
- package/app/pages/login.vue +85 -0
- package/app/pages/motor-admin/ai-system-prompts/CLAUDE.md +7 -0
- package/app/pages/motor-admin/ai-system-prompts/[id]/edit.vue +48 -0
- package/app/pages/motor-admin/ai-system-prompts/create.vue +40 -0
- package/app/pages/motor-admin/ai-system-prompts/index.vue +68 -0
- package/app/pages/motor-admin/category-trees/CLAUDE.md +7 -0
- package/app/pages/motor-admin/category-trees/[id]/CLAUDE.md +7 -0
- package/app/pages/motor-admin/category-trees/[id]/categories/[categoryId]/edit.vue +73 -0
- package/app/pages/motor-admin/category-trees/[id]/categories/create.vue +64 -0
- package/app/pages/motor-admin/category-trees/[id]/edit.vue +45 -0
- package/app/pages/motor-admin/category-trees/[id]/index.vue +81 -0
- package/app/pages/motor-admin/category-trees/create.vue +37 -0
- package/app/pages/motor-admin/category-trees/index.vue +54 -0
- package/app/pages/motor-admin/clients/CLAUDE.md +11 -0
- package/app/pages/motor-admin/clients/[id]/CLAUDE.md +11 -0
- package/app/pages/motor-admin/clients/[id]/edit.vue +45 -0
- package/app/pages/motor-admin/clients/create.vue +37 -0
- package/app/pages/motor-admin/clients/index.vue +46 -0
- package/app/pages/motor-admin/config-variables/CLAUDE.md +11 -0
- package/app/pages/motor-admin/config-variables/[id]/edit.vue +44 -0
- package/app/pages/motor-admin/config-variables/create.vue +36 -0
- package/app/pages/motor-admin/config-variables/index.vue +66 -0
- package/app/pages/motor-admin/domains/CLAUDE.md +11 -0
- package/app/pages/motor-admin/domains/[id]/edit.vue +54 -0
- package/app/pages/motor-admin/domains/create.vue +46 -0
- package/app/pages/motor-admin/domains/index.vue +98 -0
- package/app/pages/motor-admin/email-templates/CLAUDE.md +12 -0
- package/app/pages/motor-admin/email-templates/[id]/CLAUDE.md +7 -0
- package/app/pages/motor-admin/email-templates/[id]/edit.vue +56 -0
- package/app/pages/motor-admin/email-templates/create.vue +48 -0
- package/app/pages/motor-admin/email-templates/index.vue +67 -0
- package/app/pages/motor-admin/index.vue +12 -0
- package/app/pages/motor-admin/languages/CLAUDE.md +7 -0
- package/app/pages/motor-admin/languages/[id]/edit.vue +44 -0
- package/app/pages/motor-admin/languages/create.vue +36 -0
- package/app/pages/motor-admin/languages/index.vue +44 -0
- package/app/pages/motor-admin/permission-groups/CLAUDE.md +14 -0
- package/app/pages/motor-admin/permission-groups/[id]/CLAUDE.md +11 -0
- package/app/pages/motor-admin/permission-groups/[id]/edit.vue +49 -0
- package/app/pages/motor-admin/permission-groups/create.vue +41 -0
- package/app/pages/motor-admin/permission-groups/index.vue +43 -0
- package/app/pages/motor-admin/roles/CLAUDE.md +7 -0
- package/app/pages/motor-admin/roles/[id]/edit.vue +47 -0
- package/app/pages/motor-admin/roles/create.vue +40 -0
- package/app/pages/motor-admin/roles/index.vue +45 -0
- package/app/pages/motor-admin/theme-preview/CLAUDE.md +7 -0
- package/app/pages/motor-admin/theme-preview/index.vue +4801 -0
- package/app/pages/motor-admin/theme-preview/themes/CLAUDE.md +11 -0
- package/app/pages/motor-admin/theme-preview/themes/asymmetric-brutalist.md +381 -0
- package/app/pages/motor-admin/theme-preview/themes/bold-modern.md +231 -0
- package/app/pages/motor-admin/theme-preview/themes/geometric-minimal.md +778 -0
- package/app/pages/motor-admin/theme-preview/themes/gradient-flow.md +1057 -0
- package/app/pages/motor-admin/theme-preview/themes/liquid-glass.md +823 -0
- package/app/pages/motor-admin/theme-preview/themes/neon-amber.md +1223 -0
- package/app/pages/motor-admin/theme-preview/themes/neon-terminal.md +779 -0
- package/app/pages/motor-admin/theme-preview/themes/neon-violet.md +1134 -0
- package/app/pages/motor-admin/theme-preview/themes/professional-clean.md +232 -0
- package/app/pages/motor-admin/theme-preview/themes/refined-brutalist.md +462 -0
- package/app/pages/motor-admin/theme-preview/themes/wild-card.md +263 -0
- package/app/pages/motor-admin/users/CLAUDE.md +17 -0
- package/app/pages/motor-admin/users/[id]/CLAUDE.md +11 -0
- package/app/pages/motor-admin/users/[id]/edit.vue +83 -0
- package/app/pages/motor-admin/users/create.vue +40 -0
- package/app/pages/motor-admin/users/index.vue +66 -0
- package/app/pages/profile.vue +363 -0
- package/app/pages/search.vue +91 -0
- package/app/types/generated/form-meta.ts +258 -0
- package/app/types/generated/grid-meta.ts +172 -0
- package/nuxt.config.ts +1 -0
- package/package.json +26 -0
|
@@ -0,0 +1,1223 @@
|
|
|
1
|
+
# Neon Terminal: Amber Theme Spec
|
|
2
|
+
|
|
3
|
+
**Theme ID:** `neon-amber`
|
|
4
|
+
**Direction:** Dual-mode terminal aesthetic -- warm amber neon in dark mode, warm parchment terminal in light mode. Same sharp-vs-pill shape language, same monospace energy, completely different temperature.
|
|
5
|
+
**Vibe:** Dark mode = a retro-futuristic command center bathed in warm amber light, like an old-school oscilloscope or vintage CRT monitor. Light mode = a sunlit engineer's workstation -- cream paper, amber ink, monospace precision. Think Gruvbox meets Warp Terminal meets a brass instrument factory.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Color Palette
|
|
10
|
+
|
|
11
|
+
### Dark Mode
|
|
12
|
+
|
|
13
|
+
A near-black void background (matching the original Neon Terminal) but with cyan replaced by warm amber/gold neon accents. The palette evokes vintage amber CRT monitors, old radar screens, and warm industrial lighting.
|
|
14
|
+
|
|
15
|
+
#### Base / Background Scale (Dark Mode)
|
|
16
|
+
|
|
17
|
+
| Token | Hex | Usage |
|
|
18
|
+
|-------------------|-----------|---------------------------------------------|
|
|
19
|
+
| `void` | `#0A0806` | Page background, deepest layer |
|
|
20
|
+
| `surface-0` | `#12100B` | Card backgrounds, sidebar |
|
|
21
|
+
| `surface-1` | `#1A1710` | Elevated cards, dropdowns, modals |
|
|
22
|
+
| `surface-2` | `#241F16` | Hover states, active sidebar items |
|
|
23
|
+
| `surface-3` | `#302A1E` | Borders, dividers, subtle separators |
|
|
24
|
+
|
|
25
|
+
Note: These backgrounds have a warm brown undertone instead of the cool blue-gray of the original. The void is tinted warm, like looking into the dark interior of a brass machine.
|
|
26
|
+
|
|
27
|
+
#### Neon Accent Scale (Dark Mode)
|
|
28
|
+
|
|
29
|
+
| Token | Hex | Tailwind | Usage |
|
|
30
|
+
|-------------------|-----------|----------------|--------------------------------------|
|
|
31
|
+
| `neon-amber` | `#FFB800` | `amber-400` | Primary actions, links, focus rings |
|
|
32
|
+
| `neon-amber-muted`| `#C48A00` | `amber-600` | Secondary text accents, badges |
|
|
33
|
+
| `neon-orange` | `#FF6B00` | `orange-600` | Destructive/danger, critical alerts |
|
|
34
|
+
| `neon-green` | `#39FF14` | `green-400` | Success states, online indicators |
|
|
35
|
+
| `neon-yellow` | `#FFE066` | `yellow-200` | Warnings, pending states |
|
|
36
|
+
| `neon-copper` | `#E8782A` | `orange-500` | Info badges, secondary accents |
|
|
37
|
+
|
|
38
|
+
#### Text Scale (Dark Mode)
|
|
39
|
+
|
|
40
|
+
| Token | Hex | Usage |
|
|
41
|
+
|-------------------|-----------|---------------------------------------------|
|
|
42
|
+
| `text-primary` | `#F0E6D2` | Primary text (warm cream white) |
|
|
43
|
+
| `text-secondary` | `#A89478` | Secondary text, labels, placeholders |
|
|
44
|
+
| `text-muted` | `#5C5040` | Disabled text, timestamps |
|
|
45
|
+
| `text-neon` | `#FFB800` | Highlighted text, active nav items |
|
|
46
|
+
|
|
47
|
+
#### Semantic Colors (Dark Mode)
|
|
48
|
+
|
|
49
|
+
| Token | Hex | Usage |
|
|
50
|
+
|-------------------|-----------|---------------------------------------------|
|
|
51
|
+
| `success` | `#39FF14` | Success toasts, completed states |
|
|
52
|
+
| `warning` | `#FFE066` | Warning toasts, caution states |
|
|
53
|
+
| `error` | `#FF6B00` | Error toasts, validation failures |
|
|
54
|
+
| `info` | `#E8782A` | Informational toasts, tips |
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
### Light Mode
|
|
59
|
+
|
|
60
|
+
The terminal aesthetic is preserved through monospace typography, sharp shapes, and structured layout -- not through darkness. The light mode draws inspiration from Gruvbox Light, vintage engineering paper, and warm parchment. Think of it as a well-lit workshop where the terminal is running on a cream-toned display.
|
|
61
|
+
|
|
62
|
+
#### Base / Background Scale (Light Mode)
|
|
63
|
+
|
|
64
|
+
| Token | Hex | Usage |
|
|
65
|
+
|-------------------|-----------|---------------------------------------------|
|
|
66
|
+
| `void` | `#FAF5EA` | Page background, warmest cream |
|
|
67
|
+
| `surface-0` | `#F3ECDD` | Card backgrounds, sidebar |
|
|
68
|
+
| `surface-1` | `#EBE3D0` | Elevated cards, dropdowns, modals |
|
|
69
|
+
| `surface-2` | `#E2D8C3` | Hover states, active sidebar items |
|
|
70
|
+
| `surface-3` | `#D5C9B0` | Borders, dividers, subtle separators |
|
|
71
|
+
|
|
72
|
+
These are warm, parchment-like tones. Not gray, not blue-white. Every surface has a yellow-cream warmth, like aged paper under warm light.
|
|
73
|
+
|
|
74
|
+
#### Accent Colors (Light Mode)
|
|
75
|
+
|
|
76
|
+
| Token | Hex | Tailwind | Usage |
|
|
77
|
+
|-------------------|-----------|----------------|--------------------------------------|
|
|
78
|
+
| `amber-primary` | `#B07800` | `amber-700` | Primary actions, links, focus rings |
|
|
79
|
+
| `amber-muted` | `#8A6000` | `amber-800` | Secondary text accents, badges |
|
|
80
|
+
| `danger` | `#C44800` | `orange-700` | Destructive/danger, critical alerts |
|
|
81
|
+
| `success` | `#3D7A1C` | `green-700` | Success states, online indicators |
|
|
82
|
+
| `warning` | `#A67C00` | `amber-600` | Warnings, pending states |
|
|
83
|
+
| `info` | `#9A5B20` | `orange-700` | Informational toasts, tips |
|
|
84
|
+
|
|
85
|
+
Note: In light mode, accent colors are darkened and desaturated compared to dark mode. Neon-bright amber would wash out against cream backgrounds. Instead, we use rich, saturated "ink" tones -- like amber calligraphy ink on parchment.
|
|
86
|
+
|
|
87
|
+
#### Text Scale (Light Mode)
|
|
88
|
+
|
|
89
|
+
| Token | Hex | Usage |
|
|
90
|
+
|-------------------|-----------|---------------------------------------------|
|
|
91
|
+
| `text-primary` | `#2C2416` | Primary text (warm near-black) |
|
|
92
|
+
| `text-secondary` | `#6B5D48` | Secondary text, labels, placeholders |
|
|
93
|
+
| `text-muted` | `#A89880` | Disabled text, timestamps |
|
|
94
|
+
| `text-accent` | `#B07800` | Highlighted text, active nav items |
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### CSS Custom Properties
|
|
99
|
+
|
|
100
|
+
```css
|
|
101
|
+
/* Dark Mode (default) */
|
|
102
|
+
:root[data-theme="neon-amber"],
|
|
103
|
+
:root[data-theme="neon-amber"] .dark {
|
|
104
|
+
--amber-void: #0A0806;
|
|
105
|
+
--amber-surface-0: #12100B;
|
|
106
|
+
--amber-surface-1: #1A1710;
|
|
107
|
+
--amber-surface-2: #241F16;
|
|
108
|
+
--amber-surface-3: #302A1E;
|
|
109
|
+
|
|
110
|
+
--amber-neon: #FFB800;
|
|
111
|
+
--amber-neon-muted: #C48A00;
|
|
112
|
+
--amber-orange: #FF6B00;
|
|
113
|
+
--amber-green: #39FF14;
|
|
114
|
+
--amber-yellow: #FFE066;
|
|
115
|
+
--amber-copper: #E8782A;
|
|
116
|
+
|
|
117
|
+
--amber-text-primary: #F0E6D2;
|
|
118
|
+
--amber-text-secondary: #A89478;
|
|
119
|
+
--amber-text-muted: #5C5040;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* Light Mode */
|
|
123
|
+
:root[data-theme="neon-amber"].light,
|
|
124
|
+
:root[data-theme="neon-amber"] .light {
|
|
125
|
+
--amber-void: #FAF5EA;
|
|
126
|
+
--amber-surface-0: #F3ECDD;
|
|
127
|
+
--amber-surface-1: #EBE3D0;
|
|
128
|
+
--amber-surface-2: #E2D8C3;
|
|
129
|
+
--amber-surface-3: #D5C9B0;
|
|
130
|
+
|
|
131
|
+
--amber-neon: #B07800;
|
|
132
|
+
--amber-neon-muted: #8A6000;
|
|
133
|
+
--amber-orange: #C44800;
|
|
134
|
+
--amber-green: #3D7A1C;
|
|
135
|
+
--amber-yellow: #A67C00;
|
|
136
|
+
--amber-copper: #9A5B20;
|
|
137
|
+
|
|
138
|
+
--amber-text-primary: #2C2416;
|
|
139
|
+
--amber-text-secondary: #6B5D48;
|
|
140
|
+
--amber-text-muted: #A89880;
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## 2. Typography
|
|
147
|
+
|
|
148
|
+
### Font Pairing
|
|
149
|
+
|
|
150
|
+
Identical to the original Neon Terminal -- the monospace-first approach is core to the terminal identity and works equally well in both light and dark modes.
|
|
151
|
+
|
|
152
|
+
**Headings:** JetBrains Mono (monospace, bold weight)
|
|
153
|
+
**Body:** IBM Plex Sans (clean, technical sans-serif)
|
|
154
|
+
**Code / Badges / Labels:** JetBrains Mono (monospace, regular weight)
|
|
155
|
+
|
|
156
|
+
### Google Fonts URL
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700;800&display=swap
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Type Scale
|
|
163
|
+
|
|
164
|
+
| Element | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|
|
165
|
+
|--------------------|------------------|----------|--------|-------------|----------------|---------------------------------------------|
|
|
166
|
+
| Page Title (h1) | JetBrains Mono | `40px` | 800 | 1.1 | `-0.03em` | UPPERCASE, amber glow (dark) / amber ink (light) |
|
|
167
|
+
| Section Title (h2) | JetBrains Mono | `28px` | 700 | 1.2 | `-0.02em` | Title case |
|
|
168
|
+
| Card Title (h3) | JetBrains Mono | `20px` | 600 | 1.3 | `-0.01em` | |
|
|
169
|
+
| Body | IBM Plex Sans | `15px` | 400 | 1.6 | `0` | |
|
|
170
|
+
| Body Small | IBM Plex Sans | `13px` | 400 | 1.5 | `0.01em` | |
|
|
171
|
+
| Label | JetBrains Mono | `11px` | 600 | 1.4 | `0.08em` | UPPERCASE, amber-muted color |
|
|
172
|
+
| Badge | JetBrains Mono | `11px` | 500 | 1 | `0.05em` | UPPERCASE |
|
|
173
|
+
| Code | JetBrains Mono | `13px` | 400 | 1.5 | `0` | Inline code snippets |
|
|
174
|
+
| Nav Item | JetBrains Mono | `13px` | 500 | 1.4 | `0.02em` | Sidebar navigation |
|
|
175
|
+
|
|
176
|
+
### CSS
|
|
177
|
+
|
|
178
|
+
```css
|
|
179
|
+
/* Dark mode heading with amber neon glow */
|
|
180
|
+
.amber-h1-dark {
|
|
181
|
+
font-family: 'JetBrains Mono', monospace;
|
|
182
|
+
font-size: 40px;
|
|
183
|
+
font-weight: 800;
|
|
184
|
+
line-height: 1.1;
|
|
185
|
+
letter-spacing: -0.03em;
|
|
186
|
+
text-transform: uppercase;
|
|
187
|
+
color: var(--amber-neon);
|
|
188
|
+
text-shadow:
|
|
189
|
+
0 0 7px rgba(255, 184, 0, 0.6),
|
|
190
|
+
0 0 20px rgba(255, 184, 0, 0.3),
|
|
191
|
+
0 0 42px rgba(255, 184, 0, 0.15);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/* Light mode heading -- no glow, rich amber ink color */
|
|
195
|
+
.amber-h1-light {
|
|
196
|
+
font-family: 'JetBrains Mono', monospace;
|
|
197
|
+
font-size: 40px;
|
|
198
|
+
font-weight: 800;
|
|
199
|
+
line-height: 1.1;
|
|
200
|
+
letter-spacing: -0.03em;
|
|
201
|
+
text-transform: uppercase;
|
|
202
|
+
color: var(--amber-neon);
|
|
203
|
+
text-shadow: none;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.amber-h2 {
|
|
207
|
+
font-family: 'JetBrains Mono', monospace;
|
|
208
|
+
font-size: 28px;
|
|
209
|
+
font-weight: 700;
|
|
210
|
+
line-height: 1.2;
|
|
211
|
+
letter-spacing: -0.02em;
|
|
212
|
+
color: var(--amber-text-primary);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.amber-body {
|
|
216
|
+
font-family: 'IBM Plex Sans', sans-serif;
|
|
217
|
+
font-size: 15px;
|
|
218
|
+
font-weight: 400;
|
|
219
|
+
line-height: 1.6;
|
|
220
|
+
color: var(--amber-text-primary);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.amber-label {
|
|
224
|
+
font-family: 'JetBrains Mono', monospace;
|
|
225
|
+
font-size: 11px;
|
|
226
|
+
font-weight: 600;
|
|
227
|
+
line-height: 1.4;
|
|
228
|
+
letter-spacing: 0.08em;
|
|
229
|
+
text-transform: uppercase;
|
|
230
|
+
color: var(--amber-neon-muted);
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## 3. Shape Language
|
|
237
|
+
|
|
238
|
+
Identical to the original Neon Terminal. The sharp-vs-pill tension is a core part of the terminal identity that transcends color.
|
|
239
|
+
|
|
240
|
+
### Border Radius Tokens
|
|
241
|
+
|
|
242
|
+
| Token | Value | Usage |
|
|
243
|
+
|--------------------|----------|---------------------------------------------|
|
|
244
|
+
| `radius-none` | `0px` | Cards, panels, modal containers, tables |
|
|
245
|
+
| `radius-sm` | `2px` | Input fields, code blocks |
|
|
246
|
+
| `radius-pill` | `9999px` | Buttons, badges, pills, tags, toggles |
|
|
247
|
+
| `radius-circle` | `50%` | Avatars, status indicators |
|
|
248
|
+
|
|
249
|
+
### Design Rules
|
|
250
|
+
|
|
251
|
+
1. **Cards / Panels / Modals:** `border-radius: 0px` -- Hard, sharp corners. Industrial.
|
|
252
|
+
2. **Buttons:** `border-radius: 9999px` -- Full pill shape. Futuristic contrast.
|
|
253
|
+
3. **Input fields:** `border-radius: 2px` -- Almost sharp, terminal-like.
|
|
254
|
+
4. **Badges / Tags:** `border-radius: 9999px` -- Pill-shaped.
|
|
255
|
+
5. **Avatars:** `border-radius: 50%` -- Circle.
|
|
256
|
+
6. **Dropdown menus:** `border-radius: 0px` -- Sharp to match containers.
|
|
257
|
+
7. **Sidebar:** Sharp corners everywhere.
|
|
258
|
+
|
|
259
|
+
### Corner Cut Effect (Optional Enhancement)
|
|
260
|
+
|
|
261
|
+
Same chamfered corner cut as the original, works in both modes:
|
|
262
|
+
|
|
263
|
+
```css
|
|
264
|
+
.amber-card-cut {
|
|
265
|
+
clip-path: polygon(
|
|
266
|
+
0 0,
|
|
267
|
+
calc(100% - 16px) 0,
|
|
268
|
+
100% 16px,
|
|
269
|
+
100% 100%,
|
|
270
|
+
16px 100%,
|
|
271
|
+
0 calc(100% - 16px)
|
|
272
|
+
);
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## 4. Component Styling
|
|
279
|
+
|
|
280
|
+
### Buttons
|
|
281
|
+
|
|
282
|
+
```css
|
|
283
|
+
/* ===== DARK MODE ===== */
|
|
284
|
+
|
|
285
|
+
/* Primary Button - Dark */
|
|
286
|
+
.amber-btn-primary-dark {
|
|
287
|
+
font-family: 'JetBrains Mono', monospace;
|
|
288
|
+
font-size: 13px;
|
|
289
|
+
font-weight: 600;
|
|
290
|
+
letter-spacing: 0.05em;
|
|
291
|
+
text-transform: uppercase;
|
|
292
|
+
color: var(--amber-void);
|
|
293
|
+
background: var(--amber-neon);
|
|
294
|
+
border: none;
|
|
295
|
+
border-radius: 9999px;
|
|
296
|
+
padding: 10px 28px;
|
|
297
|
+
cursor: pointer;
|
|
298
|
+
transition: all 0.2s ease;
|
|
299
|
+
box-shadow:
|
|
300
|
+
0 0 5px rgba(255, 184, 0, 0.4),
|
|
301
|
+
0 0 20px rgba(255, 184, 0, 0.15);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.amber-btn-primary-dark:hover {
|
|
305
|
+
box-shadow:
|
|
306
|
+
0 0 8px rgba(255, 184, 0, 0.6),
|
|
307
|
+
0 0 30px rgba(255, 184, 0, 0.3),
|
|
308
|
+
0 0 60px rgba(255, 184, 0, 0.1);
|
|
309
|
+
transform: translateY(-1px);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.amber-btn-primary-dark:active {
|
|
313
|
+
transform: translateY(0);
|
|
314
|
+
box-shadow: 0 0 5px rgba(255, 184, 0, 0.4);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/* Ghost / Outline Button - Dark */
|
|
318
|
+
.amber-btn-ghost-dark {
|
|
319
|
+
font-family: 'JetBrains Mono', monospace;
|
|
320
|
+
font-size: 13px;
|
|
321
|
+
font-weight: 500;
|
|
322
|
+
letter-spacing: 0.05em;
|
|
323
|
+
text-transform: uppercase;
|
|
324
|
+
color: var(--amber-neon);
|
|
325
|
+
background: transparent;
|
|
326
|
+
border: 1px solid var(--amber-surface-3);
|
|
327
|
+
border-radius: 9999px;
|
|
328
|
+
padding: 10px 28px;
|
|
329
|
+
cursor: pointer;
|
|
330
|
+
transition: all 0.2s ease;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
.amber-btn-ghost-dark:hover {
|
|
334
|
+
border-color: var(--amber-neon);
|
|
335
|
+
box-shadow: 0 0 10px rgba(255, 184, 0, 0.2);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/* Danger Button - Dark */
|
|
339
|
+
.amber-btn-danger-dark {
|
|
340
|
+
color: var(--amber-void);
|
|
341
|
+
background: var(--amber-orange);
|
|
342
|
+
border-radius: 9999px;
|
|
343
|
+
box-shadow:
|
|
344
|
+
0 0 5px rgba(255, 107, 0, 0.4),
|
|
345
|
+
0 0 20px rgba(255, 107, 0, 0.15);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/* ===== LIGHT MODE ===== */
|
|
349
|
+
|
|
350
|
+
/* Primary Button - Light */
|
|
351
|
+
.amber-btn-primary-light {
|
|
352
|
+
font-family: 'JetBrains Mono', monospace;
|
|
353
|
+
font-size: 13px;
|
|
354
|
+
font-weight: 600;
|
|
355
|
+
letter-spacing: 0.05em;
|
|
356
|
+
text-transform: uppercase;
|
|
357
|
+
color: #FFFDF5;
|
|
358
|
+
background: var(--amber-neon);
|
|
359
|
+
border: none;
|
|
360
|
+
border-radius: 9999px;
|
|
361
|
+
padding: 10px 28px;
|
|
362
|
+
cursor: pointer;
|
|
363
|
+
transition: all 0.2s ease;
|
|
364
|
+
box-shadow: 0 2px 8px rgba(176, 120, 0, 0.25);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
.amber-btn-primary-light:hover {
|
|
368
|
+
box-shadow:
|
|
369
|
+
0 4px 16px rgba(176, 120, 0, 0.3),
|
|
370
|
+
0 1px 4px rgba(176, 120, 0, 0.2);
|
|
371
|
+
transform: translateY(-1px);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
.amber-btn-primary-light:active {
|
|
375
|
+
transform: translateY(0);
|
|
376
|
+
box-shadow: 0 1px 4px rgba(176, 120, 0, 0.2);
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/* Ghost / Outline Button - Light */
|
|
380
|
+
.amber-btn-ghost-light {
|
|
381
|
+
font-family: 'JetBrains Mono', monospace;
|
|
382
|
+
font-size: 13px;
|
|
383
|
+
font-weight: 500;
|
|
384
|
+
letter-spacing: 0.05em;
|
|
385
|
+
text-transform: uppercase;
|
|
386
|
+
color: var(--amber-neon);
|
|
387
|
+
background: transparent;
|
|
388
|
+
border: 1px solid var(--amber-surface-3);
|
|
389
|
+
border-radius: 9999px;
|
|
390
|
+
padding: 10px 28px;
|
|
391
|
+
cursor: pointer;
|
|
392
|
+
transition: all 0.2s ease;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
.amber-btn-ghost-light:hover {
|
|
396
|
+
border-color: var(--amber-neon);
|
|
397
|
+
background: rgba(176, 120, 0, 0.06);
|
|
398
|
+
box-shadow: 0 1px 6px rgba(176, 120, 0, 0.12);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/* Danger Button - Light */
|
|
402
|
+
.amber-btn-danger-light {
|
|
403
|
+
color: #FFFDF5;
|
|
404
|
+
background: var(--amber-orange);
|
|
405
|
+
border-radius: 9999px;
|
|
406
|
+
box-shadow: 0 2px 8px rgba(196, 72, 0, 0.2);
|
|
407
|
+
}
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
### Input Fields (Terminal Style)
|
|
411
|
+
|
|
412
|
+
```css
|
|
413
|
+
/* ===== DARK MODE ===== */
|
|
414
|
+
.amber-input-dark {
|
|
415
|
+
font-family: 'JetBrains Mono', monospace;
|
|
416
|
+
font-size: 14px;
|
|
417
|
+
color: var(--amber-text-primary);
|
|
418
|
+
background: var(--amber-void);
|
|
419
|
+
border: 1px solid var(--amber-surface-3);
|
|
420
|
+
border-radius: 2px;
|
|
421
|
+
padding: 12px 16px;
|
|
422
|
+
transition: all 0.2s ease;
|
|
423
|
+
caret-color: var(--amber-neon);
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
.amber-input-dark::placeholder {
|
|
427
|
+
color: var(--amber-text-muted);
|
|
428
|
+
font-style: italic;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
.amber-input-dark:focus {
|
|
432
|
+
outline: none;
|
|
433
|
+
border-color: var(--amber-neon);
|
|
434
|
+
box-shadow:
|
|
435
|
+
0 0 0 1px var(--amber-neon),
|
|
436
|
+
0 0 15px rgba(255, 184, 0, 0.15);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/* ===== LIGHT MODE ===== */
|
|
440
|
+
.amber-input-light {
|
|
441
|
+
font-family: 'JetBrains Mono', monospace;
|
|
442
|
+
font-size: 14px;
|
|
443
|
+
color: var(--amber-text-primary);
|
|
444
|
+
background: var(--amber-void);
|
|
445
|
+
border: 1px solid var(--amber-surface-3);
|
|
446
|
+
border-radius: 2px;
|
|
447
|
+
padding: 12px 16px;
|
|
448
|
+
transition: all 0.2s ease;
|
|
449
|
+
caret-color: var(--amber-neon);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
.amber-input-light::placeholder {
|
|
453
|
+
color: var(--amber-text-muted);
|
|
454
|
+
font-style: italic;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
.amber-input-light:focus {
|
|
458
|
+
outline: none;
|
|
459
|
+
border-color: var(--amber-neon);
|
|
460
|
+
box-shadow:
|
|
461
|
+
0 0 0 1px var(--amber-neon),
|
|
462
|
+
0 2px 12px rgba(176, 120, 0, 0.12);
|
|
463
|
+
}
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
### Cards
|
|
467
|
+
|
|
468
|
+
```css
|
|
469
|
+
/* ===== DARK MODE ===== */
|
|
470
|
+
.amber-card-dark {
|
|
471
|
+
background: var(--amber-surface-0);
|
|
472
|
+
border: 1px solid var(--amber-surface-3);
|
|
473
|
+
border-radius: 0px;
|
|
474
|
+
padding: 24px;
|
|
475
|
+
position: relative;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
.amber-card-accent-dark {
|
|
479
|
+
border-top: 2px solid var(--amber-neon);
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
.amber-card-dark:hover {
|
|
483
|
+
border-color: rgba(255, 184, 0, 0.3);
|
|
484
|
+
box-shadow: 0 0 20px rgba(255, 184, 0, 0.05);
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
/* Stat card - Dark */
|
|
488
|
+
.amber-stat-value-dark {
|
|
489
|
+
font-family: 'JetBrains Mono', monospace;
|
|
490
|
+
font-size: 48px;
|
|
491
|
+
font-weight: 800;
|
|
492
|
+
color: var(--amber-neon);
|
|
493
|
+
text-shadow: 0 0 20px rgba(255, 184, 0, 0.3);
|
|
494
|
+
line-height: 1;
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
/* ===== LIGHT MODE ===== */
|
|
498
|
+
.amber-card-light {
|
|
499
|
+
background: var(--amber-surface-0);
|
|
500
|
+
border: 1px solid var(--amber-surface-3);
|
|
501
|
+
border-radius: 0px;
|
|
502
|
+
padding: 24px;
|
|
503
|
+
position: relative;
|
|
504
|
+
box-shadow: 0 1px 3px rgba(44, 36, 22, 0.06);
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
.amber-card-accent-light {
|
|
508
|
+
border-top: 2px solid var(--amber-neon);
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
.amber-card-light:hover {
|
|
512
|
+
border-color: rgba(176, 120, 0, 0.35);
|
|
513
|
+
box-shadow:
|
|
514
|
+
0 2px 12px rgba(176, 120, 0, 0.08),
|
|
515
|
+
0 1px 3px rgba(44, 36, 22, 0.06);
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
/* Stat card - Light */
|
|
519
|
+
.amber-stat-value-light {
|
|
520
|
+
font-family: 'JetBrains Mono', monospace;
|
|
521
|
+
font-size: 48px;
|
|
522
|
+
font-weight: 800;
|
|
523
|
+
color: var(--amber-neon);
|
|
524
|
+
text-shadow: none;
|
|
525
|
+
line-height: 1;
|
|
526
|
+
}
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
### Badges / Tags
|
|
530
|
+
|
|
531
|
+
```css
|
|
532
|
+
.amber-badge {
|
|
533
|
+
font-family: 'JetBrains Mono', monospace;
|
|
534
|
+
font-size: 11px;
|
|
535
|
+
font-weight: 500;
|
|
536
|
+
letter-spacing: 0.05em;
|
|
537
|
+
text-transform: uppercase;
|
|
538
|
+
padding: 4px 12px;
|
|
539
|
+
border-radius: 9999px;
|
|
540
|
+
display: inline-flex;
|
|
541
|
+
align-items: center;
|
|
542
|
+
gap: 6px;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
/* Dark Mode Badges */
|
|
546
|
+
.amber-badge-primary-dark {
|
|
547
|
+
color: var(--amber-neon);
|
|
548
|
+
background: rgba(255, 184, 0, 0.1);
|
|
549
|
+
border: 1px solid rgba(255, 184, 0, 0.25);
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
.amber-badge-danger-dark {
|
|
553
|
+
color: var(--amber-orange);
|
|
554
|
+
background: rgba(255, 107, 0, 0.1);
|
|
555
|
+
border: 1px solid rgba(255, 107, 0, 0.25);
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
.amber-badge-success-dark {
|
|
559
|
+
color: var(--amber-green);
|
|
560
|
+
background: rgba(57, 255, 20, 0.1);
|
|
561
|
+
border: 1px solid rgba(57, 255, 20, 0.25);
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
.amber-badge-warning-dark {
|
|
565
|
+
color: var(--amber-yellow);
|
|
566
|
+
background: rgba(255, 224, 102, 0.1);
|
|
567
|
+
border: 1px solid rgba(255, 224, 102, 0.25);
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
/* Light Mode Badges */
|
|
571
|
+
.amber-badge-primary-light {
|
|
572
|
+
color: var(--amber-neon);
|
|
573
|
+
background: rgba(176, 120, 0, 0.08);
|
|
574
|
+
border: 1px solid rgba(176, 120, 0, 0.2);
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
.amber-badge-danger-light {
|
|
578
|
+
color: var(--amber-orange);
|
|
579
|
+
background: rgba(196, 72, 0, 0.08);
|
|
580
|
+
border: 1px solid rgba(196, 72, 0, 0.2);
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
.amber-badge-success-light {
|
|
584
|
+
color: var(--amber-green);
|
|
585
|
+
background: rgba(61, 122, 28, 0.08);
|
|
586
|
+
border: 1px solid rgba(61, 122, 28, 0.2);
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
.amber-badge-warning-light {
|
|
590
|
+
color: var(--amber-yellow);
|
|
591
|
+
background: rgba(166, 124, 0, 0.08);
|
|
592
|
+
border: 1px solid rgba(166, 124, 0, 0.2);
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
/* Status dot inside badge */
|
|
596
|
+
.amber-badge-dot {
|
|
597
|
+
width: 6px;
|
|
598
|
+
height: 6px;
|
|
599
|
+
border-radius: 50%;
|
|
600
|
+
background: currentColor;
|
|
601
|
+
box-shadow: 0 0 6px currentColor;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
/* In light mode, the dot glow is subtler */
|
|
605
|
+
.light .amber-badge-dot {
|
|
606
|
+
box-shadow: none;
|
|
607
|
+
}
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
### Sidebar Navigation
|
|
611
|
+
|
|
612
|
+
```css
|
|
613
|
+
/* ===== DARK MODE ===== */
|
|
614
|
+
.amber-sidebar-dark {
|
|
615
|
+
background: var(--amber-surface-0);
|
|
616
|
+
border-right: 1px solid var(--amber-surface-3);
|
|
617
|
+
width: 260px;
|
|
618
|
+
padding: 16px 0;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
.amber-nav-item-dark {
|
|
622
|
+
font-family: 'JetBrains Mono', monospace;
|
|
623
|
+
font-size: 13px;
|
|
624
|
+
font-weight: 500;
|
|
625
|
+
letter-spacing: 0.02em;
|
|
626
|
+
color: var(--amber-text-secondary);
|
|
627
|
+
padding: 10px 20px;
|
|
628
|
+
display: flex;
|
|
629
|
+
align-items: center;
|
|
630
|
+
gap: 12px;
|
|
631
|
+
border-radius: 0;
|
|
632
|
+
border-left: 2px solid transparent;
|
|
633
|
+
transition: all 0.15s ease;
|
|
634
|
+
cursor: pointer;
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
.amber-nav-item-dark:hover {
|
|
638
|
+
color: var(--amber-text-primary);
|
|
639
|
+
background: var(--amber-surface-2);
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
.amber-nav-item-dark.active {
|
|
643
|
+
color: var(--amber-neon);
|
|
644
|
+
border-left-color: var(--amber-neon);
|
|
645
|
+
background: rgba(255, 184, 0, 0.05);
|
|
646
|
+
text-shadow: 0 0 10px rgba(255, 184, 0, 0.3);
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
/* ===== LIGHT MODE ===== */
|
|
650
|
+
.amber-sidebar-light {
|
|
651
|
+
background: var(--amber-surface-0);
|
|
652
|
+
border-right: 1px solid var(--amber-surface-3);
|
|
653
|
+
width: 260px;
|
|
654
|
+
padding: 16px 0;
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
.amber-nav-item-light {
|
|
658
|
+
font-family: 'JetBrains Mono', monospace;
|
|
659
|
+
font-size: 13px;
|
|
660
|
+
font-weight: 500;
|
|
661
|
+
letter-spacing: 0.02em;
|
|
662
|
+
color: var(--amber-text-secondary);
|
|
663
|
+
padding: 10px 20px;
|
|
664
|
+
display: flex;
|
|
665
|
+
align-items: center;
|
|
666
|
+
gap: 12px;
|
|
667
|
+
border-radius: 0;
|
|
668
|
+
border-left: 2px solid transparent;
|
|
669
|
+
transition: all 0.15s ease;
|
|
670
|
+
cursor: pointer;
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
.amber-nav-item-light:hover {
|
|
674
|
+
color: var(--amber-text-primary);
|
|
675
|
+
background: var(--amber-surface-2);
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
.amber-nav-item-light.active {
|
|
679
|
+
color: var(--amber-neon);
|
|
680
|
+
border-left-color: var(--amber-neon);
|
|
681
|
+
background: rgba(176, 120, 0, 0.06);
|
|
682
|
+
text-shadow: none;
|
|
683
|
+
font-weight: 600;
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
.amber-nav-section-label {
|
|
687
|
+
font-family: 'JetBrains Mono', monospace;
|
|
688
|
+
font-size: 10px;
|
|
689
|
+
font-weight: 700;
|
|
690
|
+
letter-spacing: 0.12em;
|
|
691
|
+
text-transform: uppercase;
|
|
692
|
+
color: var(--amber-text-muted);
|
|
693
|
+
padding: 20px 20px 8px;
|
|
694
|
+
}
|
|
695
|
+
```
|
|
696
|
+
|
|
697
|
+
### Tables / Data Grids
|
|
698
|
+
|
|
699
|
+
```css
|
|
700
|
+
.amber-table {
|
|
701
|
+
width: 100%;
|
|
702
|
+
border-collapse: collapse;
|
|
703
|
+
font-family: 'IBM Plex Sans', sans-serif;
|
|
704
|
+
font-size: 14px;
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
/* Dark mode */
|
|
708
|
+
.amber-table-dark thead th {
|
|
709
|
+
font-family: 'JetBrains Mono', monospace;
|
|
710
|
+
font-size: 11px;
|
|
711
|
+
font-weight: 600;
|
|
712
|
+
letter-spacing: 0.08em;
|
|
713
|
+
text-transform: uppercase;
|
|
714
|
+
color: var(--amber-text-muted);
|
|
715
|
+
background: var(--amber-surface-1);
|
|
716
|
+
padding: 12px 16px;
|
|
717
|
+
text-align: left;
|
|
718
|
+
border-bottom: 1px solid var(--amber-surface-3);
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
.amber-table-dark tbody tr {
|
|
722
|
+
border-bottom: 1px solid var(--amber-surface-3);
|
|
723
|
+
transition: background 0.1s ease;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
.amber-table-dark tbody tr:hover {
|
|
727
|
+
background: var(--amber-surface-2);
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
/* Light mode */
|
|
731
|
+
.amber-table-light thead th {
|
|
732
|
+
font-family: 'JetBrains Mono', monospace;
|
|
733
|
+
font-size: 11px;
|
|
734
|
+
font-weight: 600;
|
|
735
|
+
letter-spacing: 0.08em;
|
|
736
|
+
text-transform: uppercase;
|
|
737
|
+
color: var(--amber-text-muted);
|
|
738
|
+
background: var(--amber-surface-1);
|
|
739
|
+
padding: 12px 16px;
|
|
740
|
+
text-align: left;
|
|
741
|
+
border-bottom: 1px solid var(--amber-surface-3);
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
.amber-table-light tbody tr {
|
|
745
|
+
border-bottom: 1px solid var(--amber-surface-3);
|
|
746
|
+
transition: background 0.1s ease;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
.amber-table-light tbody tr:hover {
|
|
750
|
+
background: var(--amber-surface-2);
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
/* Monospace columns (IDs, codes, timestamps) */
|
|
754
|
+
.amber-table .col-mono {
|
|
755
|
+
font-family: 'JetBrains Mono', monospace;
|
|
756
|
+
font-size: 13px;
|
|
757
|
+
color: var(--amber-text-secondary);
|
|
758
|
+
}
|
|
759
|
+
```
|
|
760
|
+
|
|
761
|
+
### Toasts / Notifications
|
|
762
|
+
|
|
763
|
+
```css
|
|
764
|
+
/* Dark mode toasts */
|
|
765
|
+
.amber-toast-dark {
|
|
766
|
+
font-family: 'IBM Plex Sans', sans-serif;
|
|
767
|
+
font-size: 14px;
|
|
768
|
+
background: var(--amber-surface-1);
|
|
769
|
+
border-radius: 0px;
|
|
770
|
+
border-left: 3px solid;
|
|
771
|
+
padding: 16px 20px;
|
|
772
|
+
box-shadow:
|
|
773
|
+
0 4px 24px rgba(0, 0, 0, 0.5),
|
|
774
|
+
0 0 1px rgba(255, 184, 0, 0.2);
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
.amber-toast-success-dark {
|
|
778
|
+
border-left-color: var(--amber-green);
|
|
779
|
+
box-shadow:
|
|
780
|
+
0 4px 24px rgba(0, 0, 0, 0.5),
|
|
781
|
+
0 0 15px rgba(57, 255, 20, 0.1);
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
.amber-toast-error-dark {
|
|
785
|
+
border-left-color: var(--amber-orange);
|
|
786
|
+
box-shadow:
|
|
787
|
+
0 4px 24px rgba(0, 0, 0, 0.5),
|
|
788
|
+
0 0 15px rgba(255, 107, 0, 0.1);
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
.amber-toast-warning-dark {
|
|
792
|
+
border-left-color: var(--amber-yellow);
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
/* Light mode toasts */
|
|
796
|
+
.amber-toast-light {
|
|
797
|
+
font-family: 'IBM Plex Sans', sans-serif;
|
|
798
|
+
font-size: 14px;
|
|
799
|
+
background: var(--amber-void);
|
|
800
|
+
border-radius: 0px;
|
|
801
|
+
border-left: 3px solid;
|
|
802
|
+
padding: 16px 20px;
|
|
803
|
+
box-shadow:
|
|
804
|
+
0 4px 16px rgba(44, 36, 22, 0.1),
|
|
805
|
+
0 1px 3px rgba(44, 36, 22, 0.06);
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
.amber-toast-success-light {
|
|
809
|
+
border-left-color: var(--amber-green);
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
.amber-toast-error-light {
|
|
813
|
+
border-left-color: var(--amber-orange);
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
.amber-toast-warning-light {
|
|
817
|
+
border-left-color: var(--amber-yellow);
|
|
818
|
+
}
|
|
819
|
+
```
|
|
820
|
+
|
|
821
|
+
### Modals / Dialogs
|
|
822
|
+
|
|
823
|
+
```css
|
|
824
|
+
/* Dark mode */
|
|
825
|
+
.amber-modal-overlay-dark {
|
|
826
|
+
background: rgba(10, 8, 6, 0.85);
|
|
827
|
+
backdrop-filter: blur(8px);
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
.amber-modal-dark {
|
|
831
|
+
background: var(--amber-surface-0);
|
|
832
|
+
border: 1px solid var(--amber-surface-3);
|
|
833
|
+
border-radius: 0px;
|
|
834
|
+
box-shadow:
|
|
835
|
+
0 24px 80px rgba(0, 0, 0, 0.6),
|
|
836
|
+
0 0 1px rgba(255, 184, 0, 0.3);
|
|
837
|
+
max-width: 520px;
|
|
838
|
+
width: 100%;
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
/* Light mode */
|
|
842
|
+
.amber-modal-overlay-light {
|
|
843
|
+
background: rgba(250, 245, 234, 0.75);
|
|
844
|
+
backdrop-filter: blur(8px);
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
.amber-modal-light {
|
|
848
|
+
background: var(--amber-void);
|
|
849
|
+
border: 1px solid var(--amber-surface-3);
|
|
850
|
+
border-radius: 0px;
|
|
851
|
+
box-shadow:
|
|
852
|
+
0 24px 80px rgba(44, 36, 22, 0.15),
|
|
853
|
+
0 0 1px rgba(176, 120, 0, 0.2);
|
|
854
|
+
max-width: 520px;
|
|
855
|
+
width: 100%;
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
.amber-modal-header {
|
|
859
|
+
padding: 20px 24px;
|
|
860
|
+
border-bottom: 1px solid var(--amber-surface-3);
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
.amber-modal-title {
|
|
864
|
+
font-family: 'JetBrains Mono', monospace;
|
|
865
|
+
font-size: 18px;
|
|
866
|
+
font-weight: 700;
|
|
867
|
+
color: var(--amber-text-primary);
|
|
868
|
+
}
|
|
869
|
+
```
|
|
870
|
+
|
|
871
|
+
### Scrollbar Styling
|
|
872
|
+
|
|
873
|
+
```css
|
|
874
|
+
/* Dark mode */
|
|
875
|
+
.amber-scrollbar-dark::-webkit-scrollbar {
|
|
876
|
+
width: 6px;
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
.amber-scrollbar-dark::-webkit-scrollbar-track {
|
|
880
|
+
background: var(--amber-void);
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
.amber-scrollbar-dark::-webkit-scrollbar-thumb {
|
|
884
|
+
background: var(--amber-surface-3);
|
|
885
|
+
border-radius: 0px;
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
.amber-scrollbar-dark::-webkit-scrollbar-thumb:hover {
|
|
889
|
+
background: var(--amber-neon-muted);
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
/* Light mode */
|
|
893
|
+
.amber-scrollbar-light::-webkit-scrollbar {
|
|
894
|
+
width: 6px;
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
.amber-scrollbar-light::-webkit-scrollbar-track {
|
|
898
|
+
background: var(--amber-void);
|
|
899
|
+
}
|
|
900
|
+
|
|
901
|
+
.amber-scrollbar-light::-webkit-scrollbar-thumb {
|
|
902
|
+
background: var(--amber-surface-3);
|
|
903
|
+
border-radius: 0px;
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
.amber-scrollbar-light::-webkit-scrollbar-thumb:hover {
|
|
907
|
+
background: var(--amber-neon-muted);
|
|
908
|
+
}
|
|
909
|
+
```
|
|
910
|
+
|
|
911
|
+
---
|
|
912
|
+
|
|
913
|
+
## 5. Special Effects
|
|
914
|
+
|
|
915
|
+
### Glow Effects: Dark vs. Light Philosophy
|
|
916
|
+
|
|
917
|
+
**Dark mode:** Full neon glow treatment. Amber glow radiates from interactive elements, creating the warm CRT monitor feel. The glow is the hero.
|
|
918
|
+
|
|
919
|
+
**Light mode:** Glow effects are replaced by **warm shadows** and **amber tint shifts**. Instead of light radiating outward (which would be invisible on a light background), interactive elements gain depth through warm-toned box shadows and subtle amber background tints on hover/focus. The terminal feel comes from typography and shape, not glow.
|
|
920
|
+
|
|
921
|
+
### Scanline Overlay (Dark Mode Only)
|
|
922
|
+
|
|
923
|
+
A barely-visible CRT scanline effect. On light mode, this is replaced by a subtle paper texture.
|
|
924
|
+
|
|
925
|
+
```css
|
|
926
|
+
/* Dark mode: CRT scanlines */
|
|
927
|
+
.amber-scanlines-dark::after {
|
|
928
|
+
content: '';
|
|
929
|
+
position: fixed;
|
|
930
|
+
top: 0;
|
|
931
|
+
left: 0;
|
|
932
|
+
width: 100%;
|
|
933
|
+
height: 100%;
|
|
934
|
+
background: repeating-linear-gradient(
|
|
935
|
+
0deg,
|
|
936
|
+
transparent,
|
|
937
|
+
transparent 2px,
|
|
938
|
+
rgba(0, 0, 0, 0.03) 2px,
|
|
939
|
+
rgba(0, 0, 0, 0.03) 4px
|
|
940
|
+
);
|
|
941
|
+
pointer-events: none;
|
|
942
|
+
z-index: 9999;
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
/* Light mode: subtle paper grain texture */
|
|
946
|
+
.amber-paper-texture-light::after {
|
|
947
|
+
content: '';
|
|
948
|
+
position: fixed;
|
|
949
|
+
top: 0;
|
|
950
|
+
left: 0;
|
|
951
|
+
width: 100%;
|
|
952
|
+
height: 100%;
|
|
953
|
+
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.015'/%3E%3C/svg%3E");
|
|
954
|
+
pointer-events: none;
|
|
955
|
+
z-index: 9999;
|
|
956
|
+
}
|
|
957
|
+
```
|
|
958
|
+
|
|
959
|
+
### Amber Neon Pulse Animation (Dark Mode)
|
|
960
|
+
|
|
961
|
+
```css
|
|
962
|
+
@keyframes amber-pulse {
|
|
963
|
+
0%, 100% {
|
|
964
|
+
box-shadow:
|
|
965
|
+
0 0 5px rgba(255, 184, 0, 0.4),
|
|
966
|
+
0 0 20px rgba(255, 184, 0, 0.15);
|
|
967
|
+
}
|
|
968
|
+
50% {
|
|
969
|
+
box-shadow:
|
|
970
|
+
0 0 10px rgba(255, 184, 0, 0.6),
|
|
971
|
+
0 0 40px rgba(255, 184, 0, 0.25),
|
|
972
|
+
0 0 80px rgba(255, 184, 0, 0.1);
|
|
973
|
+
}
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
.amber-pulse-dark {
|
|
977
|
+
animation: amber-pulse 2s ease-in-out infinite;
|
|
978
|
+
}
|
|
979
|
+
```
|
|
980
|
+
|
|
981
|
+
### Warm Lift Animation (Light Mode)
|
|
982
|
+
|
|
983
|
+
Instead of a glow pulse, light mode uses a subtle shadow-lift for emphasis:
|
|
984
|
+
|
|
985
|
+
```css
|
|
986
|
+
@keyframes amber-lift {
|
|
987
|
+
0%, 100% {
|
|
988
|
+
box-shadow: 0 2px 8px rgba(176, 120, 0, 0.15);
|
|
989
|
+
transform: translateY(0);
|
|
990
|
+
}
|
|
991
|
+
50% {
|
|
992
|
+
box-shadow: 0 6px 20px rgba(176, 120, 0, 0.2);
|
|
993
|
+
transform: translateY(-1px);
|
|
994
|
+
}
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
.amber-pulse-light {
|
|
998
|
+
animation: amber-lift 2s ease-in-out infinite;
|
|
999
|
+
}
|
|
1000
|
+
```
|
|
1001
|
+
|
|
1002
|
+
### Typing Cursor Blink
|
|
1003
|
+
|
|
1004
|
+
```css
|
|
1005
|
+
@keyframes blink {
|
|
1006
|
+
0%, 100% { opacity: 1; }
|
|
1007
|
+
50% { opacity: 0; }
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
/* Dark mode: amber cursor */
|
|
1011
|
+
.amber-cursor-dark::after {
|
|
1012
|
+
content: '_';
|
|
1013
|
+
color: var(--amber-neon);
|
|
1014
|
+
animation: blink 1s step-end infinite;
|
|
1015
|
+
margin-left: 2px;
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
/* Light mode: same cursor, darker amber */
|
|
1019
|
+
.amber-cursor-light::after {
|
|
1020
|
+
content: '_';
|
|
1021
|
+
color: var(--amber-neon);
|
|
1022
|
+
animation: blink 1s step-end infinite;
|
|
1023
|
+
margin-left: 2px;
|
|
1024
|
+
}
|
|
1025
|
+
```
|
|
1026
|
+
|
|
1027
|
+
### Grid Background Pattern
|
|
1028
|
+
|
|
1029
|
+
```css
|
|
1030
|
+
/* Dark mode: warm dot grid */
|
|
1031
|
+
.amber-grid-bg-dark {
|
|
1032
|
+
background-image: radial-gradient(
|
|
1033
|
+
circle,
|
|
1034
|
+
rgba(255, 184, 0, 0.06) 1px,
|
|
1035
|
+
transparent 1px
|
|
1036
|
+
);
|
|
1037
|
+
background-size: 24px 24px;
|
|
1038
|
+
}
|
|
1039
|
+
|
|
1040
|
+
/* Light mode: subtle warm dot grid */
|
|
1041
|
+
.amber-grid-bg-light {
|
|
1042
|
+
background-image: radial-gradient(
|
|
1043
|
+
circle,
|
|
1044
|
+
rgba(176, 120, 0, 0.06) 1px,
|
|
1045
|
+
transparent 1px
|
|
1046
|
+
);
|
|
1047
|
+
background-size: 24px 24px;
|
|
1048
|
+
}
|
|
1049
|
+
```
|
|
1050
|
+
|
|
1051
|
+
---
|
|
1052
|
+
|
|
1053
|
+
## 6. Tailwind v4 Theme Configuration
|
|
1054
|
+
|
|
1055
|
+
```css
|
|
1056
|
+
@import "tailwindcss";
|
|
1057
|
+
|
|
1058
|
+
@theme {
|
|
1059
|
+
/* Neon Amber Colors - Dark Mode Defaults */
|
|
1060
|
+
--color-amber-void: #0A0806;
|
|
1061
|
+
--color-amber-surface-0: #12100B;
|
|
1062
|
+
--color-amber-surface-1: #1A1710;
|
|
1063
|
+
--color-amber-surface-2: #241F16;
|
|
1064
|
+
--color-amber-surface-3: #302A1E;
|
|
1065
|
+
|
|
1066
|
+
--color-amber-neon: #FFB800;
|
|
1067
|
+
--color-amber-neon-muted: #C48A00;
|
|
1068
|
+
--color-amber-orange: #FF6B00;
|
|
1069
|
+
--color-amber-green: #39FF14;
|
|
1070
|
+
--color-amber-yellow: #FFE066;
|
|
1071
|
+
--color-amber-copper: #E8782A;
|
|
1072
|
+
|
|
1073
|
+
--color-amber-text-primary: #F0E6D2;
|
|
1074
|
+
--color-amber-text-secondary: #A89478;
|
|
1075
|
+
--color-amber-text-muted: #5C5040;
|
|
1076
|
+
|
|
1077
|
+
/* Light Mode Overrides */
|
|
1078
|
+
--color-amber-void-light: #FAF5EA;
|
|
1079
|
+
--color-amber-surface-0-light: #F3ECDD;
|
|
1080
|
+
--color-amber-surface-1-light: #EBE3D0;
|
|
1081
|
+
--color-amber-surface-2-light: #E2D8C3;
|
|
1082
|
+
--color-amber-surface-3-light: #D5C9B0;
|
|
1083
|
+
|
|
1084
|
+
--color-amber-neon-light: #B07800;
|
|
1085
|
+
--color-amber-neon-muted-light: #8A6000;
|
|
1086
|
+
--color-amber-orange-light: #C44800;
|
|
1087
|
+
--color-amber-green-light: #3D7A1C;
|
|
1088
|
+
--color-amber-yellow-light: #A67C00;
|
|
1089
|
+
--color-amber-copper-light: #9A5B20;
|
|
1090
|
+
|
|
1091
|
+
--color-amber-text-primary-light: #2C2416;
|
|
1092
|
+
--color-amber-text-secondary-light: #6B5D48;
|
|
1093
|
+
--color-amber-text-muted-light: #A89880;
|
|
1094
|
+
|
|
1095
|
+
/* Font families */
|
|
1096
|
+
--font-heading: 'JetBrains Mono', monospace;
|
|
1097
|
+
--font-body: 'IBM Plex Sans', sans-serif;
|
|
1098
|
+
--font-mono: 'JetBrains Mono', monospace;
|
|
1099
|
+
|
|
1100
|
+
/* Border radius tokens */
|
|
1101
|
+
--radius-sharp: 0px;
|
|
1102
|
+
--radius-terminal: 2px;
|
|
1103
|
+
--radius-pill: 9999px;
|
|
1104
|
+
}
|
|
1105
|
+
```
|
|
1106
|
+
|
|
1107
|
+
### Tailwind Utility Examples
|
|
1108
|
+
|
|
1109
|
+
```html
|
|
1110
|
+
<!-- ===== DARK MODE ===== -->
|
|
1111
|
+
|
|
1112
|
+
<!-- Page title with amber glow -->
|
|
1113
|
+
<h1 class="font-heading text-[40px] font-extrabold uppercase tracking-tight text-amber-neon
|
|
1114
|
+
[text-shadow:0_0_7px_rgba(255,184,0,0.6),0_0_20px_rgba(255,184,0,0.3)]">
|
|
1115
|
+
DASHBOARD_
|
|
1116
|
+
</h1>
|
|
1117
|
+
|
|
1118
|
+
<!-- Primary button with amber glow -->
|
|
1119
|
+
<button class="font-mono text-[13px] font-semibold uppercase tracking-wider
|
|
1120
|
+
bg-amber-neon text-amber-void rounded-pill px-7 py-2.5
|
|
1121
|
+
shadow-[0_0_5px_rgba(255,184,0,0.4),0_0_20px_rgba(255,184,0,0.15)]
|
|
1122
|
+
hover:shadow-[0_0_8px_rgba(255,184,0,0.6),0_0_30px_rgba(255,184,0,0.3)]
|
|
1123
|
+
transition-all duration-200">
|
|
1124
|
+
EXECUTE
|
|
1125
|
+
</button>
|
|
1126
|
+
|
|
1127
|
+
<!-- Sharp card -->
|
|
1128
|
+
<div class="bg-amber-surface-0 border border-amber-surface-3 rounded-sharp p-6">
|
|
1129
|
+
<h3 class="font-heading text-xl font-semibold text-amber-text-primary">Card Title</h3>
|
|
1130
|
+
<p class="font-body text-[15px] text-amber-text-secondary mt-2">Card content here.</p>
|
|
1131
|
+
</div>
|
|
1132
|
+
|
|
1133
|
+
<!-- Terminal input -->
|
|
1134
|
+
<input class="font-mono text-sm bg-amber-void border border-amber-surface-3 rounded-terminal
|
|
1135
|
+
text-amber-text-primary px-4 py-3
|
|
1136
|
+
focus:border-amber-neon focus:shadow-[0_0_0_1px_#FFB800,0_0_15px_rgba(255,184,0,0.15)]
|
|
1137
|
+
focus:outline-none caret-amber-neon
|
|
1138
|
+
placeholder:text-amber-text-muted placeholder:italic"
|
|
1139
|
+
placeholder="type command..." />
|
|
1140
|
+
|
|
1141
|
+
<!-- Amber badge -->
|
|
1142
|
+
<span class="font-mono text-[11px] font-medium uppercase tracking-wider
|
|
1143
|
+
text-amber-neon bg-amber-neon/10 border border-amber-neon/25
|
|
1144
|
+
rounded-pill px-3 py-1">
|
|
1145
|
+
ACTIVE
|
|
1146
|
+
</span>
|
|
1147
|
+
|
|
1148
|
+
<!-- ===== LIGHT MODE ===== -->
|
|
1149
|
+
|
|
1150
|
+
<!-- Page title -- no glow, rich amber ink -->
|
|
1151
|
+
<h1 class="font-heading text-[40px] font-extrabold uppercase tracking-tight text-amber-neon-light">
|
|
1152
|
+
DASHBOARD_
|
|
1153
|
+
</h1>
|
|
1154
|
+
|
|
1155
|
+
<!-- Primary button with warm shadow -->
|
|
1156
|
+
<button class="font-mono text-[13px] font-semibold uppercase tracking-wider
|
|
1157
|
+
bg-amber-neon-light text-white rounded-pill px-7 py-2.5
|
|
1158
|
+
shadow-[0_2px_8px_rgba(176,120,0,0.25)]
|
|
1159
|
+
hover:shadow-[0_4px_16px_rgba(176,120,0,0.3)]
|
|
1160
|
+
transition-all duration-200">
|
|
1161
|
+
EXECUTE
|
|
1162
|
+
</button>
|
|
1163
|
+
|
|
1164
|
+
<!-- Sharp card with warm shadow -->
|
|
1165
|
+
<div class="bg-amber-surface-0-light border border-amber-surface-3-light rounded-sharp p-6
|
|
1166
|
+
shadow-[0_1px_3px_rgba(44,36,22,0.06)]">
|
|
1167
|
+
<h3 class="font-heading text-xl font-semibold text-amber-text-primary-light">Card Title</h3>
|
|
1168
|
+
<p class="font-body text-[15px] text-amber-text-secondary-light mt-2">Card content here.</p>
|
|
1169
|
+
</div>
|
|
1170
|
+
```
|
|
1171
|
+
|
|
1172
|
+
---
|
|
1173
|
+
|
|
1174
|
+
## 7. Light Mode Design Philosophy
|
|
1175
|
+
|
|
1176
|
+
The light mode of Neon Terminal: Amber is NOT just "invert the colors." It is a deliberate reinterpretation of the terminal aesthetic for well-lit environments. Here are the core principles:
|
|
1177
|
+
|
|
1178
|
+
### What carries over from dark mode:
|
|
1179
|
+
- **Monospace typography** -- JetBrains Mono headings, uppercase labels, the full type system
|
|
1180
|
+
- **Sharp-vs-pill shape language** -- 0px cards, 9999px buttons, 2px inputs
|
|
1181
|
+
- **Color semantics** -- amber = primary, green = success, orange = danger
|
|
1182
|
+
- **Terminal prompt details** -- cursor blink, `>` prefixes, monospace inputs
|
|
1183
|
+
- **Uppercase interactive elements** -- buttons, badges, labels, nav sections
|
|
1184
|
+
- **Structural layout** -- sidebar patterns, card grids, data tables
|
|
1185
|
+
|
|
1186
|
+
### What changes for light mode:
|
|
1187
|
+
- **Glow becomes shadow** -- Neon glow effects are replaced by warm-toned drop shadows and soft amber box shadows
|
|
1188
|
+
- **Neon becomes ink** -- Bright `#FFB800` amber becomes rich `#B07800` amber ink. Colors are darkened and slightly desaturated so they read well against cream backgrounds
|
|
1189
|
+
- **Void becomes parchment** -- The near-black void becomes warm cream `#FAF5EA`, inspired by Gruvbox Light's `#fbf1c7`. Surfaces build up in warm parchment tones
|
|
1190
|
+
- **Scanlines become paper grain** -- The CRT scanline effect is replaced by a barely-visible paper noise texture
|
|
1191
|
+
- **Badge dots lose glow** -- Status indicator dots are solid color without the halo glow effect
|
|
1192
|
+
- **Active nav items** use font-weight change instead of text-shadow for emphasis
|
|
1193
|
+
|
|
1194
|
+
### The result:
|
|
1195
|
+
Dark mode feels like a warm amber CRT monitor in a dim workshop. Light mode feels like an engineer's notebook -- precise, structured, warm-toned, with the same monospace discipline but adapted for daylight readability.
|
|
1196
|
+
|
|
1197
|
+
---
|
|
1198
|
+
|
|
1199
|
+
## 8. Inspiration References
|
|
1200
|
+
|
|
1201
|
+
| Source | What to Borrow |
|
|
1202
|
+
|-------------------------|-------------------------------------------------------------------------|
|
|
1203
|
+
| **Gruvbox Light** | Warm cream backgrounds, desaturated accent colors, paper-like surface scale |
|
|
1204
|
+
| **Warp Terminal** | Block-based UI, monospace-first, input styling, dark void backgrounds |
|
|
1205
|
+
| **Amber CRT Monitors** | The warm monochrome glow, amber-on-black aesthetic, vintage terminal energy |
|
|
1206
|
+
| **Linear (dark)** | Elevation through surface layering, minimal color use, tight spacing |
|
|
1207
|
+
| **Solarized Light** | Proven warm light palette, reduced eye strain, dual-mode design thinking |
|
|
1208
|
+
| **Cyberpunk 2077 UI** | Angled corner cuts, bold typography, aggressive uppercase labels |
|
|
1209
|
+
| **VS Code (dark)** | Sidebar patterns, monospace navigation, focus ring glow effects |
|
|
1210
|
+
| **Old engineering paper**| Warm grid patterns, structured precision, amber/sepia ink tones |
|
|
1211
|
+
|
|
1212
|
+
---
|
|
1213
|
+
|
|
1214
|
+
## 9. Key Design Principles
|
|
1215
|
+
|
|
1216
|
+
1. **Terminal-first typography:** All headings, labels, navigation, badges, and interactive elements use JetBrains Mono. Only body/paragraph text uses sans-serif. This is the constant across both modes.
|
|
1217
|
+
2. **Warmth is the identity:** Every color has a warm undertone. Backgrounds tilt warm (brown-tinted blacks in dark, cream in light). No cool grays anywhere.
|
|
1218
|
+
3. **Glow in dark, shadow in light:** The same semantic emphasis (primary action = strongest visual signal) is expressed through neon glow in dark mode and warm box shadows in light mode.
|
|
1219
|
+
4. **Sharp vs. pill tension:** Containers are razor-sharp (0 radius). Interactive elements are fully rounded (pill). This contrast is mode-independent.
|
|
1220
|
+
5. **Neon becomes ink:** Bright neon amber in dark mode becomes rich, saturated "ink" amber in light mode. The hue stays constant; the lightness and saturation adapt.
|
|
1221
|
+
6. **Restraint on effects:** Dark mode gets glow, scanlines, and grid patterns. Light mode gets warm shadows and paper texture. Each mode has its own flavor of visual richness without overdoing it.
|
|
1222
|
+
7. **Color is signal:** Amber = primary, green = success, orange = danger, yellow = warning, copper = info. Semantic use only, never decorative.
|
|
1223
|
+
8. **Both modes are first-class:** Neither mode is an afterthought. Dark mode is a warm CRT workstation. Light mode is a sunlit engineer's desk. Both are intentionally designed, not derived.
|