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,573 +0,0 @@
1
- /**
2
- * OSI Cards - Theme Presets
3
- *
4
- * Beautiful, opinionated theme presets for OSI Cards.
5
- *
6
- * ⚠️ WARNING: This file contains :root selectors for global theming.
7
- * For library integration, prefer container-scoped theming:
8
- * - Use <osi-cards-container [theme]="'day'"> component
9
- * - Use [attr.data-theme]="theme" attribute binding
10
- * - This file is primarily for demo app use
11
- *
12
- * The selectors below support both global (:root) and container-scoped (.osi-cards-container) usage.
13
- *
14
- * ⚠️ TOKEN SOURCE RELATIONSHIPS:
15
- * This file defines demo app theme presets (`--osi-card-*` variables).
16
- * For CSS component tokens, see: `styles/tokens/_master.scss`
17
- * For JS-applied theme presets, see: `themes/presets.ts`
18
- *
19
- * NOTE: Theme values here may differ from `themes/presets.ts` as they serve
20
- * different purposes (demo app vs library integration). Consider aligning
21
- * values if consistency is required.
22
- */
23
-
24
- // ============================================
25
- // Light Theme (Default)
26
- // ============================================
27
-
28
- [data-theme="light"],
29
- .osi-cards-container[data-theme="light"],
30
- :root {
31
- // Base colors
32
- --osi-card-background: #ffffff;
33
- --osi-card-foreground: #1a1a2e;
34
- --osi-card-muted: #64748b;
35
- --osi-card-muted-foreground: #94a3b8;
36
-
37
- // Surface colors
38
- --osi-card-surface: #f8fafc;
39
- --osi-card-surface-hover: #f1f5f9;
40
- --osi-card-surface-active: #e2e8f0;
41
-
42
- // Accent
43
- --osi-card-accent: #6366f1;
44
- --osi-card-accent-rgb: 99, 102, 241;
45
- --osi-card-accent-foreground: #ffffff;
46
- --osi-card-accent-hover: #4f46e5;
47
-
48
- // Borders
49
- --osi-card-border: #e2e8f0;
50
- --osi-card-border-hover: #cbd5e1;
51
- --osi-card-ring: rgba(99, 102, 241, 0.3);
52
-
53
- // Status colors
54
- --osi-card-success: #10b981;
55
- --osi-card-success-bg: #ecfdf5;
56
- --osi-card-warning: #f59e0b;
57
- --osi-card-warning-bg: #fffbeb;
58
- --osi-card-destructive: #ef4444;
59
- --osi-card-destructive-bg: #fef2f2;
60
- --osi-card-info: #3b82f6;
61
- --osi-card-info-bg: #eff6ff;
62
-
63
- // Shadows
64
- --osi-card-shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.04);
65
- --osi-card-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07), 0 2px 4px rgba(0, 0, 0, 0.04);
66
- --osi-card-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.08), 0 4px 6px rgba(0, 0, 0, 0.03);
67
- --osi-card-shadow-glow: 0 0 20px rgba(99, 102, 241, 0.15);
68
- }
69
-
70
- // ============================================
71
- // Dark Theme
72
- // ============================================
73
-
74
- [data-theme="dark"],
75
- .osi-cards-container[data-theme="dark"] {
76
- // Base colors
77
- --osi-card-background: #0f172a;
78
- --osi-card-foreground: #f1f5f9;
79
- --osi-card-muted: #94a3b8;
80
- --osi-card-muted-foreground: #64748b;
81
-
82
- // Surface colors
83
- --osi-card-surface: #1e293b;
84
- --osi-card-surface-hover: #334155;
85
- --osi-card-surface-active: #475569;
86
-
87
- // Accent
88
- --osi-card-accent: #818cf8;
89
- --osi-card-accent-rgb: 129, 140, 248;
90
- --osi-card-accent-foreground: #0f172a;
91
- --osi-card-accent-hover: #a5b4fc;
92
-
93
- // Borders
94
- --osi-card-border: #334155;
95
- --osi-card-border-hover: #475569;
96
- --osi-card-ring: rgba(129, 140, 248, 0.4);
97
-
98
- // Status colors
99
- --osi-card-success: #34d399;
100
- --osi-card-success-bg: rgba(16, 185, 129, 0.1);
101
- --osi-card-warning: #fbbf24;
102
- --osi-card-warning-bg: rgba(245, 158, 11, 0.1);
103
- --osi-card-destructive: #f87171;
104
- --osi-card-destructive-bg: rgba(239, 68, 68, 0.1);
105
- --osi-card-info: #60a5fa;
106
- --osi-card-info-bg: rgba(59, 130, 246, 0.1);
107
-
108
- // Shadows
109
- --osi-card-shadow: 0 1px 3px rgba(0, 0, 0, 0.3), 0 1px 2px rgba(0, 0, 0, 0.2);
110
- --osi-card-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.25), 0 2px 4px rgba(0, 0, 0, 0.15);
111
- --osi-card-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.3), 0 4px 6px rgba(0, 0, 0, 0.15);
112
- --osi-card-shadow-glow: 0 0 30px rgba(129, 140, 248, 0.2);
113
- }
114
-
115
- // ============================================
116
- // Midnight Theme
117
- // ============================================
118
-
119
- [data-theme="midnight"],
120
- .osi-cards-container[data-theme="midnight"] {
121
- --osi-card-background: #0a0a0f;
122
- --osi-card-foreground: #e4e4e7;
123
- --osi-card-muted: #71717a;
124
- --osi-card-muted-foreground: #52525b;
125
-
126
- --osi-card-surface: #18181b;
127
- --osi-card-surface-hover: #27272a;
128
- --osi-card-surface-active: #3f3f46;
129
-
130
- --osi-card-accent: #a78bfa;
131
- --osi-card-accent-rgb: 167, 139, 250;
132
- --osi-card-accent-foreground: #0a0a0f;
133
- --osi-card-accent-hover: #c4b5fd;
134
-
135
- --osi-card-border: #27272a;
136
- --osi-card-border-hover: #3f3f46;
137
- --osi-card-ring: rgba(167, 139, 250, 0.4);
138
-
139
- --osi-card-shadow-glow: 0 0 40px rgba(167, 139, 250, 0.15);
140
- }
141
-
142
- // ============================================
143
- // Corporate Theme
144
- // ============================================
145
-
146
- [data-theme="corporate"],
147
- .osi-cards-container[data-theme="corporate"] {
148
- --osi-card-background: #ffffff;
149
- --osi-card-foreground: #1e3a5f;
150
- --osi-card-muted: #5a7fa3;
151
- --osi-card-muted-foreground: #8ba8c7;
152
-
153
- --osi-card-surface: #f0f7ff;
154
- --osi-card-surface-hover: #e1efff;
155
- --osi-card-surface-active: #cfe2ff;
156
-
157
- --osi-card-accent: #0066cc;
158
- --osi-card-accent-rgb: 0, 102, 204;
159
- --osi-card-accent-foreground: #ffffff;
160
- --osi-card-accent-hover: #0052a3;
161
-
162
- --osi-card-border: #d1e3f6;
163
- --osi-card-border-hover: #a8cdef;
164
-
165
- // More subdued shadows for professional look
166
- --osi-card-shadow: 0 1px 2px rgba(30, 58, 95, 0.05);
167
- --osi-card-shadow-md: 0 2px 4px rgba(30, 58, 95, 0.08);
168
- --osi-card-shadow-lg: 0 4px 8px rgba(30, 58, 95, 0.1);
169
-
170
- // Sharper corners for corporate feel
171
- --osi-card-border-radius: 4px;
172
- }
173
-
174
- // ============================================
175
- // Nature Theme
176
- // ============================================
177
-
178
- [data-theme="nature"],
179
- .osi-cards-container[data-theme="nature"] {
180
- --osi-card-background: #fefefe;
181
- --osi-card-foreground: #1a3129;
182
- --osi-card-muted: #5a7268;
183
- --osi-card-muted-foreground: #8aa496;
184
-
185
- --osi-card-surface: #f0f7f4;
186
- --osi-card-surface-hover: #e3f0ea;
187
- --osi-card-surface-active: #d1e6db;
188
-
189
- --osi-card-accent: #059669;
190
- --osi-card-accent-rgb: 5, 150, 105;
191
- --osi-card-accent-foreground: #ffffff;
192
- --osi-card-accent-hover: #047857;
193
-
194
- --osi-card-border: #d1e6db;
195
- --osi-card-border-hover: #a7d4be;
196
- --osi-card-ring: rgba(5, 150, 105, 0.3);
197
-
198
- --osi-card-success: #059669;
199
- --osi-card-warning: #d97706;
200
- --osi-card-destructive: #dc2626;
201
- }
202
-
203
- // ============================================
204
- // Sunset Theme
205
- // ============================================
206
-
207
- [data-theme="sunset"],
208
- .osi-cards-container[data-theme="sunset"] {
209
- --osi-card-background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
210
- --osi-card-foreground: #fef3c7;
211
- --osi-card-muted: #d4a574;
212
- --osi-card-muted-foreground: #a87c4f;
213
-
214
- --osi-card-surface: rgba(255, 255, 255, 0.05);
215
- --osi-card-surface-hover: rgba(255, 255, 255, 0.1);
216
- --osi-card-surface-active: rgba(255, 255, 255, 0.15);
217
-
218
- --osi-card-accent: #f59e0b;
219
- --osi-card-accent-rgb: 245, 158, 11;
220
- --osi-card-accent-foreground: #1a1a2e;
221
- --osi-card-accent-hover: #d97706;
222
-
223
- --osi-card-border: rgba(245, 158, 11, 0.2);
224
- --osi-card-border-hover: rgba(245, 158, 11, 0.3);
225
- --osi-card-ring: rgba(245, 158, 11, 0.4);
226
-
227
- --osi-card-shadow-glow: 0 0 40px rgba(245, 158, 11, 0.2);
228
- }
229
-
230
- // ============================================
231
- // Ocean Theme
232
- // ============================================
233
-
234
- [data-theme="ocean"],
235
- .osi-cards-container[data-theme="ocean"] {
236
- --osi-card-background: #0a192f;
237
- --osi-card-foreground: #ccd6f6;
238
- --osi-card-muted: #8892b0;
239
- --osi-card-muted-foreground: #495670;
240
-
241
- --osi-card-surface: #112240;
242
- --osi-card-surface-hover: #1d3461;
243
- --osi-card-surface-active: #233554;
244
-
245
- --osi-card-accent: #64ffda;
246
- --osi-card-accent-rgb: 100, 255, 218;
247
- --osi-card-accent-foreground: #0a192f;
248
- --osi-card-accent-hover: #4cd7b8;
249
-
250
- --osi-card-border: #233554;
251
- --osi-card-border-hover: #2d4a6f;
252
- --osi-card-ring: rgba(100, 255, 218, 0.3);
253
-
254
- --osi-card-shadow-glow: 0 0 50px rgba(100, 255, 218, 0.15);
255
- }
256
-
257
- // ============================================
258
- // Rose Theme
259
- // ============================================
260
-
261
- [data-theme="rose"],
262
- .osi-cards-container[data-theme="rose"] {
263
- --osi-card-background: #fffbfc;
264
- --osi-card-foreground: #4a1c2c;
265
- --osi-card-muted: #9f6070;
266
- --osi-card-muted-foreground: #c89aa6;
267
-
268
- --osi-card-surface: #fef1f4;
269
- --osi-card-surface-hover: #fde4ea;
270
- --osi-card-surface-active: #fbd2dc;
271
-
272
- --osi-card-accent: #e11d48;
273
- --osi-card-accent-rgb: 225, 29, 72;
274
- --osi-card-accent-foreground: #ffffff;
275
- --osi-card-accent-hover: #be123c;
276
-
277
- --osi-card-border: #fbd2dc;
278
- --osi-card-border-hover: #f9a8bb;
279
- --osi-card-ring: rgba(225, 29, 72, 0.3);
280
- }
281
-
282
- // ============================================
283
- // Minimal Theme
284
- // ============================================
285
-
286
- [data-theme="minimal"],
287
- .osi-cards-container[data-theme="minimal"] {
288
- --osi-card-background: #ffffff;
289
- --osi-card-foreground: #171717;
290
- --osi-card-muted: #737373;
291
- --osi-card-muted-foreground: #a3a3a3;
292
-
293
- --osi-card-surface: #fafafa;
294
- --osi-card-surface-hover: #f5f5f5;
295
- --osi-card-surface-active: #e5e5e5;
296
-
297
- --osi-card-accent: #171717;
298
- --osi-card-accent-rgb: 23, 23, 23;
299
- --osi-card-accent-foreground: #ffffff;
300
- --osi-card-accent-hover: #404040;
301
-
302
- --osi-card-border: #e5e5e5;
303
- --osi-card-border-hover: #d4d4d4;
304
- --osi-card-ring: rgba(23, 23, 23, 0.2);
305
-
306
- // No shadows for minimal look
307
- --osi-card-shadow: none;
308
- --osi-card-shadow-md: none;
309
- --osi-card-shadow-lg: none;
310
- --osi-card-shadow-glow: none;
311
-
312
- // Sharp corners
313
- --osi-card-border-radius: 0;
314
- }
315
-
316
- // ============================================
317
- // High Contrast Theme (Accessibility)
318
- // ============================================
319
-
320
- [data-theme="high-contrast"],
321
- .osi-cards-container[data-theme="high-contrast"] {
322
- --osi-card-background: #000000;
323
- --osi-card-foreground: #ffffff;
324
- --osi-card-muted: #ffffff;
325
- --osi-card-muted-foreground: #d4d4d4;
326
-
327
- --osi-card-surface: #1a1a1a;
328
- --osi-card-surface-hover: #2d2d2d;
329
- --osi-card-surface-active: #404040;
330
-
331
- --osi-card-accent: #ffff00;
332
- --osi-card-accent-rgb: 255, 255, 0;
333
- --osi-card-accent-foreground: #000000;
334
- --osi-card-accent-hover: #cccc00;
335
-
336
- --osi-card-border: #ffffff;
337
- --osi-card-border-hover: #ffffff;
338
- --osi-card-ring: rgba(255, 255, 0, 0.5);
339
-
340
- --osi-card-success: #00ff00;
341
- --osi-card-warning: #ffff00;
342
- --osi-card-destructive: #ff0000;
343
- --osi-card-info: #00ffff;
344
-
345
- // Strong shadows for depth perception
346
- --osi-card-shadow: 0 0 0 2px #ffffff;
347
- --osi-card-shadow-md: 0 0 0 3px #ffffff;
348
- --osi-card-shadow-lg: 0 0 0 4px #ffffff;
349
- }
350
-
351
- // ============================================
352
- // System Theme (Auto)
353
- // ============================================
354
-
355
- @media (prefers-color-scheme: dark) {
356
- [data-theme="system"],
357
- .osi-cards-container[data-theme="system"],
358
- :root:not([data-theme]) {
359
- --osi-card-background: #0f172a;
360
- --osi-card-foreground: #f1f5f9;
361
- --osi-card-muted: #94a3b8;
362
- --osi-card-surface: #1e293b;
363
- --osi-card-accent: #818cf8;
364
- --osi-card-accent-rgb: 129, 140, 248;
365
- --osi-card-border: #334155;
366
- }
367
- }
368
-
369
- @media (prefers-color-scheme: light) {
370
- [data-theme="system"],
371
- .osi-cards-container[data-theme="system"],
372
- :root:not([data-theme]) {
373
- --osi-card-background: #ffffff;
374
- --osi-card-foreground: #1a1a2e;
375
- --osi-card-muted: #64748b;
376
- --osi-card-surface: #f8fafc;
377
- --osi-card-accent: #6366f1;
378
- --osi-card-accent-rgb: 99, 102, 241;
379
- --osi-card-border: #e2e8f0;
380
- }
381
- }
382
-
383
- // ============================================
384
- // Theme Transition System
385
- // ============================================
386
-
387
- // CSS Custom Properties for transition configuration
388
- // Support both global and container-scoped usage
389
- :root,
390
- .osi-cards-container {
391
- --osi-theme-transition-duration: 200ms;
392
- --osi-theme-transition-timing: cubic-bezier(0.4, 0, 0.2, 1);
393
- }
394
-
395
- // Properties that should transition during theme changes
396
- $theme-transition-properties: (
397
- background-color,
398
- background,
399
- border-color,
400
- color,
401
- fill,
402
- stroke,
403
- box-shadow,
404
- opacity
405
- );
406
-
407
- // Properties that should NOT transition (prevent layout shift)
408
- $theme-no-transition-properties: (
409
- width,
410
- height,
411
- margin,
412
- padding,
413
- transform,
414
- font-size,
415
- line-height
416
- );
417
-
418
- // Transitioning class - applied during theme switch
419
- .theme-transitioning,
420
- [data-theme-transition="true"] {
421
- // Apply transitions to all elements
422
- *,
423
- *::before,
424
- *::after {
425
- transition-property: #{$theme-transition-properties};
426
- transition-duration: var(--osi-theme-transition-duration);
427
- transition-timing-function: var(--osi-theme-transition-timing);
428
- }
429
-
430
- // Card-specific smoother transitions
431
- .osi-card-container,
432
- .ai-card-renderer,
433
- .ai-section,
434
- .masonry-item {
435
- transition-duration: calc(var(--osi-theme-transition-duration) * 1.2);
436
- }
437
- }
438
-
439
- // Respect reduced motion preference
440
- @media (prefers-reduced-motion: reduce) {
441
- .theme-transitioning,
442
- [data-theme-transition="true"] {
443
- *,
444
- *::before,
445
- *::after {
446
- transition-duration: 0ms !important;
447
- }
448
- }
449
- }
450
-
451
- // ============================================
452
- // Scoped Theme Container
453
- // ============================================
454
-
455
- .osi-scoped-theme {
456
- // Inherit theme from data-theme attribute
457
- // Container queries are progressive enhancement (Safari 16+)
458
- @supports (container-type: inline-size) {
459
- container-type: inline-size;
460
- }
461
-
462
- // Ensure CSS variables cascade properly
463
- color: var(--osi-card-foreground);
464
- background-color: var(--osi-card-background);
465
- }
466
-
467
- .osi-theme-container {
468
- position: relative;
469
- contain: layout style;
470
- // Container queries are progressive enhancement (Safari 16+)
471
- @supports (container-type: inline-size) {
472
- container-type: inline-size;
473
- }
474
-
475
- // Reset background to theme
476
- background-color: var(--osi-card-background);
477
- color: var(--osi-card-foreground);
478
- }
479
-
480
- // ============================================
481
- // Theme Transition Utilities
482
- // ============================================
483
-
484
- // Instant transition (no animation)
485
- .theme-transition-none {
486
- *,
487
- *::before,
488
- *::after {
489
- transition: none !important;
490
- }
491
- }
492
-
493
- // Fast transition
494
- .theme-transition-fast {
495
- --osi-theme-transition-duration: 100ms;
496
- }
497
-
498
- // Slow transition
499
- .theme-transition-slow {
500
- --osi-theme-transition-duration: 400ms;
501
- }
502
-
503
- // Smooth easing
504
- .theme-transition-smooth {
505
- --osi-theme-transition-timing: cubic-bezier(0.16, 1, 0.3, 1);
506
- }
507
-
508
- // ============================================
509
- // Color Scheme Indicator
510
- // ============================================
511
-
512
- // Visual indicator for current theme (useful for debugging)
513
- [data-theme]::before {
514
- content: none; // Hidden by default
515
- }
516
-
517
- // Show theme indicator in debug mode
518
- [data-osi-debug="true"][data-theme]::before {
519
- content: attr(data-theme);
520
- position: fixed;
521
- bottom: 8px;
522
- right: 8px;
523
- padding: 4px 8px;
524
- font-size: 10px;
525
- font-family: monospace;
526
- background: var(--osi-card-surface);
527
- color: var(--osi-card-muted);
528
- border: 1px solid var(--osi-card-border);
529
- border-radius: 4px;
530
- z-index: 9999;
531
- pointer-events: none;
532
- }
533
-
534
- // ============================================
535
- // Dark/Light Mode Specific Adjustments
536
- // ============================================
537
-
538
- // Enhanced readability for dark themes
539
- [data-theme="dark"],
540
- [data-theme="midnight"],
541
- [data-theme="ocean"],
542
- [data-theme="sunset"],
543
- .osi-cards-container[data-theme="dark"],
544
- .osi-cards-container[data-theme="midnight"],
545
- .osi-cards-container[data-theme="ocean"],
546
- .osi-cards-container[data-theme="sunset"] {
547
- // Slightly increase font weight for better legibility on dark backgrounds
548
- --osi-card-font-weight-normal: 400;
549
- --osi-card-font-weight-medium: 500;
550
-
551
- // Enhance link visibility
552
- a:not([class]) {
553
- color: var(--osi-card-accent);
554
-
555
- &:hover {
556
- color: var(--osi-card-accent-hover);
557
- }
558
- }
559
- }
560
-
561
- // Print mode - always use light theme
562
- @media print {
563
- [data-theme],
564
- .osi-cards-container[data-theme] {
565
- --osi-card-background: #ffffff !important;
566
- --osi-card-foreground: #000000 !important;
567
- --osi-card-muted: #666666 !important;
568
- --osi-card-border: #cccccc !important;
569
- --osi-card-shadow: none !important;
570
- --osi-card-shadow-md: none !important;
571
- --osi-card-shadow-lg: none !important;
572
- }
573
- }
@@ -1,92 +0,0 @@
1
- // ============================================
2
- // TOKENS INDEX - Single Source of Truth
3
- // ============================================
4
- //
5
- // This file consolidates all design tokens for the OSI Cards library.
6
- // Import this file to access all tokens and mixins.
7
- //
8
- // Usage:
9
- // @use 'osi-cards-lib/styles/tokens' as tokens;
10
- //
11
- // :host {
12
- // @include tokens.osi-tokens('integration', true);
13
- // @include tokens.osi-theme-base('integration', true);
14
- // }
15
- //
16
- // ============================================
17
-
18
- @forward "master";
19
-
20
- // ============================================
21
- // ISOLATED FONT STACK
22
- // ============================================
23
- //
24
- // System font stack that doesn't rely on external fonts.
25
- // This ensures consistent typography without host app interference.
26
- //
27
-
28
- $osi-font-stack-system:
29
- -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif,
30
- "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
31
-
32
- $osi-font-stack-mono:
33
- ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
34
-
35
- // Helvetica-first stack for OSI Cards (matches existing)
36
- $osi-font-stack-primary:
37
- Helvetica,
38
- -apple-system,
39
- BlinkMacSystemFont,
40
- "Segoe UI",
41
- Roboto,
42
- Arial,
43
- sans-serif;
44
-
45
- /// Apply isolated font stack
46
- /// @param {Boolean} $important - Whether to use !important
47
- @mixin osi-font-isolation($important: false) {
48
- @if $important {
49
- font-family: $osi-font-stack-primary !important;
50
- -webkit-font-smoothing: antialiased !important;
51
- -moz-osx-font-smoothing: grayscale !important;
52
- text-rendering: optimizeLegibility !important;
53
- font-feature-settings: "kern" 1 !important;
54
- } @else {
55
- font-family: $osi-font-stack-primary;
56
- -webkit-font-smoothing: antialiased;
57
- -moz-osx-font-smoothing: grayscale;
58
- text-rendering: optimizeLegibility;
59
- font-feature-settings: "kern" 1;
60
- }
61
- }
62
-
63
- /// Apply isolated container styles
64
- /// Creates a new stacking context and prevents style leakage
65
- @mixin osi-container-isolation() {
66
- // Create new stacking context
67
- isolation: isolate;
68
-
69
- // Ensure box-sizing is correct
70
- box-sizing: border-box;
71
-
72
- // Apply font isolation
73
- @include osi-font-isolation(true);
74
-
75
- // Reset inherited styles that could leak from host
76
- font-size: var(--font-size-base, 13px);
77
- font-weight: var(--font-weight-normal, 400);
78
- line-height: 1.5;
79
- text-align: left;
80
- color: var(--foreground, #1c1c1f);
81
-
82
- // Preserve 3D transforms for tilt effects
83
- perspective: 1200px;
84
- transform-style: preserve-3d;
85
-
86
- // Apply to all children
87
- *,
88
- *::before,
89
- *::after {
90
- box-sizing: border-box;
91
- }
92
- }