@champpaba/claude-agent-kit 3.0.2 → 3.2.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/.claude/CHANGELOG.md +707 -0
- package/.claude/CLAUDE.md +128 -613
- package/.claude/agents/_shared/pre-work-checklist.md +108 -7
- package/.claude/commands/cdev.md +36 -0
- package/.claude/commands/csetup.md +292 -1791
- package/.claude/commands/cview.md +364 -364
- package/.claude/contexts/design/accessibility.md +611 -611
- package/.claude/contexts/design/layout.md +400 -400
- package/.claude/contexts/design/responsive.md +551 -551
- package/.claude/contexts/design/shadows.md +522 -522
- package/.claude/contexts/design/typography.md +465 -465
- package/.claude/contexts/domain/README.md +164 -164
- package/.claude/contexts/patterns/agent-coordination.md +388 -388
- package/.claude/contexts/patterns/development-principles.md +513 -513
- package/.claude/contexts/patterns/error-handling.md +478 -478
- package/.claude/contexts/patterns/logging.md +424 -424
- package/.claude/contexts/patterns/tdd-classification.md +516 -516
- package/.claude/contexts/patterns/testing.md +413 -413
- package/.claude/lib/README.md +3 -3
- package/.claude/lib/detailed-guides/taskmaster-analysis.md +1 -1
- package/.claude/lib/task-analyzer.md +144 -0
- package/.claude/lib/tdd-workflow.md +2 -1
- package/.claude/lib/validation-gates.md +484 -484
- package/.claude/settings.local.json +42 -42
- package/.claude/templates/PROJECT_STATUS.template.yml +16 -41
- package/.claude/templates/context-template.md +45 -45
- package/.claude/templates/flags-template.json +42 -42
- package/.claude/templates/phases-sections/accessibility-test.md +17 -17
- package/.claude/templates/phases-sections/api-design.md +37 -37
- package/.claude/templates/phases-sections/backend-tests.md +16 -16
- package/.claude/templates/phases-sections/backend.md +37 -37
- package/.claude/templates/phases-sections/business-logic-validation.md +16 -16
- package/.claude/templates/phases-sections/component-tests.md +17 -17
- package/.claude/templates/phases-sections/contract-backend.md +16 -16
- package/.claude/templates/phases-sections/contract-frontend.md +16 -16
- package/.claude/templates/phases-sections/database.md +35 -35
- package/.claude/templates/phases-sections/e2e-tests.md +16 -16
- package/.claude/templates/phases-sections/fix-implementation.md +17 -17
- package/.claude/templates/phases-sections/frontend-integration.md +18 -18
- package/.claude/templates/phases-sections/manual-flow-test.md +15 -15
- package/.claude/templates/phases-sections/manual-ux-test.md +16 -16
- package/.claude/templates/phases-sections/refactor-implementation.md +17 -17
- package/.claude/templates/phases-sections/refactor.md +16 -16
- package/.claude/templates/phases-sections/regression-tests.md +15 -15
- package/.claude/templates/phases-sections/responsive-test.md +16 -16
- package/.claude/templates/phases-sections/script-implementation.md +43 -43
- package/.claude/templates/phases-sections/test-coverage.md +16 -16
- package/.claude/templates/phases-sections/user-approval.md +14 -14
- package/LICENSE +21 -21
- package/package.json +1 -1
- package/.claude/lib/tdd-classifier.md +0 -345
|
@@ -1,522 +1,522 @@
|
|
|
1
|
-
# Shadow System
|
|
2
|
-
|
|
3
|
-
> **Purpose:** Consistent elevation and depth hierarchy using shadows
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 3-Tier Shadow System
|
|
8
|
-
|
|
9
|
-
**Core Principle:** Use shadows to indicate elevation, not decoration
|
|
10
|
-
|
|
11
|
-
**Visual Hierarchy:**
|
|
12
|
-
- **Level 1** (Subtle): Barely noticeable, resting state
|
|
13
|
-
- **Level 2** (Medium): Elevated, interactive elements
|
|
14
|
-
- **Level 3** (Large): Floating, top-layer elements
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## Shadow Definitions
|
|
19
|
-
|
|
20
|
-
### Level 1: Subtle (sm)
|
|
21
|
-
|
|
22
|
-
**Use Cases:**
|
|
23
|
-
- Cards at rest
|
|
24
|
-
- Input fields
|
|
25
|
-
- Buttons (default state)
|
|
26
|
-
- List items
|
|
27
|
-
- Table rows
|
|
28
|
-
|
|
29
|
-
**Definition:**
|
|
30
|
-
```css
|
|
31
|
-
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
**Breakdown:**
|
|
35
|
-
- `0` - No horizontal offset (shadow directly below)
|
|
36
|
-
- `1px` - 1px vertical offset (slight drop)
|
|
37
|
-
- `2px` - 2px blur radius (soft edge)
|
|
38
|
-
- `0` - No spread
|
|
39
|
-
- `rgb(0 0 0 / 0.05)` - 5% opacity black (very subtle)
|
|
40
|
-
|
|
41
|
-
**Example:**
|
|
42
|
-
```css
|
|
43
|
-
.card {
|
|
44
|
-
box-shadow: var(--shadow-sm);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.input {
|
|
48
|
-
box-shadow: var(--shadow-sm);
|
|
49
|
-
border: 1px solid var(--color-border);
|
|
50
|
-
}
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
### Level 2: Medium (md)
|
|
56
|
-
|
|
57
|
-
**Use Cases:**
|
|
58
|
-
- Dropdowns
|
|
59
|
-
- Modals
|
|
60
|
-
- Popovers
|
|
61
|
-
- Buttons (hover state)
|
|
62
|
-
- Cards (hover state)
|
|
63
|
-
- Tooltips
|
|
64
|
-
|
|
65
|
-
**Definition:**
|
|
66
|
-
```css
|
|
67
|
-
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1),
|
|
68
|
-
0 2px 4px -2px rgb(0 0 0 / 0.1);
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
**Breakdown:**
|
|
72
|
-
- **First shadow** (main depth):
|
|
73
|
-
- `0 4px 6px -1px` - 4px down, 6px blur, -1px spread (tighter shadow)
|
|
74
|
-
- `rgb(0 0 0 / 0.1)` - 10% opacity
|
|
75
|
-
- **Second shadow** (subtle edge):
|
|
76
|
-
- `0 2px 4px -2px` - 2px down, 4px blur, -2px spread (soft edge)
|
|
77
|
-
- `rgb(0 0 0 / 0.1)` - 10% opacity
|
|
78
|
-
|
|
79
|
-
**Example:**
|
|
80
|
-
```css
|
|
81
|
-
.dropdown {
|
|
82
|
-
box-shadow: var(--shadow-md);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
.card:hover {
|
|
86
|
-
box-shadow: var(--shadow-md);
|
|
87
|
-
transition: box-shadow 0.2s ease;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
.button:hover {
|
|
91
|
-
box-shadow: var(--shadow-md);
|
|
92
|
-
}
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
### Level 3: Large (lg)
|
|
98
|
-
|
|
99
|
-
**Use Cases:**
|
|
100
|
-
- Full-screen modals
|
|
101
|
-
- Overlays
|
|
102
|
-
- Mega menus
|
|
103
|
-
- Sticky headers
|
|
104
|
-
- Notification panels
|
|
105
|
-
- Slide-out drawers
|
|
106
|
-
|
|
107
|
-
**Definition:**
|
|
108
|
-
```css
|
|
109
|
-
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1),
|
|
110
|
-
0 4px 6px -4px rgb(0 0 0 / 0.1);
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
**Breakdown:**
|
|
114
|
-
- **First shadow** (main depth):
|
|
115
|
-
- `0 10px 15px -3px` - 10px down, 15px blur, -3px spread
|
|
116
|
-
- `rgb(0 0 0 / 0.1)` - 10% opacity
|
|
117
|
-
- **Second shadow** (soft edge):
|
|
118
|
-
- `0 4px 6px -4px` - 4px down, 6px blur, -4px spread
|
|
119
|
-
- `rgb(0 0 0 / 0.1)` - 10% opacity
|
|
120
|
-
|
|
121
|
-
**Example:**
|
|
122
|
-
```css
|
|
123
|
-
.modal {
|
|
124
|
-
box-shadow: var(--shadow-lg);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
.mega-menu {
|
|
128
|
-
box-shadow: var(--shadow-lg);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
.drawer {
|
|
132
|
-
box-shadow: var(--shadow-lg);
|
|
133
|
-
}
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
---
|
|
137
|
-
|
|
138
|
-
## Optional: Extended Shadow Scale
|
|
139
|
-
|
|
140
|
-
**For projects needing more granularity:**
|
|
141
|
-
|
|
142
|
-
```css
|
|
143
|
-
/* Extra Subtle (xs) */
|
|
144
|
-
--shadow-xs: 0 1px 1px 0 rgb(0 0 0 / 0.03);
|
|
145
|
-
|
|
146
|
-
/* Subtle (sm) - Standard */
|
|
147
|
-
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
148
|
-
|
|
149
|
-
/* Medium (md) - Standard */
|
|
150
|
-
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1),
|
|
151
|
-
0 2px 4px -2px rgb(0 0 0 / 0.1);
|
|
152
|
-
|
|
153
|
-
/* Large (lg) - Standard */
|
|
154
|
-
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1),
|
|
155
|
-
0 4px 6px -4px rgb(0 0 0 / 0.1);
|
|
156
|
-
|
|
157
|
-
/* Extra Large (xl) */
|
|
158
|
-
--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1),
|
|
159
|
-
0 8px 10px -6px rgb(0 0 0 / 0.1);
|
|
160
|
-
|
|
161
|
-
/* 2XL (maximum elevation) */
|
|
162
|
-
--shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
## Shadow Usage Patterns
|
|
168
|
-
|
|
169
|
-
### Interactive Elements
|
|
170
|
-
|
|
171
|
-
**Elevation on Hover:**
|
|
172
|
-
```css
|
|
173
|
-
.card {
|
|
174
|
-
box-shadow: var(--shadow-sm);
|
|
175
|
-
transition: box-shadow 0.2s ease;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
.card:hover {
|
|
179
|
-
box-shadow: var(--shadow-md);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
.card:active {
|
|
183
|
-
box-shadow: var(--shadow-sm); /* Return to base on click */
|
|
184
|
-
}
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
**Buttons:**
|
|
188
|
-
```css
|
|
189
|
-
.button {
|
|
190
|
-
box-shadow: var(--shadow-sm);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
.button:hover {
|
|
194
|
-
box-shadow: var(--shadow-md);
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
.button:active {
|
|
198
|
-
box-shadow: none; /* Pressed down, no elevation */
|
|
199
|
-
}
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
---
|
|
203
|
-
|
|
204
|
-
### Layering
|
|
205
|
-
|
|
206
|
-
**Z-Index + Shadow Coordination:**
|
|
207
|
-
|
|
208
|
-
```css
|
|
209
|
-
/* Base layer (z-index: 1) */
|
|
210
|
-
.content {
|
|
211
|
-
z-index: 1;
|
|
212
|
-
box-shadow: var(--shadow-sm);
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
/* Elevated layer (z-index: 10) */
|
|
216
|
-
.dropdown {
|
|
217
|
-
z-index: 10;
|
|
218
|
-
box-shadow: var(--shadow-md);
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/* Top layer (z-index: 100) */
|
|
222
|
-
.modal {
|
|
223
|
-
z-index: 100;
|
|
224
|
-
box-shadow: var(--shadow-lg);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
/* Notification layer (z-index: 1000) */
|
|
228
|
-
.toast {
|
|
229
|
-
z-index: 1000;
|
|
230
|
-
box-shadow: var(--shadow-lg);
|
|
231
|
-
}
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
**Rule:** Higher z-index = Larger shadow
|
|
235
|
-
|
|
236
|
-
---
|
|
237
|
-
|
|
238
|
-
### Navigation
|
|
239
|
-
|
|
240
|
-
**Sticky Headers:**
|
|
241
|
-
```css
|
|
242
|
-
.header {
|
|
243
|
-
position: sticky;
|
|
244
|
-
top: 0;
|
|
245
|
-
box-shadow: none; /* No shadow when at top */
|
|
246
|
-
transition: box-shadow 0.2s ease;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
.header.scrolled {
|
|
250
|
-
box-shadow: var(--shadow-md); /* Add shadow when scrolling */
|
|
251
|
-
}
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
**Dropdowns:**
|
|
255
|
-
```css
|
|
256
|
-
.dropdown-menu {
|
|
257
|
-
position: absolute;
|
|
258
|
-
top: 100%;
|
|
259
|
-
box-shadow: var(--shadow-md);
|
|
260
|
-
border-radius: var(--spacing-2);
|
|
261
|
-
}
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
---
|
|
265
|
-
|
|
266
|
-
## Color Variations
|
|
267
|
-
|
|
268
|
-
### Subtle Color Shadows
|
|
269
|
-
|
|
270
|
-
**For Brand Emphasis:**
|
|
271
|
-
```css
|
|
272
|
-
/* Primary color shadow (blue brand) */
|
|
273
|
-
.button-primary:hover {
|
|
274
|
-
box-shadow: 0 4px 6px -1px rgb(59 130 246 / 0.2),
|
|
275
|
-
0 2px 4px -2px rgb(59 130 246 / 0.1);
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
/* Success shadow (green) */
|
|
279
|
-
.alert-success {
|
|
280
|
-
box-shadow: 0 1px 2px 0 rgb(34 197 94 / 0.1);
|
|
281
|
-
border-left: 4px solid rgb(34 197 94);
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
/* Error shadow (red) */
|
|
285
|
-
.alert-error {
|
|
286
|
-
box-shadow: 0 1px 2px 0 rgb(239 68 68 / 0.1);
|
|
287
|
-
border-left: 4px solid rgb(239 68 68);
|
|
288
|
-
}
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
**When to Use:**
|
|
292
|
-
- ✅ Highlighting important CTAs
|
|
293
|
-
- ✅ Status indicators (success, warning, error)
|
|
294
|
-
- ✅ Premium/special features
|
|
295
|
-
- ❌ Standard UI elements (use neutral shadows)
|
|
296
|
-
- ❌ Overuse (loses emphasis)
|
|
297
|
-
|
|
298
|
-
---
|
|
299
|
-
|
|
300
|
-
## Inner Shadows
|
|
301
|
-
|
|
302
|
-
**Definition:** Shadows inside elements (inset)
|
|
303
|
-
|
|
304
|
-
**Use Cases:**
|
|
305
|
-
- Input fields (focused state)
|
|
306
|
-
- Pressed buttons
|
|
307
|
-
- Recessed areas
|
|
308
|
-
|
|
309
|
-
```css
|
|
310
|
-
/* Input focus state */
|
|
311
|
-
.input:focus {
|
|
312
|
-
outline: none;
|
|
313
|
-
box-shadow: inset 0 1px 2px 0 rgb(0 0 0 / 0.05),
|
|
314
|
-
0 0 0 3px rgb(59 130 246 / 0.2); /* Focus ring */
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
/* Pressed button */
|
|
318
|
-
.button:active {
|
|
319
|
-
box-shadow: inset 0 2px 4px 0 rgb(0 0 0 / 0.1);
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
/* Well/recessed area */
|
|
323
|
-
.well {
|
|
324
|
-
box-shadow: inset 0 2px 4px 0 rgb(0 0 0 / 0.06);
|
|
325
|
-
background: var(--color-muted);
|
|
326
|
-
}
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
---
|
|
330
|
-
|
|
331
|
-
## Dark Mode Shadows
|
|
332
|
-
|
|
333
|
-
**Principle:** Lighter shadows on dark backgrounds
|
|
334
|
-
|
|
335
|
-
```css
|
|
336
|
-
/* Light mode (default) */
|
|
337
|
-
:root {
|
|
338
|
-
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
339
|
-
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);
|
|
340
|
-
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
/* Dark mode */
|
|
344
|
-
.dark {
|
|
345
|
-
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.5); /* Stronger contrast */
|
|
346
|
-
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.7);
|
|
347
|
-
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.9);
|
|
348
|
-
}
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
**Alternative (White Highlights):**
|
|
352
|
-
```css
|
|
353
|
-
.dark {
|
|
354
|
-
/* Use subtle white glow instead of black shadow */
|
|
355
|
-
--shadow-sm: 0 1px 2px 0 rgb(255 255 255 / 0.05);
|
|
356
|
-
--shadow-md: 0 4px 6px -1px rgb(255 255 255 / 0.1);
|
|
357
|
-
}
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
---
|
|
361
|
-
|
|
362
|
-
## Performance Considerations
|
|
363
|
-
|
|
364
|
-
### Shadow vs Border
|
|
365
|
-
|
|
366
|
-
**Shadow (Better):**
|
|
367
|
-
```css
|
|
368
|
-
/* Smooth, doesn't affect layout */
|
|
369
|
-
.card {
|
|
370
|
-
box-shadow: var(--shadow-sm);
|
|
371
|
-
}
|
|
372
|
-
```
|
|
373
|
-
|
|
374
|
-
**Border (Alternative):**
|
|
375
|
-
```css
|
|
376
|
-
/* Affects layout (adds 1px to dimensions) */
|
|
377
|
-
.card {
|
|
378
|
-
border: 1px solid var(--color-border);
|
|
379
|
-
}
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
**Hybrid Approach:**
|
|
383
|
-
```css
|
|
384
|
-
/* Combine subtle shadow + border for definition */
|
|
385
|
-
.card {
|
|
386
|
-
box-shadow: var(--shadow-sm);
|
|
387
|
-
border: 1px solid rgb(0 0 0 / 0.05);
|
|
388
|
-
}
|
|
389
|
-
```
|
|
390
|
-
|
|
391
|
-
---
|
|
392
|
-
|
|
393
|
-
### Transition Performance
|
|
394
|
-
|
|
395
|
-
**Smooth Transitions:**
|
|
396
|
-
```css
|
|
397
|
-
.card {
|
|
398
|
-
box-shadow: var(--shadow-sm);
|
|
399
|
-
transition: box-shadow 0.2s ease; /* Fast, smooth */
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
.card:hover {
|
|
403
|
-
box-shadow: var(--shadow-md);
|
|
404
|
-
}
|
|
405
|
-
```
|
|
406
|
-
|
|
407
|
-
**Avoid:**
|
|
408
|
-
```css
|
|
409
|
-
/* ❌ Too slow (feels laggy) */
|
|
410
|
-
.card {
|
|
411
|
-
transition: box-shadow 0.5s ease;
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
/* ❌ Multiple properties (can cause jank) */
|
|
415
|
-
.card {
|
|
416
|
-
transition: all 0.2s ease; /* Use specific properties */
|
|
417
|
-
}
|
|
418
|
-
```
|
|
419
|
-
|
|
420
|
-
---
|
|
421
|
-
|
|
422
|
-
## Best Practices
|
|
423
|
-
|
|
424
|
-
### DO:
|
|
425
|
-
- ✅ Use 3-tier system (sm, md, lg)
|
|
426
|
-
- ✅ Coordinate shadows with z-index
|
|
427
|
-
- ✅ Add shadows on hover for interactivity
|
|
428
|
-
- ✅ Use subtle shadows for resting states
|
|
429
|
-
- ✅ Increase shadow opacity in dark mode
|
|
430
|
-
- ✅ Transition shadows smoothly (0.2s)
|
|
431
|
-
- ✅ Use neutral black shadows (rgb(0 0 0))
|
|
432
|
-
|
|
433
|
-
### DON'T:
|
|
434
|
-
- ❌ Use more than 3-4 shadow levels
|
|
435
|
-
- ❌ Apply shadows to every element
|
|
436
|
-
- ❌ Use harsh shadows (too dark)
|
|
437
|
-
- ❌ Mix shadow and border on same edge
|
|
438
|
-
- ❌ Forget dark mode adjustments
|
|
439
|
-
- ❌ Use slow transitions (> 0.3s)
|
|
440
|
-
- ❌ Apply shadows to text (use text-shadow)
|
|
441
|
-
|
|
442
|
-
---
|
|
443
|
-
|
|
444
|
-
## Common Patterns
|
|
445
|
-
|
|
446
|
-
### Card System
|
|
447
|
-
```css
|
|
448
|
-
.card {
|
|
449
|
-
background: white;
|
|
450
|
-
border-radius: var(--spacing-2);
|
|
451
|
-
padding: var(--spacing-6);
|
|
452
|
-
box-shadow: var(--shadow-sm);
|
|
453
|
-
transition: box-shadow 0.2s ease;
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
.card:hover {
|
|
457
|
-
box-shadow: var(--shadow-md);
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
.card-elevated {
|
|
461
|
-
box-shadow: var(--shadow-md);
|
|
462
|
-
}
|
|
463
|
-
```
|
|
464
|
-
|
|
465
|
-
### Modal System
|
|
466
|
-
```css
|
|
467
|
-
.modal-overlay {
|
|
468
|
-
background: rgb(0 0 0 / 0.5); /* 50% opacity overlay */
|
|
469
|
-
}
|
|
470
|
-
|
|
471
|
-
.modal-content {
|
|
472
|
-
background: white;
|
|
473
|
-
border-radius: var(--spacing-2);
|
|
474
|
-
padding: var(--spacing-8);
|
|
475
|
-
box-shadow: var(--shadow-lg);
|
|
476
|
-
}
|
|
477
|
-
```
|
|
478
|
-
|
|
479
|
-
### Dropdown System
|
|
480
|
-
```css
|
|
481
|
-
.dropdown-trigger {
|
|
482
|
-
box-shadow: var(--shadow-sm);
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
.dropdown-menu {
|
|
486
|
-
position: absolute;
|
|
487
|
-
background: white;
|
|
488
|
-
border-radius: var(--spacing-2);
|
|
489
|
-
padding: var(--spacing-2);
|
|
490
|
-
box-shadow: var(--shadow-md);
|
|
491
|
-
min-width: 200px;
|
|
492
|
-
}
|
|
493
|
-
```
|
|
494
|
-
|
|
495
|
-
---
|
|
496
|
-
|
|
497
|
-
## Quick Reference
|
|
498
|
-
|
|
499
|
-
**Shadow Levels:**
|
|
500
|
-
| Level | Size | Use Case |
|
|
501
|
-
|-------|------|----------|
|
|
502
|
-
| `shadow-sm` | Subtle | Cards, inputs, buttons (rest) |
|
|
503
|
-
| `shadow-md` | Medium | Dropdowns, modals, hovers |
|
|
504
|
-
| `shadow-lg` | Large | Overlays, mega menus, drawers |
|
|
505
|
-
|
|
506
|
-
**Elevation + Z-Index:**
|
|
507
|
-
| Z-Index | Shadow | Element Type |
|
|
508
|
-
|---------|--------|--------------|
|
|
509
|
-
| 1 | `shadow-sm` | Base content |
|
|
510
|
-
| 10 | `shadow-md` | Dropdowns, popovers |
|
|
511
|
-
| 100 | `shadow-lg` | Modals, overlays |
|
|
512
|
-
| 1000 | `shadow-lg` | Toasts, notifications |
|
|
513
|
-
|
|
514
|
-
**Dark Mode:**
|
|
515
|
-
| Mode | Opacity Multiplier |
|
|
516
|
-
|------|-------------------|
|
|
517
|
-
| Light | 1x (0.05, 0.1) |
|
|
518
|
-
| Dark | 5-10x (0.5, 0.7, 0.9) |
|
|
519
|
-
|
|
520
|
-
---
|
|
521
|
-
|
|
522
|
-
**💡 Remember:** Shadows indicate elevation. Use them to guide user attention!
|
|
1
|
+
# Shadow System
|
|
2
|
+
|
|
3
|
+
> **Purpose:** Consistent elevation and depth hierarchy using shadows
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 3-Tier Shadow System
|
|
8
|
+
|
|
9
|
+
**Core Principle:** Use shadows to indicate elevation, not decoration
|
|
10
|
+
|
|
11
|
+
**Visual Hierarchy:**
|
|
12
|
+
- **Level 1** (Subtle): Barely noticeable, resting state
|
|
13
|
+
- **Level 2** (Medium): Elevated, interactive elements
|
|
14
|
+
- **Level 3** (Large): Floating, top-layer elements
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Shadow Definitions
|
|
19
|
+
|
|
20
|
+
### Level 1: Subtle (sm)
|
|
21
|
+
|
|
22
|
+
**Use Cases:**
|
|
23
|
+
- Cards at rest
|
|
24
|
+
- Input fields
|
|
25
|
+
- Buttons (default state)
|
|
26
|
+
- List items
|
|
27
|
+
- Table rows
|
|
28
|
+
|
|
29
|
+
**Definition:**
|
|
30
|
+
```css
|
|
31
|
+
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Breakdown:**
|
|
35
|
+
- `0` - No horizontal offset (shadow directly below)
|
|
36
|
+
- `1px` - 1px vertical offset (slight drop)
|
|
37
|
+
- `2px` - 2px blur radius (soft edge)
|
|
38
|
+
- `0` - No spread
|
|
39
|
+
- `rgb(0 0 0 / 0.05)` - 5% opacity black (very subtle)
|
|
40
|
+
|
|
41
|
+
**Example:**
|
|
42
|
+
```css
|
|
43
|
+
.card {
|
|
44
|
+
box-shadow: var(--shadow-sm);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.input {
|
|
48
|
+
box-shadow: var(--shadow-sm);
|
|
49
|
+
border: 1px solid var(--color-border);
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
### Level 2: Medium (md)
|
|
56
|
+
|
|
57
|
+
**Use Cases:**
|
|
58
|
+
- Dropdowns
|
|
59
|
+
- Modals
|
|
60
|
+
- Popovers
|
|
61
|
+
- Buttons (hover state)
|
|
62
|
+
- Cards (hover state)
|
|
63
|
+
- Tooltips
|
|
64
|
+
|
|
65
|
+
**Definition:**
|
|
66
|
+
```css
|
|
67
|
+
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1),
|
|
68
|
+
0 2px 4px -2px rgb(0 0 0 / 0.1);
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Breakdown:**
|
|
72
|
+
- **First shadow** (main depth):
|
|
73
|
+
- `0 4px 6px -1px` - 4px down, 6px blur, -1px spread (tighter shadow)
|
|
74
|
+
- `rgb(0 0 0 / 0.1)` - 10% opacity
|
|
75
|
+
- **Second shadow** (subtle edge):
|
|
76
|
+
- `0 2px 4px -2px` - 2px down, 4px blur, -2px spread (soft edge)
|
|
77
|
+
- `rgb(0 0 0 / 0.1)` - 10% opacity
|
|
78
|
+
|
|
79
|
+
**Example:**
|
|
80
|
+
```css
|
|
81
|
+
.dropdown {
|
|
82
|
+
box-shadow: var(--shadow-md);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.card:hover {
|
|
86
|
+
box-shadow: var(--shadow-md);
|
|
87
|
+
transition: box-shadow 0.2s ease;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.button:hover {
|
|
91
|
+
box-shadow: var(--shadow-md);
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
### Level 3: Large (lg)
|
|
98
|
+
|
|
99
|
+
**Use Cases:**
|
|
100
|
+
- Full-screen modals
|
|
101
|
+
- Overlays
|
|
102
|
+
- Mega menus
|
|
103
|
+
- Sticky headers
|
|
104
|
+
- Notification panels
|
|
105
|
+
- Slide-out drawers
|
|
106
|
+
|
|
107
|
+
**Definition:**
|
|
108
|
+
```css
|
|
109
|
+
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1),
|
|
110
|
+
0 4px 6px -4px rgb(0 0 0 / 0.1);
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Breakdown:**
|
|
114
|
+
- **First shadow** (main depth):
|
|
115
|
+
- `0 10px 15px -3px` - 10px down, 15px blur, -3px spread
|
|
116
|
+
- `rgb(0 0 0 / 0.1)` - 10% opacity
|
|
117
|
+
- **Second shadow** (soft edge):
|
|
118
|
+
- `0 4px 6px -4px` - 4px down, 6px blur, -4px spread
|
|
119
|
+
- `rgb(0 0 0 / 0.1)` - 10% opacity
|
|
120
|
+
|
|
121
|
+
**Example:**
|
|
122
|
+
```css
|
|
123
|
+
.modal {
|
|
124
|
+
box-shadow: var(--shadow-lg);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.mega-menu {
|
|
128
|
+
box-shadow: var(--shadow-lg);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.drawer {
|
|
132
|
+
box-shadow: var(--shadow-lg);
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Optional: Extended Shadow Scale
|
|
139
|
+
|
|
140
|
+
**For projects needing more granularity:**
|
|
141
|
+
|
|
142
|
+
```css
|
|
143
|
+
/* Extra Subtle (xs) */
|
|
144
|
+
--shadow-xs: 0 1px 1px 0 rgb(0 0 0 / 0.03);
|
|
145
|
+
|
|
146
|
+
/* Subtle (sm) - Standard */
|
|
147
|
+
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
148
|
+
|
|
149
|
+
/* Medium (md) - Standard */
|
|
150
|
+
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1),
|
|
151
|
+
0 2px 4px -2px rgb(0 0 0 / 0.1);
|
|
152
|
+
|
|
153
|
+
/* Large (lg) - Standard */
|
|
154
|
+
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1),
|
|
155
|
+
0 4px 6px -4px rgb(0 0 0 / 0.1);
|
|
156
|
+
|
|
157
|
+
/* Extra Large (xl) */
|
|
158
|
+
--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1),
|
|
159
|
+
0 8px 10px -6px rgb(0 0 0 / 0.1);
|
|
160
|
+
|
|
161
|
+
/* 2XL (maximum elevation) */
|
|
162
|
+
--shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Shadow Usage Patterns
|
|
168
|
+
|
|
169
|
+
### Interactive Elements
|
|
170
|
+
|
|
171
|
+
**Elevation on Hover:**
|
|
172
|
+
```css
|
|
173
|
+
.card {
|
|
174
|
+
box-shadow: var(--shadow-sm);
|
|
175
|
+
transition: box-shadow 0.2s ease;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.card:hover {
|
|
179
|
+
box-shadow: var(--shadow-md);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.card:active {
|
|
183
|
+
box-shadow: var(--shadow-sm); /* Return to base on click */
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**Buttons:**
|
|
188
|
+
```css
|
|
189
|
+
.button {
|
|
190
|
+
box-shadow: var(--shadow-sm);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.button:hover {
|
|
194
|
+
box-shadow: var(--shadow-md);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.button:active {
|
|
198
|
+
box-shadow: none; /* Pressed down, no elevation */
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
### Layering
|
|
205
|
+
|
|
206
|
+
**Z-Index + Shadow Coordination:**
|
|
207
|
+
|
|
208
|
+
```css
|
|
209
|
+
/* Base layer (z-index: 1) */
|
|
210
|
+
.content {
|
|
211
|
+
z-index: 1;
|
|
212
|
+
box-shadow: var(--shadow-sm);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/* Elevated layer (z-index: 10) */
|
|
216
|
+
.dropdown {
|
|
217
|
+
z-index: 10;
|
|
218
|
+
box-shadow: var(--shadow-md);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/* Top layer (z-index: 100) */
|
|
222
|
+
.modal {
|
|
223
|
+
z-index: 100;
|
|
224
|
+
box-shadow: var(--shadow-lg);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/* Notification layer (z-index: 1000) */
|
|
228
|
+
.toast {
|
|
229
|
+
z-index: 1000;
|
|
230
|
+
box-shadow: var(--shadow-lg);
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
**Rule:** Higher z-index = Larger shadow
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
### Navigation
|
|
239
|
+
|
|
240
|
+
**Sticky Headers:**
|
|
241
|
+
```css
|
|
242
|
+
.header {
|
|
243
|
+
position: sticky;
|
|
244
|
+
top: 0;
|
|
245
|
+
box-shadow: none; /* No shadow when at top */
|
|
246
|
+
transition: box-shadow 0.2s ease;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.header.scrolled {
|
|
250
|
+
box-shadow: var(--shadow-md); /* Add shadow when scrolling */
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
**Dropdowns:**
|
|
255
|
+
```css
|
|
256
|
+
.dropdown-menu {
|
|
257
|
+
position: absolute;
|
|
258
|
+
top: 100%;
|
|
259
|
+
box-shadow: var(--shadow-md);
|
|
260
|
+
border-radius: var(--spacing-2);
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## Color Variations
|
|
267
|
+
|
|
268
|
+
### Subtle Color Shadows
|
|
269
|
+
|
|
270
|
+
**For Brand Emphasis:**
|
|
271
|
+
```css
|
|
272
|
+
/* Primary color shadow (blue brand) */
|
|
273
|
+
.button-primary:hover {
|
|
274
|
+
box-shadow: 0 4px 6px -1px rgb(59 130 246 / 0.2),
|
|
275
|
+
0 2px 4px -2px rgb(59 130 246 / 0.1);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/* Success shadow (green) */
|
|
279
|
+
.alert-success {
|
|
280
|
+
box-shadow: 0 1px 2px 0 rgb(34 197 94 / 0.1);
|
|
281
|
+
border-left: 4px solid rgb(34 197 94);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/* Error shadow (red) */
|
|
285
|
+
.alert-error {
|
|
286
|
+
box-shadow: 0 1px 2px 0 rgb(239 68 68 / 0.1);
|
|
287
|
+
border-left: 4px solid rgb(239 68 68);
|
|
288
|
+
}
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
**When to Use:**
|
|
292
|
+
- ✅ Highlighting important CTAs
|
|
293
|
+
- ✅ Status indicators (success, warning, error)
|
|
294
|
+
- ✅ Premium/special features
|
|
295
|
+
- ❌ Standard UI elements (use neutral shadows)
|
|
296
|
+
- ❌ Overuse (loses emphasis)
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## Inner Shadows
|
|
301
|
+
|
|
302
|
+
**Definition:** Shadows inside elements (inset)
|
|
303
|
+
|
|
304
|
+
**Use Cases:**
|
|
305
|
+
- Input fields (focused state)
|
|
306
|
+
- Pressed buttons
|
|
307
|
+
- Recessed areas
|
|
308
|
+
|
|
309
|
+
```css
|
|
310
|
+
/* Input focus state */
|
|
311
|
+
.input:focus {
|
|
312
|
+
outline: none;
|
|
313
|
+
box-shadow: inset 0 1px 2px 0 rgb(0 0 0 / 0.05),
|
|
314
|
+
0 0 0 3px rgb(59 130 246 / 0.2); /* Focus ring */
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/* Pressed button */
|
|
318
|
+
.button:active {
|
|
319
|
+
box-shadow: inset 0 2px 4px 0 rgb(0 0 0 / 0.1);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/* Well/recessed area */
|
|
323
|
+
.well {
|
|
324
|
+
box-shadow: inset 0 2px 4px 0 rgb(0 0 0 / 0.06);
|
|
325
|
+
background: var(--color-muted);
|
|
326
|
+
}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## Dark Mode Shadows
|
|
332
|
+
|
|
333
|
+
**Principle:** Lighter shadows on dark backgrounds
|
|
334
|
+
|
|
335
|
+
```css
|
|
336
|
+
/* Light mode (default) */
|
|
337
|
+
:root {
|
|
338
|
+
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
339
|
+
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);
|
|
340
|
+
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/* Dark mode */
|
|
344
|
+
.dark {
|
|
345
|
+
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.5); /* Stronger contrast */
|
|
346
|
+
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.7);
|
|
347
|
+
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.9);
|
|
348
|
+
}
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
**Alternative (White Highlights):**
|
|
352
|
+
```css
|
|
353
|
+
.dark {
|
|
354
|
+
/* Use subtle white glow instead of black shadow */
|
|
355
|
+
--shadow-sm: 0 1px 2px 0 rgb(255 255 255 / 0.05);
|
|
356
|
+
--shadow-md: 0 4px 6px -1px rgb(255 255 255 / 0.1);
|
|
357
|
+
}
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
---
|
|
361
|
+
|
|
362
|
+
## Performance Considerations
|
|
363
|
+
|
|
364
|
+
### Shadow vs Border
|
|
365
|
+
|
|
366
|
+
**Shadow (Better):**
|
|
367
|
+
```css
|
|
368
|
+
/* Smooth, doesn't affect layout */
|
|
369
|
+
.card {
|
|
370
|
+
box-shadow: var(--shadow-sm);
|
|
371
|
+
}
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
**Border (Alternative):**
|
|
375
|
+
```css
|
|
376
|
+
/* Affects layout (adds 1px to dimensions) */
|
|
377
|
+
.card {
|
|
378
|
+
border: 1px solid var(--color-border);
|
|
379
|
+
}
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
**Hybrid Approach:**
|
|
383
|
+
```css
|
|
384
|
+
/* Combine subtle shadow + border for definition */
|
|
385
|
+
.card {
|
|
386
|
+
box-shadow: var(--shadow-sm);
|
|
387
|
+
border: 1px solid rgb(0 0 0 / 0.05);
|
|
388
|
+
}
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
---
|
|
392
|
+
|
|
393
|
+
### Transition Performance
|
|
394
|
+
|
|
395
|
+
**Smooth Transitions:**
|
|
396
|
+
```css
|
|
397
|
+
.card {
|
|
398
|
+
box-shadow: var(--shadow-sm);
|
|
399
|
+
transition: box-shadow 0.2s ease; /* Fast, smooth */
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
.card:hover {
|
|
403
|
+
box-shadow: var(--shadow-md);
|
|
404
|
+
}
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
**Avoid:**
|
|
408
|
+
```css
|
|
409
|
+
/* ❌ Too slow (feels laggy) */
|
|
410
|
+
.card {
|
|
411
|
+
transition: box-shadow 0.5s ease;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
/* ❌ Multiple properties (can cause jank) */
|
|
415
|
+
.card {
|
|
416
|
+
transition: all 0.2s ease; /* Use specific properties */
|
|
417
|
+
}
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
422
|
+
## Best Practices
|
|
423
|
+
|
|
424
|
+
### DO:
|
|
425
|
+
- ✅ Use 3-tier system (sm, md, lg)
|
|
426
|
+
- ✅ Coordinate shadows with z-index
|
|
427
|
+
- ✅ Add shadows on hover for interactivity
|
|
428
|
+
- ✅ Use subtle shadows for resting states
|
|
429
|
+
- ✅ Increase shadow opacity in dark mode
|
|
430
|
+
- ✅ Transition shadows smoothly (0.2s)
|
|
431
|
+
- ✅ Use neutral black shadows (rgb(0 0 0))
|
|
432
|
+
|
|
433
|
+
### DON'T:
|
|
434
|
+
- ❌ Use more than 3-4 shadow levels
|
|
435
|
+
- ❌ Apply shadows to every element
|
|
436
|
+
- ❌ Use harsh shadows (too dark)
|
|
437
|
+
- ❌ Mix shadow and border on same edge
|
|
438
|
+
- ❌ Forget dark mode adjustments
|
|
439
|
+
- ❌ Use slow transitions (> 0.3s)
|
|
440
|
+
- ❌ Apply shadows to text (use text-shadow)
|
|
441
|
+
|
|
442
|
+
---
|
|
443
|
+
|
|
444
|
+
## Common Patterns
|
|
445
|
+
|
|
446
|
+
### Card System
|
|
447
|
+
```css
|
|
448
|
+
.card {
|
|
449
|
+
background: white;
|
|
450
|
+
border-radius: var(--spacing-2);
|
|
451
|
+
padding: var(--spacing-6);
|
|
452
|
+
box-shadow: var(--shadow-sm);
|
|
453
|
+
transition: box-shadow 0.2s ease;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
.card:hover {
|
|
457
|
+
box-shadow: var(--shadow-md);
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
.card-elevated {
|
|
461
|
+
box-shadow: var(--shadow-md);
|
|
462
|
+
}
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
### Modal System
|
|
466
|
+
```css
|
|
467
|
+
.modal-overlay {
|
|
468
|
+
background: rgb(0 0 0 / 0.5); /* 50% opacity overlay */
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
.modal-content {
|
|
472
|
+
background: white;
|
|
473
|
+
border-radius: var(--spacing-2);
|
|
474
|
+
padding: var(--spacing-8);
|
|
475
|
+
box-shadow: var(--shadow-lg);
|
|
476
|
+
}
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
### Dropdown System
|
|
480
|
+
```css
|
|
481
|
+
.dropdown-trigger {
|
|
482
|
+
box-shadow: var(--shadow-sm);
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
.dropdown-menu {
|
|
486
|
+
position: absolute;
|
|
487
|
+
background: white;
|
|
488
|
+
border-radius: var(--spacing-2);
|
|
489
|
+
padding: var(--spacing-2);
|
|
490
|
+
box-shadow: var(--shadow-md);
|
|
491
|
+
min-width: 200px;
|
|
492
|
+
}
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
---
|
|
496
|
+
|
|
497
|
+
## Quick Reference
|
|
498
|
+
|
|
499
|
+
**Shadow Levels:**
|
|
500
|
+
| Level | Size | Use Case |
|
|
501
|
+
|-------|------|----------|
|
|
502
|
+
| `shadow-sm` | Subtle | Cards, inputs, buttons (rest) |
|
|
503
|
+
| `shadow-md` | Medium | Dropdowns, modals, hovers |
|
|
504
|
+
| `shadow-lg` | Large | Overlays, mega menus, drawers |
|
|
505
|
+
|
|
506
|
+
**Elevation + Z-Index:**
|
|
507
|
+
| Z-Index | Shadow | Element Type |
|
|
508
|
+
|---------|--------|--------------|
|
|
509
|
+
| 1 | `shadow-sm` | Base content |
|
|
510
|
+
| 10 | `shadow-md` | Dropdowns, popovers |
|
|
511
|
+
| 100 | `shadow-lg` | Modals, overlays |
|
|
512
|
+
| 1000 | `shadow-lg` | Toasts, notifications |
|
|
513
|
+
|
|
514
|
+
**Dark Mode:**
|
|
515
|
+
| Mode | Opacity Multiplier |
|
|
516
|
+
|------|-------------------|
|
|
517
|
+
| Light | 1x (0.05, 0.1) |
|
|
518
|
+
| Dark | 5-10x (0.5, 0.7, 0.9) |
|
|
519
|
+
|
|
520
|
+
---
|
|
521
|
+
|
|
522
|
+
**💡 Remember:** Shadows indicate elevation. Use them to guide user attention!
|