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,333 +0,0 @@
1
- /**
2
- * OSI Cards Design Tokens
3
- * Single Source of Truth for all design tokens
4
- *
5
- * Usage:
6
- * @use 'osi-cards-tokens' as tokens;
7
- *
8
- * .my-component {
9
- * color: var(--osi-text-primary);
10
- * padding: var(--osi-spacing-md);
11
- * }
12
- */
13
-
14
- // ============================================================================
15
- // COLOR PALETTE
16
- // ============================================================================
17
-
18
- :root {
19
- // Primary Colors
20
- --osi-primary-50: #fef4f2;
21
- --osi-primary-100: #fee5e2;
22
- --osi-primary-200: #fdd0c8;
23
- --osi-primary-300: #fbb0a3;
24
- --osi-primary-400: #f78370;
25
- --osi-primary-500: #ec5a45;
26
- --osi-primary-600: #d93e27;
27
- --osi-primary-700: #b6311d;
28
- --osi-primary-800: #972c1c;
29
- --osi-primary-900: #7d2a1d;
30
-
31
- // Neutral Colors
32
- --osi-neutral-50: #f8fafc;
33
- --osi-neutral-100: #f1f5f9;
34
- --osi-neutral-200: #e2e8f0;
35
- --osi-neutral-300: #cbd5e1;
36
- --osi-neutral-400: #94a3b8;
37
- --osi-neutral-500: #64748b;
38
- --osi-neutral-600: #475569;
39
- --osi-neutral-700: #334155;
40
- --osi-neutral-800: #1e293b;
41
- --osi-neutral-900: #0f172a;
42
-
43
- // Semantic Colors
44
- --osi-success-50: #f0fdf4;
45
- --osi-success-500: #22c55e;
46
- --osi-success-700: #15803d;
47
-
48
- --osi-warning-50: #fffbeb;
49
- --osi-warning-500: #f59e0b;
50
- --osi-warning-700: #b45309;
51
-
52
- --osi-error-50: #fef2f2;
53
- --osi-error-500: #ef4444;
54
- --osi-error-700: #b91c1c;
55
-
56
- --osi-info-50: #eff6ff;
57
- --osi-info-500: #3b82f6;
58
- --osi-info-700: #1d4ed8;
59
- }
60
-
61
- // ============================================================================
62
- // TYPOGRAPHY
63
- // ============================================================================
64
-
65
- :root {
66
- // Font Families
67
- --osi-font-sans:
68
- -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
69
- --osi-font-mono: "SF Mono", Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
70
-
71
- // Font Sizes - COMPACT MODE (reduced by ~10-15%)
72
- --osi-text-xs: 0.625rem; // 10px (was 12px)
73
- --osi-text-sm: 0.8125rem; // 13px (was 14px)
74
- --osi-text-base: 0.9375rem; // 15px (was 16px)
75
- --osi-text-lg: 1.0625rem; // 17px (was 18px)
76
- --osi-text-xl: 1.1875rem; // 19px (was 20px)
77
- --osi-text-2xl: 1.375rem; // 22px (was 24px)
78
- --osi-text-3xl: 1.75rem; // 28px (was 30px)
79
- --osi-text-4xl: 2.125rem; // 34px (was 36px)
80
-
81
- // Line Heights
82
- --osi-leading-tight: 1.25;
83
- --osi-leading-snug: 1.375;
84
- --osi-leading-normal: 1.5;
85
- --osi-leading-relaxed: 1.625;
86
-
87
- // Font Weights
88
- --osi-font-normal: 400;
89
- --osi-font-medium: 500;
90
- --osi-font-semibold: 600;
91
- --osi-font-bold: 700;
92
- }
93
-
94
- // ============================================================================
95
- // SPACING
96
- // ============================================================================
97
-
98
- :root {
99
- --osi-spacing-0: 0;
100
- --osi-spacing-px: 1px;
101
- --osi-spacing-0_5: 0.125rem; // 2px
102
- --osi-spacing-1: 0.25rem; // 4px
103
- --osi-spacing-1_5: 0.375rem; // 6px
104
- --osi-spacing-2: 0.5rem; // 8px
105
- --osi-spacing-2_5: 0.625rem; // 10px
106
- --osi-spacing-3: 0.75rem; // 12px
107
- --osi-spacing-3_5: 0.875rem; // 14px
108
- --osi-spacing-4: 1rem; // 16px
109
- --osi-spacing-5: 1.25rem; // 20px
110
- --osi-spacing-6: 1.5rem; // 24px
111
- --osi-spacing-7: 1.75rem; // 28px
112
- --osi-spacing-8: 2rem; // 32px
113
- --osi-spacing-9: 2.25rem; // 36px
114
- --osi-spacing-10: 2.5rem; // 40px
115
- --osi-spacing-12: 3rem; // 48px
116
- --osi-spacing-14: 3.5rem; // 56px
117
- --osi-spacing-16: 4rem; // 64px
118
- --osi-spacing-20: 5rem; // 80px
119
- --osi-spacing-24: 6rem; // 96px
120
-
121
- // Semantic spacing aliases (DEFAULT)
122
- --osi-spacing-xs: var(--osi-spacing-1);
123
- --osi-spacing-sm: var(--osi-spacing-2);
124
- --osi-spacing-md: var(--osi-spacing-4);
125
- --osi-spacing-lg: var(--osi-spacing-6);
126
- --osi-spacing-xl: var(--osi-spacing-8);
127
- --osi-spacing-2xl: var(--osi-spacing-12);
128
-
129
- // COMPACT MODE - Reduced spacing (25-30% smaller)
130
- --osi-spacing-compact-xs: var(--osi-spacing-0_5); // 2px (was 4px)
131
- --osi-spacing-compact-sm: var(--osi-spacing-1_5); // 6px (was 8px)
132
- --osi-spacing-compact-md: var(--osi-spacing-3); // 12px (was 16px)
133
- --osi-spacing-compact-lg: var(--osi-spacing-4); // 16px (was 24px)
134
- --osi-spacing-compact-xl: var(--osi-spacing-6); // 24px (was 32px)
135
- --osi-spacing-compact-2xl: var(--osi-spacing-8); // 32px (was 48px)
136
- }
137
-
138
- // ============================================================================
139
- // BORDERS & RADIUS
140
- // ============================================================================
141
-
142
- :root {
143
- // Border Radius
144
- --osi-radius-none: 0;
145
- --osi-radius-sm: 0.125rem; // 2px
146
- --osi-radius-default: 0.25rem; // 4px
147
- --osi-radius-md: 0.375rem; // 6px
148
- --osi-radius-lg: 0.5rem; // 8px
149
- --osi-radius-xl: 0.75rem; // 12px
150
- --osi-radius-2xl: 1rem; // 16px
151
- --osi-radius-3xl: 1.5rem; // 24px
152
- --osi-radius-full: 9999px;
153
-
154
- // Border Widths
155
- --osi-border-0: 0;
156
- --osi-border-1: 1px;
157
- --osi-border-2: 2px;
158
- --osi-border-4: 4px;
159
- --osi-border-8: 8px;
160
- }
161
-
162
- // ============================================================================
163
- // SHADOWS
164
- // ============================================================================
165
-
166
- :root {
167
- --osi-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
168
- --osi-shadow-default: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
169
- --osi-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
170
- --osi-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
171
- --osi-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
172
- --osi-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
173
- --osi-shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
174
- --osi-shadow-none: 0 0 #0000;
175
- }
176
-
177
- // ============================================================================
178
- // ANIMATIONS
179
- // ============================================================================
180
-
181
- :root {
182
- // Durations
183
- --osi-duration-75: 75ms;
184
- --osi-duration-100: 100ms;
185
- --osi-duration-150: 150ms;
186
- --osi-duration-200: 200ms;
187
- --osi-duration-300: 300ms;
188
- --osi-duration-500: 500ms;
189
- --osi-duration-700: 700ms;
190
- --osi-duration-1000: 1000ms;
191
-
192
- // Timing Functions
193
- --osi-ease-linear: linear;
194
- --osi-ease-in: cubic-bezier(0.4, 0, 1, 1);
195
- --osi-ease-out: cubic-bezier(0, 0, 0.2, 1);
196
- --osi-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
197
- --osi-ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
198
- }
199
-
200
- // ============================================================================
201
- // Z-INDEX
202
- // ============================================================================
203
-
204
- :root {
205
- --osi-z-0: 0;
206
- --osi-z-10: 10;
207
- --osi-z-20: 20;
208
- --osi-z-30: 30;
209
- --osi-z-40: 40;
210
- --osi-z-50: 50;
211
- --osi-z-auto: auto;
212
-
213
- // Semantic z-index
214
- --osi-z-dropdown: 1000;
215
- --osi-z-sticky: 1020;
216
- --osi-z-fixed: 1030;
217
- --osi-z-modal-backdrop: 1040;
218
- --osi-z-modal: 1050;
219
- --osi-z-popover: 1060;
220
- --osi-z-tooltip: 1070;
221
- }
222
-
223
- // ============================================================================
224
- // COMPONENT TOKENS
225
- // ============================================================================
226
-
227
- :root {
228
- // Card tokens
229
- --osi-card-bg: white;
230
- --osi-card-border: var(--osi-neutral-200);
231
- --osi-card-radius: var(--osi-radius-xl);
232
- --osi-card-shadow: var(--osi-shadow-md);
233
- --osi-card-padding: var(--osi-spacing-4);
234
-
235
- // Section tokens
236
- --osi-section-gap: var(--osi-spacing-3);
237
- --osi-section-header-color: var(--osi-neutral-800);
238
- --osi-section-content-color: var(--osi-neutral-600);
239
-
240
- // Field tokens
241
- --osi-field-label-color: var(--osi-neutral-500);
242
- --osi-field-value-color: var(--osi-neutral-900);
243
- --osi-field-gap: var(--osi-spacing-1);
244
-
245
- // Grid tokens
246
- --osi-grid-columns: 12;
247
- --osi-grid-gap: var(--osi-spacing-4);
248
- --osi-grid-min-column: 200px;
249
-
250
- // Button tokens
251
- --osi-btn-padding-x: var(--osi-spacing-4);
252
- --osi-btn-padding-y: var(--osi-spacing-2);
253
- --osi-btn-radius: var(--osi-radius-md);
254
- --osi-btn-font-size: var(--osi-text-sm);
255
- --osi-btn-font-weight: var(--osi-font-medium);
256
- }
257
-
258
- // ============================================================================
259
- // THEME-SPECIFIC TOKENS (Light)
260
- // ============================================================================
261
-
262
- :root,
263
- [data-theme="light"] {
264
- --osi-bg-primary: white;
265
- --osi-bg-secondary: var(--osi-neutral-50);
266
- --osi-bg-tertiary: var(--osi-neutral-100);
267
-
268
- --osi-text-primary: var(--osi-neutral-900);
269
- --osi-text-secondary: var(--osi-neutral-600);
270
- --osi-text-tertiary: var(--osi-neutral-400);
271
- --osi-text-inverse: white;
272
-
273
- --osi-border-default: var(--osi-neutral-200);
274
- --osi-border-strong: var(--osi-neutral-300);
275
- }
276
-
277
- // ============================================================================
278
- // THEME-SPECIFIC TOKENS (Dark)
279
- // ============================================================================
280
-
281
- [data-theme="dark"] {
282
- --osi-bg-primary: var(--osi-neutral-900);
283
- --osi-bg-secondary: var(--osi-neutral-800);
284
- --osi-bg-tertiary: var(--osi-neutral-700);
285
-
286
- --osi-text-primary: var(--osi-neutral-50);
287
- --osi-text-secondary: var(--osi-neutral-300);
288
- --osi-text-tertiary: var(--osi-neutral-500);
289
- --osi-text-inverse: var(--osi-neutral-900);
290
-
291
- --osi-border-default: var(--osi-neutral-700);
292
- --osi-border-strong: var(--osi-neutral-600);
293
-
294
- // Override card tokens for dark
295
- --osi-card-bg: var(--osi-neutral-800);
296
- --osi-card-border: var(--osi-neutral-700);
297
-
298
- // Override section tokens
299
- --osi-section-header-color: var(--osi-neutral-100);
300
- --osi-section-content-color: var(--osi-neutral-300);
301
-
302
- // Override field tokens
303
- --osi-field-label-color: var(--osi-neutral-400);
304
- --osi-field-value-color: var(--osi-neutral-100);
305
- }
306
-
307
- // ============================================================================
308
- // PRINT STYLES
309
- // ============================================================================
310
-
311
- @media print {
312
- :root {
313
- --osi-card-shadow: none;
314
- --osi-card-border: var(--osi-neutral-300);
315
- }
316
- }
317
-
318
- // ============================================================================
319
- // REDUCED MOTION
320
- // ============================================================================
321
-
322
- @media (prefers-reduced-motion: reduce) {
323
- :root {
324
- --osi-duration-75: 0ms;
325
- --osi-duration-100: 0ms;
326
- --osi-duration-150: 0ms;
327
- --osi-duration-200: 0ms;
328
- --osi-duration-300: 0ms;
329
- --osi-duration-500: 0ms;
330
- --osi-duration-700: 0ms;
331
- --osi-duration-1000: 0ms;
332
- }
333
- }
@@ -1,81 +0,0 @@
1
- /* ===================================================================
2
- OSI CARDS STYLES - Scoped Integration Entry Point
3
-
4
- Wraps all styles in .osi-cards-container to prevent CSS leakage.
5
- Uses same CSS variables as demo app, just scoped to container.
6
-
7
- CSS Layer Strategy:
8
- - All library styles are in the 'osi-cards' layer
9
- - Consumer styles outside this layer have higher priority
10
- - Easy to override: just write your CSS normally, no !important needed
11
-
12
- Usage:
13
- 1. Import this file in your styles or angular.json
14
- 2. Wrap your OSI Cards components in <div class="osi-cards-container">
15
-
16
- Example:
17
- <div class="osi-cards-container" data-theme="day">
18
- <app-ai-card-renderer [cardConfig]="card"></app-ai-card-renderer>
19
- </div>
20
-
21
- Overriding styles:
22
- // Your styles (outside @layer) automatically override library styles
23
- .osi-cards-container .ai-card-title {
24
- font-size: 2rem; // This will override library default
25
- }
26
- =================================================================== */
27
-
28
- /* Declare the layer first for proper cascade ordering */
29
- @layer osi-cards;
30
-
31
- /* All library styles go in the osi-cards layer */
32
- @layer osi-cards {
33
- .osi-cards-container {
34
- // Container base styles - transparent with 8px padding
35
- display: flex;
36
- justify-content: center;
37
- align-items: flex-start;
38
- padding: 8px;
39
- background: transparent !important;
40
- background-color: transparent !important;
41
-
42
- // Preserve 3D transforms for tilt effects
43
- perspective: 1200px;
44
- transform-style: preserve-3d;
45
-
46
- // Responsive: reduce padding on mobile
47
- @media (max-width: 480px) {
48
- padding: 4px;
49
- }
50
-
51
- // Bootstrap isolation - must come first to reset external Bootstrap variables
52
- @import "core/bootstrap-reset";
53
-
54
- // Scoped variables (applies tokens to & selector)
55
- @import "core/variables-unified";
56
-
57
- // Core styles (scoped versions where needed)
58
- @import "core/mixins";
59
- @import "core/surface-layers";
60
- @import "core/global-unified";
61
- @import "core/utilities";
62
- @import "core/animations";
63
-
64
- // Layout styles
65
- @import "layout/tilt";
66
- @import "layout/masonry";
67
- @import "layout/feature-grid";
68
-
69
- // Streaming effects (must come after animations)
70
- @import "components/streaming-effects";
71
-
72
- // Hero card and feature card styles
73
- @import "components/hero-card";
74
-
75
- // Component styles (SAME files as demo app)
76
- @import "components/cards/ai-card";
77
-
78
- // All section styles (consolidated)
79
- @import "components/sections/sections-all";
80
- }
81
- }
@@ -1,26 +0,0 @@
1
- /* ===================================================================
2
- OSI CARDS STYLES - Demo App Entry Point
3
-
4
- For use in the demo/documentation app. Applies styles to :root.
5
- Imports shared component bundle after setting up variables.
6
-
7
- CSS Layer Strategy:
8
- - All library styles are in the 'osi-cards' layer
9
- - Consumer styles outside this layer have higher priority
10
-
11
- Note: Using @import inside @layer as @use cannot be used in @layer blocks.
12
- The Sass @import deprecation warnings can be safely ignored until
13
- Dart Sass 3.0.0 when migration will be required.
14
- =================================================================== */
15
-
16
- /* Declare the layer first for proper cascade ordering */
17
- @layer osi-cards;
18
-
19
- /* All library styles go in the osi-cards layer */
20
- @layer osi-cards {
21
- // Core variables (applies to :root)
22
- @import "core/variables";
23
-
24
- // Shared component styles
25
- @import "components";
26
- }
@@ -1,245 +0,0 @@
1
- // ============================================
2
- // AI CARD COMPONENT BUNDLE
3
- // ============================================
4
- //
5
- // Self-contained bundle for the AI Card Renderer component.
6
- // Includes all styles needed to render AI cards with any section type.
7
- //
8
- // Usage in Shadow DOM component:
9
- // @use 'osi-cards-lib/styles/bundles/ai-card';
10
- //
11
- // ============================================
12
-
13
- // 1. Master tokens (single source of truth)
14
- @use "../tokens/master" as *;
15
-
16
- // 2. Shadow DOM reset (full isolation)
17
- @use "../reset/shadow-reset";
18
-
19
- // 3. Generate CSS custom properties
20
- // Use "demo" mode to match demo app appearance exactly
21
- :host {
22
- @include osi-theme-base("demo", true);
23
- @include osi-tokens("demo", true);
24
-
25
- // Block display - let content determine height
26
- display: block;
27
- width: 100%;
28
- min-height: 0; // Allow flex children to shrink
29
- }
30
-
31
- // Primary: Use :host([data-theme]) for explicit Shadow DOM scope (most reliable)
32
- // Fallback: :host-context for cases where parent sets data-theme
33
- :host([data-theme="night"]) {
34
- @include osi-theme-dark("demo", true);
35
- }
36
-
37
- :host([data-theme="day"]) {
38
- @include osi-theme-light("demo", true);
39
- }
40
-
41
- // Fallback: Support parent context (for backward compatibility)
42
- // Note: Safari may have inconsistent :host-context behavior, so :host([data-theme]) is preferred
43
- :host-context([data-theme="night"]) {
44
- @include osi-theme-dark("demo", true);
45
- }
46
-
47
- :host-context([data-theme="day"]) {
48
- @include osi-theme-light("demo", true);
49
- }
50
-
51
- // 4. Core styles required for AI card
52
- @import "../core/mixins";
53
- @import "../core/surface-layers";
54
- @import "../core/utilities";
55
-
56
- // 4a. Animations (keyframes + utility classes)
57
- @import "../core/animations";
58
-
59
- // 5. Layout
60
- @import "../layout/tilt";
61
- @import "../layout/masonry";
62
- @import "../layout/feature-grid";
63
-
64
- // 5a. Hero card styles
65
- @import "../components/hero-card";
66
-
67
- // 5b. Streaming effects
68
- @import "../components/streaming-effects";
69
-
70
- // 5c. Component styles for ViewEncapsulation.None components
71
- // (masonry-grid, section-renderer, card-actions, card-streaming-indicator, etc.)
72
- @import "../components/_component-styles";
73
-
74
- // 6. AI Card specific styles
75
- @import "../components/cards/ai-card";
76
- @import "../components/_empty-state";
77
-
78
- // 6a. Utility classes (w-full, h-full, flex-1, min-h-0, etc.)
79
- @import "../components/sections/_utility-classes";
80
-
81
- // 7. Section Styles (consolidated)
82
- // Design system + sections base + section shell + all section types
83
- @import "../components/sections/sections-all";
84
-
85
- // 7a. Additional design tokens for Shadow DOM
86
- // Convert :root selectors to :host for Shadow DOM compatibility
87
- :host {
88
- // Spacing scale
89
- --spacing-none: 0;
90
- --spacing-xs: 4px;
91
- --spacing-sm: 8px;
92
- --spacing-md: 12px;
93
- --spacing-base: 16px;
94
- --spacing-lg: 20px;
95
- --spacing-xl: 28px;
96
- --spacing-2xl: 40px;
97
- --spacing-3xl: 56px;
98
-
99
- // Compact mode variations
100
- --spacing-compact-xs: 3px;
101
- --spacing-compact-sm: 6px;
102
- --spacing-compact-md: 9px;
103
- --spacing-compact-base: 12px;
104
- --spacing-compact-lg: 16px;
105
-
106
- // Section-specific sizing
107
- --section-card-min-height: 110px;
108
- --section-card-compact-height: 90px;
109
- --section-header-gap: var(--spacing-md);
110
- --section-content-gap: var(--spacing-sm);
111
- --section-card-gap: var(--spacing-md);
112
- --section-card-padding: var(--spacing-md);
113
-
114
- // Typography
115
- --text-md: 0.875rem;
116
- --font-light: 300;
117
- --font-normal: 400;
118
- --font-medium: 500;
119
- --font-semibold: 600;
120
- --font-bold: 700;
121
- --font-extrabold: 800;
122
- --leading-tight: 1.2;
123
- --leading-snug: 1.3;
124
- --leading-normal: 1.4;
125
- --leading-relaxed: 1.5;
126
- --leading-loose: 1.75;
127
- }
128
-
129
- // 8. Component-specific optimizations (from demo app)
130
- // Register CSS custom properties for browser-native interpolation
131
- @supports (background: paint(id)) {
132
- @property --tilt-x {
133
- syntax: "<angle>";
134
- initial-value: 0deg;
135
- inherits: false;
136
- }
137
- @property --tilt-y {
138
- syntax: "<angle>";
139
- initial-value: 0deg;
140
- inherits: false;
141
- }
142
- @property --glow-blur {
143
- syntax: "<length>";
144
- initial-value: 8px;
145
- inherits: false;
146
- }
147
- @property --glow-color {
148
- syntax: "<color>";
149
- initial-value: rgba(255, 121, 0, 0.225);
150
- inherits: false;
151
- }
152
- @property --reflection-opacity {
153
- syntax: "<number>";
154
- initial-value: 0;
155
- inherits: false;
156
- }
157
- }
158
-
159
- // Card container wrapper - CSS containment for performance
160
- .card-container-wrapper {
161
- contain: layout style;
162
- }
163
-
164
- // Note: Tilt and glow container styles are already included from _tilt.scss import above
165
- // The tilt effect should work automatically via the tilt-container class
166
-
167
- // Card surface styles - matching demo app exactly
168
- // These ensure the card has proper background and border in Shadow DOM
169
- // Theme-aware: uses CSS variables but with fallbacks for night theme
170
- .ai-card-surface {
171
- // Use theme variables, but ensure they're applied with proper specificity
172
- // The theme mixins set these, but we need to ensure they're not overridden
173
- border: var(--osi-card-border, 1px solid rgba(255, 255, 255, 0.08)) !important;
174
- background: var(--osi-card-background, rgba(20, 20, 20, 0.6)) !important;
175
- backdrop-filter: var(--osi-card-backdrop-filter, blur(12px)) !important;
176
- -webkit-backdrop-filter: var(--osi-card-backdrop-filter, blur(12px)) !important;
177
- box-shadow: var(--osi-card-shadow, 0 4px 24px -1px rgba(0, 0, 0, 0.2)) !important;
178
- transition: var(--osi-card-transition-border, all 0.4s cubic-bezier(0.4, 0, 0.2, 1)) !important;
179
- }
180
-
181
- .ai-card-surface:hover {
182
- border: var(--osi-card-border-hover, 1px solid rgba(255, 121, 0, 0.5)) !important;
183
- background: var(--osi-card-background-hover, rgba(30, 30, 30, 0.8)) !important;
184
- box-shadow: var(--osi-card-shadow-hover, 0 20px 40px -5px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 121, 0, 0.2)) !important;
185
- }
186
-
187
- // Section highlight animation for URL fragment scrolling
188
- .section-highlight {
189
- animation: section-pulse 2s ease-out;
190
- position: relative;
191
- }
192
-
193
- .section-highlight::after {
194
- content: "";
195
- position: absolute;
196
- inset: -4px;
197
- border: 2px solid rgba(255, 121, 0, 0.6);
198
- border-radius: 14px;
199
- pointer-events: none;
200
- animation: section-border-fade 2s ease-out forwards;
201
- }
202
-
203
- @keyframes section-pulse {
204
- 0%,
205
- 100% {
206
- transform: scale(1);
207
- }
208
- 50% {
209
- transform: scale(1.01);
210
- }
211
- }
212
-
213
- @keyframes section-border-fade {
214
- 0% {
215
- opacity: 1;
216
- box-shadow: 0 0 20px rgba(255, 121, 0, 0.4);
217
- }
218
- 100% {
219
- opacity: 0;
220
- box-shadow: 0 0 0 rgba(255, 121, 0, 0);
221
- }
222
- }
223
-
224
- // 10. Action buttons and footer (enforced styles for Shadow DOM)
225
- @import "../components/card-actions";
226
- @import "../components/card-footer";
227
-
228
- // 11. Accessibility support
229
- @media (prefers-reduced-motion: reduce) {
230
- :host {
231
- @include osi-tokens-reduced-motion();
232
- }
233
- }
234
-
235
- @media (prefers-contrast: high) {
236
- :host {
237
- @include osi-tokens-high-contrast();
238
- }
239
- }
240
-
241
- @media (forced-colors: active) {
242
- :host {
243
- @include osi-tokens-forced-colors();
244
- }
245
- }