@fpkit/acss 3.9.0 → 4.1.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/libs/components/alert/alert.css +1 -1
- package/libs/components/alert/alert.css.map +1 -1
- package/libs/components/alert/alert.min.css +2 -2
- package/libs/components/badge/badge.css +1 -1
- package/libs/components/badge/badge.css.map +1 -1
- package/libs/components/badge/badge.min.css +2 -2
- package/libs/components/buttons/button.css +1 -1
- package/libs/components/buttons/button.css.map +1 -1
- package/libs/components/buttons/button.min.css +2 -2
- package/libs/components/cards/card.css +1 -1
- package/libs/components/cards/card.css.map +1 -1
- package/libs/components/cards/card.min.css +2 -2
- package/libs/components/details/details.css +1 -1
- package/libs/components/details/details.css.map +1 -1
- package/libs/components/details/details.min.css +2 -2
- package/libs/components/dialog/dialog.css +1 -1
- package/libs/components/dialog/dialog.css.map +1 -1
- package/libs/components/dialog/dialog.min.css +2 -2
- package/libs/components/form/checkbox.css +1 -1
- package/libs/components/form/checkbox.css.map +1 -1
- package/libs/components/form/checkbox.min.css +2 -2
- package/libs/components/form/form.css +1 -1
- package/libs/components/form/form.css.map +1 -1
- package/libs/components/form/form.min.css +2 -2
- package/libs/components/icons/icon.d.cts +1 -1
- package/libs/components/icons/icon.d.ts +1 -1
- package/libs/components/link/link.css +1 -1
- package/libs/components/link/link.css.map +1 -1
- package/libs/components/link/link.min.css +2 -2
- package/libs/components/nav/nav.css +1 -1
- package/libs/components/nav/nav.css.map +1 -1
- package/libs/components/nav/nav.min.css +2 -2
- package/libs/components/progress/progress.css +1 -1
- package/libs/components/progress/progress.css.map +1 -1
- package/libs/components/progress/progress.min.css +2 -2
- package/libs/components/tag/tag.css +1 -1
- package/libs/components/tag/tag.css.map +1 -1
- package/libs/components/tag/tag.min.css +2 -2
- package/libs/components/text-to-speech/text-to-speech.css +1 -1
- package/libs/components/text-to-speech/text-to-speech.css.map +1 -1
- package/libs/components/text-to-speech/text-to-speech.min.css +2 -2
- package/libs/components/title/title.css +1 -1
- package/libs/components/title/title.css.map +1 -1
- package/libs/components/title/title.min.css +2 -2
- package/libs/{icons-df8e744f.d.ts → icons-952d9bc5.d.ts} +32 -32
- package/libs/icons.d.cts +1 -1
- package/libs/icons.d.ts +1 -1
- package/libs/index.css +1 -1
- package/libs/index.css.map +1 -1
- package/libs/index.d.cts +2 -2
- package/libs/index.d.ts +2 -2
- package/package.json +2 -2
- package/src/components/alert/alert.scss +22 -22
- package/src/components/badge/badge.scss +1 -1
- package/src/components/buttons/button.scss +8 -8
- package/src/components/cards/card.scss +7 -7
- package/src/components/details/details.scss +2 -3
- package/src/components/dialog/dialog.scss +4 -4
- package/src/components/form/checkbox.scss +11 -11
- package/src/components/form/form.scss +19 -10
- package/src/components/link/link.scss +1 -1
- package/src/components/nav/nav.scss +1 -1
- package/src/components/progress/progress.scss +2 -2
- package/src/components/tag/tag.scss +7 -7
- package/src/components/text-to-speech/text-to-speech.scss +1 -1
- package/src/components/title/title.scss +4 -4
- package/src/index.scss +15 -1
- package/src/sass/_globals.scss +3 -3
- package/src/sass/styles/_colors.scss +16 -0
- package/src/sass/tokens/_color-primitives.scss +112 -0
- package/src/sass/tokens/_color-semantic.scss +144 -0
- package/src/sass/tokens/_index.scss +15 -0
- package/src/sass/utilities/_color-bg.scss +62 -0
- package/src/sass/utilities/_color-border.scss +61 -0
- package/src/sass/utilities/_color-text.scss +58 -0
- package/src/sass/utilities/_index.scss +17 -0
- package/src/sass/utilities/color-utilities.stories.tsx +608 -0
- package/src/styles/alert/alert.css +19 -19
- package/src/styles/badge/badge.css +1 -1
- package/src/styles/buttons/button.css +8 -8
- package/src/styles/cards/card.css +7 -7
- package/src/styles/details/details.css +2 -3
- package/src/styles/details/details.css.map +1 -1
- package/src/styles/dialog/dialog.css +4 -4
- package/src/styles/form/checkbox.css +11 -11
- package/src/styles/form/form.css +26 -21
- package/src/styles/form/form.css.map +1 -1
- package/src/styles/index.css +516 -82
- package/src/styles/index.css.map +1 -1
- package/src/styles/link/link.css +1 -1
- package/src/styles/nav/nav.css +1 -1
- package/src/styles/progress/progress.css +2 -2
- package/src/styles/tag/tag.css +7 -7
- package/src/styles/text-to-speech/text-to-speech.css +1 -1
- package/src/styles/title/title.css +4 -4
- package/src/styles/title/title.css.map +1 -1
package/src/styles/index.css
CHANGED
|
@@ -1,4 +1,236 @@
|
|
|
1
1
|
@charset "UTF-8";
|
|
2
|
+
/**
|
|
3
|
+
* Color Tokens - Main Export
|
|
4
|
+
*
|
|
5
|
+
* This file exports the complete color token system.
|
|
6
|
+
* Import order matters: primitives must load before semantic tokens.
|
|
7
|
+
*
|
|
8
|
+
* Usage in main index.scss:
|
|
9
|
+
* @use "./sass/tokens";
|
|
10
|
+
*/
|
|
11
|
+
/* Tier 1: Primitive color scales (foundation) */
|
|
12
|
+
/**
|
|
13
|
+
* Color Primitives - Foundation Layer (Tier 1)
|
|
14
|
+
*
|
|
15
|
+
* Raw color values that form the foundation of the design system.
|
|
16
|
+
* All colors are WCAG AA compliant (4.5:1 for text, 3:1 for UI components).
|
|
17
|
+
*
|
|
18
|
+
* Pattern: --color-{hue}-{scale}
|
|
19
|
+
* Scale: 50 (lightest) to 900 (darkest)
|
|
20
|
+
*
|
|
21
|
+
* Industry-standard palette based on accessible color scales.
|
|
22
|
+
* No rebeccapurple or purple colors per project requirements.
|
|
23
|
+
*/
|
|
24
|
+
:root {
|
|
25
|
+
/* ========================================
|
|
26
|
+
Neutral Scale (Grays)
|
|
27
|
+
Purpose: Text, borders, surfaces, backgrounds
|
|
28
|
+
======================================== */
|
|
29
|
+
--color-neutral-0: #ffffff; /* Pure white - Surfaces, text inverse */
|
|
30
|
+
--color-neutral-50: #fafafa; /* Off-white - Secondary surfaces */
|
|
31
|
+
--color-neutral-100: #f5f5f5; /* Light gray - Disabled backgrounds, tertiary surfaces */
|
|
32
|
+
--color-neutral-200: #e5e5e5; /* Border subtle - Light borders, dividers */
|
|
33
|
+
--color-neutral-300: #d4d4d4; /* Border default - Standard borders */
|
|
34
|
+
--color-neutral-400: #a3a3a3; /* Border interactive - Hover borders, interactive elements */
|
|
35
|
+
--color-neutral-500: #737373; /* Text disabled - Disabled text, placeholders */
|
|
36
|
+
--color-neutral-600: #525252; /* Text tertiary - Less emphasized text */
|
|
37
|
+
--color-neutral-700: #404040; /* Text secondary - Secondary text */
|
|
38
|
+
--color-neutral-800: #262626; /* Text primary - Body text, primary content */
|
|
39
|
+
--color-neutral-900: #171717; /* Text emphasis - Headings, emphasized text */
|
|
40
|
+
/* ========================================
|
|
41
|
+
Blue Scale (Primary/Info)
|
|
42
|
+
Purpose: Primary brand, focus states, links, info messages
|
|
43
|
+
WCAG: 4.5:1+ contrast ratios verified
|
|
44
|
+
======================================== */
|
|
45
|
+
--color-blue-100: #dbeafe; /* Info background light - Subtle info backgrounds */
|
|
46
|
+
--color-blue-200: #bfdbfe; /* Info background - Info alert backgrounds */
|
|
47
|
+
--color-blue-300: #93c5fd; /* Info border light - Light info borders */
|
|
48
|
+
--color-blue-400: #60a5fa; /* Info hover - Hover states for info elements */
|
|
49
|
+
--color-blue-500: #3b82f6; /* Info default - Standard info color */
|
|
50
|
+
--color-blue-600: #2563eb; /* Primary default - Primary brand color */
|
|
51
|
+
--color-blue-700: #1d4ed8; /* Primary hover - Primary button hover */
|
|
52
|
+
--color-blue-800: #1e40af; /* Primary active - Primary button active/pressed */
|
|
53
|
+
--color-blue-900: #1e3a8a; /* Info text - Dark text on info backgrounds (WCAG AAA: 12.6:1) */
|
|
54
|
+
/* ========================================
|
|
55
|
+
Green Scale (Success)
|
|
56
|
+
Purpose: Success states, positive feedback, valid inputs
|
|
57
|
+
WCAG: 4.5:1+ contrast ratios verified
|
|
58
|
+
======================================== */
|
|
59
|
+
--color-green-100: #dcfce7; /* Success background light - Subtle success backgrounds */
|
|
60
|
+
--color-green-200: #bbf7d0; /* Success background - Success alert backgrounds */
|
|
61
|
+
--color-green-300: #86efac; /* Success border light - Light success borders */
|
|
62
|
+
--color-green-400: #4ade80; /* Success hover - Hover states for success elements */
|
|
63
|
+
--color-green-500: #22c55e; /* Success default - Standard success color */
|
|
64
|
+
--color-green-600: #16a34a; /* Success border - Success borders, checkmarks */
|
|
65
|
+
--color-green-700: #15803d; /* Success dark - Dark success emphasis */
|
|
66
|
+
--color-green-800: #166534; /* Success text - Dark text on success backgrounds (WCAG AAA: 8.3:1) */
|
|
67
|
+
--color-green-900: #14532d; /* Success emphasis - Highest contrast success text */
|
|
68
|
+
/* ========================================
|
|
69
|
+
Red Scale (Error/Danger)
|
|
70
|
+
Purpose: Errors, destructive actions, invalid inputs, alerts
|
|
71
|
+
WCAG: 4.5:1+ contrast ratios verified
|
|
72
|
+
======================================== */
|
|
73
|
+
--color-red-100: #fee2e2; /* Error background light - Subtle error backgrounds */
|
|
74
|
+
--color-red-200: #fecaca; /* Error background - Error alert backgrounds */
|
|
75
|
+
--color-red-300: #fca5a5; /* Error border light - Light error borders */
|
|
76
|
+
--color-red-400: #f87171; /* Error hover - Hover states for error elements */
|
|
77
|
+
--color-red-500: #ef4444; /* Error default - Standard error color */
|
|
78
|
+
--color-red-600: #dc2626; /* Error border - Error borders, icons */
|
|
79
|
+
--color-red-700: #b91c1c; /* Error dark - Dark error emphasis */
|
|
80
|
+
--color-red-800: #991b1b; /* Error text - Dark text on error backgrounds (WCAG AAA: 10.3:1) */
|
|
81
|
+
--color-red-900: #7f1d1d; /* Error emphasis - Highest contrast error text */
|
|
82
|
+
/* ========================================
|
|
83
|
+
Amber Scale (Warning)
|
|
84
|
+
Purpose: Warnings, cautions, pending states
|
|
85
|
+
WCAG: 4.5:1+ contrast ratios verified
|
|
86
|
+
======================================== */
|
|
87
|
+
--color-amber-100: #fef3c7; /* Warning background light - Subtle warning backgrounds */
|
|
88
|
+
--color-amber-200: #fde68a; /* Warning background - Warning alert backgrounds */
|
|
89
|
+
--color-amber-300: #fcd34d; /* Warning border light - Light warning borders */
|
|
90
|
+
--color-amber-400: #fbbf24; /* Warning hover - Hover states for warning elements */
|
|
91
|
+
--color-amber-500: #f59e0b; /* Warning default - Standard warning color */
|
|
92
|
+
--color-amber-600: #d97706; /* Warning border - Warning borders, icons */
|
|
93
|
+
--color-amber-700: #b45309; /* Warning dark - Dark warning emphasis */
|
|
94
|
+
--color-amber-800: #92400e; /* Warning text - Dark text on warning backgrounds (WCAG AAA: 9.8:1) */
|
|
95
|
+
--color-amber-900: #78350f; /* Warning emphasis - Highest contrast warning text */
|
|
96
|
+
/* ========================================
|
|
97
|
+
Cyan Scale (Info Alternative)
|
|
98
|
+
Purpose: Alternative info states, highlights, accents
|
|
99
|
+
WCAG: 4.5:1+ contrast ratios verified
|
|
100
|
+
Note: Used instead of purple/rebeccapurple per requirements
|
|
101
|
+
======================================== */
|
|
102
|
+
--color-cyan-100: #cffafe; /* Info alt background light - Subtle cyan backgrounds */
|
|
103
|
+
--color-cyan-200: #a5f3fc; /* Info alt background - Cyan alert backgrounds */
|
|
104
|
+
--color-cyan-300: #67e8f9; /* Info alt border light - Light cyan borders */
|
|
105
|
+
--color-cyan-400: #22d3ee; /* Info alt hover - Hover states for cyan elements */
|
|
106
|
+
--color-cyan-500: #06b6d4; /* Info alt default - Standard cyan color */
|
|
107
|
+
--color-cyan-600: #0891b2; /* Info alt border - Cyan borders, icons */
|
|
108
|
+
--color-cyan-700: #0e7490; /* Info alt dark - Dark cyan emphasis */
|
|
109
|
+
--color-cyan-800: #155e75; /* Info alt text - Dark text on cyan backgrounds (WCAG AAA: 7.2:1) */
|
|
110
|
+
--color-cyan-900: #164e63; /* Info alt emphasis - Highest contrast cyan text */
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* Tier 2: Semantic color mappings (purpose-based) */
|
|
114
|
+
/**
|
|
115
|
+
* Color Semantic Tokens - Purpose Layer (Tier 2)
|
|
116
|
+
*
|
|
117
|
+
* Intent-based color mappings for common use cases.
|
|
118
|
+
* All semantic tokens reference primitive tokens (Tier 1).
|
|
119
|
+
*
|
|
120
|
+
* Pattern: --color-{purpose}-{variant}
|
|
121
|
+
*
|
|
122
|
+
* This layer provides meaning to colors and enables easy theming.
|
|
123
|
+
* To theme the application, override these semantic tokens.
|
|
124
|
+
*/
|
|
125
|
+
:root {
|
|
126
|
+
/* ========================================
|
|
127
|
+
Brand Colors
|
|
128
|
+
Purpose: Primary and secondary brand identity
|
|
129
|
+
======================================== */
|
|
130
|
+
/* Primary brand color - Main CTAs, primary buttons, primary links */
|
|
131
|
+
--color-primary: var(--color-blue-600); /* #2563eb */
|
|
132
|
+
--color-primary-hover: var(--color-blue-700); /* #1d4ed8 */
|
|
133
|
+
--color-primary-active: var(--color-blue-800); /* #1e40af */
|
|
134
|
+
--color-primary-light: var(--color-blue-100); /* #dbeafe */
|
|
135
|
+
/* Secondary brand color - Secondary actions, alternative emphasis */
|
|
136
|
+
--color-secondary: var(--color-neutral-700); /* #404040 */
|
|
137
|
+
--color-secondary-hover: var(--color-neutral-800); /* #262626 */
|
|
138
|
+
--color-secondary-light: var(--color-neutral-100); /* #f5f5f5 */
|
|
139
|
+
/* ========================================
|
|
140
|
+
State Colors - Success
|
|
141
|
+
Purpose: Positive feedback, valid inputs, confirmations
|
|
142
|
+
======================================== */
|
|
143
|
+
--color-success: var(--color-green-600); /* #16a34a */
|
|
144
|
+
--color-success-bg: var(--color-green-100); /* #dcfce7 */
|
|
145
|
+
--color-success-border: var(--color-green-600); /* #16a34a */
|
|
146
|
+
--color-success-text: var(--color-green-800); /* #166534 */
|
|
147
|
+
--color-success-hover: var(--color-green-700); /* #15803d */
|
|
148
|
+
/* ========================================
|
|
149
|
+
State Colors - Error
|
|
150
|
+
Purpose: Errors, validation failures, destructive actions
|
|
151
|
+
======================================== */
|
|
152
|
+
--color-error: var(--color-red-600); /* #dc2626 */
|
|
153
|
+
--color-error-bg: var(--color-red-100); /* #fee2e2 */
|
|
154
|
+
--color-error-border: var(--color-red-600); /* #dc2626 */
|
|
155
|
+
--color-error-text: var(--color-red-800); /* #991b1b */
|
|
156
|
+
--color-error-hover: var(--color-red-700); /* #b91c1c */
|
|
157
|
+
/* ========================================
|
|
158
|
+
State Colors - Warning
|
|
159
|
+
Purpose: Warnings, cautions, pending actions
|
|
160
|
+
======================================== */
|
|
161
|
+
--color-warning: var(--color-amber-600); /* #d97706 */
|
|
162
|
+
--color-warning-bg: var(--color-amber-100); /* #fef3c7 */
|
|
163
|
+
--color-warning-border: var(--color-amber-600); /* #d97706 */
|
|
164
|
+
--color-warning-text: var(--color-amber-800); /* #92400e */
|
|
165
|
+
--color-warning-hover: var(--color-amber-700); /* #b45309 */
|
|
166
|
+
/* ========================================
|
|
167
|
+
State Colors - Info
|
|
168
|
+
Purpose: Informational messages, tips, notices
|
|
169
|
+
======================================== */
|
|
170
|
+
--color-info: var(--color-blue-500); /* #3b82f6 */
|
|
171
|
+
--color-info-bg: var(--color-blue-100); /* #dbeafe */
|
|
172
|
+
--color-info-border: var(--color-blue-500); /* #3b82f6 */
|
|
173
|
+
--color-info-text: var(--color-blue-900); /* #1e3a8a */
|
|
174
|
+
--color-info-hover: var(--color-blue-600); /* #2563eb */
|
|
175
|
+
/* ========================================
|
|
176
|
+
UI Surface Colors
|
|
177
|
+
Purpose: Backgrounds, containers, cards, modals
|
|
178
|
+
======================================== */
|
|
179
|
+
--color-surface: var(--color-neutral-0); /* #ffffff - Primary background */
|
|
180
|
+
--color-surface-secondary: var(--color-neutral-50); /* #fafafa - Secondary background */
|
|
181
|
+
--color-surface-tertiary: var(--color-neutral-100); /* #f5f5f5 - Tertiary background */
|
|
182
|
+
--color-surface-elevated: var(--color-neutral-0); /* #ffffff - Cards, modals, raised elements */
|
|
183
|
+
--color-surface-overlay: rgba(0, 0, 0, 0.5); /* Modal overlay, backdrop */
|
|
184
|
+
/* ========================================
|
|
185
|
+
Border Colors
|
|
186
|
+
Purpose: Borders, dividers, separators, outlines
|
|
187
|
+
======================================== */
|
|
188
|
+
--color-border: var(--color-neutral-300); /* #d4d4d4 - Default borders */
|
|
189
|
+
--color-border-subtle: var(--color-neutral-200); /* #e5e5e5 - Subtle borders, dividers */
|
|
190
|
+
--color-border-strong: var(--color-neutral-400); /* #a3a3a3 - Emphasized borders */
|
|
191
|
+
--color-border-interactive: var(--color-neutral-400); /* #a3a3a3 - Hover borders on inputs */
|
|
192
|
+
/* ========================================
|
|
193
|
+
Text Colors
|
|
194
|
+
Purpose: Body text, headings, labels, captions
|
|
195
|
+
======================================== */
|
|
196
|
+
--color-text: var(--color-neutral-800); /* #262626 - Primary body text */
|
|
197
|
+
--color-text-secondary: var(--color-neutral-700); /* #404040 - Secondary text, labels */
|
|
198
|
+
--color-text-tertiary: var(--color-neutral-600); /* #525252 - Tertiary text, captions */
|
|
199
|
+
--color-text-disabled: var(--color-neutral-500); /* #737373 - Disabled text */
|
|
200
|
+
--color-text-inverse: var(--color-neutral-0); /* #ffffff - Text on dark backgrounds */
|
|
201
|
+
/* ========================================
|
|
202
|
+
Interactive States
|
|
203
|
+
Purpose: Focus, hover, active, disabled states
|
|
204
|
+
======================================== */
|
|
205
|
+
--color-focus: var(--color-blue-600); /* #2563eb - Focus outlines (WCAG 3:1 contrast) */
|
|
206
|
+
--color-focus-ring: var(--color-blue-600); /* #2563eb - Focus rings on inputs */
|
|
207
|
+
--color-hover-overlay: rgba(0, 0, 0, 0.05); /* Subtle hover overlay on buttons */
|
|
208
|
+
--color-active-overlay: rgba(0, 0, 0, 0.1); /* Active/pressed overlay on buttons */
|
|
209
|
+
--color-disabled-bg: var(--color-neutral-100); /* #f5f5f5 - Disabled backgrounds */
|
|
210
|
+
--color-disabled-text: var(--color-neutral-500); /* #737373 - Disabled text */
|
|
211
|
+
/* ========================================
|
|
212
|
+
Link Colors
|
|
213
|
+
Purpose: Hyperlinks, navigation links
|
|
214
|
+
======================================== */
|
|
215
|
+
--color-link: var(--color-blue-700); /* #1d4ed8 - Default link color */
|
|
216
|
+
--color-link-hover: var(--color-blue-800); /* #1e40af - Link hover state */
|
|
217
|
+
--color-link-visited: var(--color-blue-900); /* #1e3a8a - Visited link color */
|
|
218
|
+
--color-link-active: var(--color-blue-800); /* #1e40af - Link active/pressed state */
|
|
219
|
+
/* ========================================
|
|
220
|
+
Validation Colors
|
|
221
|
+
Purpose: Form validation, required fields
|
|
222
|
+
======================================== */
|
|
223
|
+
--color-required: var(--color-red-600); /* #dc2626 - Required field indicators */
|
|
224
|
+
--color-valid: var(--color-green-600); /* #16a34a - Valid input indicators */
|
|
225
|
+
--color-invalid: var(--color-red-600); /* #dc2626 - Invalid input indicators */
|
|
226
|
+
/* ========================================
|
|
227
|
+
Skip Link & Accessibility
|
|
228
|
+
Purpose: Skip navigation, accessibility utilities
|
|
229
|
+
======================================== */
|
|
230
|
+
--color-skip-link-bg: var(--color-neutral-100); /* #f5f5f5 - Skip link background */
|
|
231
|
+
--color-skip-link-text: var(--color-text); /* Inherits default text color */
|
|
232
|
+
}
|
|
233
|
+
|
|
2
234
|
*,
|
|
3
235
|
*::before,
|
|
4
236
|
*::after {
|
|
@@ -311,7 +543,7 @@ body > a[href^="#"] {
|
|
|
311
543
|
z-index: 100;
|
|
312
544
|
transition: top 0.3s;
|
|
313
545
|
border-radius: 0;
|
|
314
|
-
background-color: var(--color-skip-link-bg,
|
|
546
|
+
background-color: var(--color-skip-link-bg, var(--color-neutral-100));
|
|
315
547
|
}
|
|
316
548
|
body > a[href^="#"]:focus {
|
|
317
549
|
top: 0;
|
|
@@ -371,7 +603,7 @@ blockquote {
|
|
|
371
603
|
--blockquote-padding: 1rem;
|
|
372
604
|
--blockquote-border-width: 0.3125rem;
|
|
373
605
|
--blockquote-border-style: solid;
|
|
374
|
-
--blockquote-border-color: var(--color-border
|
|
606
|
+
--blockquote-border-color: var(--color-border);
|
|
375
607
|
padding: var(--blockquote-padding);
|
|
376
608
|
border-left: var(--blockquote-border-width) var(--blockquote-border-style) var(--blockquote-border-color);
|
|
377
609
|
}
|
|
@@ -394,7 +626,7 @@ h6 {
|
|
|
394
626
|
|
|
395
627
|
hr {
|
|
396
628
|
--hr-border-width: 0.0625rem;
|
|
397
|
-
--hr-border-color: var(--color-border-subtle
|
|
629
|
+
--hr-border-color: var(--color-border-subtle);
|
|
398
630
|
--hr-margin-block: 1.5rem;
|
|
399
631
|
--hr-border-style: solid;
|
|
400
632
|
border: none;
|
|
@@ -424,6 +656,16 @@ h6:has(span:first-of-type) > span {
|
|
|
424
656
|
--title-6: var(--h6);
|
|
425
657
|
}
|
|
426
658
|
|
|
659
|
+
/**
|
|
660
|
+
* Utilities - Main Export
|
|
661
|
+
*
|
|
662
|
+
* This file exports all utility classes.
|
|
663
|
+
* Utilities are loaded after tokens and base styles, before components.
|
|
664
|
+
*
|
|
665
|
+
* Usage in main index.scss:
|
|
666
|
+
* @use "./sass/utilities";
|
|
667
|
+
*/
|
|
668
|
+
/* Existing utilities */
|
|
427
669
|
/**
|
|
428
670
|
* Disabled State Utility Styles
|
|
429
671
|
*
|
|
@@ -483,6 +725,179 @@ h6:has(span:first-of-type) > span {
|
|
|
483
725
|
outline-color: var(--focus-color, currentColor);
|
|
484
726
|
}
|
|
485
727
|
|
|
728
|
+
/* New color utilities (semantic only) */
|
|
729
|
+
/**
|
|
730
|
+
* Text Color Utilities
|
|
731
|
+
*
|
|
732
|
+
* Semantic text color utility classes for quick styling.
|
|
733
|
+
* All utilities reference semantic tokens (Tier 2), not primitives.
|
|
734
|
+
*
|
|
735
|
+
* Usage:
|
|
736
|
+
* <p class="text-primary">Primary text</p>
|
|
737
|
+
* <span class="text-error">Error message</span>
|
|
738
|
+
*/
|
|
739
|
+
/* ========================================
|
|
740
|
+
Brand Text Colors
|
|
741
|
+
======================================== */
|
|
742
|
+
.text-primary {
|
|
743
|
+
color: var(--color-primary);
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
.text-secondary {
|
|
747
|
+
color: var(--color-secondary);
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
/* ========================================
|
|
751
|
+
State Text Colors
|
|
752
|
+
======================================== */
|
|
753
|
+
.text-success {
|
|
754
|
+
color: var(--color-success-text);
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
.text-error {
|
|
758
|
+
color: var(--color-error-text);
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
.text-warning {
|
|
762
|
+
color: var(--color-warning-text);
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
.text-info {
|
|
766
|
+
color: var(--color-info-text);
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
/* ========================================
|
|
770
|
+
Text Hierarchy Colors
|
|
771
|
+
======================================== */
|
|
772
|
+
.text-muted {
|
|
773
|
+
color: var(--color-text-tertiary);
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
.text-disabled {
|
|
777
|
+
color: var(--color-text-disabled);
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
.text-inverse {
|
|
781
|
+
color: var(--color-text-inverse);
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
/**
|
|
785
|
+
* Background Color Utilities
|
|
786
|
+
*
|
|
787
|
+
* Semantic background color utility classes for quick styling.
|
|
788
|
+
* All utilities reference semantic tokens (Tier 2), not primitives.
|
|
789
|
+
*
|
|
790
|
+
* Usage:
|
|
791
|
+
* <div class="bg-primary">Primary background</div>
|
|
792
|
+
* <div class="bg-success">Success background</div>
|
|
793
|
+
*/
|
|
794
|
+
/* ========================================
|
|
795
|
+
Brand Backgrounds
|
|
796
|
+
======================================== */
|
|
797
|
+
.bg-primary {
|
|
798
|
+
background-color: var(--color-primary);
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
.bg-primary-light {
|
|
802
|
+
background-color: var(--color-primary-light);
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
.bg-secondary {
|
|
806
|
+
background-color: var(--color-secondary-light);
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
/* ========================================
|
|
810
|
+
State Backgrounds
|
|
811
|
+
======================================== */
|
|
812
|
+
.bg-success {
|
|
813
|
+
background-color: var(--color-success-bg);
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
.bg-error {
|
|
817
|
+
background-color: var(--color-error-bg);
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
.bg-warning {
|
|
821
|
+
background-color: var(--color-warning-bg);
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
.bg-info {
|
|
825
|
+
background-color: var(--color-info-bg);
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
/* ========================================
|
|
829
|
+
Surface Backgrounds
|
|
830
|
+
======================================== */
|
|
831
|
+
.bg-surface {
|
|
832
|
+
background-color: var(--color-surface);
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
.bg-surface-secondary {
|
|
836
|
+
background-color: var(--color-surface-secondary);
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
.bg-transparent {
|
|
840
|
+
background-color: transparent;
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
/**
|
|
844
|
+
* Border Color Utilities
|
|
845
|
+
*
|
|
846
|
+
* Semantic border color utility classes for quick styling.
|
|
847
|
+
* All utilities reference semantic tokens (Tier 2), not primitives.
|
|
848
|
+
*
|
|
849
|
+
* Note: These utilities only set border-color.
|
|
850
|
+
* You may need to set border-width and border-style separately.
|
|
851
|
+
*
|
|
852
|
+
* Usage:
|
|
853
|
+
* <div class="border-primary" style="border: 1px solid;">
|
|
854
|
+
* <div class="border-error" style="border-width: 2px; border-style: solid;">
|
|
855
|
+
*/
|
|
856
|
+
/* ========================================
|
|
857
|
+
Brand Borders
|
|
858
|
+
======================================== */
|
|
859
|
+
.border-primary {
|
|
860
|
+
border-color: var(--color-primary);
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
.border-secondary {
|
|
864
|
+
border-color: var(--color-secondary);
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
/* ========================================
|
|
868
|
+
State Borders
|
|
869
|
+
======================================== */
|
|
870
|
+
.border-success {
|
|
871
|
+
border-color: var(--color-success-border);
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
.border-error {
|
|
875
|
+
border-color: var(--color-error-border);
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
.border-warning {
|
|
879
|
+
border-color: var(--color-warning-border);
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
.border-info {
|
|
883
|
+
border-color: var(--color-info-border);
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
/* ========================================
|
|
887
|
+
UI Borders
|
|
888
|
+
======================================== */
|
|
889
|
+
.border-default {
|
|
890
|
+
border-color: var(--color-border);
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
.border-subtle {
|
|
894
|
+
border-color: var(--color-border-subtle);
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
.border-transparent {
|
|
898
|
+
border-color: transparent;
|
|
899
|
+
}
|
|
900
|
+
|
|
486
901
|
button {
|
|
487
902
|
--btn-size-xs: 0.6875rem;
|
|
488
903
|
--btn-size-sm: 0.8125rem;
|
|
@@ -491,7 +906,7 @@ button {
|
|
|
491
906
|
--btn-pill: 100rem;
|
|
492
907
|
--btn-fs: var(--btn-size-md);
|
|
493
908
|
--btn-height: calc(var(--btn-fs) * 2.25);
|
|
494
|
-
--btn-bg:
|
|
909
|
+
--btn-bg: var(--color-neutral-300);
|
|
495
910
|
--btn-width: max-content;
|
|
496
911
|
font-size: var(--btn-fs);
|
|
497
912
|
font-weight: var(--btn-fw, 500);
|
|
@@ -516,12 +931,12 @@ button {
|
|
|
516
931
|
line-height: 0cap;
|
|
517
932
|
}
|
|
518
933
|
button[type] {
|
|
519
|
-
background-color: var(--btn-bg, var(--neutral-300));
|
|
934
|
+
background-color: var(--btn-bg, var(--color-neutral-300));
|
|
520
935
|
--btn-border: solid var(--btn-sg);
|
|
521
936
|
}
|
|
522
937
|
button[type=submit], button[style*=submit] {
|
|
523
|
-
--btn-bg: var(--primary
|
|
524
|
-
--btn-color:
|
|
938
|
+
--btn-bg: var(--color-primary);
|
|
939
|
+
--btn-color: var(--color-text-inverse);
|
|
525
940
|
}
|
|
526
941
|
button[disabled], button[aria-disabled=true] {
|
|
527
942
|
cursor: var(--btn-cursor, not-allowed);
|
|
@@ -546,12 +961,12 @@ button:focus-visible {
|
|
|
546
961
|
}
|
|
547
962
|
button[type=reset] {
|
|
548
963
|
--btn-bg: transparent;
|
|
549
|
-
--btn-color:
|
|
550
|
-
--btn-border:
|
|
964
|
+
--btn-color: var(--color-text-secondary);
|
|
965
|
+
--btn-border: var(--color-border) thin solid;
|
|
551
966
|
}
|
|
552
967
|
button[type=submit] {
|
|
553
|
-
--btn-bg: var(--primary
|
|
554
|
-
--btn-color:
|
|
968
|
+
--btn-bg: var(--color-primary);
|
|
969
|
+
--btn-color: var(--color-text-inverse);
|
|
555
970
|
--btn-border: none;
|
|
556
971
|
}
|
|
557
972
|
button[data-fp-btn~=pill], button[data-btn~=pill], button[data-style~=pill] {
|
|
@@ -625,15 +1040,15 @@ p[role=note],
|
|
|
625
1040
|
small > span,
|
|
626
1041
|
[data-tag] {
|
|
627
1042
|
/* Variant color tokens - WCAG AA compliant colors */
|
|
628
|
-
--beta:
|
|
629
|
-
--stable:
|
|
630
|
-
--production:
|
|
1043
|
+
--beta: var(--color-amber-400); /* Amber: 6.94:1 contrast with black */
|
|
1044
|
+
--stable: var(--color-green-700); /* Dark green: 4.56:1 contrast with white */
|
|
1045
|
+
--production: var(--color-blue-900); /* Dark blue: 8.59:1 contrast with white */
|
|
631
1046
|
/* Tag component tokens */
|
|
632
1047
|
--tag-padding-inline: 0.7rem; /* Horizontal padding (11.2px at 16px base) */
|
|
633
1048
|
--tag-padding-block: 0.2rem; /* Vertical padding (3.2px at 16px base) */
|
|
634
1049
|
--tag-fs: 0.8rem; /* Font size (12.8px at 16px base) */
|
|
635
1050
|
--tag-radius: 99rem; /* Fully rounded pill shape */
|
|
636
|
-
--tag-bg:
|
|
1051
|
+
--tag-bg: var(--color-neutral-300); /* Default background color */
|
|
637
1052
|
--tag-fw: 500; /* Medium font weight */
|
|
638
1053
|
--tag-color: currentColor; /* Default text color (inherits) */
|
|
639
1054
|
--tag-display: inline-block; /* Display type */
|
|
@@ -677,7 +1092,7 @@ p[role=note][data-tag~=alpha],
|
|
|
677
1092
|
[role=note][data-tag~=alpha],
|
|
678
1093
|
small > span[data-tag~=alpha],
|
|
679
1094
|
[data-tag][data-tag~=alpha] {
|
|
680
|
-
--tag-color:
|
|
1095
|
+
--tag-color: var(--color-neutral-900); /* Black: maximum contrast with amber background */
|
|
681
1096
|
--tag-bg: var(--beta);
|
|
682
1097
|
/* Visual indicator beyond color - warning symbol */
|
|
683
1098
|
}
|
|
@@ -694,7 +1109,7 @@ p[role=note][data-tag~=beta],
|
|
|
694
1109
|
[role=note][data-tag~=beta],
|
|
695
1110
|
small > span[data-tag~=beta],
|
|
696
1111
|
[data-tag][data-tag~=beta] {
|
|
697
|
-
--tag-color:
|
|
1112
|
+
--tag-color: var(--color-neutral-900); /* Black: maximum contrast with amber background */
|
|
698
1113
|
--tag-bg: var(--beta);
|
|
699
1114
|
/* Visual indicator beyond color - warning symbol */
|
|
700
1115
|
}
|
|
@@ -711,7 +1126,7 @@ p[role=note][data-tag~=stable],
|
|
|
711
1126
|
[role=note][data-tag~=stable],
|
|
712
1127
|
small > span[data-tag~=stable],
|
|
713
1128
|
[data-tag][data-tag~=stable] {
|
|
714
|
-
--tag-color:
|
|
1129
|
+
--tag-color: var(--color-text-inverse); /* White: 4.56:1 contrast with dark green */
|
|
715
1130
|
--tag-bg: var(--stable);
|
|
716
1131
|
/* Visual indicator beyond color - checkmark symbol */
|
|
717
1132
|
}
|
|
@@ -806,20 +1221,20 @@ figure:has(img[alt]) > figcaption {
|
|
|
806
1221
|
|
|
807
1222
|
:root {
|
|
808
1223
|
--card-padding: 1.5rem;
|
|
809
|
-
--card-bg: var(--color-surface
|
|
1224
|
+
--card-bg: var(--color-surface);
|
|
810
1225
|
--card-radius: calc(var(--card-padding) / 4);
|
|
811
1226
|
--card-gap: 1rem;
|
|
812
1227
|
--card-header-padding: 1rem 1.5rem;
|
|
813
|
-
--card-header-bg: var(--color-surface-secondary
|
|
1228
|
+
--card-header-bg: var(--color-surface-secondary);
|
|
814
1229
|
--card-header-border-bottom-width: 0.0625rem;
|
|
815
1230
|
--card-header-border-bottom-style: solid;
|
|
816
|
-
--card-header-border-bottom-color: var(--color-border
|
|
1231
|
+
--card-header-border-bottom-color: var(--color-border);
|
|
817
1232
|
--card-body-padding: 1.5rem;
|
|
818
1233
|
--card-footer-padding: 1rem 1.5rem;
|
|
819
|
-
--card-footer-bg: var(--color-surface-secondary
|
|
1234
|
+
--card-footer-bg: var(--color-surface-secondary);
|
|
820
1235
|
--card-footer-border-top-width: 0.0625rem;
|
|
821
1236
|
--card-footer-border-top-style: solid;
|
|
822
|
-
--card-footer-border-top-color: var(--color-border
|
|
1237
|
+
--card-footer-border-top-color: var(--color-border);
|
|
823
1238
|
}
|
|
824
1239
|
|
|
825
1240
|
[data-card],
|
|
@@ -828,7 +1243,7 @@ figure:has(img[alt]) > figcaption {
|
|
|
828
1243
|
flex-direction: column;
|
|
829
1244
|
gap: var(--card-gap);
|
|
830
1245
|
border-radius: var(--card-radius);
|
|
831
|
-
border: var(--card-border, 0.0625rem solid
|
|
1246
|
+
border: var(--card-border, 0.0625rem solid var(--color-border-subtle));
|
|
832
1247
|
background-color: var(--card-bg);
|
|
833
1248
|
text-align: var(--card-align, left);
|
|
834
1249
|
}
|
|
@@ -898,7 +1313,7 @@ figure:has(img[alt]) > figcaption {
|
|
|
898
1313
|
box-shadow: var(--card-hover-shadow);
|
|
899
1314
|
}
|
|
900
1315
|
[data-card=interactive]:focus-visible {
|
|
901
|
-
outline: 0.125rem solid var(--color-focus
|
|
1316
|
+
outline: 0.125rem solid var(--color-focus);
|
|
902
1317
|
outline-offset: 0.125rem;
|
|
903
1318
|
}
|
|
904
1319
|
[data-card=interactive]:focus:not(:focus-visible) {
|
|
@@ -910,8 +1325,8 @@ progress {
|
|
|
910
1325
|
all: revert;
|
|
911
1326
|
--progress-width: 100%;
|
|
912
1327
|
--progress-height: 1rem;
|
|
913
|
-
--progress-bg:
|
|
914
|
-
--progress-color:
|
|
1328
|
+
--progress-bg: var(--color-neutral-300);
|
|
1329
|
+
--progress-color: var(--color-primary);
|
|
915
1330
|
--progress-accent-color: var(--progress-color);
|
|
916
1331
|
/* This code changes the color of the progress bar. */
|
|
917
1332
|
/* The variable names indicate the colors that are used. */
|
|
@@ -959,7 +1374,7 @@ progress[aria-busy]::-webkit-progress-bar {
|
|
|
959
1374
|
}
|
|
960
1375
|
|
|
961
1376
|
details {
|
|
962
|
-
--details-border: 0.0625rem solid
|
|
1377
|
+
--details-border: 0.0625rem solid var(--color-border-subtle);
|
|
963
1378
|
--details-direction: column;
|
|
964
1379
|
--details-display: flex;
|
|
965
1380
|
--details-gap: 0rem;
|
|
@@ -993,7 +1408,6 @@ details {
|
|
|
993
1408
|
@starting-style {
|
|
994
1409
|
details {
|
|
995
1410
|
transition: var(--summary-transitions);
|
|
996
|
-
color: red;
|
|
997
1411
|
}
|
|
998
1412
|
}
|
|
999
1413
|
details + details {
|
|
@@ -1031,7 +1445,7 @@ details summary::-webkit-details-marker {
|
|
|
1031
1445
|
details summary:focus-within {
|
|
1032
1446
|
outline: none;
|
|
1033
1447
|
border-bottom: solid 2px currentColor;
|
|
1034
|
-
background-color:
|
|
1448
|
+
background-color: var(--color-surface-secondary);
|
|
1035
1449
|
}
|
|
1036
1450
|
details summary:hover {
|
|
1037
1451
|
cursor: var(--summary-cursor);
|
|
@@ -1085,7 +1499,7 @@ details[open] > section {
|
|
|
1085
1499
|
* - Uses :focus-visible for better UX (keyboard vs mouse)
|
|
1086
1500
|
*/
|
|
1087
1501
|
a[href] {
|
|
1088
|
-
--link-color:
|
|
1502
|
+
--link-color: var(--color-link);
|
|
1089
1503
|
--link-fw: 400;
|
|
1090
1504
|
--link-fs: 1rem;
|
|
1091
1505
|
--link-decoration: none;
|
|
@@ -1941,20 +2355,20 @@ footer > div {
|
|
|
1941
2355
|
:root {
|
|
1942
2356
|
--dialog-min-width: max(20rem, 80%);
|
|
1943
2357
|
--dialog-gap: 0.625rem;
|
|
1944
|
-
--dialog-border-color:
|
|
2358
|
+
--dialog-border-color: var(--color-border);
|
|
1945
2359
|
--dialog-border-width: thin;
|
|
1946
2360
|
--dialog-border-style: solid;
|
|
1947
2361
|
--dialog-border-radius: var(--border-radius);
|
|
1948
2362
|
--dialog-padding: 1.5rem;
|
|
1949
2363
|
--dialog-padding-inline: 1rem;
|
|
1950
|
-
--dialog-close-color:
|
|
2364
|
+
--dialog-close-color: var(--color-text-secondary);
|
|
1951
2365
|
--dialog-button-bg: transparent;
|
|
1952
2366
|
--dialog-button-border: transparent thin solid;
|
|
1953
|
-
--dialog-button-hover-bg:
|
|
2367
|
+
--dialog-button-hover-bg: var(--color-surface-secondary);
|
|
1954
2368
|
--dialog-display: flex;
|
|
1955
2369
|
--dialog-flex-direction: column;
|
|
1956
2370
|
/* Focus and accessibility */
|
|
1957
|
-
--dialog-focus-color:
|
|
2371
|
+
--dialog-focus-color: var(--color-focus);
|
|
1958
2372
|
--dialog-focus-width: 0.125rem;
|
|
1959
2373
|
--dialog-focus-offset: 0.125rem;
|
|
1960
2374
|
--dialog-focus-outline: var(--dialog-focus-width) solid var(--dialog-focus-color);
|
|
@@ -2997,7 +3411,7 @@ dialog section {
|
|
|
2997
3411
|
}
|
|
2998
3412
|
|
|
2999
3413
|
sup:has(> span) {
|
|
3000
|
-
--badge-bg:
|
|
3414
|
+
--badge-bg: var(--color-neutral-300);
|
|
3001
3415
|
--badge-color: currentColor;
|
|
3002
3416
|
--badge-radius: 0.5rem;
|
|
3003
3417
|
--badge-padding: 0.3rem;
|
|
@@ -3067,7 +3481,7 @@ body > nav ul > li,
|
|
|
3067
3481
|
body > nav ul > li:hover,
|
|
3068
3482
|
[aria-label~=navbar] ul > li:hover,
|
|
3069
3483
|
.navbar ul > li:hover {
|
|
3070
|
-
background-color: var(--nav-hover-bg,
|
|
3484
|
+
background-color: var(--nav-hover-bg, var(--color-surface-secondary));
|
|
3071
3485
|
}
|
|
3072
3486
|
body > nav ul > li:hover:has(img, button),
|
|
3073
3487
|
[aria-label~=navbar] ul > li:hover:has(img, button),
|
|
@@ -3156,15 +3570,15 @@ nav button:focus-visible {
|
|
|
3156
3570
|
* CSS Custom Properties:
|
|
3157
3571
|
* - --checkbox-gap: Space between checkbox and label (default: 0.5rem)
|
|
3158
3572
|
* - --checkbox-disabled-opacity: Opacity for disabled state (default: 0.6)
|
|
3159
|
-
* - --checkbox-disabled-color: Label color when disabled (default:
|
|
3573
|
+
* - --checkbox-disabled-color: Label color when disabled (default: var(--color-disabled-text))
|
|
3160
3574
|
* - --checkbox-label-fs: Label font size (default: 1rem)
|
|
3161
3575
|
* - --checkbox-label-lh: Label line height (default: 1.5)
|
|
3162
|
-
* - --color-required: Required indicator color (default:
|
|
3163
|
-
* - --checkbox-focus-ring-color: Focus ring color (default:
|
|
3576
|
+
* - --color-required: Required indicator color (default: var(--color-required))
|
|
3577
|
+
* - --checkbox-focus-ring-color: Focus ring color (default: var(--color-focus-ring))
|
|
3164
3578
|
* - --checkbox-focus-ring-width: Focus ring width (default: 0.125rem)
|
|
3165
3579
|
* - --checkbox-focus-ring-offset: Focus ring offset (default: 0.125rem)
|
|
3166
3580
|
* - --checkbox-hover-label-color: Label color on hover (default: inherit)
|
|
3167
|
-
* - --checkbox-error-label-color: Label color when invalid (default:
|
|
3581
|
+
* - --checkbox-error-label-color: Label color when invalid (default: var(--color-error-text))
|
|
3168
3582
|
* - --checkbox-valid-label-color: Label color when valid (default: #16a34a)
|
|
3169
3583
|
* - --checkbox-focus-radius: Focus outline border radius (default: 0.125rem)
|
|
3170
3584
|
*
|
|
@@ -3186,10 +3600,10 @@ div:has(> input[type=checkbox]) > input[type=checkbox] {
|
|
|
3186
3600
|
order: -1;
|
|
3187
3601
|
}
|
|
3188
3602
|
div:has(> input[type=checkbox]):not(:has(> input[aria-disabled=true])):hover .checkbox-label {
|
|
3189
|
-
color: var(--checkbox-hover-label-color,
|
|
3603
|
+
color: var(--checkbox-hover-label-color, currentColor);
|
|
3190
3604
|
}
|
|
3191
3605
|
div:has(> input[type=checkbox]):has(> input:focus-visible) .checkbox-label {
|
|
3192
|
-
outline: var(--checkbox-focus-ring-width, 0.125rem) solid var(--checkbox-focus-ring-color,
|
|
3606
|
+
outline: var(--checkbox-focus-ring-width, 0.125rem) solid var(--checkbox-focus-ring-color, var(--color-focus-ring));
|
|
3193
3607
|
outline-offset: var(--checkbox-focus-ring-offset, 0.125rem);
|
|
3194
3608
|
border-radius: var(--checkbox-focus-radius, 0.125rem);
|
|
3195
3609
|
}
|
|
@@ -3198,14 +3612,14 @@ div:has(> input[type=checkbox]):has(> input[aria-disabled=true]) {
|
|
|
3198
3612
|
cursor: not-allowed;
|
|
3199
3613
|
}
|
|
3200
3614
|
div:has(> input[type=checkbox]):has(> input[aria-disabled=true]) .checkbox-label {
|
|
3201
|
-
color: var(--checkbox-disabled-color,
|
|
3615
|
+
color: var(--checkbox-disabled-color, var(--color-disabled-text));
|
|
3202
3616
|
cursor: not-allowed;
|
|
3203
3617
|
}
|
|
3204
3618
|
div:has(> input[type=checkbox]):has(> input[aria-invalid=true]) .checkbox-label {
|
|
3205
|
-
color: var(--checkbox-error-label-color,
|
|
3619
|
+
color: var(--checkbox-error-label-color, var(--color-error-text));
|
|
3206
3620
|
}
|
|
3207
|
-
div:has(> input[type=checkbox]):has(> input[aria-invalid=false]:checked)
|
|
3208
|
-
color: var(--checkbox-valid-label-color,
|
|
3621
|
+
div:has(> input[type=checkbox]):has(> input[aria-invalid=false]:checked) label[for] {
|
|
3622
|
+
color: var(--checkbox-valid-label-color, currentColor);
|
|
3209
3623
|
}
|
|
3210
3624
|
|
|
3211
3625
|
.checkbox-label {
|
|
@@ -3224,7 +3638,7 @@ div:has(> input[type=checkbox]):has(> input[aria-invalid=false]:checked) .checkb
|
|
|
3224
3638
|
}
|
|
3225
3639
|
}
|
|
3226
3640
|
.checkbox-label .checkbox-required {
|
|
3227
|
-
color: var(--color-required
|
|
3641
|
+
color: var(--color-required);
|
|
3228
3642
|
font-weight: 600;
|
|
3229
3643
|
margin-inline-start: 0.125rem;
|
|
3230
3644
|
}
|
|
@@ -3242,7 +3656,7 @@ div:has(> input[type=checkbox]):has(> input[aria-invalid=false]:checked) .checkb
|
|
|
3242
3656
|
}
|
|
3243
3657
|
}
|
|
3244
3658
|
:root {
|
|
3245
|
-
--input-border-color:
|
|
3659
|
+
--input-border-color: var(--color-border);
|
|
3246
3660
|
--input-appearance: none;
|
|
3247
3661
|
--input-bg: inherit;
|
|
3248
3662
|
--input-border: none;
|
|
@@ -3254,10 +3668,10 @@ div:has(> input[type=checkbox]):has(> input[aria-invalid=false]:checked) .checkb
|
|
|
3254
3668
|
--input-width: clamp(200px, 100%, 500px);
|
|
3255
3669
|
--input-focus-outline: medium solid var(--input-border-color);
|
|
3256
3670
|
--input-focus-outline-offset: 0;
|
|
3257
|
-
--input-disabled-bg:
|
|
3671
|
+
--input-disabled-bg: var(--color-disabled-bg);
|
|
3258
3672
|
--input-disabled-opacity: 0.6;
|
|
3259
3673
|
--input-disabled-cursor: not-allowed;
|
|
3260
|
-
--placeholder-color:
|
|
3674
|
+
--placeholder-color: var(--color-text-tertiary);
|
|
3261
3675
|
--placeholder-style: italic;
|
|
3262
3676
|
--placeholder-fs: smaller;
|
|
3263
3677
|
--form-direction: column;
|
|
@@ -3272,12 +3686,17 @@ div:has(> input[type=checkbox]):has(> input[aria-invalid=false]:checked) .checkb
|
|
|
3272
3686
|
Base Properties
|
|
3273
3687
|
========================================================================== */
|
|
3274
3688
|
--checkbox-size: var(--checkbox-size-md);
|
|
3275
|
-
--checkbox-bg:
|
|
3276
|
-
--checkbox-border: 0.125rem solid
|
|
3277
|
-
--checkbox-border-color:
|
|
3689
|
+
--checkbox-bg: var(--color-surface);
|
|
3690
|
+
--checkbox-border: 0.125rem solid var(--color-neutral-600); /* 2px border */
|
|
3691
|
+
--checkbox-border-color: var(--color-neutral-600); /* Gray 500 */
|
|
3278
3692
|
--checkbox-radius: 0.25rem; /* 4px */
|
|
3279
3693
|
--checkbox-cursor: pointer;
|
|
3280
3694
|
--checkbox-transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
3695
|
+
/* ==========================================================================
|
|
3696
|
+
Checked State Properties
|
|
3697
|
+
========================================================================== */
|
|
3698
|
+
--checkbox-checked-outline-color: var(--color-success);
|
|
3699
|
+
--checkbox-checked-bg: var(--color-success);
|
|
3281
3700
|
}
|
|
3282
3701
|
|
|
3283
3702
|
form {
|
|
@@ -3304,14 +3723,14 @@ input {
|
|
|
3304
3723
|
padding-inline: var(--input-padding-inline);
|
|
3305
3724
|
padding-block: var(--input-padding-block);
|
|
3306
3725
|
border-radius: var(--input-radius);
|
|
3307
|
-
background-color: var(--input-bg,
|
|
3726
|
+
background-color: var(--input-bg, var(--color-surface));
|
|
3308
3727
|
}
|
|
3309
3728
|
input:focus-visible, input:focus {
|
|
3310
3729
|
outline: var(--input-focus-outline);
|
|
3311
3730
|
outline-offset: var(--input-focus-outline-offset);
|
|
3312
3731
|
}
|
|
3313
3732
|
input[aria-disabled=true], input:disabled {
|
|
3314
|
-
--input-border-color:
|
|
3733
|
+
--input-border-color: var(--color-border-subtle);
|
|
3315
3734
|
background-color: var(--input-disabled-bg);
|
|
3316
3735
|
opacity: var(--input-disabled-opacity);
|
|
3317
3736
|
cursor: var(--input-disabled-cursor);
|
|
@@ -3349,8 +3768,8 @@ input[type=checkbox] {
|
|
|
3349
3768
|
}
|
|
3350
3769
|
input[type=checkbox]:checked {
|
|
3351
3770
|
background-color: var(--checkbox-bg, red);
|
|
3352
|
-
outline:
|
|
3353
|
-
background:
|
|
3771
|
+
outline: var(--checkbox-checked-outline-color) solid 2px;
|
|
3772
|
+
background: var(--checkbox-checked-bg) url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='white'><path d='M6.173 11.414l-3.89-3.89 1.414-1.414 2.476 2.475 5.657-5.657 1.414 1.414z'/></svg>") no-repeat center center;
|
|
3354
3773
|
}
|
|
3355
3774
|
|
|
3356
3775
|
select {
|
|
@@ -3630,28 +4049,28 @@ li:has(> button) {
|
|
|
3630
4049
|
}
|
|
3631
4050
|
|
|
3632
4051
|
[role=alert] {
|
|
3633
|
-
/* Success colors */
|
|
3634
|
-
--alert-success-bg:
|
|
3635
|
-
--alert-success-border:
|
|
3636
|
-
--alert-success-text:
|
|
3637
|
-
/* Error colors */
|
|
3638
|
-
--alert-error-bg:
|
|
3639
|
-
--alert-error-border:
|
|
3640
|
-
--alert-error-text:
|
|
3641
|
-
/* Warning colors */
|
|
3642
|
-
--alert-warning-bg:
|
|
3643
|
-
--alert-warning-border:
|
|
3644
|
-
--alert-warning-text:
|
|
3645
|
-
/* Info colors */
|
|
3646
|
-
--alert-info-bg:
|
|
3647
|
-
--alert-info-border:
|
|
3648
|
-
--alert-info-text:
|
|
4052
|
+
/* Success colors - WCAG AA compliant (mapped to semantic tokens) */
|
|
4053
|
+
--alert-success-bg: var(--color-success-bg);
|
|
4054
|
+
--alert-success-border: var(--color-success-border);
|
|
4055
|
+
--alert-success-text: var(--color-success-text);
|
|
4056
|
+
/* Error colors - WCAG AA compliant (mapped to semantic tokens) */
|
|
4057
|
+
--alert-error-bg: var(--color-error-bg);
|
|
4058
|
+
--alert-error-border: var(--color-error-border);
|
|
4059
|
+
--alert-error-text: var(--color-error-text);
|
|
4060
|
+
/* Warning colors - WCAG AA compliant (mapped to semantic tokens) */
|
|
4061
|
+
--alert-warning-bg: var(--color-warning-bg);
|
|
4062
|
+
--alert-warning-border: var(--color-warning-border);
|
|
4063
|
+
--alert-warning-text: var(--color-warning-text);
|
|
4064
|
+
/* Info colors - WCAG AA compliant (mapped to semantic tokens) */
|
|
4065
|
+
--alert-info-bg: var(--color-info-bg);
|
|
4066
|
+
--alert-info-border: var(--color-info-border);
|
|
4067
|
+
--alert-info-text: var(--color-info-text);
|
|
3649
4068
|
/* Animation */
|
|
3650
4069
|
--alert-transition-duration: 0.3s;
|
|
3651
4070
|
--alert-border: thin solid currentColor;
|
|
3652
|
-
background-color: var(--alert-bg,
|
|
3653
|
-
border: var(--alert-border,
|
|
3654
|
-
color: var(--alert-color,
|
|
4071
|
+
background-color: var(--alert-bg, var(--color-surface));
|
|
4072
|
+
border: var(--alert-border, var(--color-border));
|
|
4073
|
+
color: var(--alert-color, var(--color-text));
|
|
3655
4074
|
padding: var(--alert-padding, var(--spc-4));
|
|
3656
4075
|
margin-block-end: var(--alert-margin-block-end);
|
|
3657
4076
|
font-size: var(--fs-0);
|
|
@@ -3772,7 +4191,7 @@ li:has(> button) {
|
|
|
3772
4191
|
|
|
3773
4192
|
[data-tts] {
|
|
3774
4193
|
--tts-gap: 0.5rem;
|
|
3775
|
-
--tts-bg:
|
|
4194
|
+
--tts-bg: var(--color-surface);
|
|
3776
4195
|
--tts-border-width: 0.125rem;
|
|
3777
4196
|
--tts-border-style: solid;
|
|
3778
4197
|
--tts-border-color: currentColor;
|
|
@@ -3854,16 +4273,16 @@ li:has(> button) {
|
|
|
3854
4273
|
--title-fs: var(--title-size-2xl);
|
|
3855
4274
|
}
|
|
3856
4275
|
[data-title][data-title~=primary] {
|
|
3857
|
-
--title-color:
|
|
4276
|
+
--title-color: var(--color-primary);
|
|
3858
4277
|
}
|
|
3859
4278
|
[data-title][data-title~=secondary] {
|
|
3860
|
-
--title-color:
|
|
4279
|
+
--title-color: var(--color-text-secondary);
|
|
3861
4280
|
}
|
|
3862
4281
|
[data-title][data-title~=accent] {
|
|
3863
|
-
--title-color:
|
|
4282
|
+
--title-color: var(--color-primary);
|
|
3864
4283
|
}
|
|
3865
4284
|
[data-title][data-title~=muted] {
|
|
3866
|
-
--title-color:
|
|
4285
|
+
--title-color: var(--color-text-tertiary);
|
|
3867
4286
|
}
|
|
3868
4287
|
[data-title][data-title~=inherit] {
|
|
3869
4288
|
--title-color: inherit;
|
|
@@ -4650,6 +5069,21 @@ li:has(> button) {
|
|
|
4650
5069
|
box-shadow: var(--shadow-xl);
|
|
4651
5070
|
}
|
|
4652
5071
|
|
|
5072
|
+
/**
|
|
5073
|
+
* DEPRECATED: This file is deprecated in favor of the new token system.
|
|
5074
|
+
*
|
|
5075
|
+
* Use tokens from src/sass/tokens/ instead:
|
|
5076
|
+
* - Primitives: src/sass/tokens/_color-primitives.scss
|
|
5077
|
+
* - Semantic: src/sass/tokens/_color-semantic.scss
|
|
5078
|
+
*
|
|
5079
|
+
* Use utility classes from src/sass/utilities/ for quick styling:
|
|
5080
|
+
* - .text-primary, .text-success, .text-error, etc.
|
|
5081
|
+
* - .bg-primary, .bg-success, .bg-error, etc.
|
|
5082
|
+
* - .border-primary, .border-success, .border-error, etc.
|
|
5083
|
+
*
|
|
5084
|
+
* This file will be removed in v6.0.0
|
|
5085
|
+
* Keeping for backward compatibility only.
|
|
5086
|
+
*/
|
|
4653
5087
|
:root {
|
|
4654
5088
|
--transparent: transparent;
|
|
4655
5089
|
}
|