osi-cards-lib 1.5.30 → 1.5.32

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.
Files changed (88) hide show
  1. package/README.md +58 -20
  2. package/package.json +13 -25
  3. package/postcss.config.js +81 -0
  4. package/section-registry.json +3864 -0
  5. package/section-registry.schema.json +264 -0
  6. package/fesm2022/osi-cards-lib.mjs +0 -31878
  7. package/fesm2022/osi-cards-lib.mjs.map +0 -1
  8. package/index.d.ts +0 -11522
  9. package/scripts/setup-angular-styles.js +0 -169
  10. package/styles/_components.scss +0 -38
  11. package/styles/_index.scss +0 -25
  12. package/styles/_osi-cards-mixins.scss +0 -459
  13. package/styles/_osi-cards-tokens.scss +0 -333
  14. package/styles/_styles-scoped.scss +0 -81
  15. package/styles/_styles.scss +0 -26
  16. package/styles/bundles/_ai-card.scss +0 -245
  17. package/styles/bundles/_all.scss +0 -68
  18. package/styles/bundles/_base.scss +0 -60
  19. package/styles/bundles/_card-skeleton.scss +0 -290
  20. package/styles/bundles/_index.scss +0 -25
  21. package/styles/bundles/_sections.scss +0 -48
  22. package/styles/bundles/_tokens-only.scss +0 -139
  23. package/styles/components/_ai-card-renderer.scss +0 -104
  24. package/styles/components/_badges.scss +0 -317
  25. package/styles/components/_card-actions.scss +0 -169
  26. package/styles/components/_card-footer.scss +0 -47
  27. package/styles/components/_component-styles.scss +0 -205
  28. package/styles/components/_empty-state.scss +0 -630
  29. package/styles/components/_hero-card.scss +0 -422
  30. package/styles/components/_image-fallback.scss +0 -28
  31. package/styles/components/_streaming-effects.scss +0 -518
  32. package/styles/components/cards/_ai-card.scss +0 -718
  33. package/styles/components/sections/_all-sections.generated.scss +0 -41
  34. package/styles/components/sections/_all-sections.scss +0 -1086
  35. package/styles/components/sections/_balanced-compact-system.scss +0 -186
  36. package/styles/components/sections/_compact-mixins.scss +0 -180
  37. package/styles/components/sections/_component-mixins.scss +0 -454
  38. package/styles/components/sections/_design-system.scss +0 -477
  39. package/styles/components/sections/_design-tokens.scss +0 -308
  40. package/styles/components/sections/_enhanced-design-variables.scss +0 -147
  41. package/styles/components/sections/_master-compact-system.scss +0 -302
  42. package/styles/components/sections/_master-dense-system.scss +0 -239
  43. package/styles/components/sections/_minimalistic-design.scss +0 -268
  44. package/styles/components/sections/_modern-effects.scss +0 -392
  45. package/styles/components/sections/_modern-sections.scss +0 -351
  46. package/styles/components/sections/_perfect-system.scss +0 -204
  47. package/styles/components/sections/_section-animations.scss +0 -331
  48. package/styles/components/sections/_section-shell.scss +0 -337
  49. package/styles/components/sections/_section-types.generated.scss +0 -30
  50. package/styles/components/sections/_sections-all.scss +0 -26
  51. package/styles/components/sections/_sections-base.scss +0 -334
  52. package/styles/components/sections/_typography-system.scss +0 -327
  53. package/styles/components/sections/_ultra-compact-tokens.scss +0 -375
  54. package/styles/components/sections/_unified-section-style.scss +0 -157
  55. package/styles/components/sections/_utility-classes.scss +0 -567
  56. package/styles/components/sections/_visual-effects-library.scss +0 -374
  57. package/styles/core/_animations.scss +0 -1498
  58. package/styles/core/_bootstrap-reset.scss +0 -445
  59. package/styles/core/_color-helpers.scss +0 -46
  60. package/styles/core/_global-unified.scss +0 -118
  61. package/styles/core/_global.scss +0 -73
  62. package/styles/core/_mixins.scss +0 -491
  63. package/styles/core/_surface-layers.scss +0 -76
  64. package/styles/core/_utilities.scss +0 -326
  65. package/styles/core/_variables-unified.scss +0 -57
  66. package/styles/core/_variables.scss +0 -36
  67. package/styles/core/variables/_colors-source.scss +0 -34
  68. package/styles/core/variables/_colors-unified.scss +0 -26
  69. package/styles/core/variables/_colors.scss +0 -21
  70. package/styles/critical.scss +0 -353
  71. package/styles/design-system/_compact-theme.scss +0 -159
  72. package/styles/design-system/_section-base.scss +0 -426
  73. package/styles/design-system/_tokens.scss +0 -237
  74. package/styles/design-system/_unified-sections.scss +0 -215
  75. package/styles/layout/_feature-grid.scss +0 -322
  76. package/styles/layout/_masonry.scss +0 -734
  77. package/styles/layout/_tilt.scss +0 -244
  78. package/styles/micro-interactions.scss +0 -583
  79. package/styles/mixins/_section-mixins.scss +0 -280
  80. package/styles/non-critical.scss +0 -643
  81. package/styles/reset/_framework-reset.scss +0 -457
  82. package/styles/reset/_index.scss +0 -14
  83. package/styles/reset/_shadow-reset.scss +0 -383
  84. package/styles/responsive.scss +0 -326
  85. package/styles/themes.scss +0 -573
  86. package/styles/tokens/_index.scss +0 -92
  87. package/styles/tokens/_master.scss +0 -1404
  88. package/styles/tokens/_section-tokens.generated.scss +0 -140
@@ -1,1404 +0,0 @@
1
- // ============================================
2
- // MASTER DESIGN TOKENS - Single Source of Truth
3
- // ============================================
4
- //
5
- // This file is the PRIMARY source for CSS design tokens (`--osi-*` variables).
6
- // All other SCSS files import from here.
7
- //
8
- // ⚠️ TOKEN SOURCE RELATIONSHIPS:
9
- // - CSS tokens (`--osi-*`): This file is authoritative
10
- // - JS theme presets (`--theme-*`): See `themes/presets.ts` (applied via JavaScript)
11
- // - Demo app themes: See `styles/themes.scss` (for demo app global theming)
12
- //
13
- // NOTE: `--theme-*` values in `themes/presets.ts` should match corresponding
14
- // values in this file's mixins (e.g., `osi-theme-dark`, `osi-theme-light`).
15
- //
16
- // TODO: Consider consolidating all token sources into a single definition file
17
- // that both SCSS and TypeScript can consume to eliminate duplication.
18
- //
19
- // Organization:
20
- // 1. PRIMITIVE TOKENS - Raw color values, base numbers
21
- // 2. SEMANTIC TOKENS - Meaningful references to primitives
22
- // 3. COMPONENT TOKENS - UI element-specific values
23
- // 4. THEME VARIANTS - Light/dark mode overrides
24
- //
25
- // ============================================
26
-
27
- // ============================================
28
- // 1. PRIMITIVE TOKENS
29
- // ============================================
30
-
31
- // --- Brand Colors ---
32
- $osi-color-brand: #ff7900;
33
- $osi-color-brand-dark: #cc5f00;
34
- $osi-color-brand-light: #ff9933;
35
- $osi-color-brand-pale: #ffe6cc;
36
-
37
- // --- Neutral Colors ---
38
- $osi-color-white: #ffffff;
39
- $osi-color-black: #000000;
40
-
41
- // --- Grayscale Ramp ---
42
- $osi-gray-50: #ffffff;
43
- $osi-gray-100: #fcfcfc;
44
- $osi-gray-150: #f7f7f7;
45
- $osi-gray-200: #f0f0f1;
46
- $osi-gray-300: #e9e9e9;
47
- $osi-gray-400: #92999e;
48
- $osi-gray-500: #5a5f62;
49
- $osi-gray-600: #343541;
50
- $osi-gray-700: #2a2a2a;
51
- $osi-gray-800: #232323;
52
- $osi-gray-850: #171717;
53
- $osi-gray-900: #000000;
54
-
55
- // --- Status Colors ---
56
- $osi-color-success: #22c55e;
57
- $osi-color-warning: #f59e0b;
58
- $osi-color-error: #ef4444;
59
- $osi-color-info: #3b82f6;
60
- $osi-color-neutral: #6b7280;
61
-
62
- // --- Trend Colors ---
63
- $osi-color-trend-up: #4ade80;
64
- $osi-color-trend-down: #f87171;
65
- $osi-color-trend-stable: #facc15;
66
- $osi-color-trend-neutral: #94a3b8;
67
-
68
- // --- Text Colors (Light Theme) ---
69
- $osi-foreground-light: #1c1c1f;
70
- $osi-muted-foreground-light: #555861;
71
-
72
- // --- Text Colors (Dark Theme) ---
73
- $osi-foreground-dark: #ffffff;
74
- $osi-muted-foreground-dark: #aaaaaa;
75
-
76
- // --- Background Colors (Light Theme) ---
77
- $osi-background-light: #ffffff;
78
- $osi-card-bg-light: #fefefe;
79
- $osi-section-bg-light: #fafafa;
80
-
81
- // --- Background Colors (Dark Theme) ---
82
- $osi-background-dark: #0a0a0a;
83
- $osi-background-dark-scoped: #030303;
84
- $osi-card-bg-dark: rgba(20, 20, 20, 0.6);
85
-
86
- // ============================================
87
- // 2. COLOR HELPER FUNCTIONS & VARIABLES
88
- // ============================================
89
-
90
- /// Generate brand color with opacity
91
- /// @param {Number} $opacity - Opacity value (0-1)
92
- @function brand-alpha($opacity) {
93
- @return rgba($osi-color-brand, $opacity);
94
- }
95
-
96
- /// Generate foreground color with opacity
97
- /// @param {Number} $opacity - Opacity value (0-1)
98
- @function foreground-alpha($opacity) {
99
- @return rgba($osi-foreground-light, $opacity);
100
- }
101
-
102
- /// Generate white with opacity
103
- /// @param {Number} $opacity - Opacity value (0-1)
104
- @function white-alpha($opacity) {
105
- @return rgba(255, 255, 255, $opacity);
106
- }
107
-
108
- /// Generate black with opacity
109
- /// @param {Number} $opacity - Opacity value (0-1)
110
- @function black-alpha($opacity) {
111
- @return rgba(0, 0, 0, $opacity);
112
- }
113
-
114
- // --- Pre-computed Brand Opacity Variants ---
115
- $brand-color: $osi-color-brand;
116
- $brand-color-rgb: 255, 121, 0;
117
- $brand-color-90: rgba($osi-color-brand, 0.9);
118
- $brand-color-80: rgba($osi-color-brand, 0.8);
119
- $brand-color-70: rgba($osi-color-brand, 0.7);
120
- $brand-color-60: rgba($osi-color-brand, 0.6);
121
- $brand-color-50: rgba($osi-color-brand, 0.5);
122
- $brand-color-40: rgba($osi-color-brand, 0.4);
123
- $brand-color-35: rgba($osi-color-brand, 0.35);
124
- $brand-color-30: rgba($osi-color-brand, 0.3);
125
- $brand-color-25: rgba($osi-color-brand, 0.25);
126
- $brand-color-22: rgba($osi-color-brand, 0.22);
127
- $brand-color-20: rgba($osi-color-brand, 0.2);
128
- $brand-color-15: rgba($osi-color-brand, 0.15);
129
- $brand-color-12: rgba($osi-color-brand, 0.12);
130
- $brand-color-10: rgba($osi-color-brand, 0.1);
131
- $brand-color-08: rgba($osi-color-brand, 0.08);
132
- $brand-color-05: rgba($osi-color-brand, 0.05);
133
- $brand-color-03: rgba($osi-color-brand, 0.03);
134
-
135
- // --- Pre-computed Foreground Opacity Variants ---
136
- $foreground-color: $osi-foreground-light;
137
- $foreground-rgb: 28, 28, 31;
138
- $foreground-90: rgba($osi-foreground-light, 0.9);
139
- $foreground-80: rgba($osi-foreground-light, 0.8);
140
- $foreground-70: rgba($osi-foreground-light, 0.7);
141
- $foreground-60: rgba($osi-foreground-light, 0.6);
142
- $foreground-50: rgba($osi-foreground-light, 0.5);
143
- $foreground-40: rgba($osi-foreground-light, 0.4);
144
- $foreground-30: rgba($osi-foreground-light, 0.3);
145
- $foreground-20: rgba($osi-foreground-light, 0.2);
146
- $foreground-16: rgba($osi-foreground-light, 0.16);
147
- $foreground-14: rgba($osi-foreground-light, 0.14);
148
- $foreground-12: rgba($osi-foreground-light, 0.12);
149
- $foreground-10: rgba($osi-foreground-light, 0.1);
150
- $foreground-08: rgba($osi-foreground-light, 0.08);
151
- $foreground-06: rgba($osi-foreground-light, 0.06);
152
- $foreground-05: rgba($osi-foreground-light, 0.05);
153
- $foreground-04: rgba($osi-foreground-light, 0.04);
154
- $foreground-03: rgba($osi-foreground-light, 0.03);
155
-
156
- // --- Pre-computed Secondary Text Variants ---
157
- $text-secondary: $osi-muted-foreground-light;
158
- $text-secondary-rgb: 85, 88, 97;
159
- $text-secondary-50: rgba($osi-muted-foreground-light, 0.5);
160
- $text-secondary-30: rgba($osi-muted-foreground-light, 0.3);
161
- $text-secondary-20: rgba($osi-muted-foreground-light, 0.2);
162
- $text-secondary-15: rgba($osi-muted-foreground-light, 0.15);
163
- $text-secondary-10: rgba($osi-muted-foreground-light, 0.1);
164
- $text-secondary-05: rgba($osi-muted-foreground-light, 0.05);
165
-
166
- // --- Pre-computed Muted Foreground (Dark Theme) ---
167
- $muted-foreground: $osi-muted-foreground-dark;
168
- $muted-foreground-rgb: 170, 170, 170;
169
- $muted-foreground-50: rgba($osi-muted-foreground-dark, 0.5);
170
- $muted-foreground-30: rgba($osi-muted-foreground-dark, 0.3);
171
- $muted-foreground-20: rgba($osi-muted-foreground-dark, 0.2);
172
- $muted-foreground-10: rgba($osi-muted-foreground-dark, 0.1);
173
-
174
- // --- Pre-computed White Opacity Variants ---
175
- $white-90: rgba(255, 255, 255, 0.9);
176
- $white-80: rgba(255, 255, 255, 0.8);
177
- $white-70: rgba(255, 255, 255, 0.7);
178
- $white-60: rgba(255, 255, 255, 0.6);
179
- $white-50: rgba(255, 255, 255, 0.5);
180
- $white-40: rgba(255, 255, 255, 0.4);
181
- $white-30: rgba(255, 255, 255, 0.3);
182
- $white-20: rgba(255, 255, 255, 0.2);
183
- $white-15: rgba(255, 255, 255, 0.15);
184
- $white-10: rgba(255, 255, 255, 0.1);
185
- $white-05: rgba(255, 255, 255, 0.05);
186
-
187
- // --- Pre-computed Status Color Variants ---
188
- $success-color: $osi-color-success;
189
- $success-color-20: rgba($osi-color-success, 0.2);
190
- $success-color-15: rgba($osi-color-success, 0.15);
191
- $success-color-10: rgba($osi-color-success, 0.1);
192
-
193
- $warning-color: $osi-color-warning;
194
- $warning-color-20: rgba($osi-color-warning, 0.2);
195
- $warning-color-15: rgba($osi-color-warning, 0.15);
196
- $warning-color-10: rgba($osi-color-warning, 0.1);
197
-
198
- $error-color: $osi-color-error;
199
- $error-color-20: rgba($osi-color-error, 0.2);
200
- $error-color-15: rgba($osi-color-error, 0.15);
201
- $error-color-10: rgba($osi-color-error, 0.1);
202
-
203
- $info-color: $osi-color-info;
204
- $info-color-20: rgba($osi-color-info, 0.2);
205
- $info-color-15: rgba($osi-color-info, 0.15);
206
- $info-color-10: rgba($osi-color-info, 0.1);
207
-
208
- // --- Border Colors ---
209
- $border-light: rgba(0, 0, 0, 0.08);
210
- $border-medium: rgba(0, 0, 0, 0.14);
211
- $border-dark: rgba(0, 0, 0, 0.22);
212
- $border-light-dark: rgba(255, 255, 255, 0.08);
213
- $border-medium-dark: rgba(255, 255, 255, 0.16);
214
- $border-dark-dark: rgba(255, 255, 255, 0.28);
215
-
216
- // --- Shadow Colors ---
217
- $shadow-light: rgba(0, 0, 0, 0.07);
218
- $shadow-medium: rgba(0, 0, 0, 0.12);
219
- $shadow-dark: rgba(0, 0, 0, 0.18);
220
- $shadow-light-dark: rgba(0, 0, 0, 0.55);
221
- $shadow-medium-dark: rgba(0, 0, 0, 0.65);
222
- $shadow-dark-dark: rgba(0, 0, 0, 0.75);
223
-
224
- // --- Background Aliases ---
225
- $card-bg: $osi-card-bg-light;
226
- $card-bg-hover: #fcfcfc;
227
- $section-bg: $osi-section-bg-light;
228
- $section-bg-hover: #f7f7f7;
229
-
230
- // ============================================
231
- // 3. BREAKPOINTS
232
- // ============================================
233
-
234
- $breakpoints: (
235
- "mobile": 520px,
236
- "tablet": 640px,
237
- "lg": 820px,
238
- "desktop": 1024px,
239
- "wide": 1280px,
240
- );
241
-
242
- // ============================================
243
- // 4. CSS VARIABLE MIXINS
244
- // ============================================
245
-
246
- /// Generate base color tokens (shared between themes)
247
- @mixin osi-base-colors() {
248
- --color-white: #{$osi-color-white};
249
- --color-black: #{$osi-color-black};
250
- --color-brand: #{$osi-color-brand};
251
- --color-brand-dark: #{$osi-color-brand-dark};
252
- --color-brand-light: #{$osi-color-brand-light};
253
-
254
- // Grayscale
255
- --color-gray-50: #{$osi-gray-50};
256
- --color-gray-100: #{$osi-gray-100};
257
- --color-gray-150: #{$osi-gray-150};
258
- --color-gray-200: #{$osi-gray-200};
259
- --color-gray-300: #{$osi-gray-300};
260
- --color-gray-400: #{$osi-gray-400};
261
- --color-gray-500: #{$osi-gray-500};
262
- --color-gray-600: #{$osi-gray-600};
263
- --color-gray-700: #{$osi-gray-700};
264
- --color-gray-800: #{$osi-gray-800};
265
- --color-gray-850: #{$osi-gray-850};
266
- --color-gray-900: #{$osi-gray-900};
267
- }
268
-
269
- /// Generate status color tokens
270
- @mixin osi-status-colors() {
271
- --status-success: #{$osi-color-success};
272
- --status-success-bg: #{$success-color-15};
273
- --status-success-border: rgba(74, 222, 128, 0.4);
274
-
275
- --status-warning: #{$osi-color-warning};
276
- --status-warning-bg: rgba(253, 186, 116, 0.15);
277
- --status-warning-border: rgba(251, 191, 36, 0.4);
278
-
279
- --status-error: #{$osi-color-error};
280
- --status-error-bg: #{$error-color-15};
281
- --status-error-border: rgba(248, 113, 113, 0.4);
282
-
283
- --status-info: #{$osi-color-info};
284
- --status-info-bg: #{$info-color-15};
285
- --status-info-border: rgba(147, 197, 253, 0.4);
286
-
287
- --status-neutral: #{$osi-color-neutral};
288
- --status-neutral-bg: rgba(107, 114, 128, 0.15);
289
- --status-neutral-border: rgba(156, 163, 175, 0.4);
290
- }
291
-
292
- /// Generate shadow tokens
293
- @mixin osi-shadows() {
294
- // Elevation shadows - tight under the element
295
- --shadow-sm: 0 1px 1px rgba(0, 0, 0, 0.03);
296
- --shadow-md: 0 1px 2px rgba(0, 0, 0, 0.04);
297
- --shadow-lg: 0 1px 3px rgba(0, 0, 0, 0.05);
298
- --shadow-xl: 0 2px 4px rgba(0, 0, 0, 0.06);
299
-
300
- // Glow shadows (brand-colored) - very subtle
301
- --shadow-glow-sm: 0 0 3px #{$brand-color-05};
302
- --shadow-glow-md: 0 0 5px #{$brand-color-08};
303
- --shadow-glow-lg: 0 0 8px #{$brand-color-10};
304
-
305
- // Inset shadows
306
- --shadow-inset-sm: inset 0 1px 2px rgba(0, 0, 0, 0.04);
307
- --shadow-inset-md: inset 0 2px 4px rgba(0, 0, 0, 0.05);
308
-
309
- // Combined hover shadow - subtle with brand accent
310
- --shadow-hover: var(--shadow-lg), var(--shadow-glow-sm);
311
- }
312
-
313
- /// Generate radius tokens
314
- @mixin osi-radius() {
315
- --radius-base: 0.625rem;
316
- --radius-xs: 0.25rem;
317
- --radius-sm: 0.375rem;
318
- --radius-md: 0.5rem;
319
- --radius-lg: 0.75rem;
320
- --radius-xl: 1rem;
321
- --radius-2xl: 1.5rem;
322
- --radius-full: 9999px;
323
- }
324
-
325
- /// Generate spacing tokens
326
- @mixin osi-spacing() {
327
- --spacing-base: 0.25rem;
328
-
329
- // Primary spacing scale (fluid)
330
- --space-1: clamp(2px, 0.4vw, 6px);
331
- --space-2: clamp(4px, 0.6vw, 8px);
332
- --space-3: clamp(6px, 0.8vw, 12px);
333
- --space-4: clamp(8px, 1vw, 14px);
334
- --space-5: clamp(10px, 1.2vw, 18px);
335
- --space-6: clamp(12px, 1.4vw, 20px);
336
- --space-7: clamp(14px, 1.6vw, 22px);
337
- --space-8: clamp(16px, 1.8vw, 24px);
338
- --space-9: clamp(18px, 2vw, 28px);
339
- --space-10: clamp(20px, 2.2vw, 32px);
340
- --space-11: clamp(22px, 2.4vw, 36px);
341
- --space-12: clamp(24px, 2.6vw, 40px);
342
-
343
- // Semantic spacing aliases
344
- --spacing-xs: var(--space-1);
345
- --spacing-sm: var(--space-2);
346
- --spacing-md: var(--space-3);
347
- --spacing-lg: var(--space-4);
348
- --spacing-xl: var(--space-5);
349
- --spacing-2xl: var(--space-6);
350
- --spacing-3xl: var(--space-7);
351
- --spacing-4xl: var(--space-8);
352
-
353
- // Fixed grid gaps
354
- --gap-xs: 4px;
355
- --gap-sm: 6px;
356
- --gap-md: 8px;
357
- --gap-lg: 12px;
358
- --gap-xl: 16px;
359
- --gap-2xl: 20px;
360
- --gap-3xl: 24px;
361
- --gap-4xl: 32px;
362
- }
363
-
364
- /// Generate z-index scale tokens (isolated within container)
365
- /// All z-indices are relative to 0 to prevent host app collisions
366
- @mixin osi-z-index() {
367
- // Base layer (content)
368
- --z-base: 0;
369
- --z-content: 1;
370
-
371
- // Elevated layers (cards, sections)
372
- --z-elevated: 10;
373
- --z-card: 10;
374
- --z-section: 15;
375
-
376
- // Interactive layers (dropdowns, tooltips)
377
- --z-dropdown: 100;
378
- --z-tooltip: 200;
379
- --z-popover: 300;
380
-
381
- // Overlay layers (modals, dialogs)
382
- --z-overlay: 400;
383
- --z-modal: 500;
384
- --z-dialog: 600;
385
-
386
- // Top-most layers (notifications, alerts)
387
- --z-notification: 700;
388
- --z-toast: 800;
389
-
390
- // Maximum layer (for special cases)
391
- --z-max: 999;
392
- }
393
-
394
- /// Generate animation tokens
395
- @mixin osi-animation() {
396
- // Duration scale
397
- --duration-instant: 40ms;
398
- --duration-fast: 80ms;
399
- --duration-normal: 160ms;
400
- --duration-moderate: 220ms;
401
- --duration-slow: 300ms;
402
- --duration-slower: 380ms;
403
- --duration-slowest: 460ms;
404
-
405
- // Easing functions
406
- --ease-out-smooth: cubic-bezier(0.23, 1, 0.32, 1);
407
- --ease-in-out-smooth: cubic-bezier(0.4, 0, 0.2, 1);
408
- --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
409
- --ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
410
- --ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1);
411
- --ease-in-out-quad: cubic-bezier(0.455, 0.03, 0.515, 0.955);
412
-
413
- // Motion distances
414
- --motion-distance-xs: 2px;
415
- --motion-distance-sm: 4px;
416
- --motion-distance-md: 6px;
417
- --motion-distance-lg: 10px;
418
- --motion-distance-xl: 12px;
419
-
420
- // Motion scales
421
- --motion-scale-soft-start: 0.992;
422
- --motion-scale-soft-end: 1;
423
- --motion-scale-pop: 1.015;
424
-
425
- // Stagger delays
426
- --stagger-delay-fast: 15ms;
427
- --stagger-delay-base: 25ms;
428
- --stagger-delay-slow: 45ms;
429
-
430
- // Animation playback
431
- --animation-fill-mode: both;
432
- --animation-play-state: running;
433
- }
434
-
435
- /// Generate opacity tokens
436
- @mixin osi-opacity() {
437
- --opacity-subtle: 0.05;
438
- --opacity-muted: 0.15;
439
- --opacity-medium: 0.4;
440
- --opacity-strong: 0.7;
441
- --opacity-solid: 0.9;
442
- }
443
-
444
- /// Generate typography tokens
445
- /// @param {String} $variant - 'demo' or 'integration'
446
- @mixin osi-typography($variant: "demo") {
447
- // Both demo and integration now use the same compact values
448
- --font-size-base: 13px;
449
- --text-xs: 0.625rem;
450
- --text-sm: 0.75rem;
451
- --text-base: 0.875rem;
452
- --text-lg: 0.8125rem;
453
- --text-xl: 1.125rem;
454
- --text-2xl: 1.0625rem;
455
- --text-3xl: 1.75rem;
456
- --text-4xl: 2.125rem;
457
- --text-5xl: 2.875rem;
458
- --text-7xl: 4.375rem;
459
-
460
- --font-weight-normal: 400;
461
- --font-weight-medium: 500;
462
- }
463
-
464
- /// Generate card typography tokens
465
- /// @param {String} $variant - 'demo' or 'integration'
466
- @mixin osi-card-typography($variant: "demo") {
467
- // Both demo and integration now use the same compact values
468
- // Section Titles
469
- --section-title-font-size: clamp(0.92rem, 0.87rem + 0.2vw, 1.07rem);
470
- --section-title-font-weight: 700;
471
- --section-title-letter-spacing: -0.02em;
472
- --section-title-line-height: 1.3;
473
- --section-title-text-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
474
-
475
- // Card Titles
476
- --card-title-font-size: clamp(0.83rem, 0.78rem + 0.15vw, 0.93rem);
477
- --card-title-font-weight: 700;
478
- --card-title-letter-spacing: -0.01em;
479
- --card-title-line-height: 1.4;
480
- --card-title-text-shadow: 0 1px 1px rgba(0, 0, 0, 0.06);
481
-
482
- // Card Subtitles
483
- --card-subtitle-font-size: clamp(0.65rem, 0.625rem + 0.1vw, 0.7rem);
484
- --card-subtitle-font-weight: 500;
485
- --card-subtitle-letter-spacing: 0.015em;
486
- --card-subtitle-line-height: 1.3;
487
-
488
- // Card Labels
489
- --card-label-font-size: clamp(0.5rem, 0.48rem + 0.05vw, 0.5rem);
490
- --card-label-font-weight: 700;
491
- --card-label-letter-spacing: 0.065em;
492
- --card-label-line-height: 1.25;
493
- --card-label-text-transform: uppercase;
494
- --card-label-text-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
495
-
496
- // Card Values
497
- --card-value-font-size: clamp(1rem, 0.95rem + 0.2vw, 1rem);
498
- --card-value-font-size-large: clamp(1.2rem, 1.15rem + 0.2vw, 1.25rem);
499
- --card-value-font-size-xl: clamp(1.25rem, 1.2rem + 0.2vw, 1.25rem);
500
- --card-value-font-weight: 600;
501
- --card-value-letter-spacing: -0.015em;
502
- --card-value-line-height: 1.35;
503
- --card-value-text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
504
-
505
- // Card Meta
506
- --card-meta-font-size: clamp(0.55rem, 0.525rem + 0.1vw, 0.6rem);
507
- --card-meta-font-weight: 500;
508
- --card-meta-line-height: 1.3;
509
-
510
- // Smallest text
511
- --card-text-small-font-size: clamp(0.355rem, 0.295rem + 0.13vw, 0.455rem);
512
-
513
- // Grid min width
514
- --section-grid-min-width: 200px;
515
-
516
- // Shared aliases
517
- --font-size-section-header: var(--section-title-font-size);
518
- }
519
-
520
- /// Generate card layout tokens
521
- @mixin osi-card-layout() {
522
- --card-main-padding: 16px;
523
- --card-padding-vertical: 12px;
524
- --card-padding-horizontal: 16px;
525
- --card-padding: 16px;
526
- --card-padding-large: 20px;
527
- --section-padding: 12px;
528
- --section-container-padding: 12px;
529
- --card-min-height: auto;
530
- --card-gap: clamp(6px, 0.6vw, 10px);
531
- --card-gap-large: clamp(10px, 0.8vw, 14px);
532
- --card-nested-gap: clamp(3px, 0.4vw, 6px);
533
- --section-header-gap: clamp(3px, 0.4vw, 6px);
534
- --section-header-padding-bottom: clamp(0px, 0.2vw, 2px);
535
- --section-title-margin-bottom: 0;
536
- --card-border-radius: 12px;
537
- --card-border-radius-large: 16px;
538
- --section-card-gap: 12px;
539
- --section-card-border-radius: 10px;
540
-
541
- // Element gaps within cards
542
- --card-element-gap-xs: 2px;
543
- --card-element-gap-sm: 3px;
544
- --card-element-gap-md: 4px;
545
- --card-element-gap-lg: 6px;
546
- --card-element-gap-xl: 8px;
547
-
548
- // Border widths
549
- --border-width-default: 1px;
550
- --border-width-accent: 3px;
551
- --border-width-accent-sm: 2px;
552
-
553
- // Icon sizes
554
- --icon-xs: 10px;
555
- --icon-sm: 13px;
556
- --icon-md: 16px;
557
- --icon-lg: 22px;
558
- --icon-xl: 36px;
559
-
560
- // Avatar sizes
561
- --avatar-sm: 32px;
562
- --avatar-md: 36px;
563
-
564
- // Progress bar
565
- --progress-height: 2px;
566
- --progress-margin: 4px 0;
567
-
568
- // Tag padding
569
- --tag-padding: 3px 6px;
570
- --tag-padding-sm: 2px 4px;
571
- --tag-padding-lg: 3px 7px;
572
-
573
- // Grid gaps (semantic)
574
- --grid-gap-xs: var(--gap-sm);
575
- --grid-gap-sm: var(--gap-md);
576
- --grid-gap-md: var(--gap-lg);
577
- --grid-gap-lg: var(--gap-xl);
578
- --grid-gap-xl: var(--gap-2xl);
579
-
580
- // Section-specific gaps
581
- --section-grid-gap: var(--gap-md);
582
- --section-stack-gap: var(--gap-lg);
583
- --section-item-gap: var(--gap-sm);
584
- --section-item-padding: var(--gap-lg);
585
- --metric-item-padding: 10px 12px;
586
- --list-item-padding: 10px 12px;
587
- }
588
-
589
- /// Generate card text color tokens
590
- @mixin osi-card-text-colors() {
591
- --card-text-primary: var(--foreground);
592
- --card-text-secondary: var(--muted-foreground);
593
- --card-text-muted: var(--muted-foreground);
594
- --card-text-hover: var(--primary);
595
- --card-text-label: var(--muted-foreground);
596
- --card-meta-color: var(--muted-foreground);
597
- }
598
-
599
- /// Generate card surface tokens
600
- @mixin osi-card-surfaces() {
601
- --card-background: var(--ai-card-background, #{$brand-color-03});
602
- --card-background-hover: var(--ai-card-background-hover, #{$brand-color-05});
603
-
604
- // Card transitions
605
- --card-transition: all 0.28s cubic-bezier(0.4, 0, 0.2, 1);
606
- --card-transition-fast: all 0.22s ease;
607
- }
608
-
609
- /// Generate interactive state tokens
610
- @mixin osi-interactive() {
611
- --interactive-hover-bg: #{$brand-color-03};
612
- --interactive-active-bg: #{$brand-color-12};
613
- --interactive-focus-ring: 0 0 0 2px #{$brand-color-40};
614
- --interactive-glow: 0 0 12px #{$brand-color-30};
615
- }
616
-
617
- /// Generate OSI Card component tokens (--osi-card-*)
618
- /// SINGLE SOURCE OF TRUTH for all card styling variables
619
- @mixin osi-card-tokens() {
620
- // Card Background
621
- --osi-card-background: var(
622
- --theme-ai-card-background,
623
- var(--card-surface, var(--card-section-bg))
624
- );
625
- --osi-card-background-hover: var(
626
- --theme-ai-card-background-hover,
627
- var(--card-surface-hover, var(--card-section-bg))
628
- );
629
- --osi-card-background-fullscreen: var(--osi-card-background);
630
-
631
- // Card Backdrop Filter
632
- --osi-card-backdrop-filter: var(--theme-ai-card-backdrop-filter, blur(12px));
633
-
634
- // Card Border
635
- --osi-card-border: var(--theme-ai-card-border, 1px solid #{$white-05});
636
- --osi-card-border-hover: var(--theme-ai-card-border-hover, 1px solid #{$brand-color-12});
637
- --osi-card-border-fullscreen: none;
638
-
639
- // Card Shadow
640
- --osi-card-shadow: var(--theme-ai-card-box-shadow, var(--shadow-md));
641
- --osi-card-shadow-hover: var(--theme-ai-card-box-shadow-hover, var(--shadow-lg));
642
- --osi-card-shadow-fullscreen: none;
643
-
644
- // Card Spacing - Padding
645
- --osi-card-padding: var(--card-main-padding);
646
- --osi-card-padding-top: var(--card-main-padding);
647
- --osi-card-padding-bottom: var(--card-main-padding);
648
- --osi-card-padding-left: var(--card-main-padding);
649
- --osi-card-padding-right: var(--card-main-padding);
650
- --osi-card-padding-mobile: var(--space-1);
651
-
652
- // Card Spacing - Margins
653
- --osi-card-margin-top: 0;
654
- --osi-card-margin-bottom: 0;
655
- --osi-card-margin-left: 0;
656
- --osi-card-margin-right: 0;
657
-
658
- // Card Spacing - Gaps
659
- --osi-card-gap: var(--section-card-gap);
660
- --osi-card-body-gap: var(--space-3);
661
- --osi-card-grid-gap: var(--section-card-gap);
662
-
663
- // Card Border Radius
664
- --osi-card-border-radius: var(--card-border-radius);
665
- --osi-card-border-radius-fullscreen: 0;
666
-
667
- // Card Text Colors
668
- --osi-card-text-primary: var(--card-text-primary);
669
- --osi-card-text-secondary: var(--card-text-secondary);
670
- --osi-card-text-muted: var(--card-text-muted);
671
- --osi-card-text-label: var(--card-text-label);
672
- --osi-card-text-meta: var(--card-meta-color);
673
-
674
- // Card Transitions
675
- --osi-card-transition: var(--theme-ai-card-transition, all 0.28s cubic-bezier(0.4, 0, 0.2, 1));
676
- --osi-card-transition-border: border-color 0.2s ease;
677
- --osi-card-transition-background: background 0.2s ease;
678
- --osi-card-transition-shadow: box-shadow 0.2s ease;
679
-
680
- // Card Actions
681
- --osi-card-action-primary-bg: var(--primary, #{$osi-color-brand});
682
- --osi-card-action-primary-bg-hover: rgba($osi-color-brand, 0.85);
683
- --osi-card-action-primary-color: var(--primary-foreground, #{$osi-color-white});
684
- --osi-card-action-primary-border: #{$brand-color-80};
685
- --osi-card-action-primary-shadow: 0 2px 8px #{$brand-color-15}, 0 1px 2px rgba(0, 0, 0, 0.1);
686
- --osi-card-action-primary-shadow-hover:
687
- 0 4px 16px #{$brand-color-20}, 0 2px 4px rgba(0, 0, 0, 0.1);
688
- --osi-card-action-secondary-bg: rgba(40, 40, 45, 0.9);
689
- --osi-card-action-secondary-bg-hover: rgba(50, 46, 42, 0.85);
690
- --osi-card-action-secondary-color: var(--foreground, #{$osi-color-white});
691
- --osi-card-action-secondary-border: rgba(55, 55, 60, 0.6);
692
- --osi-card-action-secondary-border-hover: #{$brand-color-25};
693
- --osi-card-action-secondary-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);
694
- --osi-card-action-secondary-shadow-hover:
695
- 0 4px 12px rgba(0, 0, 0, 0.15), 0 2px 4px rgba(0, 0, 0, 0.1);
696
-
697
- // Card Meta Elements
698
- --osi-card-eyebrow-color: #{$foreground-80};
699
- --osi-card-type-pill-bg: #{$brand-color-20};
700
- --osi-card-type-pill-border: #{$brand-color-30};
701
- --osi-card-type-pill-color: rgba(66, 61, 55, 0.85);
702
- --osi-card-meta-color: #{$foreground-80};
703
- --osi-card-meta-chip-bg: rgba(40, 40, 45, 0.8);
704
- --osi-card-meta-chip-border: rgba(55, 55, 60, 0.65);
705
- --osi-card-meta-chip-dot-primary: var(--accent);
706
- --osi-card-meta-chip-dot-secondary: #{$brand-color-60};
707
- --osi-card-meta-chip-dot-tertiary: #{$brand-color-35};
708
- --osi-card-meta-chip-dot-shadow: 0 0 0 1px #{$brand-color-12};
709
- --osi-card-footnote-color: #{$foreground-70};
710
-
711
- // Card Fullscreen Button
712
- --osi-card-fullscreen-btn-bg: #{$brand-color-08};
713
- --osi-card-fullscreen-btn-bg-hover: #{$brand-color-08};
714
- --osi-card-fullscreen-btn-border: #{$brand-color-12};
715
- --osi-card-fullscreen-btn-border-hover: #{$brand-color-20};
716
- --osi-card-fullscreen-btn-shadow: 0 4px 12px #{$brand-color-20};
717
- --osi-card-fullscreen-btn-size: 36px;
718
- --osi-card-fullscreen-btn-radius: 8px;
719
-
720
- // Card Shine Effect
721
- --osi-card-shine-gradient-primary: linear-gradient(
722
- 135deg,
723
- rgba(255, 255, 255, 0.2) 0%,
724
- rgba(255, 255, 255, 0) 50%,
725
- rgba(255, 255, 255, 0.1) 100%
726
- );
727
- --osi-card-shine-gradient-secondary: linear-gradient(
728
- 135deg,
729
- rgba(255, 255, 255, 0.15) 0%,
730
- rgba(255, 255, 255, 0) 50%,
731
- rgba(255, 255, 255, 0.08) 100%
732
- );
733
- }
734
-
735
- /// Generate OSI Section component tokens (--osi-section-*)
736
- /// SINGLE SOURCE OF TRUTH for all section styling variables
737
- @mixin osi-section-tokens() {
738
- // Section Background
739
- --osi-section-background: var(
740
- --section-background,
741
- var(--section-surface, var(--card-section-bg))
742
- );
743
- --osi-section-background-hover: var(
744
- --section-background-hover,
745
- var(--section-surface-hover, var(--card-section-bg))
746
- );
747
- --osi-section-background-main: var(--section-bg-main, var(--section-surface, var(--background)));
748
- --osi-section-background-main-hover: var(
749
- --section-bg-main-hover,
750
- var(--section-surface-hover, var(--background))
751
- );
752
- --osi-section-background-contrast: var(--section-bg-contrast, var(--card-section-bg));
753
- --osi-section-background-contrast-hover: var(
754
- --section-bg-contrast-hover,
755
- var(--card-section-card-bg)
756
- );
757
-
758
- // Section Border
759
- --osi-section-border: var(--theme-section-border, 1px solid rgba(0, 0, 0, 0.06));
760
- --osi-section-border-hover: var(--theme-section-border-hover, 1px solid #{$brand-color-15});
761
-
762
- // Section Shadow
763
- --osi-section-shadow: var(--theme-section-box-shadow, var(--shadow-md));
764
- --osi-section-shadow-hover: var(
765
- --theme-section-box-shadow-hover,
766
- var(--shadow-lg),
767
- var(--shadow-glow-sm)
768
- );
769
- --osi-section-shadow-fullscreen: none;
770
-
771
- // Section Spacing - Padding
772
- --osi-section-padding: var(--section-padding);
773
- --osi-section-padding-top: var(--section-padding);
774
- --osi-section-padding-bottom: var(--section-padding);
775
- --osi-section-padding-left: var(--section-padding);
776
- --osi-section-padding-right: var(--section-padding);
777
-
778
- // Section Spacing - Margins
779
- --osi-section-margin-top: 0;
780
- --osi-section-margin-bottom: var(--osi-section-spacing-bottom);
781
- --osi-section-margin-left: 0;
782
- --osi-section-margin-right: 0;
783
- --osi-section-spacing-bottom: var(--space-3);
784
-
785
- // Section Spacing - Gaps
786
- --osi-section-gap: var(--section-card-gap);
787
- --osi-section-gap-internal: var(--card-gap);
788
- --osi-section-grid-gap: var(--section-grid-gap);
789
- --osi-section-internal-gap: var(--card-gap);
790
- --osi-section-header-gap: var(--section-header-gap);
791
- --osi-section-header-padding-bottom: var(--section-header-padding-bottom);
792
-
793
- // Section Border Radius
794
- --osi-section-border-radius: var(--section-card-border-radius);
795
-
796
- // Section Typography
797
- --osi-section-title-font-size: var(--section-title-font-size, 1.1rem);
798
- --osi-section-title-font-weight: var(--section-title-font-weight, 700);
799
- --osi-section-title-letter-spacing: var(--section-title-letter-spacing, -0.02em);
800
- --osi-section-title-line-height: var(--section-title-line-height, 1.3);
801
- --osi-section-title-color: var(--card-text-primary);
802
- --osi-section-title-margin-bottom: var(--section-title-margin-bottom);
803
- --osi-section-title-underline-length: clamp(var(--space-8), 3vw, var(--space-12));
804
- --osi-section-title-underline-hover-length: clamp(var(--space-10), 4vw, var(--space-12));
805
- --osi-section-title-underline-height: var(--border-width-accent);
806
- --osi-section-title-underline-offset: calc(var(--space-2) * -1);
807
- --osi-section-title-underline-color: var(--section-accent, var(--accent, #{$osi-color-brand}));
808
- // Fallback for browsers without color-mix support
809
- --osi-section-title-hover-color: var(--color-brand);
810
-
811
- --osi-section-description-color: var(--muted-foreground);
812
- --osi-section-description-color-hover: var(--foreground);
813
-
814
- // Section Accent
815
- --osi-section-accent: var(--section-accent, var(--accent, #{$osi-color-brand}));
816
- --osi-section-accent-info: var(--section-accent-info, #{$osi-color-brand});
817
- --osi-section-accent-analytics: var(--section-accent-analytics, #{$osi-color-brand});
818
- --osi-section-accent-financials: var(--section-accent-financials, #{$osi-color-brand});
819
- --osi-section-accent-map: var(--section-accent-map, #{$osi-color-brand});
820
- --osi-section-accent-network: var(--section-accent-network, #{$osi-color-brand});
821
- --osi-section-accent-contact: var(--section-accent-contact, #{$osi-color-brand});
822
- --osi-section-accent-product: var(--section-accent-product, #{$osi-color-brand});
823
- --osi-section-accent-solutions: var(--section-accent-solutions, #{$osi-color-brand});
824
- --osi-section-accent-overview: var(--section-accent-overview, #{$osi-color-brand});
825
- --osi-section-accent-list: var(--section-accent-list, #{$osi-color-brand});
826
- --osi-section-accent-event: var(--section-accent-event, #{$osi-color-brand});
827
- --osi-section-accent-chart: var(--section-accent-chart, var(--accent, #{$osi-color-brand}));
828
- --osi-section-accent-reference: var(
829
- --section-accent-reference,
830
- var(--accent, #{$osi-color-brand})
831
- );
832
- --osi-section-accent-quotation: var(
833
- --section-accent-quotation,
834
- var(--accent, #{$osi-color-brand})
835
- );
836
-
837
- // Section Effects
838
- --osi-section-glow-background: radial-gradient(
839
- circle at top right,
840
- #{$brand-color-35} 0%,
841
- transparent 65%
842
- );
843
- --osi-section-glow-opacity-hover: 0.12;
844
- --osi-section-backdrop-filter: blur(12px);
845
-
846
- // Section Badge
847
- --osi-section-badge-bg: linear-gradient(135deg, #{$brand-color-15}, #{$brand-color-12});
848
- --osi-section-badge-bg-hover: #{$brand-color-12};
849
- --osi-section-badge-color: #{$brand-color-90};
850
- --osi-section-badge-padding: calc(var(--tag-padding-y-sm) * 0.75)
851
- calc(var(--tag-padding-x) * 0.875);
852
-
853
- // Section Empty State
854
- --osi-section-empty-bg: var(--section-item-background, var(--card-section-bg));
855
- --osi-section-empty-bg-hover: var(--section-item-background-hover, var(--card-section-card-bg));
856
- --osi-section-empty-border: 1px dashed var(--border);
857
- --osi-section-empty-border-hover: var(--accent);
858
- --osi-section-empty-icon-opacity: 0.5;
859
- --osi-section-empty-icon-opacity-hover: 0.7;
860
-
861
- // Section Transitions
862
- --osi-section-transition: var(
863
- --theme-section-transition,
864
- border-color 0.22s cubic-bezier(0.4, 0, 0.2, 1),
865
- box-shadow 0.22s cubic-bezier(0.4, 0, 0.2, 1)
866
- );
867
- --osi-section-title-transition: color 0.22s cubic-bezier(0.4, 0, 0.2, 1);
868
- --osi-section-description-transition: color 0.2s ease;
869
- }
870
-
871
- /// Generate OSI Section Item component tokens (--osi-section-item-*)
872
- /// SINGLE SOURCE OF TRUTH for all section item/field styling variables
873
- @mixin osi-section-item-tokens() {
874
- // Section Item Background
875
- --osi-section-item-background: var(--theme-section-item-background, var(--card-section-bg));
876
- --osi-section-item-background-hover: var(
877
- --theme-section-item-background-hover,
878
- var(--card-section-bg)
879
- );
880
-
881
- // Section Item Border
882
- --osi-section-item-border: var(--theme-section-item-border, 1px solid rgba(0, 0, 0, 0.06));
883
- --osi-section-item-border-hover: var(
884
- --theme-section-item-border-hover,
885
- 1px solid #{$brand-color-08}
886
- );
887
-
888
- // Section Item Shadow
889
- --osi-section-item-shadow: var(--theme-section-item-box-shadow, var(--shadow-sm));
890
- --osi-section-item-shadow-hover: var(
891
- --theme-section-item-box-shadow-hover,
892
- var(--shadow-md),
893
- var(--shadow-glow-sm)
894
- );
895
-
896
- // Section Item Spacing - Padding
897
- --osi-section-item-padding: var(--section-item-padding);
898
- --osi-section-item-padding-top: var(--gap-lg);
899
- --osi-section-item-padding-bottom: var(--gap-lg);
900
- --osi-section-item-padding-left: var(--gap-lg);
901
- --osi-section-item-padding-right: var(--gap-lg);
902
- --osi-section-item-metric-padding: var(--metric-item-padding);
903
- --osi-section-item-list-padding: var(--list-item-padding);
904
-
905
- // Section Item Spacing - Margins
906
- --osi-section-item-margin-top: 0;
907
- --osi-section-item-margin-bottom: 0;
908
- --osi-section-item-margin-left: 0;
909
- --osi-section-item-margin-right: 0;
910
-
911
- // Section Item Spacing - Gaps
912
- --osi-section-item-gap: var(--section-item-gap);
913
- --osi-section-item-grid-gap: var(--section-item-gap);
914
-
915
- // Section Item Border Radius
916
- --osi-section-item-border-radius: var(--radius-md);
917
-
918
- // Section Item Typography - Label
919
- --osi-section-item-label-font-size: var(--text-sm);
920
- --osi-section-item-label-font-weight: var(--font-weight-medium);
921
- --osi-section-item-label-color: var(--muted-foreground);
922
- --osi-section-item-label-letter-spacing: 0.01em;
923
- --osi-section-item-label-text-transform: uppercase;
924
-
925
- // Section Item Typography - Value
926
- --osi-section-item-value-font-size: var(--text-base);
927
- --osi-section-item-value-font-weight: var(--font-weight-normal);
928
- --osi-section-item-value-color: var(--foreground);
929
- --osi-section-item-value-letter-spacing: 0;
930
-
931
- // Section Item Icon
932
- --osi-section-item-icon-size: var(--icon-md);
933
- --osi-section-item-icon-color: var(--muted-foreground);
934
- --osi-section-item-icon-color-hover: var(--accent);
935
-
936
- // Section Item Transitions
937
- --osi-section-item-transition: var(
938
- --theme-section-item-transition,
939
- background 220ms cubic-bezier(0.4, 0, 0.2, 1),
940
- box-shadow 220ms cubic-bezier(0.4, 0, 0.2, 1),
941
- border-color 220ms cubic-bezier(0.4, 0, 0.2, 1)
942
- );
943
- --osi-section-item-hover-transform: var(--theme-section-item-hover-transform, none);
944
- }
945
-
946
- /// Generate element type system tokens (Hero, Buttons, Cards, Sections, Section Items)
947
- @mixin osi-element-system() {
948
- // Include component-specific token mixins
949
- @include osi-card-tokens();
950
- @include osi-section-tokens();
951
- @include osi-section-item-tokens();
952
-
953
- // 1. HERO CARDS
954
- --hero-card-border: 1px solid rgba(146, 153, 158, 0.15);
955
- --hero-card-border-hover: #{$brand-color-40};
956
- --hero-card-background: var(--card);
957
- --hero-card-background-hover: var(--card);
958
- --hero-card-border-radius: var(--radius-lg);
959
- --hero-card-box-shadow: var(--shadow-md);
960
- --hero-card-box-shadow-hover: var(--shadow-lg);
961
- --hero-card-hover-transform: translateY(-2px);
962
-
963
- // 2. BUTTONS
964
- --button-border: 1px solid transparent;
965
- --button-border-hover: 1px solid #{$brand-color-40};
966
- --button-background: var(--primary);
967
- --button-background-hover: color-mix(in srgb, var(--primary) 85%, transparent);
968
- --button-border-radius: var(--radius-md);
969
- --button-box-shadow: var(--shadow-sm);
970
- --button-box-shadow-hover: var(--shadow-md);
971
- --button-hover-transform: translateY(-1px);
972
-
973
- // 3. AI CARDS (aliases for backward compatibility)
974
- --ai-card-border: var(--osi-card-border);
975
- --ai-card-border-hover: var(--osi-card-border-hover);
976
- --ai-card-background: var(--osi-card-background);
977
- --ai-card-background-hover: var(--osi-card-background-hover);
978
- --ai-card-border-radius: var(--osi-card-border-radius);
979
- --ai-card-box-shadow: var(--osi-card-shadow);
980
- --ai-card-box-shadow-hover: var(--osi-card-shadow-hover);
981
- --ai-card-hover-transform: none;
982
- --ai-card-transition-default:
983
- border 0.32s cubic-bezier(0.4, 0, 0.2, 1), background 0.32s cubic-bezier(0.4, 0, 0.2, 1),
984
- box-shadow 0.32s cubic-bezier(0.4, 0, 0.2, 1);
985
- --ai-card-transition: var(--theme-ai-card-transition, var(--ai-card-transition-default));
986
-
987
- // 4. SECTIONS (aliases for backward compatibility)
988
- --section-border: var(--osi-section-border);
989
- --section-border-hover: var(--osi-section-border-hover);
990
- --section-border-radius: var(--osi-section-border-radius);
991
- --section-box-shadow-default: var(--osi-section-shadow);
992
- --section-box-shadow-hover-default: var(--osi-section-shadow-hover);
993
- --section-box-shadow: var(--osi-section-shadow);
994
- --section-box-shadow-hover: var(--osi-section-shadow-hover);
995
- --section-hover-transform: none;
996
- --section-transition: var(--osi-section-transition);
997
-
998
- // 5. SECTION ITEMS (aliases for backward compatibility)
999
- --section-item-border: var(--osi-section-item-border);
1000
- --section-item-border-hover: var(--osi-section-item-border-hover);
1001
- --section-item-background: var(--osi-section-item-background);
1002
- --section-item-background-hover: var(--osi-section-item-background-hover);
1003
- --section-item-border-radius: var(--osi-section-item-border-radius);
1004
- --section-item-box-shadow: var(--osi-section-item-shadow);
1005
- --section-item-box-shadow-hover-default: var(--osi-section-item-shadow-hover);
1006
- --section-item-box-shadow-hover: var(--osi-section-item-shadow-hover);
1007
- --section-item-hover-transform: var(--osi-section-item-hover-transform);
1008
- --section-item-transition-default: var(--osi-section-item-transition);
1009
- --section-item-transition: var(--osi-section-item-transition);
1010
-
1011
- // Legacy card variables (theme-aware)
1012
- --card-border: var(--theme-card-border, 1px solid rgba(146, 153, 158, 0.15));
1013
- --card-border-hover: var(--theme-card-border-hover, #{$brand-color-15});
1014
- --card-box-shadow: var(--theme-card-box-shadow, var(--shadow-md));
1015
- --card-box-shadow-hover: var(--theme-card-box-shadow-hover, var(--shadow-lg));
1016
- --card-hover-transform: none;
1017
-
1018
- // Entrance animations
1019
- --ai-card-entrance-animation: fadeInUpSoft var(--duration-moderate) var(--ease-out-smooth) 10ms 1
1020
- normal both;
1021
- --section-entrance-animation: fadeInSoft var(--duration-moderate) var(--ease-out-smooth) 20ms 1
1022
- normal both;
1023
- --section-item-entrance-animation: fadeInScaleSoft var(--duration-normal) var(--ease-out-smooth)
1024
- 30ms 1 normal both;
1025
- }
1026
-
1027
- // ============================================
1028
- // 5. THEME COLOR MIXINS
1029
- // ============================================
1030
-
1031
- /// Generate base theme colors (default/dark)
1032
- /// @param {String} $variant - 'demo' or 'integration' (deprecated - now always uses demo values)
1033
- /// @param {Boolean} $is-scoped - If true, outputs for nested context
1034
- @mixin osi-theme-base($variant: "demo", $is-scoped: false) {
1035
- @if $is-scoped {
1036
- color-scheme: light dark;
1037
- }
1038
-
1039
- @include osi-base-colors();
1040
-
1041
- --background: #{$osi-color-white};
1042
- --surface-contrast-color: #{$osi-color-black};
1043
-
1044
- // Cross-browser color-mix support with token-only fallback
1045
- @supports (color: color-mix(in srgb, black 50%, white)) {
1046
- --theme-card-background-hover: color-mix(
1047
- in srgb,
1048
- var(--background) 98%,
1049
- var(--surface-contrast-color) 2%
1050
- );
1051
- }
1052
-
1053
- // Surface tokens - defaults (will be overridden by theme-specific mixins and JavaScript presets)
1054
- // These are fallback values only - actual values come from osi-theme-dark/light mixins or JavaScript presets
1055
- --theme-ai-card-border: 1px solid rgba(0, 0, 0, 0.08);
1056
- --theme-ai-card-border-hover: 1px solid rgba(255, 121, 0, 0.4);
1057
- --theme-ai-card-background: rgba(255, 255, 255, 0.85);
1058
- --theme-ai-card-background-hover: rgba(255, 255, 255, 0.92);
1059
- --theme-ai-card-box-shadow: 0 4px 24px -1px rgba(0, 0, 0, 0.1), 0 0 18px rgba(255, 121, 0, 0.15);
1060
- --theme-ai-card-box-shadow-hover:
1061
- 0 20px 40px -5px rgba(0, 0, 0, 0.15), 0 0 24px rgba(255, 121, 0, 0.25),
1062
- 0 0 0 1px rgba(255, 121, 0, 0.15);
1063
- --theme-ai-card-backdrop-filter: blur(12px);
1064
- --theme-ai-card-transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
1065
-
1066
- --theme-card-border: 1px solid rgba(0, 0, 0, 0.08);
1067
- --theme-card-border-hover: var(--color-brand);
1068
- --theme-card-background: var(--background);
1069
- --theme-card-background-hover: color-mix(
1070
- in srgb,
1071
- var(--background) 98%,
1072
- var(--surface-contrast-color) 2%
1073
- );
1074
- --theme-card-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
1075
- --theme-card-box-shadow-hover: 0 2px 4px rgba(0, 0, 0, 0.07);
1076
-
1077
- --theme-section-border: 1px solid rgba(0, 0, 0, 0.06);
1078
- --theme-section-border-hover: 1px solid rgba(255, 121, 0, 0.15);
1079
- --theme-section-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
1080
- --theme-section-box-shadow-hover: 0 2px 4px rgba(0, 0, 0, 0.05);
1081
- --theme-section-transition:
1082
- border-color 0.22s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.22s cubic-bezier(0.4, 0, 0.2, 1);
1083
- // Flat backgrounds - no color-mix
1084
- --section-background: var(--background);
1085
- --section-background-hover: var(--background);
1086
- --section-surface: var(--background);
1087
- --section-surface-hover: var(--background);
1088
-
1089
- --theme-section-item-border: 1px solid rgba(0, 0, 0, 0.06);
1090
- --theme-section-item-border-hover: 1px solid rgba(255, 121, 0, 0.15);
1091
- --theme-section-item-background: var(--background);
1092
- --theme-section-item-background-hover: var(--background);
1093
- --theme-section-item-box-shadow: var(--shadow-md, 0 1px 2px rgba(0, 0, 0, 0.04));
1094
- --theme-section-item-box-shadow-hover: var(--shadow-lg, 0 1px 3px rgba(0, 0, 0, 0.05));
1095
- --theme-section-item-hover-transform: none;
1096
- --theme-section-item-transition:
1097
- border-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), background 0.2s cubic-bezier(0.4, 0, 0.2, 1),
1098
- box-shadow 0.2s cubic-bezier(0.4, 0, 0.2, 1);
1099
- }
1100
-
1101
- /// Generate dark theme colors
1102
- /// @param {String} $variant - 'demo' or 'integration' (deprecated - now always uses demo values)
1103
- /// @param {Boolean} $is-scoped - If true, outputs for nested context
1104
- @mixin osi-theme-dark($variant: "demo", $is-scoped: false) {
1105
- @if $is-scoped {
1106
- color-scheme: dark;
1107
- --background: #{$osi-background-dark-scoped};
1108
- } @else {
1109
- --background: #{$osi-background-dark};
1110
- }
1111
- --surface-contrast-color: #{$osi-color-white};
1112
- --foreground: #{$osi-foreground-dark};
1113
- --muted: #242424;
1114
- --muted-foreground: #{$osi-muted-foreground-dark};
1115
-
1116
- // Flat dark backgrounds - no color-mix
1117
- --card: var(--background);
1118
- --card-surface: var(--background);
1119
- --card-foreground: #{$osi-foreground-dark};
1120
- --card-surface-hover: var(--background);
1121
- --card-section-bg: #181818;
1122
- --card-section-card-bg: #1f1f1f;
1123
-
1124
- // AI Card surface - transparent with blur effect (matches preset)
1125
- --theme-ai-card-border: 1px solid rgba(255, 255, 255, 0.08);
1126
- --theme-ai-card-border-hover: 1px solid rgba(255, 121, 0, 0.2);
1127
- --theme-ai-card-background: rgba(20, 20, 20, 0.6);
1128
- --theme-ai-card-background-hover: rgba(25, 25, 25, 0.7);
1129
- --theme-ai-card-box-shadow: 0 4px 24px -1px rgba(0, 0, 0, 0.2);
1130
- --theme-ai-card-box-shadow-hover:
1131
- 0 12px 32px -4px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(255, 121, 0, 0.1);
1132
- --theme-ai-card-backdrop-filter: blur(12px);
1133
- --theme-ai-card-transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
1134
-
1135
- // Card backgrounds (matches preset)
1136
- --theme-card-border: 1px solid rgba(255, 255, 255, 0.08);
1137
- --theme-card-border-hover: 1px solid rgba(255, 121, 0, 0.2);
1138
- --theme-card-background: var(--background);
1139
- // Fallback for browsers without color-mix support
1140
- --theme-card-background-hover: rgba(25, 25, 25, 0.7);
1141
- --theme-card-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.35);
1142
- --theme-card-box-shadow-hover: 0 2px 4px rgba(0, 0, 0, 0.4);
1143
-
1144
- // Flat section backgrounds
1145
- --section-background: var(--background);
1146
- --section-background-hover: var(--background);
1147
- --section-surface: #181818;
1148
- --section-surface-hover: #1f1f1f;
1149
- --popover: #111111;
1150
- --popover-foreground: #{$osi-foreground-dark};
1151
- --primary: #{$osi-color-brand};
1152
- --primary-foreground: #{$osi-foreground-dark};
1153
- --secondary: #333333;
1154
- --secondary-foreground: #{$osi-foreground-dark};
1155
- --accent: #{$osi-color-brand};
1156
- --accent-foreground: #{$osi-color-black};
1157
- --destructive: #d4183d;
1158
- --destructive-foreground: #{$osi-foreground-dark};
1159
- --border: rgba(200, 200, 200, 0.3);
1160
- --input: transparent;
1161
- --input-background: #222222;
1162
- --switch-background: #333333;
1163
- --ring: #{$brand-color-60};
1164
- --chart-1: #{$osi-color-brand};
1165
- --chart-2: #{$osi-color-brand-light};
1166
- --chart-3: #{$osi-color-brand-dark};
1167
- --chart-4: #{$osi-color-brand-pale};
1168
- --chart-5: #ff4500;
1169
-
1170
- // Element type overrides - subtle theme-aware hover
1171
- --hero-card-border: 1px solid rgba(233, 233, 233, 0.2);
1172
- --hero-card-border-hover: 1px solid rgba(255, 121, 0, 0.25);
1173
- // Section (matches preset)
1174
- --theme-section-border: 1px solid rgba(255, 255, 255, 0.1);
1175
- --theme-section-border-hover: 1px solid rgba(255, 255, 255, 0.1);
1176
- --theme-section-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
1177
- --theme-section-box-shadow-hover: 0 2px 5px rgba(0, 0, 0, 0.5);
1178
- --theme-section-transition:
1179
- border-color 0.22s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.22s cubic-bezier(0.4, 0, 0.2, 1);
1180
- // Section Item (matches preset)
1181
- --theme-section-item-border: 1px solid rgba(255, 255, 255, 0.06);
1182
- --theme-section-item-border-hover: 1px solid rgba(255, 121, 0, 0.08);
1183
- --theme-section-item-background: #202020;
1184
- --theme-section-item-background-hover: #212121;
1185
- --theme-section-item-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
1186
- --theme-section-item-box-shadow-hover: 0 1px 4px rgba(0, 0, 0, 0.3);
1187
- --theme-section-item-hover-transform: none;
1188
- --theme-section-item-transition:
1189
- background 220ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 220ms cubic-bezier(0.4, 0, 0.2, 1),
1190
- border-color 220ms cubic-bezier(0.4, 0, 0.2, 1);
1191
- }
1192
-
1193
- /// Generate light theme colors
1194
- /// @param {String} $variant - 'demo' or 'integration' (deprecated - now always uses demo values)
1195
- /// @param {Boolean} $is-scoped - If true, outputs for nested context
1196
- @mixin osi-theme-light($variant: "demo", $is-scoped: false) {
1197
- @if $is-scoped {
1198
- color-scheme: light;
1199
- }
1200
- --background: #{$osi-background-light};
1201
- --foreground: #{$osi-foreground-light};
1202
- --muted: #f4f4f6;
1203
- --muted-foreground: #{$osi-muted-foreground-light};
1204
-
1205
- // Cross-browser color-mix support with token-only fallback
1206
- @supports (color: color-mix(in srgb, black 50%, white)) {
1207
- --theme-card-background-hover: color-mix(
1208
- in srgb,
1209
- var(--background) 98%,
1210
- var(--surface-contrast-color) 2%
1211
- );
1212
- }
1213
-
1214
- // Flat light backgrounds - no color-mix
1215
- --card: var(--background);
1216
- --card-surface: var(--background);
1217
- --card-foreground: #{$osi-foreground-light};
1218
- --card-surface-hover: var(--background);
1219
- --card-section-bg: #fcfcfc;
1220
- --card-section-card-bg: #f8f8f8;
1221
-
1222
- // AI Card surface - light theme with blur (matches preset)
1223
- --theme-ai-card-border: 1px solid rgba(0, 0, 0, 0.08);
1224
- --theme-ai-card-border-hover: 1px solid rgba(255, 121, 0, 0.2);
1225
- --theme-ai-card-background: rgba(255, 255, 255, 0.85);
1226
- --theme-ai-card-background-hover: rgba(255, 255, 255, 0.88);
1227
- --theme-ai-card-box-shadow: 0 4px 24px -1px rgba(0, 0, 0, 0.1), 0 0 18px rgba(255, 121, 0, 0.15);
1228
- --theme-ai-card-box-shadow-hover:
1229
- 0 12px 32px -4px rgba(0, 0, 0, 0.12), 0 0 20px rgba(255, 121, 0, 0.18),
1230
- 0 0 0 1px rgba(255, 121, 0, 0.1);
1231
- --theme-ai-card-backdrop-filter: blur(12px);
1232
- --theme-ai-card-transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
1233
-
1234
- // Card backgrounds (matches preset)
1235
- --theme-card-border: 1px solid rgba(0, 0, 0, 0.08);
1236
- --theme-card-border-hover: 1px solid rgba(255, 121, 0, 0.2);
1237
- --theme-card-background: var(--background);
1238
- // Fallback for browsers without color-mix support
1239
- --theme-card-background-hover: rgba(255, 255, 255, 0.88);
1240
- --theme-card-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
1241
- --theme-card-box-shadow-hover: 0 2px 4px rgba(0, 0, 0, 0.06);
1242
-
1243
- // Flat section backgrounds
1244
- --section-background: var(--background);
1245
- --section-background-hover: var(--background);
1246
- --section-surface: #fcfcfc;
1247
- --section-surface-hover: #f8f8f8;
1248
- --popover: #{$osi-color-white};
1249
- --popover-foreground: #1a1a1a;
1250
- --primary: #{$osi-color-brand};
1251
- --primary-foreground: #{$osi-color-white};
1252
- --secondary: #f5f5f5;
1253
- --secondary-foreground: #1a1a1a;
1254
- --accent: #{$osi-color-brand};
1255
- --accent-foreground: #{$osi-color-white};
1256
- --destructive: #d4183d;
1257
- --destructive-foreground: #{$osi-color-white};
1258
- --border: rgba(200, 200, 200, 0.5);
1259
- --input: transparent;
1260
- --input-background: #f9f9f9;
1261
- --switch-background: #e5e5e5;
1262
- --ring: #{$brand-color-40};
1263
- --chart-1: #{$osi-color-brand};
1264
- --chart-2: #{$osi-color-brand-light};
1265
- --chart-3: #{$osi-color-brand-dark};
1266
- --chart-4: #{$osi-color-brand-pale};
1267
- --chart-5: #ff4500;
1268
-
1269
- // Light theme gray overrides
1270
- --color-gray-700: #e0e0e0;
1271
- --color-gray-600: #d0d0d0;
1272
-
1273
- // Element type overrides - subtle theme-aware hover
1274
- --hero-card-border: 1px solid rgba(146, 153, 158, 0.25);
1275
- --hero-card-border-hover: 1px solid rgba(255, 121, 0, 0.2);
1276
- // Section (matches preset)
1277
- --theme-section-border: 1px solid rgba(0, 0, 0, 0.08);
1278
- --theme-section-border-hover: 1px solid rgba(0, 0, 0, 0.1);
1279
- --theme-section-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
1280
- --theme-section-box-shadow-hover: 0 2px 4px rgba(0, 0, 0, 0.07);
1281
- --theme-section-transition:
1282
- border-color 0.22s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.22s cubic-bezier(0.4, 0, 0.2, 1);
1283
- // Section Item (matches preset)
1284
- --theme-section-item-border: 1px solid rgba(0, 0, 0, 0.06);
1285
- --theme-section-item-border-hover: 1px solid rgba(255, 121, 0, 0.08);
1286
- --theme-section-item-background: #f9f9f9;
1287
- --theme-section-item-background-hover: #f7f7f7;
1288
- --theme-section-item-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
1289
- --theme-section-item-box-shadow-hover: 0 1px 3px rgba(0, 0, 0, 0.05);
1290
- --theme-section-item-hover-transform: none;
1291
- --theme-section-item-transition:
1292
- background 220ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 220ms cubic-bezier(0.4, 0, 0.2, 1),
1293
- border-color 220ms cubic-bezier(0.4, 0, 0.2, 1);
1294
- }
1295
-
1296
- // ============================================
1297
- // 6. MAIN TOKEN GENERATION MIXIN
1298
- // ============================================
1299
-
1300
- /// Generate all design tokens
1301
- /// @param {String} $variant - 'demo' for larger demo app, 'integration' for compact OSA
1302
- /// @param {Boolean} $is-scoped - If true, outputs for nested context
1303
- @mixin osi-tokens($variant: "demo", $is-scoped: false) {
1304
- @include osi-shadows();
1305
- @include osi-radius();
1306
-
1307
- // Cross-browser color-mix support for section title hover color
1308
- @supports (color: color-mix(in srgb, black 50%, white)) {
1309
- --osi-section-title-hover-color: color-mix(
1310
- in srgb,
1311
- var(--color-brand) 70%,
1312
- var(--color-white) 30%
1313
- );
1314
- }
1315
- @include osi-spacing();
1316
- @include osi-z-index();
1317
- @include osi-animation();
1318
- @include osi-opacity();
1319
- @include osi-typography($variant);
1320
- @include osi-card-typography($variant);
1321
- @include osi-card-layout();
1322
- @include osi-card-text-colors();
1323
- @include osi-card-surfaces();
1324
- @include osi-status-colors();
1325
- @include osi-interactive();
1326
- @include osi-element-system();
1327
- }
1328
-
1329
- /// Generate reduced motion overrides
1330
- @mixin osi-tokens-reduced-motion() {
1331
- --duration-instant: 1ms;
1332
- --duration-fast: 1ms;
1333
- --duration-normal: 1ms;
1334
- --duration-moderate: 1ms;
1335
- --duration-slow: 1ms;
1336
- --duration-slower: 1ms;
1337
- --duration-slowest: 1ms;
1338
- --stagger-delay-base: 0ms;
1339
- --stagger-delay-fast: 0ms;
1340
- --stagger-delay-slow: 0ms;
1341
- --ai-card-entrance-animation: none;
1342
- --section-entrance-animation: none;
1343
- --section-item-entrance-animation: none;
1344
- }
1345
-
1346
- /// Generate high contrast mode overrides
1347
- @mixin osi-tokens-high-contrast() {
1348
- --foreground: #{$osi-color-white};
1349
- --background: #{$osi-color-black};
1350
- --muted-foreground: #{$osi-color-white};
1351
- --muted: #{$osi-color-black};
1352
- --border: #{$osi-color-white};
1353
- --card: #{$osi-color-black};
1354
- --card-foreground: #{$osi-color-white};
1355
- --ai-card-border: 2px solid #{$osi-color-white};
1356
- --section-border: 2px solid #{$osi-color-white};
1357
- --button-border: 2px solid #{$osi-color-white};
1358
- --card-background: #{$osi-color-black};
1359
- --card-background-hover: #1a1a1a;
1360
- --section-item-background: #{$osi-color-black};
1361
- --section-item-background-hover: #1a1a1a;
1362
- }
1363
-
1364
- /// Generate forced colors mode overrides
1365
- @mixin osi-tokens-forced-colors() {
1366
- --foreground: ButtonText;
1367
- --background: Canvas;
1368
- --border: ButtonBorder;
1369
- --card: Canvas;
1370
- --card-foreground: ButtonText;
1371
- }
1372
-
1373
- // ============================================
1374
- // 7. CSS PROPERTY HELPER MIXINS (for Bootstrap overrides)
1375
- // ============================================
1376
-
1377
- // These mixins allow applying !important when needed
1378
- @mixin display($value) {
1379
- display: $value !important;
1380
- }
1381
-
1382
- @mixin flex-direction($value) {
1383
- flex-direction: $value !important;
1384
- }
1385
-
1386
- @mixin gap($value) {
1387
- gap: $value !important;
1388
- }
1389
-
1390
- @mixin width($value) {
1391
- width: $value !important;
1392
- }
1393
-
1394
- @mixin min-height($value) {
1395
- min-height: $value !important;
1396
- }
1397
-
1398
- @mixin box-sizing($value) {
1399
- box-sizing: $value !important;
1400
- }
1401
-
1402
- @mixin grid-columns($value) {
1403
- grid-template-columns: $value !important;
1404
- }