@arclux/arc-ui-html 1.3.0 → 1.5.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/css/arc-ui.css CHANGED
@@ -3,212 +3,171 @@
3
3
  /* Design Tokens */
4
4
  :root {
5
5
 
6
- /* ── Backgrounds ── */
7
- --bg-deep: rgb(3, 3, 7);
8
- --bg-surface: rgb(10, 10, 15);
9
- --bg-base: rgb(10, 10, 15);
10
- --bg-card: rgb(13, 13, 18);
11
- --bg-elevated: rgb(17, 17, 22);
12
-
13
- /* ── Text ── */
14
- --text-primary: rgb(232, 232, 236);
6
+
7
+ --bg-deep: rgb(3, 3, 7);
8
+ --bg-surface: rgb(10, 10, 15);
9
+ --bg-base: rgb(10, 10, 15);
10
+ --bg-card: rgb(13, 13, 18);
11
+ --bg-elevated: rgb(17, 17, 22);
12
+
13
+ --text-primary: rgb(232, 232, 236);
15
14
  --text-secondary: rgb(138, 138, 150);
16
- --text-muted: rgb(124, 124, 137);
17
- --text-ghost: rgb(107, 107, 128);
15
+ --text-muted: rgb(124, 124, 137);
16
+ --text-ghost: rgb(107, 107, 128);
18
17
 
19
- /* ── Borders ── */
20
- --border-subtle: rgb(24, 24, 30);
18
+ --border-subtle: rgb(24, 24, 30);
21
19
  --border-default: rgb(34, 34, 41);
22
- --border-bright: rgb(51, 51, 64);
20
+ --border-bright: rgb(51, 51, 64);
23
21
 
24
- /* ── Accent ── */
25
- --accent-primary: rgb(77, 126, 247);
22
+ --accent-primary: rgb(77, 126, 247);
26
23
  --accent-secondary: rgb(139, 92, 246);
27
-
28
- /* RGB channels (for alpha compositing) */
29
- --accent-primary-rgb: 77, 126, 247;
24
+ --accent-primary-rgb: 77, 126, 247;
30
25
  --accent-secondary-rgb: 139, 92, 246;
31
- --text-primary-rgb: 232, 232, 236;
32
- --text-muted-rgb: 124, 124, 137;
33
- --color-error-rgb: 239, 68, 68;
34
- --white-rgb: 255, 255, 255;
35
- --black-rgb: 0, 0, 0;
36
-
37
- /* Accent alpha variants */
38
- --accent-primary-subtle: rgba(var(--accent-primary-rgb), 0.06);
39
- --accent-primary-border: rgba(var(--accent-primary-rgb), 0.12);
40
- --accent-primary-glow: rgba(var(--accent-primary-rgb), 0.2);
41
- --accent-primary-ring: rgba(var(--accent-primary-rgb), 0.15);
26
+ --text-primary-rgb: 232, 232, 236;
27
+ --text-muted-rgb: 124, 124, 137;
28
+ --color-error-rgb: 239, 68, 68;
29
+ --white-rgb: 255, 255, 255;
30
+ --black-rgb: 0, 0, 0;
31
+
32
+ --accent-primary-subtle: rgba(var(--accent-primary-rgb), 0.06);
33
+ --accent-primary-border: rgba(var(--accent-primary-rgb), 0.12);
34
+ --accent-primary-glow: rgba(var(--accent-primary-rgb), 0.2);
35
+ --accent-primary-ring: rgba(var(--accent-primary-rgb), 0.15);
42
36
  --accent-secondary-subtle: rgba(var(--accent-secondary-rgb), 0.06);
43
37
  --accent-secondary-border: rgba(var(--accent-secondary-rgb), 0.12);
44
- --accent-secondary-glow: rgba(var(--accent-secondary-rgb), 0.2);
45
-
46
- /* Feedback */
47
- --color-success: rgb(52, 211, 153);
48
- --color-success-rgb: 52, 211, 153;
49
- --color-error: rgb(239, 68, 68);
50
- --color-error-subtle: rgba(var(--color-error-rgb), 0.1);
51
- --color-warning: rgb(245, 158, 11);
52
- --color-warning-rgb: 245, 158, 11;
38
+ --accent-secondary-glow: rgba(var(--accent-secondary-rgb), 0.2);
39
+
40
+ --color-success: rgb(52, 211, 153);
41
+ --color-success-rgb: 52, 211, 153;
42
+ --color-error: rgb(239, 68, 68);
43
+ --color-error-subtle: rgba(239, 68, 68, 0.1);
44
+ --color-warning: rgb(245, 158, 11);
45
+ --color-warning-rgb: 245, 158, 11;
53
46
  --color-warning-subtle: rgba(245, 158, 11, 0.1);
54
- --color-info: rgb(59, 130, 246);
55
- --color-info-rgb: 59, 130, 246;
56
- --color-info-subtle: rgba(59, 130, 246, 0.1);
57
-
58
- /* ── Shadows ── */
59
- --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.2);
60
- --shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.2), 0 1px 2px rgba(0, 0, 0, 0.15);
61
- --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.25), 0 2px 4px rgba(0, 0, 0, 0.15);
62
- --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.3), 0 4px 8px rgba(0, 0, 0, 0.15);
63
- --shadow-xl: 0 16px 48px rgba(0, 0, 0, 0.35), 0 8px 16px rgba(0, 0, 0, 0.15);
47
+ --color-info: rgb(59, 130, 246);
48
+ --color-info-rgb: 59, 130, 246;
49
+ --color-info-subtle: rgba(59, 130, 246, 0.1);
50
+
51
+ --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.2);
52
+ --shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.2), 0 1px 2px rgba(0, 0, 0, 0.15);
53
+ --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.25), 0 2px 4px rgba(0, 0, 0, 0.15);
54
+ --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.3), 0 4px 8px rgba(0, 0, 0, 0.15);
55
+ --shadow-xl: 0 16px 48px rgba(0, 0, 0, 0.35), 0 8px 16px rgba(0, 0, 0, 0.15);
64
56
  --shadow-overlay: 0 8px 32px rgba(0, 0, 0, 0.4);
65
57
 
66
- /* ── Z-Index ── */
67
- --z-base: 0;
68
- --z-dropdown: 100;
69
- --z-sticky: 200;
70
- --z-drawer: 300;
71
- --z-modal: 400;
72
- --z-popover: 500;
73
- --z-toast: 600;
74
- --z-tooltip: 700;
75
- --z-max: 9999;
76
-
77
- /* ── Breakpoints ── */
78
- --breakpoint-xs: 480px;
79
- --breakpoint-sm: 640px;
80
- --breakpoint-md: 768px;
81
- --breakpoint-lg: 1024px;
82
- --breakpoint-xl: 1280px;
58
+ --z-base: 0;
59
+ --z-dropdown: 100;
60
+ --z-sticky: 200;
61
+ --z-drawer: 300;
62
+ --z-modal: 400;
63
+ --z-popover: 500;
64
+ --z-toast: 600;
65
+ --z-tooltip: 700;
66
+ --z-max: 9999;
67
+
68
+ --breakpoint-xs: 480px;
69
+ --breakpoint-sm: 640px;
70
+ --breakpoint-md: 768px;
71
+ --breakpoint-lg: 1024px;
72
+ --breakpoint-xl: 1280px;
83
73
  --breakpoint-2xl: 1536px;
84
74
 
85
- /* ── Opacity ── */
86
75
  --opacity-disabled: 0.5;
87
- --opacity-muted: 0.6;
88
- --opacity-hover: 0.8;
89
- --opacity-visible: 1;
90
-
91
- /* ── Typography ── */
92
- --font-body: 'Host Grotesk', system-ui, sans-serif;
93
- --font-accent: 'Tektur', system-ui, sans-serif;
94
- --font-mono: 'JetBrains Mono', ui-monospace, monospace;
95
-
96
- --display-xl-size: var(--text-3xl);
97
- --display-xl-weight: 500;
98
- --display-xl-spacing: -1px;
99
-
100
- --heading-size: var(--text-xl);
101
- --heading-weight: 500;
102
-
103
- /* ── Type scale ── */
104
- --text-xs: 12px; /* uppercase labels, badges, counters — decorative only */
105
- --text-sm: 14px; /* minimum readable size — captions, hints, metadata */
106
- --text-md: 15px; /* body text */
107
- --text-lg: clamp(18px, 1.5vw, 20px);
108
- --text-xl: clamp(22px, 2.5vw, 26px);
76
+ --opacity-muted: 0.6;
77
+ --opacity-hover: 0.8;
78
+ --opacity-visible: 1;
79
+
80
+ --font-body: 'Host Grotesk', system-ui, sans-serif;
81
+ --font-accent: 'Tektur', system-ui, sans-serif;
82
+ --font-mono: 'JetBrains Mono', ui-monospace, monospace;
83
+
84
+ --text-xs: 12px;
85
+ --text-sm: 14px;
86
+ --text-md: 15px;
87
+ --text-lg: clamp(18px, 1.5vw, 20px);
88
+ --text-xl: clamp(22px, 2.5vw, 26px);
109
89
  --text-2xl: clamp(28px, 3vw, 36px);
110
90
  --text-3xl: clamp(36px, 5vw, 52px);
111
91
 
112
- --body-size: var(--text-md);
92
+ --display-xl-size: var(--text-3xl);
93
+ --display-xl-weight: 500;
94
+ --display-xl-spacing: -1px;
95
+ --heading-size: var(--text-xl);
96
+ --heading-weight: 500;
97
+ --heading-lh: 1.2;
98
+ --body-size: var(--text-md);
113
99
  --body-weight: 500;
114
- --body-lh: 1.7;
115
-
116
- --wordmark-size: clamp(20px, 2.5vw, 28px);
117
- --wordmark-weight: 500;
100
+ --body-lh: 1.7;
101
+ --wordmark-size: clamp(20px, 2.5vw, 28px);
102
+ --wordmark-weight: 500;
118
103
  --wordmark-spacing: clamp(8px, 1.2vw, 14px);
119
-
120
- --section-title-size: var(--text-xs);
121
- --section-title-weight: 600;
104
+ --section-title-size: var(--text-xs);
105
+ --section-title-weight: 600;
122
106
  --section-title-spacing: 4px;
123
-
124
- --ui-accent-size: 16px;
125
- --ui-accent-weight: 600;
107
+ --ui-accent-size: 16px;
108
+ --ui-accent-weight: 600;
126
109
  --ui-accent-spacing: 1px;
127
-
128
110
  --code-size: var(--text-sm);
129
- --code-lh: 1.8;
130
-
131
- --label-inline-size: var(--text-xs);
111
+ --code-lh: 1.8;
112
+ --label-inline-size: var(--text-xs);
132
113
  --label-inline-spacing: 3px;
133
114
 
134
- /* ── Interactive ── */
135
- --touch-min: 24px;
136
- --touch-pad: 4px;
115
+ --touch-min: 24px;
116
+ --touch-pad: 4px;
137
117
 
138
- /* ── Spacing ── */
139
- --space-xs: 4px;
140
- --space-sm: 8px;
141
- --space-md: 16px;
142
- --space-lg: 24px;
143
- --space-xl: 40px;
118
+ --space-xs: 4px;
119
+ --space-sm: 8px;
120
+ --space-md: 16px;
121
+ --space-lg: 24px;
122
+ --space-xl: 40px;
144
123
  --space-2xl: 64px;
145
124
  --space-3xl: 96px;
146
125
  --space-4xl: 128px;
147
126
 
148
- /* ── Radii ── */
149
- --radius-sm: 4px;
150
- --radius-md: 10px;
151
- --radius-lg: 14px;
152
- --radius-xl: 20px;
127
+ --radius-sm: 4px;
128
+ --radius-md: 10px;
129
+ --radius-lg: 14px;
130
+ --radius-xl: 20px;
153
131
  --radius-full: 9999px;
154
132
 
155
- /* ── Transitions ── */
156
133
  --transition-fast: 120ms ease;
157
134
  --transition-base: 200ms ease;
158
135
  --transition-slow: 400ms ease;
159
136
 
160
- /* ── Motion ── */
161
137
  --ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
162
- --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
138
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
163
139
  --duration-enter: 500ms;
164
- --duration-exit: 300ms;
140
+ --duration-exit: 300ms;
165
141
 
166
- /* ── Gradients ── */
167
142
  --gradient-display-text: linear-gradient(135deg, rgb(232, 232, 236) 0%, rgb(124, 124, 137) 100%);
168
- --gradient-accent-text: linear-gradient(90deg, var(--accent-primary), var(--accent-secondary));
169
- --gradient-divider: linear-gradient(90deg, transparent, var(--border-subtle), transparent);
143
+ --gradient-accent-text: linear-gradient(90deg, var(--accent-primary), var(--accent-secondary));
144
+ --gradient-divider: linear-gradient(90deg, transparent, rgb(24, 24, 30), transparent);
170
145
  --gradient-divider-glow: linear-gradient(90deg, transparent, rgba(var(--accent-primary-rgb),0.2), rgba(var(--accent-secondary-rgb),0.12), transparent);
171
- --gradient-page-ambient: radial-gradient(ellipse, rgba(var(--white-rgb),0.015) 0%, transparent 70%);
172
-
173
- /* ── Glow ── */
174
- --glow-white:
175
- 0 0 6px rgba(var(--text-primary-rgb),0.6),
176
- 0 0 18px rgba(var(--text-primary-rgb),0.25),
177
- 0 0 40px rgba(var(--text-primary-rgb),0.1);
178
-
179
- --glow-primary:
180
- 0 0 8px rgba(var(--accent-primary-rgb),0.9),
181
- 0 0 20px rgba(var(--accent-primary-rgb),0.5),
182
- 0 0 44px rgba(var(--accent-primary-rgb),0.25),
183
- 0 0 80px rgba(var(--accent-primary-rgb),0.1);
184
-
185
- --glow-secondary:
186
- 0 0 8px rgba(var(--accent-secondary-rgb),0.9),
187
- 0 0 20px rgba(var(--accent-secondary-rgb),0.4),
188
- 0 0 40px rgba(var(--accent-secondary-rgb),0.15);
189
-
190
- --glow-line-white: linear-gradient(90deg, transparent, rgba(var(--text-primary-rgb),0.35), transparent);
191
- --glow-line-blue: linear-gradient(90deg, transparent, rgba(var(--accent-primary-rgb),0.7), transparent);
146
+ --gradient-page-ambient: radial-gradient(ellipse, rgba(255, 255, 255,0.015) 0%, transparent 70%);
147
+
148
+ --glow-white: 0 0 6px rgba(var(--text-primary-rgb),0.6), 0 0 18px rgba(var(--text-primary-rgb),0.25), 0 0 40px rgba(var(--text-primary-rgb),0.1);
149
+ --glow-primary: 0 0 8px rgba(var(--accent-primary-rgb),0.9), 0 0 20px rgba(var(--accent-primary-rgb),0.5), 0 0 44px rgba(var(--accent-primary-rgb),0.25), 0 0 80px rgba(var(--accent-primary-rgb),0.1);
150
+ --glow-secondary: 0 0 8px rgba(var(--accent-secondary-rgb),0.9), 0 0 20px rgba(var(--accent-secondary-rgb),0.4), 0 0 40px rgba(var(--accent-secondary-rgb),0.15);
151
+
152
+ --glow-line-white: linear-gradient(90deg, transparent, rgba(var(--text-primary-rgb),0.35), transparent);
153
+ --glow-line-blue: linear-gradient(90deg, transparent, rgba(var(--accent-primary-rgb),0.7), transparent);
192
154
  --glow-line-gradient: linear-gradient(90deg, transparent, var(--accent-primary), var(--accent-secondary), transparent);
193
155
 
194
- /* ── Card / Ambient Glow ── */
195
- --glow-card-hover: 0 0 20px rgba(var(--accent-primary-rgb),0.08), 0 0 40px rgba(var(--accent-secondary-rgb),0.04);
156
+ --glow-card-hover: 0 0 20px rgba(var(--accent-primary-rgb),0.08), 0 0 40px rgba(var(--accent-secondary-rgb),0.04);
196
157
  --gradient-border-glow: linear-gradient(135deg, rgba(var(--accent-primary-rgb),0.15), rgba(var(--accent-secondary-rgb),0.1), rgba(var(--accent-primary-rgb),0.05));
197
158
  --gradient-ambient: radial-gradient(circle at 15% 85%, rgba(var(--accent-primary-rgb),0.04) 0%, transparent 50%),
198
159
  radial-gradient(circle at 85% 15%, rgba(var(--accent-secondary-rgb),0.03) 0%, transparent 50%);
199
160
 
200
- /* ── Focus ── */
201
161
  --focus-ring: 0 0 0 1px rgba(var(--accent-primary-rgb),0.25);
202
162
  --focus-glow: 0 0 0 1px rgba(var(--accent-primary-rgb),0.2), 0 0 6px rgba(var(--accent-primary-rgb),0.35), 0 0 16px rgba(var(--accent-primary-rgb),0.2), 0 0 40px rgba(var(--accent-secondary-rgb),0.12);
203
163
 
204
- /* ── Layout ── */
205
- --max-width: 1120px;
164
+ --max-width: 1120px;
206
165
  --max-width-sm: 720px;
207
- --nav-height: 64px;
166
+ --nav-height: 64px;
167
+
168
+ --bg-hover: rgba(255, 255, 255, 0.04);
169
+ --overlay-backdrop: rgba(0, 0, 0, 0.6);
208
170
 
209
- /* ── Utility ── */
210
- --bg-hover: rgba(var(--white-rgb), 0.04);
211
- --overlay-backdrop: rgba(var(--black-rgb), 0.6);
212
171
 
213
172
  }
214
173
 
@@ -294,7 +253,7 @@
294
253
  }
295
254
 
296
255
  /* arc-avatar */
297
- .arc-avatar { display: inline-flex; }
256
+ .arc-avatar { display: inline-flex; position: relative; }
298
257
 
299
258
  .arc-avatar .avatar {
300
259
  display: inline-flex;
@@ -331,10 +290,36 @@
331
290
  user-select: none;
332
291
  }
333
292
 
293
+ /* Shape variants */
294
+ .arc-avatar[data-shape="square"] .avatar,
295
+ .arc-avatar[data-shape="square"] .avatar__img { border-radius: var(--radius-md); }
296
+ .arc-avatar[data-shape="rounded"] .avatar,
297
+ .arc-avatar[data-shape="rounded"] .avatar__img { border-radius: var(--radius-lg); }
298
+
334
299
  .arc-avatar[data-size="sm"] .avatar__initials { font-size: var(--text-xs); }
335
300
  .arc-avatar[data-size="md"] .avatar__initials { font-size: var(--text-sm); }
336
301
  .arc-avatar[data-size="lg"] .avatar__initials { font-size: var(--text-lg); }
337
302
 
303
+ /* Status indicator */
304
+ .arc-avatar .avatar__status {
305
+ position: absolute;
306
+ bottom: 0;
307
+ right: 0;
308
+ width: 10px;
309
+ height: 10px;
310
+ border-radius: var(--radius-full);
311
+ border: 2px solid var(--bg-deep);
312
+ box-sizing: border-box;
313
+ }
314
+
315
+ .arc-avatar[data-size="sm"] .avatar__status { width: 8px; height: 8px; }
316
+ .arc-avatar[data-size="lg"] .avatar__status { width: 14px; height: 14px; border-width: 3px; }
317
+
318
+ .arc-avatar[data-status="online"] .avatar__status { background: var(--color-success); }
319
+ .arc-avatar[data-status="offline"] .avatar__status { background: var(--text-ghost); }
320
+ .arc-avatar[data-status="busy"] .avatar__status { background: var(--color-error); }
321
+ .arc-avatar[data-status="away"] .avatar__status { background: var(--color-warning); }
322
+
338
323
  @media (prefers-reduced-motion: reduce) {
339
324
  .arc-avatar *,
340
325
  .arc-avatar *::before,
@@ -410,6 +395,10 @@
410
395
  .arc-badge[data-variant="error"]:hover .badge { box-shadow: 0 0 12px rgba(var(--color-error-rgb), 0.15); }
411
396
  .arc-badge[data-variant="info"]:hover .badge { box-shadow: 0 0 12px rgba(var(--color-info-rgb), 0.15); }
412
397
 
398
+ /* Sizes */
399
+ .arc-badge[data-size="sm"] .badge { font-size: calc(var(--text-xs) - 1px); padding: 2px var(--space-xs); }
400
+ .arc-badge[data-size="lg"] .badge { font-size: var(--text-sm); padding: var(--space-sm) var(--space-md); }
401
+
413
402
  @media (prefers-reduced-motion: reduce) {
414
403
  .arc-badge *,
415
404
  .arc-badge *::before,
@@ -420,125 +409,29 @@
420
409
  }
421
410
  }
422
411
 
423
- /* arc-callout */
424
- .arc-callout { display: block; }
425
-
426
- .arc-callout .callout {
427
- display: flex;
428
- flex-direction: column;
429
- gap: var(--space-sm);
430
- padding: var(--space-md) var(--space-lg);
431
- border-radius: var(--radius-md);
432
- border: 1px solid var(--border-default);
433
- background: var(--bg-card);
434
- font-family: var(--font-body);
435
- font-size: var(--text-sm);
436
- line-height: 1.7;
437
- color: var(--text-secondary);
438
- }
439
-
440
- .arc-callout .callout__header {
441
- display: flex;
442
- align-items: center;
443
- gap: var(--space-sm);
444
- }
445
-
446
- .arc-callout .callout__icon {
447
- flex-shrink: 0;
448
- display: flex;
449
- align-items: center;
450
- }
451
-
452
- .arc-callout .callout__label {
453
- font-family: var(--font-accent);
454
- font-size: var(--text-xs);
455
- font-weight: 600;
456
- letter-spacing: 1.5px;
457
- text-transform: uppercase;
458
- }
459
-
460
- .arc-callout .callout__content {
461
- min-width: 0;
462
- }
463
-
464
- /* ── Info ── */
465
- .arc-callout[data-variant="info"] .callout {
466
- border-color: rgba(var(--accent-primary-rgb), 0.12);
467
- background: rgba(var(--accent-primary-rgb), 0.04);
468
- }
469
- .arc-callout[data-variant="info"] .callout__icon { color: var(--accent-primary); }
470
- .arc-callout[data-variant="info"] .callout__label { color: var(--accent-primary); }
471
-
472
- /* ── Warning ── */
473
- .arc-callout[data-variant="warning"] .callout {
474
- border-color: rgba(var(--color-warning-rgb), 0.15);
475
- background: rgba(var(--color-warning-rgb), 0.04);
476
- }
477
- .arc-callout[data-variant="warning"] .callout__icon { color: var(--color-warning); }
478
- .arc-callout[data-variant="warning"] .callout__label { color: var(--color-warning); }
479
-
480
- /* ── Tip ── */
481
- .arc-callout[data-variant="tip"] .callout {
482
- border-color: rgba(var(--color-success-rgb), 0.15);
483
- background: rgba(var(--color-success-rgb), 0.04);
484
- }
485
- .arc-callout[data-variant="tip"] .callout__icon { color: var(--color-success); }
486
- .arc-callout[data-variant="tip"] .callout__label { color: var(--color-success); }
487
-
488
- /* ── Danger ── */
489
- .arc-callout[data-variant="danger"] .callout {
490
- border-color: rgba(var(--color-error-rgb), 0.15);
491
- background: rgba(var(--color-error-rgb), 0.04);
492
- }
493
- .arc-callout[data-variant="danger"] .callout__icon { color: var(--color-error); }
494
- .arc-callout[data-variant="danger"] .callout__label { color: var(--color-error); }
495
-
496
- @media (prefers-reduced-motion: reduce) {
497
- .arc-callout *,
498
- .arc-callout *::before,
499
- .arc-callout *::after {
500
- animation-duration: 0.01ms !important;
501
- animation-iteration-count: 1 !important;
502
- transition-duration: 0.01ms !important;
503
- }
504
- }
505
-
506
412
  /* arc-card */
507
413
  .arc-card { display: block; }
508
414
 
509
- .arc-card .card {
510
- position: relative;
511
- border-radius: var(--radius-lg);
512
- padding: 1px;
415
+ .arc-card .card { height: 100%; }
416
+
417
+ /* Suppress hover effect when no href and not interactive */
418
+ .arc-card(:not([href]):not([interactive])) .card:hover {
513
419
  background: var(--border-subtle);
514
- transition: background var(--transition-slow);
515
- text-decoration: none;
516
- display: flex;
517
- flex-direction: column;
518
- height: 100%;
519
420
  }
520
-
521
- .arc-card[href] .card:hover {
522
- background: linear-gradient(135deg, rgba(var(--accent-primary-rgb),0.3), rgba(var(--accent-secondary-rgb),0.15), var(--border-default));
421
+ .arc-card(:not([href]):not([interactive])) .card:hover .card__inner {
422
+ box-shadow: none;
523
423
  }
524
424
 
425
+ .arc-card[interactive] .card { cursor: pointer; }
426
+
525
427
  .arc-card .card__inner {
526
- position: relative;
527
- background: var(--bg-card);
528
- border-radius: calc(var(--radius-lg) - 1px);
529
428
  padding: var(--space-xl) var(--space-lg);
530
- flex: 1;
531
- min-height: 0;
532
- display: flex;
533
- flex-direction: column;
534
- transition: box-shadow var(--transition-slow);
535
429
  }
536
430
 
537
- .arc-card .card:hover .card__inner {
538
- box-shadow: inset 0 1px 0 var(--bg-hover), var(--glow-card-hover);
539
- }
540
-
541
- .arc-card .card:focus-visible { outline: none; box-shadow: var(--focus-glow); border-radius: var(--radius-lg); }
431
+ /* Padding variants */
432
+ .arc-card[data-padding="none"] .card__inner { padding: 0; }
433
+ .arc-card[data-padding="sm"] .card__inner { padding: var(--space-md) var(--space-sm); }
434
+ .arc-card[data-padding="lg"] .card__inner { padding: var(--space-2xl) var(--space-xl); }
542
435
 
543
436
  .arc-card .card__body {
544
437
  flex: 1;
@@ -889,6 +782,33 @@
889
782
  background: linear-gradient(180deg, transparent, rgba(var(--text-primary-rgb),0.35), transparent);
890
783
  }
891
784
 
785
+ /* Labeled divider */
786
+ .arc-divider .divider--labeled {
787
+ display: flex;
788
+ align-items: center;
789
+ gap: var(--space-md);
790
+ height: auto;
791
+ background: none !important;
792
+ box-shadow: none !important;
793
+ }
794
+
795
+ .arc-divider .divider__line {
796
+ flex: 1;
797
+ height: 1px;
798
+ background: var(--gradient-divider);
799
+ }
800
+
801
+ .arc-divider .divider__label {
802
+ font-family: var(--font-accent);
803
+ font-size: var(--text-xs);
804
+ font-weight: 600;
805
+ letter-spacing: 1.5px;
806
+ text-transform: uppercase;
807
+ color: var(--text-muted);
808
+ white-space: nowrap;
809
+ flex-shrink: 0;
810
+ }
811
+
892
812
  @keyframes divider-shimmer {
893
813
  0%, 100% { background-position: 200% 0; }
894
814
  50% { background-position: -100% 0; }
@@ -943,39 +863,14 @@
943
863
  /* arc-feature-card */
944
864
  .arc-feature-card { display: block; height: 100%; }
945
865
 
946
- .arc-feature-card .card {
947
- position: relative;
948
- border-radius: var(--radius-lg);
949
- height: 100%;
950
- padding: 1px;
951
- background: var(--border-subtle);
952
- transition: background var(--transition-slow);
953
- text-decoration: none;
954
- display: flex;
955
- flex-direction: column;
956
- }
957
-
958
- .arc-feature-card .card:hover {
959
- background: linear-gradient(135deg, rgba(var(--accent-primary-rgb),0.3), rgba(var(--accent-secondary-rgb),0.15), var(--border-default));
960
- }
866
+ .arc-feature-card .card { height: 100%; }
961
867
 
962
868
  .arc-feature-card .card__inner {
963
- position: relative;
964
- background: var(--bg-card);
965
- border-radius: calc(var(--radius-lg) - 1px);
966
869
  padding: var(--space-xl) var(--space-lg);
967
- display: flex;
968
- flex-direction: column;
969
870
  gap: var(--space-md);
970
- flex: 1;
971
- transition: box-shadow var(--transition-slow);
972
871
  z-index: 1;
973
872
  }
974
873
 
975
- .arc-feature-card .card:hover .card__inner {
976
- box-shadow: inset 0 1px 0 var(--bg-hover), var(--glow-card-hover);
977
- }
978
-
979
874
  .arc-feature-card .card__icon {
980
875
  width: 44px;
981
876
  height: 44px;
@@ -1025,8 +920,6 @@
1025
920
 
1026
921
  .arc-feature-card .card:hover .card__rule { opacity: 0.5; width: 48px; }
1027
922
 
1028
- .arc-feature-card .card:focus-visible { outline: none; box-shadow: var(--focus-glow); border-radius: var(--radius-lg); }
1029
-
1030
923
  @media (max-width: 768px) {
1031
924
  .arc-feature-card .card__inner { padding: var(--space-lg) var(--space-md); }
1032
925
  }
@@ -1400,6 +1293,12 @@
1400
1293
  border-radius: var(--radius-md);
1401
1294
  }
1402
1295
 
1296
+ .arc-skeleton .skeleton-group {
1297
+ display: flex;
1298
+ flex-direction: column;
1299
+ gap: var(--space-sm);
1300
+ }
1301
+
1403
1302
  @media (prefers-reduced-motion: reduce) {
1404
1303
  .arc-skeleton *,
1405
1304
  .arc-skeleton *::before,
@@ -1533,6 +1432,25 @@
1533
1432
  color: var(--text-muted);
1534
1433
  }
1535
1434
 
1435
+ .arc-stat .stat__trend {
1436
+ display: inline-flex;
1437
+ align-items: center;
1438
+ gap: 4px;
1439
+ font-family: var(--font-mono);
1440
+ font-size: var(--text-sm);
1441
+ font-weight: 500;
1442
+ margin-top: var(--space-xs);
1443
+ }
1444
+
1445
+ .arc-stat[data-trend="up"] .stat__trend { color: var(--color-success); }
1446
+ .arc-stat[data-trend="down"] .stat__trend { color: var(--color-error); }
1447
+ .arc-stat[data-trend="neutral"] .stat__trend { color: var(--text-muted); }
1448
+
1449
+ .arc-stat .stat__trend-arrow {
1450
+ width: 12px;
1451
+ height: 12px;
1452
+ }
1453
+
1536
1454
  /* arc-stepper */
1537
1455
  .arc-stepper { display: block; }
1538
1456
 
@@ -2003,7 +1921,27 @@
2003
1921
 
2004
1922
  /* arc-button */
2005
1923
  .arc-button { display: inline-flex; }
2006
- .arc-button[disabled] { pointer-events: none; }
1924
+ .arc-button[disabled],
1925
+ .arc-button[loading] { pointer-events: none; }
1926
+
1927
+ .arc-button[loading] .btn { opacity: 0.7; }
1928
+
1929
+ .arc-button .btn__spinner {
1930
+ display: none;
1931
+ width: 14px;
1932
+ height: 14px;
1933
+ border: 2px solid currentColor;
1934
+ border-top-color: transparent;
1935
+ border-radius: var(--radius-full);
1936
+ animation: arc-btn-spin 600ms linear infinite;
1937
+ }
1938
+
1939
+ .arc-button[loading] .btn__spinner { display: inline-block; }
1940
+ .arc-button[loading] .btn__label { opacity: 0.6; }
1941
+
1942
+ @keyframes arc-btn-spin {
1943
+ to { transform: rotate(360deg); }
1944
+ }
2007
1945
 
2008
1946
  .arc-button .btn {
2009
1947
  display: inline-flex;
@@ -2035,55 +1973,26 @@
2035
1973
  .arc-button[data-size="md"] .btn { font-size: var(--text-xs); padding: var(--space-sm) var(--space-lg); }
2036
1974
  .arc-button[data-size="lg"] .btn { font-size: var(--text-xs); padding: var(--space-md) var(--space-xl); letter-spacing: 3px; }
2037
1975
 
2038
- /* Primary */
2039
- .arc-button:not([data-variant]) .btn,
2040
- .arc-button[data-variant="primary"] .btn {
1976
+ /* Default → primary */
1977
+ .arc-button:not([data-variant]) .btn {
2041
1978
  background: var(--accent-primary);
2042
1979
  color: var(--bg-deep);
2043
1980
  border-color: var(--accent-primary);
2044
1981
  }
2045
- .arc-button:not([data-variant]) .btn:hover,
2046
- .arc-button[data-variant="primary"] .btn:hover { box-shadow: var(--glow-primary); }
1982
+ .arc-button:not([data-variant]) .btn:hover { box-shadow: var(--glow-primary); }
1983
+
1984
+ /* :active scale */
2047
1985
  .arc-button:not([data-variant]) .btn:active,
2048
1986
  .arc-button[data-variant="primary"] .btn:active { transform: scale(0.97); box-shadow: 0 0 8px rgba(var(--accent-primary-rgb),0.5); }
2049
-
2050
- /* Secondary */
2051
- .arc-button[data-variant="secondary"] .btn {
2052
- background: transparent;
2053
- color: var(--text-primary);
2054
- border-color: var(--border-default);
2055
- }
2056
- .arc-button[data-variant="secondary"] .btn:hover {
2057
- border-color: var(--accent-primary);
2058
- color: var(--accent-primary);
2059
- box-shadow: 0 0 20px var(--accent-primary-ring);
2060
- }
2061
1987
  .arc-button[data-variant="secondary"] .btn:active {
2062
1988
  transform: scale(0.97);
2063
1989
  background: rgba(var(--accent-primary-rgb),0.05);
2064
1990
  }
2065
-
2066
- /* Ghost */
2067
- .arc-button[data-variant="ghost"] .btn {
2068
- background: transparent;
2069
- color: var(--text-muted);
2070
- border-color: transparent;
2071
- }
2072
- .arc-button[data-variant="ghost"] .btn:hover {
2073
- color: var(--text-primary);
2074
- background: var(--bg-hover);
2075
- }
2076
1991
  .arc-button[data-variant="ghost"] .btn:active {
2077
1992
  transform: scale(0.97);
2078
1993
  background: var(--bg-elevated);
2079
1994
  }
2080
1995
 
2081
- /* Focus */
2082
- .arc-button .btn:focus-visible { outline: none; box-shadow: var(--focus-glow); }
2083
-
2084
- /* Disabled */
2085
- .arc-button[disabled] .btn { opacity: 0.4; cursor: not-allowed; pointer-events: none; }
2086
-
2087
1996
  /* Prefix / Suffix */
2088
1997
  .arc-button .btn__prefix,
2089
1998
  .arc-button .btn__suffix {
@@ -2162,59 +2071,41 @@
2162
2071
  .arc-icon-button[data-size="md"] .btn--has-text { padding: var(--space-xs) var(--space-sm); font-size: var(--text-xs); }
2163
2072
  .arc-icon-button[data-size="lg"] .btn--has-text { padding: var(--space-sm) var(--space-md); font-size: var(--text-xs); }
2164
2073
 
2165
- /* Ghost (default) */
2166
- .arc-icon-button:not([data-variant]) .btn,
2167
- .arc-icon-button[data-variant="ghost"] .btn {
2074
+ /* Default ghost */
2075
+ .arc-icon-button:not([data-variant]) .btn {
2168
2076
  background: transparent;
2169
2077
  color: var(--text-muted);
2170
2078
  border-color: transparent;
2171
2079
  }
2172
- .arc-icon-button:not([data-variant]) .btn:hover,
2173
- .arc-icon-button[data-variant="ghost"] .btn:hover {
2080
+ .arc-icon-button:not([data-variant]) .btn:hover {
2174
2081
  color: var(--text-primary);
2175
2082
  background: var(--bg-hover);
2176
2083
  }
2084
+
2085
+ /* :active scale */
2177
2086
  .arc-icon-button:not([data-variant]) .btn:active,
2178
2087
  .arc-icon-button[data-variant="ghost"] .btn:active {
2179
2088
  transform: scale(0.93);
2180
2089
  background: var(--bg-elevated);
2181
2090
  }
2182
-
2183
- /* Secondary */
2184
- .arc-icon-button[data-variant="secondary"] .btn {
2185
- background: transparent;
2186
- color: var(--text-secondary);
2187
- border-color: var(--border-default);
2188
- }
2189
- .arc-icon-button[data-variant="secondary"] .btn:hover {
2190
- border-color: var(--accent-primary);
2191
- color: var(--accent-primary);
2192
- box-shadow: 0 0 16px var(--accent-primary-ring);
2193
- }
2194
2091
  .arc-icon-button[data-variant="secondary"] .btn:active {
2195
2092
  transform: scale(0.93);
2196
2093
  background: rgba(var(--accent-primary-rgb), 0.05);
2197
2094
  }
2198
-
2199
- /* Primary */
2200
- .arc-icon-button[data-variant="primary"] .btn {
2201
- background: var(--accent-primary);
2202
- color: var(--bg-deep);
2203
- border-color: var(--accent-primary);
2204
- }
2205
- .arc-icon-button[data-variant="primary"] .btn:hover {
2206
- box-shadow: var(--glow-primary);
2207
- }
2208
2095
  .arc-icon-button[data-variant="primary"] .btn:active {
2209
2096
  transform: scale(0.93);
2210
2097
  box-shadow: 0 0 8px rgba(var(--accent-primary-rgb), 0.5);
2211
2098
  }
2212
2099
 
2213
- /* Focus */
2214
- .arc-icon-button .btn:focus-visible { outline: none; box-shadow: var(--focus-glow); }
2100
+ /* IconButton secondary uses text-secondary instead of text-primary */
2101
+ .arc-icon-button[data-variant="secondary"] .btn {
2102
+ color: var(--text-secondary);
2103
+ }
2215
2104
 
2216
- /* Disabled */
2217
- .arc-icon-button[disabled] .btn { opacity: 0.4; cursor: not-allowed; pointer-events: none; }
2105
+ /* IconButton secondary hover uses smaller glow */
2106
+ .arc-icon-button[data-variant="secondary"] .btn:hover {
2107
+ box-shadow: 0 0 16px var(--accent-primary-ring);
2108
+ }
2218
2109
 
2219
2110
  @media (prefers-reduced-motion: reduce) {
2220
2111
  .arc-icon-button *,
@@ -2278,6 +2169,12 @@
2278
2169
  margin-bottom: var(--space-sm);
2279
2170
  }
2280
2171
 
2172
+ /* Center alignment */
2173
+ .arc-footer[data-align="center"] .footer { text-align: center; }
2174
+ .arc-footer[data-align="center"] .footer__columns { justify-items: center; }
2175
+ .arc-footer[data-align="center"] .footer__social { justify-content: center; }
2176
+ .arc-footer[data-align="center"] .footer__legal { text-align: center; }
2177
+
2281
2178
  .arc-footer .footer__legal {
2282
2179
  padding-top: var(--space-md);
2283
2180
  border-top: 1px solid var(--border-subtle);
@@ -2310,6 +2207,15 @@
2310
2207
  text-underline-offset: 3px;
2311
2208
  }
2312
2209
 
2210
+ /* Underline variants */
2211
+ .arc-link[data-underline="always"] .link {
2212
+ text-decoration: underline;
2213
+ text-underline-offset: 3px;
2214
+ }
2215
+ .arc-link[data-underline="never"] .link:hover {
2216
+ text-decoration: none;
2217
+ }
2218
+
2313
2219
  .arc-link[data-variant="muted"] .link {
2314
2220
  color: var(--text-muted);
2315
2221
  }
@@ -2374,15 +2280,19 @@
2374
2280
 
2375
2281
  .arc-top-bar .topbar {
2376
2282
  position: relative;
2377
- display: flex;
2378
- align-items: center;
2379
2283
  height: var(--nav-height);
2380
2284
  padding: 0 var(--space-lg);
2381
2285
  background: color-mix(in srgb, var(--bg-deep) 85%, transparent);
2382
2286
  backdrop-filter: blur(12px) saturate(130%);
2383
2287
  -webkit-backdrop-filter: blur(12px) saturate(130%);
2384
2288
  border-bottom: 1px solid var(--border-subtle);
2289
+ }
2290
+
2291
+ .arc-top-bar .topbar__content {
2292
+ display: flex;
2293
+ align-items: center;
2385
2294
  gap: var(--space-md);
2295
+ height: 100%;
2386
2296
  }
2387
2297
 
2388
2298
  .arc-top-bar .topbar__glow {
@@ -2622,9 +2532,17 @@
2622
2532
  padding-inline: var(--space-lg);
2623
2533
  }
2624
2534
 
2625
- .arc-container[narrow] .container {
2626
- max-width: var(--max-width-sm);
2627
- }
2535
+ .arc-container[narrow] .container,
2536
+ .arc-container[data-size="sm"] .container { max-width: var(--max-width-sm); }
2537
+ .arc-container[data-size="md"] .container { max-width: var(--max-width); }
2538
+ .arc-container[data-size="lg"] .container { max-width: 1400px; }
2539
+ .arc-container[data-size="xl"] .container { max-width: 1600px; }
2540
+ .arc-container[data-size="full"] .container { max-width: none; }
2541
+
2542
+ /* Padding variants */
2543
+ .arc-container[data-padding="none"] .container { padding-inline: 0; }
2544
+ .arc-container[data-padding="sm"] .container { padding-inline: var(--space-sm); }
2545
+ .arc-container[data-padding="lg"] .container { padding-inline: var(--space-xl); }
2628
2546
 
2629
2547
  /* arc-dashboard-grid */
2630
2548
  .arc-dashboard-grid {
@@ -3021,6 +2939,19 @@
3021
2939
  animation: spinner-dash 1.4s ease-in-out infinite;
3022
2940
  }
3023
2941
 
2942
+ .arc-progress .progress__header {
2943
+ display: flex;
2944
+ justify-content: space-between;
2945
+ align-items: baseline;
2946
+ margin-bottom: var(--space-xs);
2947
+ }
2948
+
2949
+ .arc-progress .progress__value {
2950
+ font-family: var(--font-mono);
2951
+ font-size: var(--text-xs);
2952
+ color: var(--text-muted);
2953
+ }
2954
+
3024
2955
  @keyframes progress-indeterminate {
3025
2956
  0% { transform: translateX(-100%); }
3026
2957
  100% { transform: translateX(400%); }