@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,11 @@
|
|
|
1
|
+
<claude-mem-context>
|
|
2
|
+
# Recent Activity
|
|
3
|
+
|
|
4
|
+
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
|
|
5
|
+
|
|
6
|
+
### Feb 12, 2026
|
|
7
|
+
|
|
8
|
+
| ID | Time | T | Title | Read |
|
|
9
|
+
|----|------|---|-------|------|
|
|
10
|
+
| #24590 | 5:12 PM | 🟣 | Neon Violet Theme Specification Complete with Dual-Mode Support | ~623 |
|
|
11
|
+
</claude-mem-context>
|
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
# Asymmetric Brutalist Theme
|
|
2
|
+
|
|
3
|
+
> A raw, high-contrast admin panel theme that breaks conventional UI symmetry. Thick black borders, hard offset shadows, one-sided rounded corners, and oversized typography create an interface that feels tactile, bold, and unapologetically expressive. Inspired by neobrutalist web design, Arc Browser's colored borders, and Notion's content-first hierarchy.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Color Palette
|
|
8
|
+
|
|
9
|
+
### Primary: Black + Off-White (The Foundation)
|
|
10
|
+
|
|
11
|
+
True brutalism starts with maximum contrast. Stark black borders, shadows, and text against warm off-white backgrounds form the structural skeleton. Every other color is a deliberate accent punched into this monochrome frame.
|
|
12
|
+
|
|
13
|
+
| Token | Tailwind Class | Hex | Usage |
|
|
14
|
+
|------------------|------------------|-----------|-----------------------------------------|
|
|
15
|
+
| base-black | `neutral-950` | #09090b | Borders, shadows, primary text |
|
|
16
|
+
| base-white | `neutral-50` | #fafafa | Page background, card fills |
|
|
17
|
+
| warm-white | `stone-50` | #fafaf9 | Alternate background, sidebar bg |
|
|
18
|
+
| off-white | `stone-100` | #f5f5f4 | Card hover states, table stripes |
|
|
19
|
+
| border-gray | `stone-300` | #d6d3d1 | Secondary borders, dividers |
|
|
20
|
+
|
|
21
|
+
### Accent: Electric Lime (Tailwind `lime`)
|
|
22
|
+
|
|
23
|
+
A jarring, high-energy accent that screams against black. Used sparingly for active states, CTAs, and interactive highlights. This is not a polite green -- it is neon, aggressive, impossible to ignore.
|
|
24
|
+
|
|
25
|
+
| Token | Tailwind Class | Hex | Usage |
|
|
26
|
+
|------------------|------------------|-----------|-----------------------------------------|
|
|
27
|
+
| accent-300 | `lime-300` | #bef264 | Active sidebar item bg, highlight fills |
|
|
28
|
+
| **accent-400** | **`lime-400`** | **#a3e635** | **Primary CTA buttons, active states**|
|
|
29
|
+
| accent-500 | `lime-500` | #84cc16 | Hover on accent elements |
|
|
30
|
+
| accent-600 | `lime-600` | #65a30d | Pressed / active accent |
|
|
31
|
+
|
|
32
|
+
### Secondary Accent: Hot Pink (Tailwind `pink`)
|
|
33
|
+
|
|
34
|
+
A secondary punch color for destructive actions, notifications, and badges. Creates electric tension when paired with lime.
|
|
35
|
+
|
|
36
|
+
| Token | Tailwind Class | Hex | Usage |
|
|
37
|
+
|------------------|------------------|-----------|-----------------------------------------|
|
|
38
|
+
| secondary-400 | `pink-400` | #f472b6 | Notification badges, warning highlights |
|
|
39
|
+
| **secondary-500**| **`pink-500`** | **#ec4899** | **Destructive buttons, error states** |
|
|
40
|
+
| secondary-600 | `pink-600` | #db2777 | Hover on destructive elements |
|
|
41
|
+
|
|
42
|
+
### Semantic Colors
|
|
43
|
+
|
|
44
|
+
| Purpose | Color | Hex | Notes |
|
|
45
|
+
|-----------|-------------------|-----------|------------------------------------------|
|
|
46
|
+
| Success | `lime-400` | #a3e635 | Ties to primary accent intentionally |
|
|
47
|
+
| Warning | `amber-400` | #fbbf24 | High visibility against black borders |
|
|
48
|
+
| Error | `pink-500` | #ec4899 | Ties to secondary accent |
|
|
49
|
+
| Info | `sky-400` | #38bdf8 | Cool contrast against warm palette |
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Typography
|
|
54
|
+
|
|
55
|
+
### Font Pairing: Space Grotesk (Oversized) + JetBrains Mono
|
|
56
|
+
|
|
57
|
+
**Heading Font: Space Grotesk** (Google Fonts)
|
|
58
|
+
- Style: Geometric grotesque with quirky letterforms -- the slight irregularities feel intentionally raw
|
|
59
|
+
- Weights: **700 (Bold)** exclusively for headings. No medium, no light. Bold or nothing.
|
|
60
|
+
- Use for: Page titles at MASSIVE sizes, section headers, stat numbers, sidebar labels, button text
|
|
61
|
+
- Character: Technical, blunt, unapologetic. The geometric shapes pair perfectly with the hard edges of brutalist borders.
|
|
62
|
+
|
|
63
|
+
**Body + Code Font: JetBrains Mono** (Google Fonts)
|
|
64
|
+
- Style: Monospaced typeface originally designed for code, repurposed here for ALL body text
|
|
65
|
+
- Weights: 400 (Regular) for body, 500 (Medium) for labels and emphasis
|
|
66
|
+
- Use for: Body text, table data, form inputs, metadata, descriptions -- everything that isn't a heading
|
|
67
|
+
- Character: Using a monospaced font for body text is a deliberate brutalist choice. It references raw HTML, terminal output, the "undesigned" web. Every character occupies equal space, creating a visible grid rhythm.
|
|
68
|
+
|
|
69
|
+
### Google Fonts Import
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&family=Space+Grotesk:wght@700&display=swap
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Type Scale (OVERSIZED)
|
|
76
|
+
|
|
77
|
+
This theme deliberately breaks the "14-16px body text" convention. Everything is bigger.
|
|
78
|
+
|
|
79
|
+
| Element | Font | Weight | Size (rem) | Size (px) | Tracking | Notes |
|
|
80
|
+
|-----------------------|-----------------|--------|-------------|-----------|--------------|-------------------------------------|
|
|
81
|
+
| Page title (h1) | Space Grotesk | 700 | **3.0** | **48px** | -0.04em | MASSIVE. Dominates the viewport. |
|
|
82
|
+
| Section title (h2) | Space Grotesk | 700 | **2.0** | **32px** | -0.03em | Still commanding. |
|
|
83
|
+
| Card header (h3) | Space Grotesk | 700 | **1.375** | **22px** | -0.02em | Bold only, no medium weight. |
|
|
84
|
+
| Stat number | Space Grotesk | 700 | **3.75** | **60px** | -0.05em | Enormous KPI numbers. |
|
|
85
|
+
| Body text | JetBrains Mono | 400 | **1.0** | **16px** | 0 | Monospaced, grid-aligned. |
|
|
86
|
+
| Label | JetBrains Mono | 500 | **0.8125** | **13px** | 0.05em | UPPERCASE, letterspaced. |
|
|
87
|
+
| Small / caption | JetBrains Mono | 400 | 0.75 | 12px | 0.02em | Metadata, timestamps. |
|
|
88
|
+
| Nav item (sidebar) | Space Grotesk | 700 | **1.125** | **18px** | -0.01em | Bold nav, bigger than usual. |
|
|
89
|
+
| Button text | Space Grotesk | 700 | **1.0** | **16px** | 0.02em | UPPERCASE on primary buttons. |
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Shape Language
|
|
94
|
+
|
|
95
|
+
### The Core Idea: Asymmetric Corners
|
|
96
|
+
|
|
97
|
+
Every shape in this theme has **intentional asymmetry**. No element has four matching corners. This is the defining visual signature -- it makes the entire interface feel off-kilter, hand-crafted, and confrontational.
|
|
98
|
+
|
|
99
|
+
### Border Radius Recipes
|
|
100
|
+
|
|
101
|
+
| Shape Name | CSS `border-radius` | Tailwind (approximate) | Used On |
|
|
102
|
+
|----------------------|----------------------------------------|-----------------------------------------------|-------------------------------|
|
|
103
|
+
| **Slash Card** | `0 24px 0 24px` | `rounded-none rounded-tr-3xl rounded-bl-3xl` | Cards, modals, dialogs |
|
|
104
|
+
| **Tab Shape** | `16px 16px 0 0` | `rounded-t-2xl rounded-b-none` | Tab bars, header sections |
|
|
105
|
+
| **Pill-Left** | `9999px 4px 4px 9999px` | `rounded-l-full rounded-r-sm` | Primary buttons |
|
|
106
|
+
| **Pill-Right** | `4px 9999px 9999px 4px` | `rounded-l-sm rounded-r-full` | Secondary / ghost buttons |
|
|
107
|
+
| **Notch Top-Left** | `24px 0 0 0` | `rounded-tl-3xl` | Sidebar active indicator |
|
|
108
|
+
| **Bottom-Heavy** | `0 0 16px 16px` | `rounded-b-2xl rounded-t-none` | Dropdown menus, popovers |
|
|
109
|
+
| **Sharp** | `0` | `rounded-none` | Inputs, table cells, badges |
|
|
110
|
+
|
|
111
|
+
### Thick Borders (The Brutalist Signature)
|
|
112
|
+
|
|
113
|
+
Every interactive element has a visible, thick black border. No subtle 1px hairlines here.
|
|
114
|
+
|
|
115
|
+
| Element | Border | CSS |
|
|
116
|
+
|----------------|---------------------------------------------|---------------------------------------|
|
|
117
|
+
| Cards | 3px solid black | `border-[3px] border-neutral-950` |
|
|
118
|
+
| Buttons | 3px solid black | `border-[3px] border-neutral-950` |
|
|
119
|
+
| Inputs | 3px solid black | `border-[3px] border-neutral-950` |
|
|
120
|
+
| Sidebar | Right edge: 3px solid black | `border-r-[3px] border-neutral-950` |
|
|
121
|
+
| Table | 2px solid black on all cells | `border-2 border-neutral-950` |
|
|
122
|
+
| Badges | 2px solid black | `border-2 border-neutral-950` |
|
|
123
|
+
|
|
124
|
+
### Hard Offset Shadows (No Blur, No Subtlety)
|
|
125
|
+
|
|
126
|
+
The defining neobrutalist shadow: a solid-color rectangle offset from the element. Zero blur. Creates a tactile, sticker-like, pseudo-3D effect.
|
|
127
|
+
|
|
128
|
+
| Element | Shadow CSS | Tailwind Custom | Notes |
|
|
129
|
+
|----------------|---------------------------------------------|----------------------------------------|-------------------------------|
|
|
130
|
+
| Cards | `box-shadow: 6px 6px 0 0 #09090b` | `shadow-[6px_6px_0_0_#09090b]` | Strong 3D pop |
|
|
131
|
+
| Buttons (rest) | `box-shadow: 4px 4px 0 0 #09090b` | `shadow-[4px_4px_0_0_#09090b]` | Smaller offset |
|
|
132
|
+
| Buttons (hover)| `box-shadow: 2px 2px 0 0 #09090b` | `shadow-[2px_2px_0_0_#09090b]` | Shrinks on hover (pressed) |
|
|
133
|
+
| Buttons (active)| `box-shadow: 0 0 0 0 #09090b` | `shadow-none` | Fully pressed down |
|
|
134
|
+
| Inputs (focus) | `box-shadow: 4px 4px 0 0 #a3e635` | `shadow-[4px_4px_0_0_#a3e635]` | Lime shadow on focus |
|
|
135
|
+
| Modals | `box-shadow: 8px 8px 0 0 #09090b` | `shadow-[8px_8px_0_0_#09090b]` | Maximum depth for overlays |
|
|
136
|
+
|
|
137
|
+
### Button Press Animation
|
|
138
|
+
|
|
139
|
+
Buttons translate down + right on hover/active to match the shrinking shadow, creating a physical "press" effect:
|
|
140
|
+
|
|
141
|
+
```css
|
|
142
|
+
/* Rest state */
|
|
143
|
+
.btn-brutal {
|
|
144
|
+
box-shadow: 4px 4px 0 0 #09090b;
|
|
145
|
+
transform: translate(0, 0);
|
|
146
|
+
transition: all 0.1s ease;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* Hover */
|
|
150
|
+
.btn-brutal:hover {
|
|
151
|
+
box-shadow: 2px 2px 0 0 #09090b;
|
|
152
|
+
transform: translate(2px, 2px);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/* Active (pressed) */
|
|
156
|
+
.btn-brutal:active {
|
|
157
|
+
box-shadow: 0 0 0 0 #09090b;
|
|
158
|
+
transform: translate(4px, 4px);
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Component Styling Notes
|
|
165
|
+
|
|
166
|
+
### Sidebar
|
|
167
|
+
|
|
168
|
+
- **Off-white background** (`bg-stone-50`) with a thick right border (`border-r-[3px] border-neutral-950`)
|
|
169
|
+
- Navigation items use Space Grotesk Bold at 18px -- bigger than typical admin sidebars
|
|
170
|
+
- **Active item**: `bg-lime-300` fill with `rounded-tl-3xl` (only top-left corner rounded) + `border-l-4 border-neutral-950` left accent
|
|
171
|
+
- **Hover item**: `bg-stone-100` with the same asymmetric radius
|
|
172
|
+
- Section labels: JetBrains Mono, UPPERCASE, letterspaced, `text-stone-400`, 13px
|
|
173
|
+
- Bottom of sidebar: thick horizontal rule (`border-t-[3px] border-neutral-950`) separating user profile area
|
|
174
|
+
- Sidebar width: **280px** (wider than typical 240px to accommodate larger text)
|
|
175
|
+
- Inspired by: Arc Browser's bold colored sidebar borders, Notion's content hierarchy
|
|
176
|
+
|
|
177
|
+
### Buttons
|
|
178
|
+
|
|
179
|
+
- **Primary CTA**: `bg-lime-400 text-neutral-950 border-[3px] border-neutral-950` with `rounded-l-full rounded-r-sm` (pill on left, sharp on right). Uses Space Grotesk Bold UPPERCASE. Hard offset shadow.
|
|
180
|
+
- **Secondary**: `bg-neutral-50 text-neutral-950 border-[3px] border-neutral-950` with `rounded-l-sm rounded-r-full` (sharp on left, pill on right -- mirrors primary). Hard offset shadow.
|
|
181
|
+
- **Destructive**: `bg-pink-500 text-white border-[3px] border-neutral-950` with same pill-left shape as primary.
|
|
182
|
+
- **Ghost**: `bg-transparent text-neutral-950 border-[3px] border-neutral-950` with `rounded-none`. No shadow.
|
|
183
|
+
- All buttons: `px-8 py-3` (generous padding), min-height 48px
|
|
184
|
+
- Press animation on all buttons with shadows (see animation section above)
|
|
185
|
+
|
|
186
|
+
### Cards
|
|
187
|
+
|
|
188
|
+
- `bg-white border-[3px] border-neutral-950` with **Slash Card** corners (`rounded-none rounded-tr-3xl rounded-bl-3xl`)
|
|
189
|
+
- Hard offset shadow: `shadow-[6px_6px_0_0_#09090b]`
|
|
190
|
+
- Card header: Space Grotesk Bold, 22px, with a thick bottom border (`border-b-[3px] border-neutral-950`) separating header from body
|
|
191
|
+
- Card body: generous padding `p-8` (32px)
|
|
192
|
+
- **Stat cards**: Background fill `bg-lime-300` with enormous 60px stat numbers in Space Grotesk Bold. Slash Card shape with black shadow.
|
|
193
|
+
- Hover state: shadow shifts to `shadow-[4px_4px_0_0_#09090b]` + `translate(2px, 2px)` -- subtle press effect on cards too
|
|
194
|
+
- No gradient. No subtle shadows. No soft edges. Raw.
|
|
195
|
+
|
|
196
|
+
### Tables / Data Grids
|
|
197
|
+
|
|
198
|
+
- **Full grid lines**: Every cell has `border-2 border-neutral-950`. This is intentional -- brutalism shows structure.
|
|
199
|
+
- Header row: `bg-neutral-950 text-white` with Space Grotesk Bold. Inverted color scheme for maximum contrast.
|
|
200
|
+
- Header text: UPPERCASE, letterspaced (`tracking-wider`)
|
|
201
|
+
- Body cells: JetBrains Mono Regular, 16px. Monospaced data alignment is a feature, not a bug.
|
|
202
|
+
- Alternating rows: `even:bg-stone-50` -- subtle warmth
|
|
203
|
+
- Row hover: `bg-lime-100` highlight
|
|
204
|
+
- Action column: icon buttons with `border-2 border-neutral-950 rounded-none` and hover `bg-lime-300`
|
|
205
|
+
- Sort indicators: `text-pink-500` arrows
|
|
206
|
+
|
|
207
|
+
### Form Inputs
|
|
208
|
+
|
|
209
|
+
- **Sharp corners** (`rounded-none`) -- inputs are intentionally angular while cards are asymmetric
|
|
210
|
+
- `border-[3px] border-neutral-950` thick black border
|
|
211
|
+
- Focus state: `border-lime-500` + `shadow-[4px_4px_0_0_#a3e635]` (lime offset shadow appears on focus)
|
|
212
|
+
- Placeholder text: JetBrains Mono, `text-stone-400`
|
|
213
|
+
- Labels: JetBrains Mono Medium, UPPERCASE, `tracking-wider`, positioned above input with `mb-2`
|
|
214
|
+
- Input padding: `px-4 py-3` (generous)
|
|
215
|
+
- Input text: JetBrains Mono Regular, 16px
|
|
216
|
+
- Select dropdowns: sharp corners with `border-[3px]`, dropdown panel uses **Bottom-Heavy** radius (`rounded-b-2xl rounded-t-none`)
|
|
217
|
+
- Checkbox / Radio: replaced with `w-6 h-6` squares/circles with `border-[3px] border-neutral-950`, checked fill `bg-lime-400`
|
|
218
|
+
- Error state: `border-pink-500` + `shadow-[4px_4px_0_0_#ec4899]` (pink offset shadow)
|
|
219
|
+
|
|
220
|
+
### Badges / Tags
|
|
221
|
+
|
|
222
|
+
- **Completely sharp** (`rounded-none`) -- no pills, no rounded corners
|
|
223
|
+
- `border-2 border-neutral-950 px-3 py-1`
|
|
224
|
+
- Primary: `bg-lime-300 text-neutral-950`
|
|
225
|
+
- Danger: `bg-pink-500 text-white`
|
|
226
|
+
- Neutral: `bg-stone-200 text-neutral-950`
|
|
227
|
+
- Info: `bg-sky-300 text-neutral-950`
|
|
228
|
+
- Font: JetBrains Mono Medium, UPPERCASE, 13px, `tracking-wider`
|
|
229
|
+
- Look like tiny labels / stamps -- deliberately anti-pill
|
|
230
|
+
|
|
231
|
+
### Notifications / Toasts
|
|
232
|
+
|
|
233
|
+
- `bg-white border-[3px] border-neutral-950` with hard offset shadow
|
|
234
|
+
- **Tab Shape** radius (`rounded-t-2xl rounded-b-none`) -- rounded top, flat bottom
|
|
235
|
+
- Left color bar: `border-l-[6px]` (extra thick) in semantic color
|
|
236
|
+
- Success: `border-l-[6px] border-lime-400`
|
|
237
|
+
- Error: `border-l-[6px] border-pink-500`
|
|
238
|
+
- Warning: `border-l-[6px] border-amber-400`
|
|
239
|
+
- Info: `border-l-[6px] border-sky-400`
|
|
240
|
+
- Toast text: JetBrains Mono, body size
|
|
241
|
+
|
|
242
|
+
### Modals / Dialogs
|
|
243
|
+
|
|
244
|
+
- **Slash Card** shape with extra-heavy shadow: `shadow-[8px_8px_0_0_#09090b]`
|
|
245
|
+
- `border-[3px] border-neutral-950`
|
|
246
|
+
- Overlay: `bg-neutral-950/60` (dark, high opacity)
|
|
247
|
+
- Modal header: Space Grotesk Bold 32px with bottom border
|
|
248
|
+
- Close button: `rounded-none border-[3px] border-neutral-950` square button in top-right
|
|
249
|
+
|
|
250
|
+
### Pagination
|
|
251
|
+
|
|
252
|
+
- Square buttons (`rounded-none`) with `border-2 border-neutral-950`
|
|
253
|
+
- Active page: `bg-neutral-950 text-white`
|
|
254
|
+
- Hover: `bg-lime-300`
|
|
255
|
+
- JetBrains Mono for page numbers
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Dark Mode Adjustments
|
|
260
|
+
|
|
261
|
+
| Element | Light Mode | Dark Mode |
|
|
262
|
+
|----------------------|------------------------------------|-----------------------------------------|
|
|
263
|
+
| Page background | `stone-50` (#fafaf9) | `neutral-950` (#09090b) |
|
|
264
|
+
| Card background | `white` | `neutral-900` (#171717) |
|
|
265
|
+
| Card border | `neutral-950` (3px) | `neutral-300` (3px) -- inverted borders |
|
|
266
|
+
| Hard shadow | `#09090b` (black) | `#d6d3d1` (stone-300) -- light shadows |
|
|
267
|
+
| Sidebar bg | `stone-50` | `neutral-900` |
|
|
268
|
+
| Sidebar border | `neutral-950` right border | `neutral-300` right border |
|
|
269
|
+
| Primary text | `neutral-950` | `stone-100` |
|
|
270
|
+
| Body text | `neutral-700` | `stone-300` |
|
|
271
|
+
| Heading text | `neutral-950` | `white` |
|
|
272
|
+
| Accent (lime) | `lime-400` | `lime-300` (slightly lighter) |
|
|
273
|
+
| Secondary (pink) | `pink-500` | `pink-400` |
|
|
274
|
+
| Table header | `neutral-950 bg, white text` | `neutral-800 bg, stone-100 text` |
|
|
275
|
+
| Input focus shadow | `#a3e635` (lime) | `#bef264` (lighter lime) |
|
|
276
|
+
| Active nav item | `bg-lime-300` | `bg-lime-400/20` (translucent) |
|
|
277
|
+
|
|
278
|
+
Key dark mode principle: **Invert the shadows.** In light mode, shadows are black on white. In dark mode, shadows become light stone on dark backgrounds, maintaining the same hard offset aesthetic but with inverted contrast.
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Spacing & Layout Principles
|
|
283
|
+
|
|
284
|
+
| Aspect | Value | Notes |
|
|
285
|
+
|----------------------|------------------------------------|-----------------------------------------|
|
|
286
|
+
| Page padding | `p-10` (40px) | More breathing room than typical admin |
|
|
287
|
+
| Card gap | `gap-8` (32px) | Generous spacing between cards |
|
|
288
|
+
| Card inner padding | `p-8` (32px) | Spacious card interiors |
|
|
289
|
+
| Section gap | `mt-12` (48px) | Clear section separation |
|
|
290
|
+
| Sidebar width | 280px | Wider for larger nav text |
|
|
291
|
+
| Content max-width | 1400px | Wide content area |
|
|
292
|
+
| Grid columns | 12-column grid | Standard but with bigger gutters |
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## Mood & Inspiration
|
|
297
|
+
|
|
298
|
+
### Visual Identity Keywords
|
|
299
|
+
Raw, tactile, confrontational, grid-structured, high-contrast, anti-corporate, expressive, physical
|
|
300
|
+
|
|
301
|
+
### Inspiration References
|
|
302
|
+
|
|
303
|
+
- **Arc Browser** -- The thick colored border around the entire UI, bold sidebar design, and per-Space theming. Arc proves thick borders can feel premium, not clunky. Our sidebar takes Arc's "bold border as identity" concept and pushes it further with asymmetric corner shapes.
|
|
304
|
+
|
|
305
|
+
- **Raycast** -- The confidence of a focused, opinionated interface. Bold iconography with thicker strokes. Our oversized type and high-contrast palette share Raycast's "designed with conviction" ethos.
|
|
306
|
+
|
|
307
|
+
- **Notion** -- Content hierarchy through typography scale rather than decorative elements. Our oversized headings (48px page titles) and monospaced body text create hierarchy through pure typography, similar to how Notion lets content structure speak for itself.
|
|
308
|
+
|
|
309
|
+
- **Linear** -- Strict grid adherence, high contrast, minimal decoration. Linear's dark mode with vivid accent colors influenced our lime-on-black dark mode palette. The hard offset shadows are the brutalist inversion of Linear's subtle depth.
|
|
310
|
+
|
|
311
|
+
- **Neobrutalist Web Movement** -- The broader trend of thick black borders, offset shadows, bright accent colors, and monospaced fonts in web design. Sites like Gumroad's redesign and various indie SaaS tools pioneered this aesthetic.
|
|
312
|
+
|
|
313
|
+
### What Makes This Theme "Asymmetric Brutalist"
|
|
314
|
+
|
|
315
|
+
1. **Asymmetric corners** -- No element has four matching corners. Cards slash diagonally (top-right + bottom-left rounded), buttons are pill on one side and sharp on the other, dropdowns round at the bottom only. This is the single most distinctive element -- it makes every component feel intentionally off-balance.
|
|
316
|
+
|
|
317
|
+
2. **Hard offset shadows** -- Zero-blur, solid-color shadows create a tactile, sticker/stamp effect. Elements feel like they are physically stacked on the page. The press animation reinforces this physical metaphor.
|
|
318
|
+
|
|
319
|
+
3. **Thick black borders on everything** -- 3px black borders on every interactive element give the interface a visible skeleton. Nothing is hidden or subtle. The structure is the decoration.
|
|
320
|
+
|
|
321
|
+
4. **Monospaced body text** -- Using JetBrains Mono for all body text is a deliberately transgressive choice for an admin panel. It references terminal output and raw HTML, reinforcing the brutalist ethos while providing excellent data alignment in tables.
|
|
322
|
+
|
|
323
|
+
5. **Oversized typography** -- 48px page titles and 60px stat numbers are 2-3x larger than conventional admin panels. The typography IS the layout. It demands attention and creates hierarchy through sheer scale.
|
|
324
|
+
|
|
325
|
+
6. **Electric color accents** -- Lime and hot pink against black/white create maximum visual voltage. These colors are not "professional" in the traditional sense -- they are aggressive, youthful, and impossible to ignore.
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## NuxtUI 4 Configuration Hint
|
|
330
|
+
|
|
331
|
+
```typescript
|
|
332
|
+
// In app.config.ts or nuxt.config.ts
|
|
333
|
+
export default defineAppConfig({
|
|
334
|
+
ui: {
|
|
335
|
+
colors: {
|
|
336
|
+
primary: 'lime',
|
|
337
|
+
secondary: 'pink',
|
|
338
|
+
neutral: 'stone'
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
})
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
Note: NuxtUI 4's color system will handle the primary lime and secondary pink mapping. The thick borders, hard shadows, and asymmetric radii will need custom CSS classes or Tailwind utility composition, as they go beyond the default NuxtUI component styling. The button press animation requires custom transition utilities.
|
|
345
|
+
|
|
346
|
+
### Key Custom CSS Required
|
|
347
|
+
|
|
348
|
+
```css
|
|
349
|
+
/* Brutalist shadow utilities */
|
|
350
|
+
.shadow-brutal { box-shadow: 6px 6px 0 0 #09090b; }
|
|
351
|
+
.shadow-brutal-sm { box-shadow: 4px 4px 0 0 #09090b; }
|
|
352
|
+
.shadow-brutal-hover { box-shadow: 2px 2px 0 0 #09090b; }
|
|
353
|
+
.shadow-brutal-lime { box-shadow: 4px 4px 0 0 #a3e635; }
|
|
354
|
+
.shadow-brutal-pink { box-shadow: 4px 4px 0 0 #ec4899; }
|
|
355
|
+
.shadow-brutal-lg { box-shadow: 8px 8px 0 0 #09090b; }
|
|
356
|
+
|
|
357
|
+
/* Dark mode inverted shadows */
|
|
358
|
+
.dark .shadow-brutal { box-shadow: 6px 6px 0 0 #d6d3d1; }
|
|
359
|
+
.dark .shadow-brutal-sm { box-shadow: 4px 4px 0 0 #d6d3d1; }
|
|
360
|
+
.dark .shadow-brutal-hover { box-shadow: 2px 2px 0 0 #d6d3d1; }
|
|
361
|
+
|
|
362
|
+
/* Asymmetric card shape */
|
|
363
|
+
.shape-slash { border-radius: 0 24px 0 24px; }
|
|
364
|
+
.shape-tab { border-radius: 16px 16px 0 0; }
|
|
365
|
+
.shape-pill-left { border-radius: 9999px 4px 4px 9999px; }
|
|
366
|
+
.shape-pill-right { border-radius: 4px 9999px 9999px 4px; }
|
|
367
|
+
.shape-notch-tl { border-radius: 24px 0 0 0; }
|
|
368
|
+
.shape-bottom-heavy { border-radius: 0 0 16px 16px; }
|
|
369
|
+
|
|
370
|
+
/* Button press animation */
|
|
371
|
+
.btn-brutal {
|
|
372
|
+
transition: transform 0.1s ease, box-shadow 0.1s ease;
|
|
373
|
+
}
|
|
374
|
+
.btn-brutal:hover {
|
|
375
|
+
transform: translate(2px, 2px);
|
|
376
|
+
}
|
|
377
|
+
.btn-brutal:active {
|
|
378
|
+
transform: translate(4px, 4px);
|
|
379
|
+
box-shadow: 0 0 0 0 #09090b !important;
|
|
380
|
+
}
|
|
381
|
+
```
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
# Bold & Modern Theme
|
|
2
|
+
|
|
3
|
+
> A high-energy admin panel theme with a confident visual identity. Deep violet primary, warm amber accents, and a distinctive heading font create an interface that feels cutting-edge and alive.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Color Palette
|
|
8
|
+
|
|
9
|
+
### Primary: Violet (Tailwind `violet`)
|
|
10
|
+
|
|
11
|
+
The heart of the theme. Deep, saturated violet conveys creativity, innovation, and premium quality. Used for the sidebar, primary buttons, active states, and key navigation elements.
|
|
12
|
+
|
|
13
|
+
| Token | Tailwind Class | Hex | Usage |
|
|
14
|
+
|------------------|------------------|-----------|----------------------------------|
|
|
15
|
+
| primary-50 | `violet-50` | #f5f3ff | Subtle tinted backgrounds |
|
|
16
|
+
| primary-100 | `violet-100` | #ede9fe | Hover states on light surfaces |
|
|
17
|
+
| primary-200 | `violet-200` | #ddd6fe | Light borders, dividers |
|
|
18
|
+
| primary-300 | `violet-300` | #c4b5fd | Disabled / muted primary |
|
|
19
|
+
| primary-400 | `violet-400` | #a78bfa | Secondary buttons, tags |
|
|
20
|
+
| **primary-500** | **`violet-500`** | **#8b5cf6** | **Main primary color** |
|
|
21
|
+
| **primary-600** | **`violet-600`** | **#7c3aed** | **Primary hover / sidebar bg** |
|
|
22
|
+
| primary-700 | `violet-700` | #6d28d9 | Active / pressed states |
|
|
23
|
+
| primary-800 | `violet-800` | #5b21b6 | Dark sidebar variant |
|
|
24
|
+
| primary-900 | `violet-900` | #4c1d95 | Deep backgrounds, overlays |
|
|
25
|
+
|
|
26
|
+
### Secondary / Accent: Amber (Tailwind `amber`)
|
|
27
|
+
|
|
28
|
+
Warm amber creates a striking contrast against violet. Used sparingly for call-to-action highlights, notification badges, status indicators, and interactive emphasis.
|
|
29
|
+
|
|
30
|
+
| Token | Tailwind Class | Hex | Usage |
|
|
31
|
+
|------------------|------------------|-----------|----------------------------------|
|
|
32
|
+
| accent-50 | `amber-50` | #fffbeb | Warning / accent backgrounds |
|
|
33
|
+
| accent-100 | `amber-100` | #fef3c7 | Light badges |
|
|
34
|
+
| accent-200 | `amber-200` | #fde68a | Highlight backgrounds |
|
|
35
|
+
| accent-300 | `amber-300` | #fcd34d | Secondary tag fills |
|
|
36
|
+
| **accent-400** | **`amber-400`** | **#fbbf24** | **Main accent color** |
|
|
37
|
+
| **accent-500** | **`amber-500`** | **#f59e0b** | **CTA buttons, badges** |
|
|
38
|
+
| accent-600 | `amber-600` | #d97706 | Hover on accent elements |
|
|
39
|
+
| accent-700 | `amber-700` | #b45309 | Active / pressed accent |
|
|
40
|
+
|
|
41
|
+
### Neutral: Slate (Tailwind `slate`)
|
|
42
|
+
|
|
43
|
+
Slate has a subtle blue undertone that harmonizes naturally with violet, preventing the neutral palette from feeling disconnected.
|
|
44
|
+
|
|
45
|
+
| Token | Tailwind Class | Hex | Usage |
|
|
46
|
+
|------------------|------------------|-----------|----------------------------------|
|
|
47
|
+
| neutral-50 | `slate-50` | #f8fafc | Page background (light mode) |
|
|
48
|
+
| neutral-100 | `slate-100` | #f1f5f9 | Card backgrounds |
|
|
49
|
+
| neutral-200 | `slate-200` | #e2e8f0 | Borders, dividers |
|
|
50
|
+
| neutral-300 | `slate-300` | #cbd5e1 | Disabled text, placeholders |
|
|
51
|
+
| neutral-400 | `slate-400` | #94a3b8 | Muted / secondary text |
|
|
52
|
+
| neutral-500 | `slate-500` | #64748b | Body text (secondary) |
|
|
53
|
+
| neutral-700 | `slate-700` | #334155 | Body text (primary) |
|
|
54
|
+
| neutral-800 | `slate-800` | #1e293b | Headings on light bg |
|
|
55
|
+
| neutral-900 | `slate-900` | #0f172a | High-contrast text |
|
|
56
|
+
| neutral-950 | `slate-950` | #020617 | Dark mode backgrounds |
|
|
57
|
+
|
|
58
|
+
### Semantic Colors
|
|
59
|
+
|
|
60
|
+
| Purpose | Color | Hex | Notes |
|
|
61
|
+
|-----------|-------------------|-----------|----------------------------------|
|
|
62
|
+
| Success | `emerald-500` | #10b981 | Confirmations, positive states |
|
|
63
|
+
| Warning | `amber-500` | #f59e0b | Shares accent color intentionally|
|
|
64
|
+
| Error | `rose-500` | #f43f5e | Destructive actions, validation |
|
|
65
|
+
| Info | `violet-400` | #a78bfa | Informational, ties to primary |
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Typography
|
|
70
|
+
|
|
71
|
+
### Font Pairing: Space Grotesk + Inter
|
|
72
|
+
|
|
73
|
+
**Heading Font: Space Grotesk** (Google Fonts)
|
|
74
|
+
- Style: Geometric grotesque with distinctive character - slightly quirky letterforms with personality
|
|
75
|
+
- Weights: 500 (Medium) for subheadings, 700 (Bold) for main headings
|
|
76
|
+
- Use for: Page titles, section headers, sidebar navigation labels, card headers, stat numbers
|
|
77
|
+
- Character: Technical, confident, modern - originated from Space Mono, giving it a subtle techy edge
|
|
78
|
+
|
|
79
|
+
**Body Font: Inter** (Google Fonts)
|
|
80
|
+
- Style: Clean, highly legible sans-serif designed specifically for screens
|
|
81
|
+
- Weights: 400 (Regular) for body, 500 (Medium) for labels/emphasis, 600 (Semi-bold) for strong emphasis
|
|
82
|
+
- Use for: Body text, form labels, table content, descriptions, metadata
|
|
83
|
+
- Character: Neutral, professional, extremely readable at small sizes
|
|
84
|
+
|
|
85
|
+
### Google Fonts Import
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Space+Grotesk:wght@500;700&display=swap
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Type Scale
|
|
92
|
+
|
|
93
|
+
| Element | Font | Weight | Size (rem) | Tracking |
|
|
94
|
+
|--------------------|----------------|--------|------------|--------------|
|
|
95
|
+
| Page title (h1) | Space Grotesk | 700 | 1.875 | -0.025em |
|
|
96
|
+
| Section title (h2) | Space Grotesk | 700 | 1.5 | -0.02em |
|
|
97
|
+
| Card header (h3) | Space Grotesk | 500 | 1.125 | -0.01em |
|
|
98
|
+
| Stat number | Space Grotesk | 700 | 2.25 | -0.03em |
|
|
99
|
+
| Body text | Inter | 400 | 0.875 | 0 |
|
|
100
|
+
| Label | Inter | 500 | 0.75 | 0.025em |
|
|
101
|
+
| Small / caption | Inter | 400 | 0.75 | 0.01em |
|
|
102
|
+
| Nav item | Space Grotesk | 500 | 0.875 | 0 |
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Component Styling Notes
|
|
107
|
+
|
|
108
|
+
### Sidebar
|
|
109
|
+
|
|
110
|
+
- **Colored sidebar** with a violet-to-indigo gradient: `bg-gradient-to-b from-violet-600 to-violet-900`
|
|
111
|
+
- White text on the sidebar with `text-white/80` for items and `text-white` for active
|
|
112
|
+
- Active nav item: pill-shaped highlight with `bg-white/15` backdrop + left accent border in amber (`border-l-2 border-amber-400`)
|
|
113
|
+
- Sidebar icons: `text-white/60`, active: `text-amber-400`
|
|
114
|
+
- Logo area: white logo mark against the dark violet, with Space Grotesk app title
|
|
115
|
+
|
|
116
|
+
### Buttons
|
|
117
|
+
|
|
118
|
+
- **Primary**: `bg-violet-600 hover:bg-violet-700 text-white` with `rounded-lg` (8px radius)
|
|
119
|
+
- **Accent/CTA**: `bg-amber-500 hover:bg-amber-600 text-slate-900` - used for high-priority actions like "Create New", "Save"
|
|
120
|
+
- **Ghost**: `text-violet-600 hover:bg-violet-50` with no border
|
|
121
|
+
- **Destructive**: `bg-rose-500 hover:bg-rose-600 text-white`
|
|
122
|
+
- All buttons use Space Grotesk at font-weight 500 for a distinctive feel
|
|
123
|
+
- Add subtle `shadow-sm` on primary and accent buttons for depth
|
|
124
|
+
|
|
125
|
+
### Cards
|
|
126
|
+
|
|
127
|
+
- `bg-white rounded-xl shadow-sm border border-slate-200`
|
|
128
|
+
- Card headers can use a thin top accent border: `border-t-2 border-violet-500`
|
|
129
|
+
- Stat cards: large Space Grotesk numbers in `text-violet-600`, with a subtle `bg-violet-50` background
|
|
130
|
+
- Hover state: `hover:shadow-md` with smooth transition
|
|
131
|
+
|
|
132
|
+
### Tables / Data Grids
|
|
133
|
+
|
|
134
|
+
- Header row: `bg-violet-50 text-violet-900` with Space Grotesk font-weight 500
|
|
135
|
+
- Alternating row backgrounds: `even:bg-slate-50`
|
|
136
|
+
- Row hover: `hover:bg-violet-50/50`
|
|
137
|
+
- Action column icons in `text-violet-500`
|
|
138
|
+
- Sort indicators in `text-amber-500`
|
|
139
|
+
|
|
140
|
+
### Form Inputs
|
|
141
|
+
|
|
142
|
+
- `rounded-lg border-slate-300 focus:border-violet-500 focus:ring-2 focus:ring-violet-500/20`
|
|
143
|
+
- Labels: Inter medium (500) in `text-slate-700`, uppercase tracking for field group labels
|
|
144
|
+
- Select dropdowns and date pickers follow the same violet focus ring pattern
|
|
145
|
+
|
|
146
|
+
### Badges / Tags
|
|
147
|
+
|
|
148
|
+
- Primary: `bg-violet-100 text-violet-700 rounded-full`
|
|
149
|
+
- Accent: `bg-amber-100 text-amber-800 rounded-full`
|
|
150
|
+
- Neutral: `bg-slate-100 text-slate-600 rounded-full`
|
|
151
|
+
- Use Space Grotesk at font-weight 500 for badge text
|
|
152
|
+
|
|
153
|
+
### Notifications / Toasts
|
|
154
|
+
|
|
155
|
+
- Success: left border accent `border-l-4 border-emerald-500` on white card
|
|
156
|
+
- Error: left border accent `border-l-4 border-rose-500`
|
|
157
|
+
- Info: left border accent `border-l-4 border-violet-500`
|
|
158
|
+
|
|
159
|
+
### Gradient Accents
|
|
160
|
+
|
|
161
|
+
Apply subtle gradients in key places for a bold, premium feel:
|
|
162
|
+
- Page header background: `bg-gradient-to-r from-violet-600 to-violet-500` (optional hero area)
|
|
163
|
+
- Loading skeleton shimmer: violet-tinted
|
|
164
|
+
- Progress bars: `bg-gradient-to-r from-violet-500 to-amber-400` for a striking two-tone effect
|
|
165
|
+
|
|
166
|
+
### Border Radius Strategy
|
|
167
|
+
|
|
168
|
+
Use larger, softer radii throughout for a modern feel:
|
|
169
|
+
- Buttons: `rounded-lg` (8px)
|
|
170
|
+
- Cards: `rounded-xl` (12px)
|
|
171
|
+
- Inputs: `rounded-lg` (8px)
|
|
172
|
+
- Badges: `rounded-full` (pill)
|
|
173
|
+
- Sidebar nav items: `rounded-lg` (8px)
|
|
174
|
+
- Modals/Dialogs: `rounded-2xl` (16px)
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Dark Mode Adjustments
|
|
179
|
+
|
|
180
|
+
| Element | Light Mode | Dark Mode |
|
|
181
|
+
|------------------|-------------------------------|---------------------------------|
|
|
182
|
+
| Page background | `slate-50` | `slate-950` |
|
|
183
|
+
| Card background | `white` | `slate-900` |
|
|
184
|
+
| Card border | `slate-200` | `slate-800` |
|
|
185
|
+
| Sidebar | `violet-600 to violet-900` | `slate-900` with violet accents |
|
|
186
|
+
| Primary text | `slate-700` | `slate-200` |
|
|
187
|
+
| Heading text | `slate-800` | `white` |
|
|
188
|
+
| Primary button | `violet-600` | `violet-500` |
|
|
189
|
+
| Accent button | `amber-500` | `amber-400` |
|
|
190
|
+
| Table header | `violet-50` | `violet-950/50` |
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Mood & Inspiration
|
|
195
|
+
|
|
196
|
+
### Visual Identity Keywords
|
|
197
|
+
Confident, energetic, innovative, premium, tech-forward, striking
|
|
198
|
+
|
|
199
|
+
### Inspiration References
|
|
200
|
+
- **Pollux UI** - Purple-primary admin dashboard conveying creativity and innovation while maintaining professionalism
|
|
201
|
+
- **Modern fintech dashboards** - Deep dark backgrounds with vivid violet accents, smooth gradients, bold typography, and clear modular structure
|
|
202
|
+
- **Stripe Dashboard** - Clean card-based layout with confident use of a signature color throughout the interface
|
|
203
|
+
- **Linear** - Bold use of purple/violet as a primary color in a professional tool, proving saturated colors work in productivity software
|
|
204
|
+
- **Vercel Dashboard** - Strong typographic hierarchy with a distinctive sans-serif, minimal decoration, letting color and type do the work
|
|
205
|
+
|
|
206
|
+
### What Makes This Theme "Bold"
|
|
207
|
+
1. **Saturated primary color** - Violet is inherently eye-catching; not a safe blue or gray
|
|
208
|
+
2. **Colored sidebar** - Instead of neutral gray sidebar, the gradient violet sidebar is a strong design statement
|
|
209
|
+
3. **Warm accent contrast** - Amber against violet creates high-energy complementary tension
|
|
210
|
+
4. **Distinctive heading font** - Space Grotesk has enough personality to be memorable without sacrificing readability
|
|
211
|
+
5. **Gradient touches** - Subtle gradients in the sidebar, progress bars, and optional hero areas add depth and movement
|
|
212
|
+
6. **Generous border radius** - Larger radii feel modern and approachable, softening the boldness
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## NuxtUI 4 Configuration Hint
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
// In app.config.ts or nuxt.config.ts
|
|
220
|
+
export default defineAppConfig({
|
|
221
|
+
ui: {
|
|
222
|
+
colors: {
|
|
223
|
+
primary: 'violet',
|
|
224
|
+
secondary: 'amber',
|
|
225
|
+
neutral: 'slate'
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
})
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
This maps directly to NuxtUI 4's color system, making all `UButton`, `UBadge`, `UInput`, etc. components automatically use the violet/amber/slate palette.
|