@life-cockpit/angular-ui-kit 1.0.1 → 1.0.3
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/package.json +13 -7
- package/src/styles/_reset.scss +215 -0
- package/src/styles/_theme-dark.scss +237 -0
- package/src/styles/_theme-light.scss +241 -0
- package/src/styles/_typography.scss +123 -0
- package/src/styles/_utilities.scss +141 -0
- package/src/styles/index.scss +17 -0
- package/src/styles/tokens/_all.scss +117 -0
- package/src/styles/tokens/_animation.scss +7 -0
- package/src/styles/tokens/_border-radius.scss +10 -0
- package/src/styles/tokens/_colors.scss +50 -0
- package/src/styles/tokens/_elevation.scss +7 -0
- package/src/styles/tokens/_size.scss +17 -0
- package/src/styles/tokens/_spacing.scss +22 -0
- package/src/styles/tokens/_typography.scss +22 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@life-cockpit/angular-ui-kit",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Life Cockpit Design System - Angular UI component library",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -23,18 +23,24 @@
|
|
|
23
23
|
"@angular/router": "^21.0.0",
|
|
24
24
|
"rxjs": "^7.8.0"
|
|
25
25
|
},
|
|
26
|
-
"sideEffects":
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
"sideEffects": [
|
|
27
|
+
"**/*.css",
|
|
28
|
+
"**/*.scss"
|
|
29
|
+
],
|
|
29
30
|
"exports": {
|
|
30
|
-
"./package.json": {
|
|
31
|
-
"default": "./package.json"
|
|
32
|
-
},
|
|
33
31
|
".": {
|
|
34
32
|
"types": "./types/life-cockpit-angular-ui-kit.d.ts",
|
|
35
33
|
"default": "./fesm2022/life-cockpit-angular-ui-kit.mjs"
|
|
34
|
+
},
|
|
35
|
+
"./styles/*": {
|
|
36
|
+
"default": "./src/styles/*"
|
|
37
|
+
},
|
|
38
|
+
"./package.json": {
|
|
39
|
+
"default": "./package.json"
|
|
36
40
|
}
|
|
37
41
|
},
|
|
42
|
+
"module": "fesm2022/life-cockpit-angular-ui-kit.mjs",
|
|
43
|
+
"typings": "types/life-cockpit-angular-ui-kit.d.ts",
|
|
38
44
|
"type": "module",
|
|
39
45
|
"dependencies": {
|
|
40
46
|
"tslib": "^2.3.0"
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reset and Normalize Styles
|
|
3
|
+
* Inline normalize rules for cross-browser consistency (no external dependency)
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Inline normalize essentials
|
|
7
|
+
html {
|
|
8
|
+
line-height: 1.15;
|
|
9
|
+
-webkit-text-size-adjust: 100%;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
main {
|
|
13
|
+
display: block;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
hr {
|
|
17
|
+
box-sizing: content-box;
|
|
18
|
+
height: 0;
|
|
19
|
+
overflow: visible;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
pre {
|
|
23
|
+
font-family: monospace, monospace;
|
|
24
|
+
font-size: 1em;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
abbr[title] {
|
|
28
|
+
border-bottom: none;
|
|
29
|
+
text-decoration: underline dotted;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
b,
|
|
33
|
+
strong {
|
|
34
|
+
font-weight: bolder;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
code,
|
|
38
|
+
kbd,
|
|
39
|
+
samp {
|
|
40
|
+
font-family: monospace, monospace;
|
|
41
|
+
font-size: 1em;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
small {
|
|
45
|
+
font-size: 80%;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
sub,
|
|
49
|
+
sup {
|
|
50
|
+
font-size: 75%;
|
|
51
|
+
line-height: 0;
|
|
52
|
+
position: relative;
|
|
53
|
+
vertical-align: baseline;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
sub {
|
|
57
|
+
bottom: -0.25em;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
sup {
|
|
61
|
+
top: -0.5em;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
img {
|
|
65
|
+
border-style: none;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
button,
|
|
69
|
+
input,
|
|
70
|
+
optgroup,
|
|
71
|
+
select,
|
|
72
|
+
textarea {
|
|
73
|
+
font-family: inherit;
|
|
74
|
+
font-size: 100%;
|
|
75
|
+
line-height: 1.15;
|
|
76
|
+
margin: 0;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
button,
|
|
80
|
+
input {
|
|
81
|
+
overflow: visible;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
button,
|
|
85
|
+
select {
|
|
86
|
+
text-transform: none;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
button,
|
|
90
|
+
[type='button'],
|
|
91
|
+
[type='reset'],
|
|
92
|
+
[type='submit'] {
|
|
93
|
+
-webkit-appearance: button;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
fieldset {
|
|
97
|
+
padding: 0.35em 0.75em 0.625em;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
legend {
|
|
101
|
+
box-sizing: border-box;
|
|
102
|
+
color: inherit;
|
|
103
|
+
display: table;
|
|
104
|
+
max-width: 100%;
|
|
105
|
+
padding: 0;
|
|
106
|
+
white-space: normal;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
progress {
|
|
110
|
+
vertical-align: baseline;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
textarea {
|
|
114
|
+
overflow: auto;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
[type='checkbox'],
|
|
118
|
+
[type='radio'] {
|
|
119
|
+
box-sizing: border-box;
|
|
120
|
+
padding: 0;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
[type='number']::-webkit-inner-spin-button,
|
|
124
|
+
[type='number']::-webkit-outer-spin-button {
|
|
125
|
+
height: auto;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
[type='search'] {
|
|
129
|
+
-webkit-appearance: textfield;
|
|
130
|
+
outline-offset: -2px;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
[type='search']::-webkit-search-decoration {
|
|
134
|
+
-webkit-appearance: none;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
::-webkit-file-upload-button {
|
|
138
|
+
-webkit-appearance: button;
|
|
139
|
+
font: inherit;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
summary {
|
|
143
|
+
display: list-item;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Additional resets
|
|
147
|
+
*,
|
|
148
|
+
*::before,
|
|
149
|
+
*::after {
|
|
150
|
+
box-sizing: border-box;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
html {
|
|
154
|
+
-webkit-font-smoothing: antialiased;
|
|
155
|
+
-moz-osx-font-smoothing: grayscale;
|
|
156
|
+
text-rendering: optimizeLegibility;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
body {
|
|
160
|
+
margin: 0;
|
|
161
|
+
padding: 0;
|
|
162
|
+
min-height: 100vh;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Remove default button styles
|
|
166
|
+
button {
|
|
167
|
+
border: none;
|
|
168
|
+
background: none;
|
|
169
|
+
padding: 0;
|
|
170
|
+
margin: 0;
|
|
171
|
+
font: inherit;
|
|
172
|
+
cursor: pointer;
|
|
173
|
+
|
|
174
|
+
&:focus {
|
|
175
|
+
outline: none;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Remove default input styles
|
|
180
|
+
input,
|
|
181
|
+
textarea,
|
|
182
|
+
select {
|
|
183
|
+
font: inherit;
|
|
184
|
+
color: inherit;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Remove default link styles
|
|
188
|
+
a {
|
|
189
|
+
color: inherit;
|
|
190
|
+
text-decoration: none;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Remove default list styles
|
|
194
|
+
ul,
|
|
195
|
+
ol {
|
|
196
|
+
list-style: none;
|
|
197
|
+
margin: 0;
|
|
198
|
+
padding: 0;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// Remove default heading margins
|
|
202
|
+
h1,
|
|
203
|
+
h2,
|
|
204
|
+
h3,
|
|
205
|
+
h4,
|
|
206
|
+
h5,
|
|
207
|
+
h6 {
|
|
208
|
+
margin: 0;
|
|
209
|
+
font-weight: inherit;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// Remove default paragraph margins
|
|
213
|
+
p {
|
|
214
|
+
margin: 0;
|
|
215
|
+
}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dark Theme CSS Custom Properties
|
|
3
|
+
*
|
|
4
|
+
* Maps design tokens to CSS custom properties for the dark theme.
|
|
5
|
+
* Color scales are inverted for proper contrast in dark mode.
|
|
6
|
+
* Lighter shades become darker and vice versa.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
@use './tokens/colors' as *;
|
|
10
|
+
@use './tokens/spacing' as *;
|
|
11
|
+
@use './tokens/typography' as *;
|
|
12
|
+
@use './tokens/elevation' as *;
|
|
13
|
+
@use './tokens/border-radius' as *;
|
|
14
|
+
@use './tokens/animation' as *;
|
|
15
|
+
@use './tokens/size' as *;
|
|
16
|
+
|
|
17
|
+
:root.dark {
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// Colors - Primary (Inverted for dark mode)
|
|
20
|
+
// ============================================================================
|
|
21
|
+
--color-primary-50: #{$color-primary-900};
|
|
22
|
+
--color-primary-100: #{$color-primary-800};
|
|
23
|
+
--color-primary-200: #{$color-primary-700};
|
|
24
|
+
--color-primary-300: #{$color-primary-600};
|
|
25
|
+
--color-primary-400: #{$color-primary-500};
|
|
26
|
+
--color-primary-500: #{$color-primary-400};
|
|
27
|
+
--color-primary-600: #{$color-primary-300};
|
|
28
|
+
--color-primary-700: #{$color-primary-200};
|
|
29
|
+
--color-primary-800: #{$color-primary-100};
|
|
30
|
+
--color-primary-900: #{$color-primary-50};
|
|
31
|
+
|
|
32
|
+
// ============================================================================
|
|
33
|
+
// Colors - Secondary (Inverted for dark mode)
|
|
34
|
+
// ============================================================================
|
|
35
|
+
--color-secondary-50: #{$color-secondary-900};
|
|
36
|
+
--color-secondary-100: #{$color-secondary-800};
|
|
37
|
+
--color-secondary-200: #{$color-secondary-700};
|
|
38
|
+
--color-secondary-300: #{$color-secondary-600};
|
|
39
|
+
--color-secondary-400: #{$color-secondary-500};
|
|
40
|
+
--color-secondary-500: #{$color-secondary-400};
|
|
41
|
+
--color-secondary-600: #{$color-secondary-300};
|
|
42
|
+
--color-secondary-700: #{$color-secondary-200};
|
|
43
|
+
--color-secondary-800: #{$color-secondary-100};
|
|
44
|
+
--color-secondary-900: #{$color-secondary-50};
|
|
45
|
+
|
|
46
|
+
// ============================================================================
|
|
47
|
+
// Colors - Neutral (Inverted for dark mode)
|
|
48
|
+
// ============================================================================
|
|
49
|
+
--color-neutral-50: #{$color-neutral-900};
|
|
50
|
+
--color-neutral-100: #{$color-neutral-800};
|
|
51
|
+
--color-neutral-200: #{$color-neutral-700};
|
|
52
|
+
--color-neutral-300: #{$color-neutral-600};
|
|
53
|
+
--color-neutral-400: #{$color-neutral-500};
|
|
54
|
+
--color-neutral-500: #{$color-neutral-400};
|
|
55
|
+
--color-neutral-600: #{$color-neutral-300};
|
|
56
|
+
--color-neutral-700: #{$color-neutral-200};
|
|
57
|
+
--color-neutral-800: #{$color-neutral-100};
|
|
58
|
+
--color-neutral-900: #{$color-neutral-50};
|
|
59
|
+
|
|
60
|
+
// ============================================================================
|
|
61
|
+
// Colors - Semantic (Adjusted for dark mode visibility)
|
|
62
|
+
// ============================================================================
|
|
63
|
+
--color-success-default: #{$color-success-light};
|
|
64
|
+
--color-success-light: #{$color-success-default};
|
|
65
|
+
--color-success-dark: #{$color-success-dark};
|
|
66
|
+
|
|
67
|
+
--color-error-default: #{$color-error-light};
|
|
68
|
+
--color-error-light: #{$color-error-default};
|
|
69
|
+
--color-error-dark: #{$color-error-dark};
|
|
70
|
+
|
|
71
|
+
--color-warning-default: #{$color-warning-light};
|
|
72
|
+
--color-warning-light: #{$color-warning-default};
|
|
73
|
+
--color-warning-dark: #{$color-warning-dark};
|
|
74
|
+
|
|
75
|
+
--color-info-default: #{$color-info-light};
|
|
76
|
+
--color-info-light: #{$color-info-default};
|
|
77
|
+
--color-info-dark: #{$color-info-dark};
|
|
78
|
+
|
|
79
|
+
// ============================================================================
|
|
80
|
+
// Colors - Accent (Same as light theme)
|
|
81
|
+
// ============================================================================
|
|
82
|
+
--color-accent-orange: #{$color-accent-orange};
|
|
83
|
+
--color-accent-purple: #{$color-accent-purple};
|
|
84
|
+
--color-accent-red: #{$color-accent-red};
|
|
85
|
+
--color-accent-rust: #{$color-accent-rust};
|
|
86
|
+
--color-accent-violet: #{$color-accent-violet};
|
|
87
|
+
|
|
88
|
+
// ============================================================================
|
|
89
|
+
// Spacing (Same as light theme)
|
|
90
|
+
// ============================================================================
|
|
91
|
+
--spacing-0: #{$spacing-0};
|
|
92
|
+
--spacing-0-5: #{$spacing-0-5};
|
|
93
|
+
--spacing-1: #{$spacing-1};
|
|
94
|
+
--spacing-1-5: #{$spacing-1-5};
|
|
95
|
+
--spacing-2: #{$spacing-2};
|
|
96
|
+
--spacing-2-5: #{$spacing-2-5};
|
|
97
|
+
--spacing-3: #{$spacing-3};
|
|
98
|
+
--spacing-3-5: #{$spacing-3-5};
|
|
99
|
+
--spacing-4: #{$spacing-4};
|
|
100
|
+
--spacing-5: #{$spacing-5};
|
|
101
|
+
--spacing-6: #{$spacing-6};
|
|
102
|
+
--spacing-7: #{$spacing-7};
|
|
103
|
+
--spacing-8: #{$spacing-8};
|
|
104
|
+
--spacing-9: #{$spacing-9};
|
|
105
|
+
--spacing-10: #{$spacing-10};
|
|
106
|
+
--spacing-11: #{$spacing-11};
|
|
107
|
+
--spacing-12: #{$spacing-12};
|
|
108
|
+
--spacing-14: #{$spacing-14};
|
|
109
|
+
--spacing-16: #{$spacing-16};
|
|
110
|
+
|
|
111
|
+
// ============================================================================
|
|
112
|
+
// Typography - Font Families (Same as light theme)
|
|
113
|
+
// ============================================================================
|
|
114
|
+
--typography-font-family-base: #{$typography-font-family-base};
|
|
115
|
+
--typography-font-family-mono: #{$typography-font-family-mono};
|
|
116
|
+
|
|
117
|
+
// ============================================================================
|
|
118
|
+
// Typography - Font Sizes (Same as light theme)
|
|
119
|
+
// ============================================================================
|
|
120
|
+
--typography-font-size-xs: #{$typography-font-size-xs};
|
|
121
|
+
--typography-font-size-sm: #{$typography-font-size-sm};
|
|
122
|
+
--typography-font-size-base: #{$typography-font-size-base};
|
|
123
|
+
--typography-font-size-lg: #{$typography-font-size-lg};
|
|
124
|
+
--typography-font-size-xl: #{$typography-font-size-xl};
|
|
125
|
+
--typography-font-size-2xl: #{$typography-font-size-2xl};
|
|
126
|
+
--typography-font-size-3xl: #{$typography-font-size-3xl};
|
|
127
|
+
--typography-font-size-4xl: #{$typography-font-size-4xl};
|
|
128
|
+
--typography-font-size-5xl: #{$typography-font-size-5xl};
|
|
129
|
+
--typography-font-size-6xl: #{$typography-font-size-6xl};
|
|
130
|
+
|
|
131
|
+
// ============================================================================
|
|
132
|
+
// Typography - Font Weights (Same as light theme)
|
|
133
|
+
// ============================================================================
|
|
134
|
+
--typography-font-weight-normal: #{$typography-font-weight-normal};
|
|
135
|
+
--typography-font-weight-medium: #{$typography-font-weight-medium};
|
|
136
|
+
--typography-font-weight-semibold: #{$typography-font-weight-semibold};
|
|
137
|
+
--typography-font-weight-bold: #{$typography-font-weight-bold};
|
|
138
|
+
|
|
139
|
+
// ============================================================================
|
|
140
|
+
// Typography - Line Heights (Same as light theme)
|
|
141
|
+
// ============================================================================
|
|
142
|
+
--typography-line-height-tight: #{$typography-line-height-tight};
|
|
143
|
+
--typography-line-height-normal: #{$typography-line-height-normal};
|
|
144
|
+
--typography-line-height-relaxed: #{$typography-line-height-relaxed};
|
|
145
|
+
|
|
146
|
+
// ============================================================================
|
|
147
|
+
// Elevation (Enhanced shadows for dark mode)
|
|
148
|
+
// ============================================================================
|
|
149
|
+
--elevation-1: 0 1px 3px 0 rgba(0, 0, 0, 0.3), 0 1px 2px 0 rgba(0, 0, 0, 0.18);
|
|
150
|
+
--elevation-2: 0 4px 6px -1px rgba(0, 0, 0, 0.3), 0 2px 4px -1px rgba(0, 0, 0, 0.18);
|
|
151
|
+
--elevation-3: 0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -2px rgba(0, 0, 0, 0.15);
|
|
152
|
+
--elevation-4: 0 20px 25px -5px rgba(0, 0, 0, 0.3), 0 10px 10px -5px rgba(0, 0, 0, 0.12);
|
|
153
|
+
|
|
154
|
+
// ============================================================================
|
|
155
|
+
// Border Radius (Same as light theme)
|
|
156
|
+
// ============================================================================
|
|
157
|
+
--border-radius-none: #{$border-radius-none};
|
|
158
|
+
--border-radius-sm: #{$border-radius-sm};
|
|
159
|
+
--border-radius-md: #{$border-radius-md};
|
|
160
|
+
--border-radius-lg: #{$border-radius-lg};
|
|
161
|
+
--border-radius-xl: #{$border-radius-xl};
|
|
162
|
+
--border-radius-2xl: #{$border-radius-2xl};
|
|
163
|
+
--border-radius-full: #{$border-radius-full};
|
|
164
|
+
|
|
165
|
+
// ============================================================================
|
|
166
|
+
// Animation (Same as light theme)
|
|
167
|
+
// ============================================================================
|
|
168
|
+
--animation-duration-base: #{$animation-duration-fast};
|
|
169
|
+
--animation-easing-ease-in: #{$animation-easing-ease-in};
|
|
170
|
+
--animation-easing-ease-out: #{$animation-easing-ease-out};
|
|
171
|
+
--animation-easing-ease-in-out: #{$animation-easing-ease-in-out};
|
|
172
|
+
|
|
173
|
+
// ============================================================================
|
|
174
|
+
// Size - Interactive Elements (Same as light theme)
|
|
175
|
+
// ============================================================================
|
|
176
|
+
--size-interactive-xs-height: #{$size-interactive-xs-height};
|
|
177
|
+
--size-interactive-xs-padding: #{$size-interactive-xs-padding};
|
|
178
|
+
--size-interactive-xs-font-size: #{$size-interactive-xs-font-size};
|
|
179
|
+
|
|
180
|
+
--size-interactive-sm-height: #{$size-interactive-sm-height};
|
|
181
|
+
--size-interactive-sm-padding: #{$size-interactive-sm-padding};
|
|
182
|
+
--size-interactive-sm-font-size: #{$size-interactive-sm-font-size};
|
|
183
|
+
|
|
184
|
+
--size-interactive-md-height: #{$size-interactive-md-height};
|
|
185
|
+
--size-interactive-md-padding: #{$size-interactive-md-padding};
|
|
186
|
+
--size-interactive-md-font-size: #{$size-interactive-md-font-size};
|
|
187
|
+
|
|
188
|
+
--size-interactive-lg-height: #{$size-interactive-lg-height};
|
|
189
|
+
--size-interactive-lg-padding: #{$size-interactive-lg-padding};
|
|
190
|
+
--size-interactive-lg-font-size: #{$size-interactive-lg-font-size};
|
|
191
|
+
|
|
192
|
+
// ============================================================================
|
|
193
|
+
// Size - Minimum Touch Target (Same as light theme)
|
|
194
|
+
// ============================================================================
|
|
195
|
+
--size-min-touch-width: #{$size-min-touch-width};
|
|
196
|
+
--size-min-touch-height: #{$size-min-touch-height};
|
|
197
|
+
|
|
198
|
+
// ============================================================================
|
|
199
|
+
// Semantic Color Mappings for Dark Theme
|
|
200
|
+
// ============================================================================
|
|
201
|
+
--color-background: #{$color-neutral-900};
|
|
202
|
+
--color-surface: #{$color-neutral-800};
|
|
203
|
+
--color-text-primary: #{$color-neutral-50};
|
|
204
|
+
--color-text-secondary: #{$color-neutral-300};
|
|
205
|
+
--color-text-disabled: #{$color-neutral-500};
|
|
206
|
+
--color-border: #{$color-neutral-700};
|
|
207
|
+
--color-divider: #{$color-neutral-800};
|
|
208
|
+
--color-neutral-white: #ffffff;
|
|
209
|
+
// Semantic color aliases for components
|
|
210
|
+
--color-error: #{$color-error-default};
|
|
211
|
+
--color-success: #{$color-success-default};
|
|
212
|
+
--color-warning: #{$color-warning-default};
|
|
213
|
+
--color-info: #{$color-info-default};
|
|
214
|
+
// ============================================================================
|
|
215
|
+
// Short Aliases for Common Usage (Component Convenience)
|
|
216
|
+
// ============================================================================
|
|
217
|
+
--font-family-sans: var(--typography-font-family-base);
|
|
218
|
+
--font-family-mono: var(--typography-font-family-mono);
|
|
219
|
+
--font-size-xs: var(--typography-font-size-xs);
|
|
220
|
+
--font-size-sm: var(--typography-font-size-sm);
|
|
221
|
+
--font-size-base: var(--typography-font-size-base);
|
|
222
|
+
--font-size-lg: var(--typography-font-size-lg);
|
|
223
|
+
--font-size-xl: var(--typography-font-size-xl);
|
|
224
|
+
--font-weight-normal: var(--typography-font-weight-normal);
|
|
225
|
+
--font-weight-medium: var(--typography-font-weight-medium);
|
|
226
|
+
--font-weight-semibold: var(--typography-font-weight-semibold);
|
|
227
|
+
--font-weight-bold: var(--typography-font-weight-bold);
|
|
228
|
+
--line-height-tight: var(--typography-line-height-tight);
|
|
229
|
+
--line-height-normal: var(--typography-line-height-normal);
|
|
230
|
+
--line-height-relaxed: var(--typography-line-height-relaxed);
|
|
231
|
+
--animation-timing-ease: var(--animation-easing-ease-in-out);
|
|
232
|
+
|
|
233
|
+
// Error color scale aliases (for danger buttons, etc.)
|
|
234
|
+
--color-error-600: var(--color-error-default);
|
|
235
|
+
--color-error-700: var(--color-error-dark);
|
|
236
|
+
--color-error-800: #5a0707; // Darker shade for active state
|
|
237
|
+
}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Light Theme CSS Custom Properties
|
|
3
|
+
*
|
|
4
|
+
* Maps design tokens to CSS custom properties for the light theme.
|
|
5
|
+
* These custom properties enable runtime theme switching and provide
|
|
6
|
+
* semantic color mappings for components.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
@use './tokens/colors' as *;
|
|
10
|
+
@use './tokens/spacing' as *;
|
|
11
|
+
@use './tokens/typography' as *;
|
|
12
|
+
@use './tokens/elevation' as *;
|
|
13
|
+
@use './tokens/border-radius' as *;
|
|
14
|
+
@use './tokens/animation' as *;
|
|
15
|
+
@use './tokens/size' as *;
|
|
16
|
+
|
|
17
|
+
// Default theme (light) on :root
|
|
18
|
+
:root,
|
|
19
|
+
:root.light {
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// Colors - Primary
|
|
22
|
+
// ============================================================================
|
|
23
|
+
--color-primary-50: #{$color-primary-50};
|
|
24
|
+
--color-primary-100: #{$color-primary-100};
|
|
25
|
+
--color-primary-200: #{$color-primary-200};
|
|
26
|
+
--color-primary-300: #{$color-primary-300};
|
|
27
|
+
--color-primary-400: #{$color-primary-400};
|
|
28
|
+
--color-primary-500: #{$color-primary-500};
|
|
29
|
+
--color-primary-600: #{$color-primary-600};
|
|
30
|
+
--color-primary-700: #{$color-primary-700};
|
|
31
|
+
--color-primary-800: #{$color-primary-800};
|
|
32
|
+
--color-primary-900: #{$color-primary-900};
|
|
33
|
+
|
|
34
|
+
// ============================================================================
|
|
35
|
+
// Colors - Secondary
|
|
36
|
+
// ============================================================================
|
|
37
|
+
--color-secondary-50: #{$color-secondary-50};
|
|
38
|
+
--color-secondary-100: #{$color-secondary-100};
|
|
39
|
+
--color-secondary-200: #{$color-secondary-200};
|
|
40
|
+
--color-secondary-300: #{$color-secondary-300};
|
|
41
|
+
--color-secondary-400: #{$color-secondary-400};
|
|
42
|
+
--color-secondary-500: #{$color-secondary-500};
|
|
43
|
+
--color-secondary-600: #{$color-secondary-600};
|
|
44
|
+
--color-secondary-700: #{$color-secondary-700};
|
|
45
|
+
--color-secondary-800: #{$color-secondary-800};
|
|
46
|
+
--color-secondary-900: #{$color-secondary-900};
|
|
47
|
+
|
|
48
|
+
// ============================================================================
|
|
49
|
+
// Colors - Neutral (Grays)
|
|
50
|
+
// ============================================================================
|
|
51
|
+
--color-neutral-50: #{$color-neutral-50};
|
|
52
|
+
--color-neutral-100: #{$color-neutral-100};
|
|
53
|
+
--color-neutral-200: #{$color-neutral-200};
|
|
54
|
+
--color-neutral-300: #{$color-neutral-300};
|
|
55
|
+
--color-neutral-400: #{$color-neutral-400};
|
|
56
|
+
--color-neutral-500: #{$color-neutral-500};
|
|
57
|
+
--color-neutral-600: #{$color-neutral-600};
|
|
58
|
+
--color-neutral-700: #{$color-neutral-700};
|
|
59
|
+
--color-neutral-800: #{$color-neutral-800};
|
|
60
|
+
--color-neutral-900: #{$color-neutral-900};
|
|
61
|
+
|
|
62
|
+
// ============================================================================
|
|
63
|
+
// Colors - Semantic
|
|
64
|
+
// ============================================================================
|
|
65
|
+
--color-success-default: #{$color-success-default};
|
|
66
|
+
--color-success-light: #{$color-success-light};
|
|
67
|
+
--color-success-dark: #{$color-success-dark};
|
|
68
|
+
|
|
69
|
+
--color-error-default: #{$color-error-default};
|
|
70
|
+
--color-error-light: #{$color-error-light};
|
|
71
|
+
--color-error-dark: #{$color-error-dark};
|
|
72
|
+
|
|
73
|
+
--color-warning-default: #{$color-warning-default};
|
|
74
|
+
--color-warning-light: #{$color-warning-light};
|
|
75
|
+
--color-warning-dark: #{$color-warning-dark};
|
|
76
|
+
|
|
77
|
+
--color-info-default: #{$color-info-default};
|
|
78
|
+
--color-info-light: #{$color-info-light};
|
|
79
|
+
--color-info-dark: #{$color-info-dark};
|
|
80
|
+
|
|
81
|
+
// ============================================================================
|
|
82
|
+
// Colors - Accent
|
|
83
|
+
// ============================================================================
|
|
84
|
+
--color-accent-orange: #{$color-accent-orange};
|
|
85
|
+
--color-accent-purple: #{$color-accent-purple};
|
|
86
|
+
--color-accent-red: #{$color-accent-red};
|
|
87
|
+
--color-accent-rust: #{$color-accent-rust};
|
|
88
|
+
--color-accent-violet: #{$color-accent-violet};
|
|
89
|
+
|
|
90
|
+
// ============================================================================
|
|
91
|
+
// Spacing
|
|
92
|
+
// ============================================================================
|
|
93
|
+
--spacing-0: #{$spacing-0};
|
|
94
|
+
--spacing-0-5: #{$spacing-0-5};
|
|
95
|
+
--spacing-1: #{$spacing-1};
|
|
96
|
+
--spacing-1-5: #{$spacing-1-5};
|
|
97
|
+
--spacing-2: #{$spacing-2};
|
|
98
|
+
--spacing-2-5: #{$spacing-2-5};
|
|
99
|
+
--spacing-3: #{$spacing-3};
|
|
100
|
+
--spacing-3-5: #{$spacing-3-5};
|
|
101
|
+
--spacing-4: #{$spacing-4};
|
|
102
|
+
--spacing-5: #{$spacing-5};
|
|
103
|
+
--spacing-6: #{$spacing-6};
|
|
104
|
+
--spacing-7: #{$spacing-7};
|
|
105
|
+
--spacing-8: #{$spacing-8};
|
|
106
|
+
--spacing-9: #{$spacing-9};
|
|
107
|
+
--spacing-10: #{$spacing-10};
|
|
108
|
+
--spacing-11: #{$spacing-11};
|
|
109
|
+
--spacing-12: #{$spacing-12};
|
|
110
|
+
--spacing-14: #{$spacing-14};
|
|
111
|
+
--spacing-16: #{$spacing-16};
|
|
112
|
+
|
|
113
|
+
// ============================================================================
|
|
114
|
+
// Typography - Font Families
|
|
115
|
+
// ============================================================================
|
|
116
|
+
--typography-font-family-base: #{$typography-font-family-base};
|
|
117
|
+
--typography-font-family-mono: #{$typography-font-family-mono};
|
|
118
|
+
|
|
119
|
+
// ============================================================================
|
|
120
|
+
// Typography - Font Sizes
|
|
121
|
+
// ============================================================================
|
|
122
|
+
--typography-font-size-xs: #{$typography-font-size-xs};
|
|
123
|
+
--typography-font-size-sm: #{$typography-font-size-sm};
|
|
124
|
+
--typography-font-size-base: #{$typography-font-size-base};
|
|
125
|
+
--typography-font-size-lg: #{$typography-font-size-lg};
|
|
126
|
+
--typography-font-size-xl: #{$typography-font-size-xl};
|
|
127
|
+
--typography-font-size-2xl: #{$typography-font-size-2xl};
|
|
128
|
+
--typography-font-size-3xl: #{$typography-font-size-3xl};
|
|
129
|
+
--typography-font-size-4xl: #{$typography-font-size-4xl};
|
|
130
|
+
--typography-font-size-5xl: #{$typography-font-size-5xl};
|
|
131
|
+
--typography-font-size-6xl: #{$typography-font-size-6xl};
|
|
132
|
+
|
|
133
|
+
// ============================================================================
|
|
134
|
+
// Typography - Font Weights
|
|
135
|
+
// ============================================================================
|
|
136
|
+
--typography-font-weight-normal: #{$typography-font-weight-normal};
|
|
137
|
+
--typography-font-weight-medium: #{$typography-font-weight-medium};
|
|
138
|
+
--typography-font-weight-semibold: #{$typography-font-weight-semibold};
|
|
139
|
+
--typography-font-weight-bold: #{$typography-font-weight-bold};
|
|
140
|
+
|
|
141
|
+
// ============================================================================
|
|
142
|
+
// Typography - Line Heights
|
|
143
|
+
// ============================================================================
|
|
144
|
+
--typography-line-height-tight: #{$typography-line-height-tight};
|
|
145
|
+
--typography-line-height-normal: #{$typography-line-height-normal};
|
|
146
|
+
--typography-line-height-relaxed: #{$typography-line-height-relaxed};
|
|
147
|
+
|
|
148
|
+
// ============================================================================
|
|
149
|
+
// Elevation (Box Shadows)
|
|
150
|
+
// ============================================================================
|
|
151
|
+
--elevation-1: #{$elevation-1};
|
|
152
|
+
--elevation-2: #{$elevation-2};
|
|
153
|
+
--elevation-3: #{$elevation-3};
|
|
154
|
+
--elevation-4: #{$elevation-4};
|
|
155
|
+
|
|
156
|
+
// ============================================================================
|
|
157
|
+
// Border Radius
|
|
158
|
+
// ============================================================================
|
|
159
|
+
--border-radius-none: #{$border-radius-none};
|
|
160
|
+
--border-radius-sm: #{$border-radius-sm};
|
|
161
|
+
--border-radius-md: #{$border-radius-md};
|
|
162
|
+
--border-radius-lg: #{$border-radius-lg};
|
|
163
|
+
--border-radius-xl: #{$border-radius-xl};
|
|
164
|
+
--border-radius-2xl: #{$border-radius-2xl};
|
|
165
|
+
--border-radius-full: #{$border-radius-full};
|
|
166
|
+
|
|
167
|
+
// ============================================================================
|
|
168
|
+
// Animation
|
|
169
|
+
// ============================================================================
|
|
170
|
+
--animation-duration-base: #{$animation-duration-fast};
|
|
171
|
+
--animation-easing-ease-in: #{$animation-easing-ease-in};
|
|
172
|
+
--animation-easing-ease-out: #{$animation-easing-ease-out};
|
|
173
|
+
--animation-easing-ease-in-out: #{$animation-easing-ease-in-out};
|
|
174
|
+
|
|
175
|
+
// ============================================================================
|
|
176
|
+
// Size - Interactive Elements
|
|
177
|
+
// ============================================================================
|
|
178
|
+
--size-interactive-xs-height: #{$size-interactive-xs-height};
|
|
179
|
+
--size-interactive-xs-padding: #{$size-interactive-xs-padding};
|
|
180
|
+
--size-interactive-xs-font-size: #{$size-interactive-xs-font-size};
|
|
181
|
+
|
|
182
|
+
--size-interactive-sm-height: #{$size-interactive-sm-height};
|
|
183
|
+
--size-interactive-sm-padding: #{$size-interactive-sm-padding};
|
|
184
|
+
--size-interactive-sm-font-size: #{$size-interactive-sm-font-size};
|
|
185
|
+
|
|
186
|
+
--size-interactive-md-height: #{$size-interactive-md-height};
|
|
187
|
+
--size-interactive-md-padding: #{$size-interactive-md-padding};
|
|
188
|
+
--size-interactive-md-font-size: #{$size-interactive-md-font-size};
|
|
189
|
+
|
|
190
|
+
--size-interactive-lg-height: #{$size-interactive-lg-height};
|
|
191
|
+
--size-interactive-lg-padding: #{$size-interactive-lg-padding};
|
|
192
|
+
--size-interactive-lg-font-size: #{$size-interactive-lg-font-size};
|
|
193
|
+
|
|
194
|
+
// ============================================================================
|
|
195
|
+
// Size - Minimum Touch Target
|
|
196
|
+
// ============================================================================
|
|
197
|
+
--size-min-touch-width: #{$size-min-touch-width};
|
|
198
|
+
--size-min-touch-height: #{$size-min-touch-height};
|
|
199
|
+
|
|
200
|
+
// ============================================================================
|
|
201
|
+
// Semantic Color Mappings for Light Theme
|
|
202
|
+
// ============================================================================
|
|
203
|
+
--color-background: #ffffff;
|
|
204
|
+
--color-surface: #ffffff;
|
|
205
|
+
--color-text-primary: #{$color-neutral-900};
|
|
206
|
+
--color-text-secondary: #{$color-neutral-600};
|
|
207
|
+
--color-text-disabled: #{$color-neutral-400};
|
|
208
|
+
--color-border: #{$color-neutral-300};
|
|
209
|
+
--color-divider: #{$color-neutral-200};
|
|
210
|
+
--color-neutral-white: #ffffff;
|
|
211
|
+
|
|
212
|
+
// Semantic color aliases for components
|
|
213
|
+
--color-error: #{$color-error-default};
|
|
214
|
+
--color-success: #{$color-success-default};
|
|
215
|
+
--color-warning: #{$color-warning-default};
|
|
216
|
+
--color-info: #{$color-info-default};
|
|
217
|
+
|
|
218
|
+
// ============================================================================
|
|
219
|
+
// Short Aliases for Common Usage (Component Convenience)
|
|
220
|
+
// ============================================================================
|
|
221
|
+
--font-family-sans: var(--typography-font-family-base);
|
|
222
|
+
--font-family-mono: var(--typography-font-family-mono);
|
|
223
|
+
--font-size-xs: var(--typography-font-size-xs);
|
|
224
|
+
--font-size-sm: var(--typography-font-size-sm);
|
|
225
|
+
--font-size-base: var(--typography-font-size-base);
|
|
226
|
+
--font-size-lg: var(--typography-font-size-lg);
|
|
227
|
+
--font-size-xl: var(--typography-font-size-xl);
|
|
228
|
+
--font-weight-normal: var(--typography-font-weight-normal);
|
|
229
|
+
--font-weight-medium: var(--typography-font-weight-medium);
|
|
230
|
+
--font-weight-semibold: var(--typography-font-weight-semibold);
|
|
231
|
+
--font-weight-bold: var(--typography-font-weight-bold);
|
|
232
|
+
--line-height-tight: var(--typography-line-height-tight);
|
|
233
|
+
--line-height-normal: var(--typography-line-height-normal);
|
|
234
|
+
--line-height-relaxed: var(--typography-line-height-relaxed);
|
|
235
|
+
--animation-timing-ease: var(--animation-easing-ease-in-out);
|
|
236
|
+
|
|
237
|
+
// Error color scale aliases (for danger buttons, etc.)
|
|
238
|
+
--color-error-600: var(--color-error-default);
|
|
239
|
+
--color-error-700: var(--color-error-dark);
|
|
240
|
+
--color-error-800: #5a0707; // Darker shade for active state
|
|
241
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typography Styles
|
|
3
|
+
* Based on design system typography scale
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
:root {
|
|
7
|
+
// Font families
|
|
8
|
+
--font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',
|
|
9
|
+
'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
|
|
10
|
+
--font-family-mono: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Mono', 'Droid Sans Mono',
|
|
11
|
+
'Source Code Pro', monospace;
|
|
12
|
+
|
|
13
|
+
// Font sizes
|
|
14
|
+
--font-size-xs: 0.75rem; // 12px
|
|
15
|
+
--font-size-sm: 0.875rem; // 14px
|
|
16
|
+
--font-size-base: 1rem; // 16px
|
|
17
|
+
--font-size-lg: 1.125rem; // 18px
|
|
18
|
+
--font-size-xl: 1.25rem; // 20px
|
|
19
|
+
--font-size-2xl: 1.5rem; // 24px
|
|
20
|
+
--font-size-3xl: 1.875rem; // 30px
|
|
21
|
+
--font-size-4xl: 2.25rem; // 36px
|
|
22
|
+
--font-size-5xl: 3rem; // 48px
|
|
23
|
+
--font-size-6xl: 3.75rem; // 60px
|
|
24
|
+
|
|
25
|
+
// Line heights
|
|
26
|
+
--line-height-tight: 1.25;
|
|
27
|
+
--line-height-normal: 1.5;
|
|
28
|
+
--line-height-relaxed: 1.75;
|
|
29
|
+
|
|
30
|
+
// Font weights
|
|
31
|
+
--font-weight-normal: 400;
|
|
32
|
+
--font-weight-medium: 500;
|
|
33
|
+
--font-weight-semibold: 600;
|
|
34
|
+
--font-weight-bold: 700;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
body {
|
|
38
|
+
font-family: var(--font-family-base);
|
|
39
|
+
font-size: var(--font-size-base);
|
|
40
|
+
line-height: var(--line-height-normal);
|
|
41
|
+
font-weight: var(--font-weight-normal);
|
|
42
|
+
color: var(--color-text-primary, #111827);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Heading styles
|
|
46
|
+
h1 {
|
|
47
|
+
font-size: var(--font-size-5xl);
|
|
48
|
+
line-height: var(--line-height-tight);
|
|
49
|
+
font-weight: var(--font-weight-bold);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
h2 {
|
|
53
|
+
font-size: var(--font-size-4xl);
|
|
54
|
+
line-height: var(--line-height-tight);
|
|
55
|
+
font-weight: var(--font-weight-bold);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
h3 {
|
|
59
|
+
font-size: var(--font-size-3xl);
|
|
60
|
+
line-height: var(--line-height-tight);
|
|
61
|
+
font-weight: var(--font-weight-semibold);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
h4 {
|
|
65
|
+
font-size: var(--font-size-2xl);
|
|
66
|
+
line-height: var(--line-height-normal);
|
|
67
|
+
font-weight: var(--font-weight-semibold);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
h5 {
|
|
71
|
+
font-size: var(--font-size-xl);
|
|
72
|
+
line-height: var(--line-height-normal);
|
|
73
|
+
font-weight: var(--font-weight-medium);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
h6 {
|
|
77
|
+
font-size: var(--font-size-lg);
|
|
78
|
+
line-height: var(--line-height-normal);
|
|
79
|
+
font-weight: var(--font-weight-medium);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Code styles
|
|
83
|
+
code {
|
|
84
|
+
font-family: var(--font-family-mono);
|
|
85
|
+
font-size: 0.875em;
|
|
86
|
+
padding: 0.125rem 0.25rem;
|
|
87
|
+
background-color: var(--color-neutral-100);
|
|
88
|
+
color: var(--color-text-primary);
|
|
89
|
+
border-radius: 0.25rem;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
pre {
|
|
93
|
+
font-family: var(--font-family-mono);
|
|
94
|
+
font-size: var(--font-size-sm);
|
|
95
|
+
padding: 1rem;
|
|
96
|
+
background-color: var(--color-neutral-900);
|
|
97
|
+
color: var(--color-neutral-50);
|
|
98
|
+
border-radius: 0.5rem;
|
|
99
|
+
overflow-x: auto;
|
|
100
|
+
|
|
101
|
+
code {
|
|
102
|
+
padding: 0;
|
|
103
|
+
background-color: transparent;
|
|
104
|
+
color: inherit;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Small text
|
|
109
|
+
small {
|
|
110
|
+
font-size: var(--font-size-sm);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Strong and bold
|
|
114
|
+
strong,
|
|
115
|
+
b {
|
|
116
|
+
font-weight: var(--font-weight-bold);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Emphasis
|
|
120
|
+
em,
|
|
121
|
+
i {
|
|
122
|
+
font-style: italic;
|
|
123
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility Classes
|
|
3
|
+
* Common utility classes for spacing, display, and more
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Screen reader only
|
|
7
|
+
.sr-only {
|
|
8
|
+
position: absolute;
|
|
9
|
+
width: 1px;
|
|
10
|
+
height: 1px;
|
|
11
|
+
padding: 0;
|
|
12
|
+
margin: -1px;
|
|
13
|
+
overflow: hidden;
|
|
14
|
+
clip: rect(0, 0, 0, 0);
|
|
15
|
+
white-space: nowrap;
|
|
16
|
+
border-width: 0;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Focus visible styles
|
|
20
|
+
.focus-visible {
|
|
21
|
+
outline: 2px solid var(--color-primary-500, #208497);
|
|
22
|
+
outline-offset: 2px;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Skip to content link (accessibility)
|
|
26
|
+
.skip-to-content {
|
|
27
|
+
position: absolute;
|
|
28
|
+
top: -40px;
|
|
29
|
+
left: 0;
|
|
30
|
+
z-index: 100;
|
|
31
|
+
padding: 0.5rem 1rem;
|
|
32
|
+
background-color: var(--color-primary-500, #208497);
|
|
33
|
+
color: white;
|
|
34
|
+
text-decoration: none;
|
|
35
|
+
border-radius: 0 0 0.25rem 0;
|
|
36
|
+
|
|
37
|
+
&:focus {
|
|
38
|
+
top: 0;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Container utility
|
|
43
|
+
.container {
|
|
44
|
+
width: 100%;
|
|
45
|
+
max-width: 1280px;
|
|
46
|
+
margin-left: auto;
|
|
47
|
+
margin-right: auto;
|
|
48
|
+
padding-left: 1rem;
|
|
49
|
+
padding-right: 1rem;
|
|
50
|
+
|
|
51
|
+
@media (min-width: 640px) {
|
|
52
|
+
padding-left: 1.5rem;
|
|
53
|
+
padding-right: 1.5rem;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@media (min-width: 1024px) {
|
|
57
|
+
padding-left: 2rem;
|
|
58
|
+
padding-right: 2rem;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Truncate text
|
|
63
|
+
.truncate {
|
|
64
|
+
overflow: hidden;
|
|
65
|
+
text-overflow: ellipsis;
|
|
66
|
+
white-space: nowrap;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Line clamp utilities
|
|
70
|
+
.line-clamp-1 {
|
|
71
|
+
display: -webkit-box;
|
|
72
|
+
-webkit-line-clamp: 1;
|
|
73
|
+
line-clamp: 1;
|
|
74
|
+
-webkit-box-orient: vertical;
|
|
75
|
+
overflow: hidden;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.line-clamp-2 {
|
|
79
|
+
display: -webkit-box;
|
|
80
|
+
-webkit-line-clamp: 2;
|
|
81
|
+
line-clamp: 2;
|
|
82
|
+
-webkit-box-orient: vertical;
|
|
83
|
+
overflow: hidden;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.line-clamp-3 {
|
|
87
|
+
display: -webkit-box;
|
|
88
|
+
-webkit-line-clamp: 3;
|
|
89
|
+
line-clamp: 3;
|
|
90
|
+
-webkit-box-orient: vertical;
|
|
91
|
+
overflow: hidden;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Aspect ratio utilities
|
|
95
|
+
.aspect-square {
|
|
96
|
+
aspect-ratio: 1 / 1;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.aspect-video {
|
|
100
|
+
aspect-ratio: 16 / 9;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Animation utilities
|
|
104
|
+
@media (prefers-reduced-motion: reduce) {
|
|
105
|
+
*,
|
|
106
|
+
*::before,
|
|
107
|
+
*::after {
|
|
108
|
+
animation-duration: 0.01ms !important;
|
|
109
|
+
animation-iteration-count: 1 !important;
|
|
110
|
+
transition-duration: 0.01ms !important;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Focus ring utility
|
|
115
|
+
.focus-ring {
|
|
116
|
+
&:focus-visible {
|
|
117
|
+
outline: 2px solid var(--color-primary-500, #208497);
|
|
118
|
+
outline-offset: 2px;
|
|
119
|
+
border-radius: 0.25rem;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Disabled state utility
|
|
124
|
+
.disabled {
|
|
125
|
+
opacity: 0.5;
|
|
126
|
+
cursor: not-allowed;
|
|
127
|
+
pointer-events: none;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Visually hidden but accessible
|
|
131
|
+
.visually-hidden {
|
|
132
|
+
position: absolute;
|
|
133
|
+
width: 1px;
|
|
134
|
+
height: 1px;
|
|
135
|
+
padding: 0;
|
|
136
|
+
margin: -1px;
|
|
137
|
+
overflow: hidden;
|
|
138
|
+
clip: rect(0, 0, 0, 0);
|
|
139
|
+
white-space: nowrap;
|
|
140
|
+
border: 0;
|
|
141
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global Styles Entry Point
|
|
3
|
+
* Import this file in your Angular application's styles.scss to use the design system
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// 1. Themes (must be first to define CSS custom properties)
|
|
7
|
+
@use './theme-light';
|
|
8
|
+
@use './theme-dark';
|
|
9
|
+
|
|
10
|
+
// 2. Reset and normalize
|
|
11
|
+
@use './reset';
|
|
12
|
+
|
|
13
|
+
// 3. Typography
|
|
14
|
+
@use './typography';
|
|
15
|
+
|
|
16
|
+
// 4. Utilities
|
|
17
|
+
@use './utilities';
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
|
|
2
|
+
// Do not edit directly, this file was auto-generated.
|
|
3
|
+
|
|
4
|
+
$color-primary-50: #f0f8fa;
|
|
5
|
+
$color-primary-100: #e0f1f4;
|
|
6
|
+
$color-primary-200: #c1e3e9;
|
|
7
|
+
$color-primary-300: #a3d5df;
|
|
8
|
+
$color-primary-400: #84c7d4;
|
|
9
|
+
$color-primary-500: #208497; // Primary brand color from lc-design
|
|
10
|
+
$color-primary-600: #1a6a79;
|
|
11
|
+
$color-primary-700: #144f5b;
|
|
12
|
+
$color-primary-800: #0d353d;
|
|
13
|
+
$color-primary-900: #071a1f;
|
|
14
|
+
$color-secondary-50: #f5f8f9;
|
|
15
|
+
$color-secondary-100: #ebf1f3;
|
|
16
|
+
$color-secondary-200: #d7e3e7;
|
|
17
|
+
$color-secondary-300: #c3d5db;
|
|
18
|
+
$color-secondary-400: #afc7cf;
|
|
19
|
+
$color-secondary-500: #7097af; // Secondary brand color from lc-design
|
|
20
|
+
$color-secondary-600: #5a798c;
|
|
21
|
+
$color-secondary-700: #435b69;
|
|
22
|
+
$color-secondary-800: #2d3c46;
|
|
23
|
+
$color-secondary-900: #161e23;
|
|
24
|
+
$color-neutral-50: #f9fafb;
|
|
25
|
+
$color-neutral-100: #f3f4f6;
|
|
26
|
+
$color-neutral-200: #e5e7eb;
|
|
27
|
+
$color-neutral-300: #d1d5db;
|
|
28
|
+
$color-neutral-400: #9ca3af;
|
|
29
|
+
$color-neutral-500: #6b7280;
|
|
30
|
+
$color-neutral-600: #4b5563;
|
|
31
|
+
$color-neutral-700: #374151;
|
|
32
|
+
$color-neutral-800: #1f2937;
|
|
33
|
+
$color-neutral-900: #111827;
|
|
34
|
+
$color-success-default: #8ea475;
|
|
35
|
+
$color-success-light: #cdd6c2;
|
|
36
|
+
$color-success-dark: #5f7150;
|
|
37
|
+
$color-error-default: #9d0e0e;
|
|
38
|
+
$color-error-light: #f7a1a1;
|
|
39
|
+
$color-error-dark: #6b0909;
|
|
40
|
+
$color-warning-default: #e1a040;
|
|
41
|
+
$color-warning-light: #f1d3a7;
|
|
42
|
+
$color-warning-dark: #9b6b2b;
|
|
43
|
+
$color-info-default: #3b6588;
|
|
44
|
+
$color-info-light: #b8cee0;
|
|
45
|
+
$color-info-dark: #27445c;
|
|
46
|
+
$color-accent-orange: #df792e;
|
|
47
|
+
$color-accent-purple: #866aa0;
|
|
48
|
+
$color-accent-red: #9e3846;
|
|
49
|
+
$color-accent-rust: #c6592e;
|
|
50
|
+
$color-accent-violet: #4e3f84;
|
|
51
|
+
$spacing-0: 0;
|
|
52
|
+
$spacing-1: 0.25rem; // 4px - Base grid unit
|
|
53
|
+
$spacing-2: 0.5rem; // 8px
|
|
54
|
+
$spacing-3: 0.75rem; // 12px
|
|
55
|
+
$spacing-4: 1rem; // 16px
|
|
56
|
+
$spacing-5: 1.25rem; // 20px
|
|
57
|
+
$spacing-6: 1.5rem; // 24px
|
|
58
|
+
$spacing-7: 1.75rem; // 28px
|
|
59
|
+
$spacing-8: 2rem; // 32px
|
|
60
|
+
$spacing-9: 2.25rem; // 36px
|
|
61
|
+
$spacing-10: 2.5rem; // 40px
|
|
62
|
+
$spacing-11: 2.75rem; // 44px - Minimum touch target
|
|
63
|
+
$spacing-12: 3rem; // 48px
|
|
64
|
+
$spacing-14: 3.5rem; // 56px
|
|
65
|
+
$spacing-16: 4rem; // 64px
|
|
66
|
+
$spacing-0-5: 0.125rem; // 2px
|
|
67
|
+
$spacing-1-5: 0.375rem; // 6px
|
|
68
|
+
$spacing-2-5: 0.625rem; // 10px
|
|
69
|
+
$spacing-3-5: 0.875rem; // 14px
|
|
70
|
+
$typography-font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
|
|
71
|
+
$typography-font-family-mono: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Mono', 'Droid Sans Mono', 'Source Code Pro', monospace;
|
|
72
|
+
$typography-font-size-xs: 0.75rem; // 12px
|
|
73
|
+
$typography-font-size-sm: 0.875rem; // 14px
|
|
74
|
+
$typography-font-size-base: 1rem; // 16px
|
|
75
|
+
$typography-font-size-lg: 1.125rem; // 18px
|
|
76
|
+
$typography-font-size-xl: 1.25rem; // 20px
|
|
77
|
+
$typography-font-size-2xl: 1.5rem; // 24px
|
|
78
|
+
$typography-font-size-3xl: 1.875rem; // 30px
|
|
79
|
+
$typography-font-size-4xl: 2.25rem; // 36px
|
|
80
|
+
$typography-font-size-5xl: 3rem; // 48px
|
|
81
|
+
$typography-font-size-6xl: 3.75rem; // 60px
|
|
82
|
+
$typography-font-weight-normal: 400;
|
|
83
|
+
$typography-font-weight-medium: 500;
|
|
84
|
+
$typography-font-weight-semibold: 600;
|
|
85
|
+
$typography-font-weight-bold: 700;
|
|
86
|
+
$typography-line-height-tight: 1.25;
|
|
87
|
+
$typography-line-height-normal: 1.5;
|
|
88
|
+
$typography-line-height-relaxed: 1.75;
|
|
89
|
+
$elevation-1: 0 1px 2px 0 rgba(0, 0, 0, 0.05); // Subtle elevation for cards
|
|
90
|
+
$elevation-2: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); // Medium elevation for dropdowns
|
|
91
|
+
$elevation-3: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); // High elevation for modals
|
|
92
|
+
$elevation-4: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); // Highest elevation for tooltips
|
|
93
|
+
$border-radius-none: 0;
|
|
94
|
+
$border-radius-sm: 0.25rem; // 4px
|
|
95
|
+
$border-radius-md: 0.5rem; // 8px - Default
|
|
96
|
+
$border-radius-lg: 0.75rem; // 12px
|
|
97
|
+
$border-radius-xl: 1rem; // 16px
|
|
98
|
+
$border-radius-2xl: 1.5rem; // 24px
|
|
99
|
+
$border-radius-full: 9999px; // Fully rounded
|
|
100
|
+
$animation-duration-fast: 150ms; // Standard animation duration
|
|
101
|
+
$animation-easing-ease-in: ease-in;
|
|
102
|
+
$animation-easing-ease-out: ease-out;
|
|
103
|
+
$animation-easing-ease-in-out: ease-in-out;
|
|
104
|
+
$size-interactive-xs-height: 1.5rem; // 24px
|
|
105
|
+
$size-interactive-xs-padding: 0.25rem 0.5rem;
|
|
106
|
+
$size-interactive-xs-font-size: 0.75rem;
|
|
107
|
+
$size-interactive-sm-height: 2rem; // 32px
|
|
108
|
+
$size-interactive-sm-padding: 0.375rem 0.75rem;
|
|
109
|
+
$size-interactive-sm-font-size: 0.875rem;
|
|
110
|
+
$size-interactive-md-height: 2.5rem; // 40px - Default
|
|
111
|
+
$size-interactive-md-padding: 0.5rem 1rem;
|
|
112
|
+
$size-interactive-md-font-size: 1rem;
|
|
113
|
+
$size-interactive-lg-height: 2.75rem; // 44px - Minimum touch target
|
|
114
|
+
$size-interactive-lg-padding: 0.625rem 1.25rem;
|
|
115
|
+
$size-interactive-lg-font-size: 1.125rem;
|
|
116
|
+
$size-min-touch-width: 2.75rem; // 44px minimum
|
|
117
|
+
$size-min-touch-height: 2.75rem; // 44px minimum
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
|
|
2
|
+
// Do not edit directly, this file was auto-generated.
|
|
3
|
+
|
|
4
|
+
$border-radius-none: 0;
|
|
5
|
+
$border-radius-sm: 0.25rem; // 4px
|
|
6
|
+
$border-radius-md: 0.5rem; // 8px - Default
|
|
7
|
+
$border-radius-lg: 0.75rem; // 12px
|
|
8
|
+
$border-radius-xl: 1rem; // 16px
|
|
9
|
+
$border-radius-2xl: 1.5rem; // 24px
|
|
10
|
+
$border-radius-full: 9999px; // Fully rounded
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
|
|
2
|
+
// Do not edit directly, this file was auto-generated.
|
|
3
|
+
|
|
4
|
+
$color-primary-50: #f0f8fa;
|
|
5
|
+
$color-primary-100: #e0f1f4;
|
|
6
|
+
$color-primary-200: #c1e3e9;
|
|
7
|
+
$color-primary-300: #a3d5df;
|
|
8
|
+
$color-primary-400: #84c7d4;
|
|
9
|
+
$color-primary-500: #208497; // Primary brand color from lc-design
|
|
10
|
+
$color-primary-600: #1a6a79;
|
|
11
|
+
$color-primary-700: #144f5b;
|
|
12
|
+
$color-primary-800: #0d353d;
|
|
13
|
+
$color-primary-900: #071a1f;
|
|
14
|
+
$color-secondary-50: #f5f8f9;
|
|
15
|
+
$color-secondary-100: #ebf1f3;
|
|
16
|
+
$color-secondary-200: #d7e3e7;
|
|
17
|
+
$color-secondary-300: #c3d5db;
|
|
18
|
+
$color-secondary-400: #afc7cf;
|
|
19
|
+
$color-secondary-500: #7097af; // Secondary brand color from lc-design
|
|
20
|
+
$color-secondary-600: #5a798c;
|
|
21
|
+
$color-secondary-700: #435b69;
|
|
22
|
+
$color-secondary-800: #2d3c46;
|
|
23
|
+
$color-secondary-900: #161e23;
|
|
24
|
+
$color-neutral-50: #f9fafb;
|
|
25
|
+
$color-neutral-100: #f3f4f6;
|
|
26
|
+
$color-neutral-200: #e5e7eb;
|
|
27
|
+
$color-neutral-300: #d1d5db;
|
|
28
|
+
$color-neutral-400: #9ca3af;
|
|
29
|
+
$color-neutral-500: #6b7280;
|
|
30
|
+
$color-neutral-600: #4b5563;
|
|
31
|
+
$color-neutral-700: #374151;
|
|
32
|
+
$color-neutral-800: #1f2937;
|
|
33
|
+
$color-neutral-900: #111827;
|
|
34
|
+
$color-success-default: #8ea475;
|
|
35
|
+
$color-success-light: #cdd6c2;
|
|
36
|
+
$color-success-dark: #5f7150;
|
|
37
|
+
$color-error-default: #9d0e0e;
|
|
38
|
+
$color-error-light: #f7a1a1;
|
|
39
|
+
$color-error-dark: #6b0909;
|
|
40
|
+
$color-warning-default: #e1a040;
|
|
41
|
+
$color-warning-light: #f1d3a7;
|
|
42
|
+
$color-warning-dark: #9b6b2b;
|
|
43
|
+
$color-info-default: #3b6588;
|
|
44
|
+
$color-info-light: #b8cee0;
|
|
45
|
+
$color-info-dark: #27445c;
|
|
46
|
+
$color-accent-orange: #df792e;
|
|
47
|
+
$color-accent-purple: #866aa0;
|
|
48
|
+
$color-accent-red: #9e3846;
|
|
49
|
+
$color-accent-rust: #c6592e;
|
|
50
|
+
$color-accent-violet: #4e3f84;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
|
|
2
|
+
// Do not edit directly, this file was auto-generated.
|
|
3
|
+
|
|
4
|
+
$elevation-1: 0 1px 2px 0 rgba(0, 0, 0, 0.05); // Subtle elevation for cards
|
|
5
|
+
$elevation-2: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); // Medium elevation for dropdowns
|
|
6
|
+
$elevation-3: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); // High elevation for modals
|
|
7
|
+
$elevation-4: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); // Highest elevation for tooltips
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
|
|
2
|
+
// Do not edit directly, this file was auto-generated.
|
|
3
|
+
|
|
4
|
+
$size-interactive-xs-height: 1.5rem; // 24px
|
|
5
|
+
$size-interactive-xs-padding: 0.25rem 0.5rem;
|
|
6
|
+
$size-interactive-xs-font-size: 0.75rem;
|
|
7
|
+
$size-interactive-sm-height: 2rem; // 32px
|
|
8
|
+
$size-interactive-sm-padding: 0.375rem 0.75rem;
|
|
9
|
+
$size-interactive-sm-font-size: 0.875rem;
|
|
10
|
+
$size-interactive-md-height: 2.5rem; // 40px - Default
|
|
11
|
+
$size-interactive-md-padding: 0.5rem 1rem;
|
|
12
|
+
$size-interactive-md-font-size: 1rem;
|
|
13
|
+
$size-interactive-lg-height: 2.75rem; // 44px - Minimum touch target
|
|
14
|
+
$size-interactive-lg-padding: 0.625rem 1.25rem;
|
|
15
|
+
$size-interactive-lg-font-size: 1.125rem;
|
|
16
|
+
$size-min-touch-width: 2.75rem; // 44px minimum
|
|
17
|
+
$size-min-touch-height: 2.75rem; // 44px minimum
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
|
|
2
|
+
// Do not edit directly, this file was auto-generated.
|
|
3
|
+
|
|
4
|
+
$spacing-0: 0;
|
|
5
|
+
$spacing-1: 0.25rem; // 4px - Base grid unit
|
|
6
|
+
$spacing-2: 0.5rem; // 8px
|
|
7
|
+
$spacing-3: 0.75rem; // 12px
|
|
8
|
+
$spacing-4: 1rem; // 16px
|
|
9
|
+
$spacing-5: 1.25rem; // 20px
|
|
10
|
+
$spacing-6: 1.5rem; // 24px
|
|
11
|
+
$spacing-7: 1.75rem; // 28px
|
|
12
|
+
$spacing-8: 2rem; // 32px
|
|
13
|
+
$spacing-9: 2.25rem; // 36px
|
|
14
|
+
$spacing-10: 2.5rem; // 40px
|
|
15
|
+
$spacing-11: 2.75rem; // 44px - Minimum touch target
|
|
16
|
+
$spacing-12: 3rem; // 48px
|
|
17
|
+
$spacing-14: 3.5rem; // 56px
|
|
18
|
+
$spacing-16: 4rem; // 64px
|
|
19
|
+
$spacing-0-5: 0.125rem; // 2px
|
|
20
|
+
$spacing-1-5: 0.375rem; // 6px
|
|
21
|
+
$spacing-2-5: 0.625rem; // 10px
|
|
22
|
+
$spacing-3-5: 0.875rem; // 14px
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
|
|
2
|
+
// Do not edit directly, this file was auto-generated.
|
|
3
|
+
|
|
4
|
+
$typography-font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
|
|
5
|
+
$typography-font-family-mono: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Mono', 'Droid Sans Mono', 'Source Code Pro', monospace;
|
|
6
|
+
$typography-font-size-xs: 0.75rem; // 12px
|
|
7
|
+
$typography-font-size-sm: 0.875rem; // 14px
|
|
8
|
+
$typography-font-size-base: 1rem; // 16px
|
|
9
|
+
$typography-font-size-lg: 1.125rem; // 18px
|
|
10
|
+
$typography-font-size-xl: 1.25rem; // 20px
|
|
11
|
+
$typography-font-size-2xl: 1.5rem; // 24px
|
|
12
|
+
$typography-font-size-3xl: 1.875rem; // 30px
|
|
13
|
+
$typography-font-size-4xl: 2.25rem; // 36px
|
|
14
|
+
$typography-font-size-5xl: 3rem; // 48px
|
|
15
|
+
$typography-font-size-6xl: 3.75rem; // 60px
|
|
16
|
+
$typography-font-weight-normal: 400;
|
|
17
|
+
$typography-font-weight-medium: 500;
|
|
18
|
+
$typography-font-weight-semibold: 600;
|
|
19
|
+
$typography-font-weight-bold: 700;
|
|
20
|
+
$typography-line-height-tight: 1.25;
|
|
21
|
+
$typography-line-height-normal: 1.5;
|
|
22
|
+
$typography-line-height-relaxed: 1.75;
|