@xiriframework/xiri-ng 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,356 @@
1
+ @use 'sass:color';
2
+ @use 'colors' as *;
3
+
4
+ // ============================================
5
+ // Material Component CSS Variable Overrides
6
+ // Updated for Material 3 (--mat-* naming convention)
7
+ // ============================================
8
+ body {
9
+ /* Spacing Scale */
10
+ --xiri-spacing-xs: 0.25rem; /* 4px */
11
+ --xiri-spacing-sm: 0.5rem; /* 8px */
12
+ --xiri-spacing-md: 1rem; /* 16px */
13
+ --xiri-spacing-lg: 1.5rem; /* 24px */
14
+ --xiri-spacing-xl: 2rem; /* 32px */
15
+ --xiri-spacing-2xl: 3rem; /* 48px */
16
+
17
+ /* Grid Gaps */
18
+ --xiri-grid-column-gap: var(--xiri-spacing-lg);
19
+ --xiri-grid-row-gap: 1.25rem;
20
+
21
+ /* Typography Scale */
22
+ --xiri-font-size-display: 2rem; /* 32px - Large headings, success states */
23
+ --xiri-font-size-headline: 1.5rem; /* 24px - Section headings */
24
+ --xiri-font-size-title: 1.25rem; /* 20px - Card titles, table headers */
25
+ --xiri-font-size-body: 1rem; /* 16px - Body text (base) */
26
+ --xiri-font-size-label: 0.875rem; /* 14px - Labels, secondary text */
27
+ --xiri-font-size-input: 0.875rem; /* 14px - Form field input text */
28
+ --xiri-font-size-helper: 0.75rem; /* 12px - Hints, errors, captions */
29
+
30
+ /* Icon Sizes */
31
+ --xiri-icon-size-lg: 1.5rem; /* 24px */
32
+ --xiri-icon-size-md: 1.25rem; /* 20px */
33
+ --xiri-icon-size-sm: 1rem; /* 16px */
34
+
35
+ /* Form Field Icon Color */
36
+ --xiri-formfield-icon-color: var(inherit);
37
+
38
+ /* Linkrow Icon Color */
39
+ --xiri-linkrow-icon-color: var(--secondary);
40
+
41
+ /* Form Field Typography */
42
+ --mat-form-field-container-text-size: var(--xiri-font-size-input);
43
+ --mat-select-trigger-text-size: var(--xiri-font-size-input);
44
+ /* Form Field Sizing - more compact */
45
+ --mat-form-field-container-height: 46px;
46
+ --mat-form-field-filled-with-label-container-padding-bottom: 2px;
47
+ --mat-form-field-container-text-line-height: 1.4rem;
48
+ --mat-form-field-filled-container-shape: 6px;
49
+
50
+ /* Toolbar */
51
+ --mat-toolbar-container-background-color: var(--toolbar-background, var(--primary));
52
+ --mat-toolbar-container-text-color: var(--toolbar-text, var(--primary-light));
53
+
54
+ /* Buttons */
55
+ --mat-button-protected-label-text-color: var(--primary-light);
56
+ --mat-protected-button-state-layer-color: var(--primary);
57
+ --mat-button-text-label-text-color: var(--primary);
58
+ --mat-button-filled-container-color: var(--primary);
59
+ --mat-button-outlined-label-text-color: var(--primary);
60
+ --mat-button-text-state-layer-color: var(--primary);
61
+ --mat-button-outlined-state-layer-color: var(--primary);
62
+ --mat-button-protected-container-color: var(--primary);
63
+ --mat-button-filled-label-text-color: var(--primary-light);
64
+ --mat-button-outlined-outline-color: var(--primary-dark);
65
+ --mat-fab-container-color: var(--primary-light);
66
+ --mat-fab-small-container-color: var(--primary-light);
67
+ --mat-outlined-button-ripple-color: var(--ripple);
68
+ --mat-icon-button-ripple-color: var(--ripple);
69
+ --mat-fab-ripple-color: var(--ripple);
70
+ --mat-fab-small-ripple-color: var(--ripple);
71
+ --mat-protected-button-ripple-color: var(--ripple);
72
+ --mat-text-button-ripple-color: var(--ripple);
73
+ --mat-fab-small-foreground-color: var(--primary-dark);
74
+ --mat-fab-small-state-layer-color: var(--primary-dark);
75
+ --mat-icon-button-icon-color: var(--primary-dark);
76
+ --mat-icon-button-state-layer-color: var(--primary-dark);
77
+ --mat-fab-foreground-color: var(--primary-dark);
78
+ --mat-fab-state-layer-color: var(--primary-dark);
79
+ --mat-text-button-disabled-state-layer-color: var(--primary-dark);
80
+ --mat-protected-button-disabled-state-layer-color: var(--primary-dark);
81
+ --mat-button-filled-disabled-state-layer-color: var(--primary-dark);
82
+ --mat-icon-button-disabled-state-layer-color: var(--primary-dark);
83
+ --mat-button-toggle-divider-color: var(--primary-dark);
84
+ --mat-standard-button-toggle-selected-state-text-color: var(--primary-dark);
85
+ --mat-standard-button-toggle-text-color: var(--primary-dark);
86
+ --mat-standard-button-toggle-state-layer-color: var(--primary-dark);
87
+ /* Button shapes - override M3 corner-full (9999px) */
88
+ --mat-button-text-container-shape: 12px;
89
+ --mat-button-filled-container-shape: 12px;
90
+ --mat-button-protected-container-shape: 12px;
91
+ --mat-button-outlined-container-shape: 12px;
92
+ --mat-button-tonal-container-shape: 12px;
93
+
94
+ /* Toggle */
95
+ --mat-standard-button-toggle-selected-state-background-color: var(--primary-light);
96
+
97
+ /* Checkbox */
98
+ --mat-checkbox-selected-focus-icon-color: var(--primary);
99
+ --mat-checkbox-selected-hover-icon-color: var(--primary);
100
+ --mat-checkbox-selected-icon-color: var(--primary);
101
+ --mat-checkbox-selected-pressed-icon-color: var(--primary);
102
+ --mat-checkbox-selected-focus-state-layer-color: var(--primary);
103
+ --mat-checkbox-selected-hover-state-layer-color: var(--primary);
104
+ --mat-checkbox-unselected-pressed-state-layer-color: var(--primary);
105
+ --mat-pseudo-checkbox-full-selected-icon-color: var(--primary);
106
+ --mat-pseudo-checkbox-minimal-selected-checkmark-color: var(--primary);
107
+ --mat-checkbox-selected-checkmark-color: var(--primary-light);
108
+ --mat-checkbox-unselected-focus-icon-color: var(--primary-dark);
109
+ --mat-checkbox-unselected-hover-icon-color: var(--primary-dark);
110
+ --mat-checkbox-unselected-icon-color: var(--primary-dark);
111
+ --mat-checkbox-unselected-pressed-icon-color: var(--primary-dark);
112
+ --mat-checkbox-selected-pressed-state-layer-color: var(--primary-dark);
113
+ --mat-checkbox-unselected-focus-state-layer-color: var(--primary-dark);
114
+ --mat-checkbox-unselected-hover-state-layer-color: var(--primary-dark);
115
+ --mat-full-pseudo-checkbox-unselected-icon-color: var(--primary-dark);
116
+ --mat-checkbox-label-text-color: var(--primary-dark);
117
+
118
+ /* Progress */
119
+ --mat-progress-bar-active-indicator-color: var(--primary);
120
+ --mat-progress-spinner-active-indicator-color: var(--primary);
121
+ --mat-progress-bar-track-color: var(--primary-light);
122
+
123
+ /* Text fields (filled) */
124
+ --mat-form-field-filled-caret-color: var(--primary);
125
+ --mat-form-field-filled-focus-active-indicator-color: var(--primary);
126
+ --mat-form-field-filled-focus-label-text-color: var(--primary);
127
+ --mat-form-field-filled-disabled-label-text-color: var(--ripple);
128
+ --mat-form-field-filled-input-text-color: var(--primary-dark);
129
+ --mat-form-field-filled-disabled-input-text-color: var(--ripple);
130
+ --mat-form-field-filled-input-text-placeholder-color: var(--primary-dark);
131
+ --mat-form-field-filled-hover-active-indicator-color: var(--primary-dark);
132
+ --mat-form-field-filled-container-color: var(--primary-light);
133
+ --mat-form-field-filled-label-text-color: var(--primary-dark);
134
+ --mat-form-field-filled-hover-label-text-color: var(--primary-dark);
135
+
136
+ /* Text fields (filled) - error states */
137
+ --mat-form-field-filled-error-hover-label-text-color: var(--error);
138
+ --mat-form-field-filled-error-focus-label-text-color: var(--error);
139
+ --mat-form-field-filled-error-label-text-color: var(--error);
140
+ --mat-form-field-filled-error-active-indicator-color: var(--error);
141
+ --mat-form-field-filled-error-focus-active-indicator-color: var(--error);
142
+ --mat-form-field-filled-error-hover-active-indicator-color: var(--error);
143
+
144
+ /* Text fields (outlined) */
145
+ --mat-form-field-outlined-caret-color: var(--primary);
146
+ --mat-form-field-outlined-focus-outline-color: var(--primary);
147
+ --mat-form-field-outlined-focus-label-text-color: var(--primary);
148
+ --mat-form-field-outlined-label-text-color: var(--primary-dark);
149
+ --mat-form-field-outlined-hover-label-text-color: var(--primary-dark);
150
+ --mat-form-field-outlined-disabled-label-text-color: var(--ripple);
151
+ --mat-form-field-outlined-input-text-color: var(--primary-dark);
152
+ --mat-form-field-outlined-disabled-input-text-color: var(--ripple);
153
+ --mat-form-field-outlined-input-text-placeholder-color: var(--primary-dark);
154
+ --mat-form-field-outlined-outline-color: var(--primary-dark);
155
+ --mat-form-field-outlined-disabled-outline-color: var(--ripple);
156
+ --mat-form-field-outlined-hover-outline-color: var(--primary-dark);
157
+
158
+ /* Text fields (outlined) - error states */
159
+ --mat-form-field-outlined-error-focus-label-text-color: var(--error);
160
+ --mat-form-field-outlined-error-label-text-color: var(--error);
161
+ --mat-form-field-outlined-error-hover-label-text-color: var(--error);
162
+ --mat-form-field-outlined-error-focus-outline-color: var(--error);
163
+ --mat-form-field-outlined-error-hover-outline-color: var(--error);
164
+ --mat-form-field-outlined-error-outline-color: var(--error);
165
+
166
+ /* Form field misc */
167
+ --mat-form-field-error-text-color: var(--error);
168
+ --mat-form-field-error-focus-trailing-icon-color: var(--error);
169
+ --mat-form-field-error-hover-trailing-icon-color: var(--error);
170
+ --mat-form-field-error-trailing-icon-color: var(--error);
171
+ --mat-form-field-trailing-icon-color: var(--primary-dark);
172
+
173
+ /* Select */
174
+ --mat-form-field-focus-select-arrow-color: var(--primary);
175
+ --mat-select-focused-arrow-color: var(--primary);
176
+ --mat-select-enabled-trigger-text-color: var(--primary-dark);
177
+ --mat-select-disabled-trigger-text-color: var(--ripple);
178
+ --mat-select-placeholder-text-color: var(--primary-dark);
179
+ --mat-select-enabled-arrow-color: var(--primary-dark);
180
+ --mat-option-selected-state-label-text-color: var(--primary-dark);
181
+ --mat-option-label-text-color: var(--primary-dark);
182
+ --mat-select-invalid-arrow-color: var(--error);
183
+ --mat-option-hover-state-layer-color: var(--ripple);
184
+ --mat-option-focus-state-layer-color: var(--ripple);
185
+ --mat-select-panel-background-color: var(--primary-light);
186
+ --mat-option-selected-state-layer-color: var(--ripple);
187
+ --mat-option-label-text-size: var(--xiri-font-size-input);
188
+
189
+ /* Switch/Toggle */
190
+ --mat-switch-selected-focus-state-layer-color: var(--primary);
191
+ --mat-switch-selected-hover-state-layer-color: var(--primary);
192
+ --mat-switch-selected-pressed-state-layer-color: var(--primary);
193
+ --mat-switch-selected-focus-track-color: var(--primary);
194
+ --mat-switch-selected-hover-track-color: var(--primary);
195
+ --mat-switch-selected-pressed-track-color: var(--primary);
196
+ --mat-switch-selected-track-color: var(--primary);
197
+ --mat-switch-unselected-pressed-track-color: var(--primary-light);
198
+ --mat-switch-unselected-track-color: var(--primary-light);
199
+ --mat-slide-toggle-track-outline-color: var(--primary-dark);
200
+ --mat-switch-unselected-hover-track-color: var(--primary-light);
201
+ --mat-switch-unselected-icon-color: var(--primary-light);
202
+ --mat-switch-unselected-pressed-handle-color: var(--primary-dark);
203
+ --mat-switch-disabled-selected-icon-color: var(--primary-dark);
204
+ --mat-switch-disabled-selected-track-color: var(--primary-dark);
205
+ --mat-switch-disabled-unselected-handle-color: var(--primary-dark);
206
+ --mat-switch-disabled-unselected-icon-color: var(--primary-light);
207
+ --mat-switch-disabled-unselected-track-color: var(--primary-light);
208
+ --mat-switch-selected-icon-color: var(--primary-dark);
209
+ --mat-switch-unselected-focus-handle-color: var(--primary-dark);
210
+ --mat-switch-unselected-focus-state-layer-color: var(--primary-dark);
211
+ --mat-switch-unselected-focus-track-color: var(--primary-light);
212
+ --mat-switch-selected-focus-handle-color: var(--primary-light);
213
+ --mat-switch-selected-hover-handle-color: var(--primary-light);
214
+ --mat-switch-selected-pressed-handle-color: var(--primary-light);
215
+ --mat-switch-unselected-handle-color: var(--primary-dark);
216
+ --mat-switch-unselected-hover-handle-color: var(--primary-dark);
217
+ --mat-switch-unselected-hover-state-layer-color: var(--primary-dark);
218
+ --mat-switch-selected-handle-color: var(--primary-light);
219
+ --mat-switch-label-text-color: var(--primary-dark);
220
+
221
+ /* Radio */
222
+ --mat-radio-selected-focus-icon-color: var(--primary);
223
+ --mat-radio-selected-hover-icon-color: var(--primary);
224
+ --mat-radio-selected-icon-color: var(--primary);
225
+ --mat-radio-selected-pressed-icon-color: var(--primary);
226
+ --mat-radio-checked-ripple-color: var(--primary);
227
+ --mat-radio-disabled-selected-icon-color: var(--primary-dark);
228
+ --mat-radio-disabled-unselected-icon-color: var(--primary-dark);
229
+ --mat-radio-unselected-hover-icon-color: var(--primary-dark);
230
+ --mat-radio-unselected-icon-color: var(--primary-dark);
231
+ --mat-radio-unselected-pressed-icon-color: var(--primary-dark);
232
+ --mat-radio-label-text-color: var(--primary-dark);
233
+
234
+ /* Slider */
235
+ --mat-slider-handle-color: var(--primary);
236
+ --mat-slider-focus-handle-color: var(--primary);
237
+ --mat-slider-hover-handle-color: var(--primary);
238
+ --mat-slider-active-track-color: var(--primary);
239
+ --mat-slider-label-container-color: var(--primary);
240
+ --mat-slider-ripple-color: var(--primary);
241
+ --mat-slider-label-label-text-color: var(--primary-light);
242
+ --mat-slider-with-overlap-handle-outline-color: var(--primary-light);
243
+ --mat-slider-hover-state-layer-color: var(--ripple);
244
+ --mat-slider-focus-state-layer-color: var(--ripple);
245
+
246
+ /* List */
247
+ --mat-list-list-item-selected-trailing-icon-color: var(--primary);
248
+ --mat-list-list-item-leading-avatar-color: var(--primary-light);
249
+ --mat-list-list-item-disabled-state-layer-color: var(--primary-dark);
250
+ --mat-list-list-item-label-text-color: var(--primary-dark);
251
+ --mat-list-list-item-supporting-text-color: var(--primary-dark);
252
+ --mat-list-list-item-leading-icon-color: var(--primary-dark);
253
+ --mat-list-list-item-trailing-supporting-text-color: var(--primary-dark);
254
+ --mat-list-list-item-disabled-label-text-color: var(--primary-dark);
255
+ --mat-list-list-item-disabled-leading-icon-color: var(--primary-dark);
256
+ --mat-list-list-item-disabled-trailing-icon-color: var(--primary-dark);
257
+ --mat-list-list-item-hover-label-text-color: var(--primary-dark);
258
+ --mat-list-list-item-focus-label-text-color: var(--primary-dark);
259
+ --mat-list-list-item-hover-state-layer-color: var(--primary-dark);
260
+ --mat-list-list-item-focus-state-layer-color: var(--primary-dark);
261
+ --mat-list-active-indicator-color: var(--primary-light);
262
+ --mat-list-active-indicator-shape: 0;
263
+
264
+ /* Autocomplete */
265
+ --mat-autocomplete-background-color: var(--primary-light);
266
+
267
+ /* Expansion Panel */
268
+ --mat-expansion-container-background-color: var(--background);
269
+ --mat-expansion-container-text-color: var(--primary-dark);
270
+ --mat-expansion-header-hover-state-layer-color: var(--ripple);
271
+ --mat-expansion-header-focus-state-layer-color: var(--ripple);
272
+ --mat-expansion-header-text-color: var(--primary-dark);
273
+ --mat-expansion-header-description-color: var(--primary-dark);
274
+ --mat-expansion-header-indicator-color: var(--primary-dark);
275
+
276
+ /* Table/Paginator */
277
+ --mat-table-row-item-outline-color: var(--ripple);
278
+
279
+ /* Card */
280
+ --mat-card-subtitle-text-color: var(--on-surface-variant);
281
+ --mat-card-title-text-size: 1rem;
282
+ --mat-card-title-text-line-height: 1.25rem;
283
+ --mat-card-subtitle-text-size: 0.875rem;
284
+ --mat-card-subtitle-text-line-height: 1.125rem;
285
+
286
+ /* Menu */
287
+ --mat-menu-container-color: var(--primary-light);
288
+ --mat-menu-divider-color: var(--ripple);
289
+ --mat-menu-item-label-text-color: var(--primary-dark);
290
+ --mat-menu-item-icon-color: var(--primary-dark);
291
+ --mat-menu-item-hover-state-layer-color: var(--ripple);
292
+ --mat-menu-item-focus-state-layer-color: var(--ripple);
293
+
294
+ /* Sidenav */
295
+ --sidenav-background: #FFFFFF;
296
+ --xiri-sidenav-active-decoration: none;
297
+ --xiri-sidenav-active-color: var(--surface-variant);
298
+ --xiri-sidenav-icon-color: var(--secondary);
299
+ --mat-sidenav-container-width: auto;
300
+ --mat-sidenav-container-divider-color: rgba(0, 0, 0, .12);
301
+
302
+ /* Datepickers */
303
+ --mat-datepicker-calendar-date-selected-state-background-color: var(--primary);
304
+ --mat-datepicker-calendar-date-today-selected-state-outline-color: var(--primary);
305
+ --mat-datepicker-calendar-date-today-outline-color: var(--primary);
306
+ --mat-datepicker-calendar-date-preview-state-outline-color: var(--primary);
307
+ --mat-datepicker-calendar-date-focus-state-background-color: var(--ripple);
308
+ --mat-datepicker-calendar-date-hover-state-background-color: var(--ripple);
309
+ --mat-datepicker-calendar-date-in-range-state-background-color: var(--primary-light);
310
+ --mat-datepicker-calendar-date-in-comparison-range-state-background-color: var(--primary-light);
311
+ --mat-datepicker-calendar-date-in-overlap-range-state-background-color: var(--primary-light);
312
+ --mat-datepicker-calendar-date-in-overlap-range-selected-state-background-color: var(--ripple);
313
+ --mat-datepicker-calendar-date-today-disabled-state-outline-color: var(--ripple);
314
+ --mat-datepicker-calendar-date-disabled-state-text-color: var(--ripple);
315
+ --mat-datepicker-calendar-date-selected-state-text-color: var(--primary-light);
316
+ --mat-datepicker-calendar-container-background-color: var(--primary-light);
317
+ --mat-datepicker-toggle-active-state-icon-color: var(--primary-dark);
318
+ --mat-datepicker-toggle-icon-color: var(--primary-dark);
319
+ --mat-datepicker-calendar-body-label-text-color: var(--primary-dark);
320
+ --mat-datepicker-calendar-period-button-text-color: var(--primary-dark);
321
+ --mat-datepicker-calendar-period-button-icon-color: var(--primary-dark);
322
+ --mat-datepicker-calendar-navigation-button-icon-color: var(--primary-dark);
323
+ --mat-datepicker-calendar-header-text-color: var(--primary-dark);
324
+ --mat-datepicker-calendar-date-text-color: var(--primary-dark);
325
+ --mat-datepicker-range-input-separator-color: var(--primary-dark);
326
+
327
+ /* Snackbar */
328
+ --mat-snack-bar-button-color: white;
329
+
330
+ /* Chips */
331
+ --mat-chip-outline-color: var(--primary-dark);
332
+ --mat-chip-focus-outline-color: var(--primary-dark);
333
+ --mat-chip-focus-state-layer-color: var(--primary-dark);
334
+ --mat-chip-hover-state-layer-color: var(--primary-dark);
335
+ --mat-chip-selected-hover-state-layer-color: var(--primary-dark);
336
+ --mat-chip-selected-focus-state-layer-color: var(--primary-dark);
337
+ --mat-chip-label-text-color: var(--primary-dark);
338
+ --mat-chip-selected-label-text-color: var(--primary-dark);
339
+ --mat-chip-with-icon-icon-color: var(--primary-dark);
340
+ --mat-chip-with-icon-disabled-icon-color: var(--primary-dark);
341
+ --mat-chip-with-icon-selected-icon-color: var(--primary-dark);
342
+ --mat-chip-with-trailing-icon-disabled-trailing-icon-color: var(--primary-dark);
343
+ --mat-chip-with-trailing-icon-trailing-icon-color: var(--primary-dark);
344
+
345
+ /* Dialogs */
346
+ --mat-dialog-container-color: var(--background);
347
+ --mat-dialog-subhead-color: var(--primary-dark);
348
+ --mat-dialog-supporting-text-color: var(--primary-dark);
349
+
350
+ /* Background */
351
+ --mat-app-background-color: var(--background);
352
+
353
+ /* Text */
354
+ --mat-app-text-color: var(--primary-dark);
355
+ --mat-form-field-filled-label-text-size: 0.9rem;
356
+ }
@@ -0,0 +1,125 @@
1
+ @use '@angular/material' as mat;
2
+ @use 'sass:map';
3
+ @use 'sass:color';
4
+ @use 'colors' as *;
5
+ @use 'material-vars' as vars;
6
+ @use 'material-components';
7
+ @use 'accessibility';
8
+ @use '@angular/material/core/tokens/m3-utils' as m3-utils;
9
+
10
+ @include mat.elevation-classes();
11
+ @include mat.app-background();
12
+
13
+ // M3 Theme creation function
14
+ // Creates a Material 3 theme from a primary palette
15
+ @function create-theme($primary-palette, $tertiary-palette: null, $type: light, $density: -1) {
16
+ @return mat.define-theme((
17
+ color: (
18
+ theme-type: $type,
19
+ primary: $primary-palette,
20
+ tertiary: if(sass($tertiary-palette): $tertiary-palette; else: $primary-palette),
21
+ ),
22
+ density: (
23
+ scale: $density,
24
+ ),
25
+ typography: (
26
+ brand-family: 'Roboto',
27
+ plain-family: 'Roboto, sans-serif',
28
+ regular-weight: 400,
29
+ medium-weight: 500,
30
+ bold-weight: 700,
31
+ ),
32
+ ));
33
+ }
34
+
35
+ // Apply theme from pre-defined theme object
36
+ @mixin theming($theme, $primary, $secondary, $tertiary: #9B8AAF, $error: #FF5449) {
37
+ @include mat.all-component-themes($theme);
38
+
39
+ $system: m3-utils.get-system($theme);
40
+
41
+ :root {
42
+ // Primary colors - use tone 60 (closer to original design color)
43
+ --primary: #{$primary};
44
+ --on-primary: #{map.get($system, on-primary)};
45
+ --primary-container: #{map.get($system, primary-container)};
46
+ --on-primary-container: #{map.get($system, on-primary-container)};
47
+ --primary-light: #FFFFFF;
48
+ --primary-dark: #3A4857;
49
+
50
+ // Secondary colors - use tone 60
51
+ --secondary: #{$secondary};
52
+ --on-secondary: #{map.get($system, on-secondary)};
53
+
54
+ // Tertiary colors - use tone 60
55
+ --tertiary: #{$tertiary};
56
+ --on-tertiary: #{map.get($system, on-tertiary)};
57
+
58
+ // Error colors - use tone 60
59
+ --error: #{$error};
60
+ --on-error: #{map.get($system, on-error)};
61
+ --error-container: #{map.get($system, error-container)};
62
+ --on-error-container: #{map.get($system, on-error-container)};
63
+
64
+ // Surface colors (keep M3 system values)
65
+ --surface: #{map.get($system, surface)};
66
+ --on-surface: #{map.get($system, on-surface)};
67
+ --surface-variant: #{map.get($system, surface-variant)};
68
+ --on-surface-variant: #{map.get($system, on-surface-variant)};
69
+ --surface-dim: #{map.get($system, surface-dim)};
70
+ --surface-bright: #{map.get($system, surface-bright)};
71
+
72
+ // Background colors
73
+ --background: #{map.get($system, background)};
74
+ --on-background: #{map.get($system, on-background)};
75
+
76
+ // Outline colors
77
+ --outline: #{map.get($system, outline)};
78
+ --outline-variant: #{map.get($system, outline-variant)};
79
+
80
+ --ripple: rgba(7, 55, 99, 0.12);
81
+
82
+ // Custom app vars not in M3
83
+ --color-primary: var(--primary);
84
+ --color-secondary: var(--secondary);
85
+ --color-warning: var(--error);
86
+ --color-success: #{$color-success};
87
+ --color-info: #{$color-info};
88
+
89
+ // Gray Scale Variables
90
+ --color-gray-100: #{$color-gray-100};
91
+ --color-gray-200: #{$color-gray-200};
92
+ --color-gray-300: #{$color-gray-300};
93
+ --color-gray-400: #{$color-gray-400};
94
+ --color-gray-500: #{$color-gray-500};
95
+ --color-gray-600: #{$color-gray-600};
96
+ --color-gray-700: #{$color-gray-700};
97
+ --color-gray-800: #{$color-gray-800};
98
+ --color-gray-900: #{$color-gray-900};
99
+ }
100
+ }
101
+
102
+ // ============================================
103
+ // Apply Themes Mixin (main entry point)
104
+ // ============================================
105
+ @mixin apply-themes() {
106
+
107
+ // Link styling
108
+ a {
109
+ color: var(--primary);
110
+ text-decoration: none;
111
+
112
+ &:hover {
113
+ color: color.adjust(#2892D9, $lightness: -20%);
114
+ text-decoration: none;
115
+ }
116
+ }
117
+
118
+ a:not([href]):not([class]) {
119
+ &,
120
+ &:hover {
121
+ color: inherit;
122
+ text-decoration: none;
123
+ }
124
+ }
125
+ }