osi-cards-lib 1.5.32 → 1.5.34

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 (87) hide show
  1. package/fesm2022/osi-cards-lib.mjs +31889 -0
  2. package/fesm2022/osi-cards-lib.mjs.map +1 -0
  3. package/index.d.ts +11528 -0
  4. package/package.json +25 -13
  5. package/scripts/setup-angular-styles.js +169 -0
  6. package/styles/_components.scss +38 -0
  7. package/styles/_index.scss +25 -0
  8. package/styles/_osi-cards-mixins.scss +459 -0
  9. package/styles/_osi-cards-tokens.scss +333 -0
  10. package/styles/_styles-scoped.scss +81 -0
  11. package/styles/_styles.scss +26 -0
  12. package/styles/bundles/_ai-card.scss +245 -0
  13. package/styles/bundles/_all.scss +68 -0
  14. package/styles/bundles/_base.scss +60 -0
  15. package/styles/bundles/_card-skeleton.scss +290 -0
  16. package/styles/bundles/_index.scss +25 -0
  17. package/styles/bundles/_sections.scss +48 -0
  18. package/styles/bundles/_tokens-only.scss +139 -0
  19. package/styles/components/_ai-card-renderer.scss +104 -0
  20. package/styles/components/_badges.scss +317 -0
  21. package/styles/components/_card-actions.scss +169 -0
  22. package/styles/components/_card-footer.scss +47 -0
  23. package/styles/components/_component-styles.scss +205 -0
  24. package/styles/components/_empty-state.scss +630 -0
  25. package/styles/components/_hero-card.scss +422 -0
  26. package/styles/components/_image-fallback.scss +28 -0
  27. package/styles/components/_streaming-effects.scss +518 -0
  28. package/styles/components/cards/_ai-card.scss +718 -0
  29. package/styles/components/sections/_all-sections.generated.scss +41 -0
  30. package/styles/components/sections/_all-sections.scss +1086 -0
  31. package/styles/components/sections/_balanced-compact-system.scss +186 -0
  32. package/styles/components/sections/_compact-mixins.scss +180 -0
  33. package/styles/components/sections/_component-mixins.scss +454 -0
  34. package/styles/components/sections/_design-system.scss +477 -0
  35. package/styles/components/sections/_design-tokens.scss +308 -0
  36. package/styles/components/sections/_enhanced-design-variables.scss +147 -0
  37. package/styles/components/sections/_master-compact-system.scss +302 -0
  38. package/styles/components/sections/_master-dense-system.scss +239 -0
  39. package/styles/components/sections/_minimalistic-design.scss +268 -0
  40. package/styles/components/sections/_modern-effects.scss +392 -0
  41. package/styles/components/sections/_modern-sections.scss +351 -0
  42. package/styles/components/sections/_perfect-system.scss +204 -0
  43. package/styles/components/sections/_section-animations.scss +331 -0
  44. package/styles/components/sections/_section-shell.scss +337 -0
  45. package/styles/components/sections/_section-types.generated.scss +30 -0
  46. package/styles/components/sections/_sections-all.scss +26 -0
  47. package/styles/components/sections/_sections-base.scss +334 -0
  48. package/styles/components/sections/_typography-system.scss +327 -0
  49. package/styles/components/sections/_ultra-compact-tokens.scss +375 -0
  50. package/styles/components/sections/_unified-section-style.scss +157 -0
  51. package/styles/components/sections/_utility-classes.scss +567 -0
  52. package/styles/components/sections/_visual-effects-library.scss +374 -0
  53. package/styles/core/_animations.scss +1498 -0
  54. package/styles/core/_bootstrap-reset.scss +445 -0
  55. package/styles/core/_color-helpers.scss +46 -0
  56. package/styles/core/_global-unified.scss +118 -0
  57. package/styles/core/_global.scss +73 -0
  58. package/styles/core/_mixins.scss +491 -0
  59. package/styles/core/_surface-layers.scss +76 -0
  60. package/styles/core/_utilities.scss +326 -0
  61. package/styles/core/_variables-unified.scss +57 -0
  62. package/styles/core/_variables.scss +36 -0
  63. package/styles/core/variables/_colors-source.scss +34 -0
  64. package/styles/core/variables/_colors-unified.scss +26 -0
  65. package/styles/core/variables/_colors.scss +21 -0
  66. package/styles/critical.scss +353 -0
  67. package/styles/design-system/_compact-theme.scss +159 -0
  68. package/styles/design-system/_section-base.scss +426 -0
  69. package/styles/design-system/_tokens.scss +237 -0
  70. package/styles/design-system/_unified-sections.scss +215 -0
  71. package/styles/layout/_feature-grid.scss +322 -0
  72. package/styles/layout/_masonry.scss +734 -0
  73. package/styles/layout/_tilt.scss +244 -0
  74. package/styles/micro-interactions.scss +583 -0
  75. package/styles/mixins/_section-mixins.scss +280 -0
  76. package/styles/non-critical.scss +643 -0
  77. package/styles/reset/_framework-reset.scss +457 -0
  78. package/styles/reset/_index.scss +14 -0
  79. package/styles/reset/_shadow-reset.scss +383 -0
  80. package/styles/responsive.scss +326 -0
  81. package/styles/themes.scss +573 -0
  82. package/styles/tokens/_index.scss +92 -0
  83. package/styles/tokens/_master.scss +1404 -0
  84. package/styles/tokens/_section-tokens.generated.scss +140 -0
  85. package/postcss.config.js +0 -81
  86. package/section-registry.json +0 -3864
  87. package/section-registry.schema.json +0 -264
@@ -0,0 +1,104 @@
1
+ /* Card renderer container and async states */
2
+
3
+ .ai-card-container {
4
+ position: relative;
5
+ max-width: 920px;
6
+ margin: 0 auto;
7
+ padding: 24px;
8
+ background: linear-gradient(180deg, var(--card-background) 0%, rgba(12, 12, 12, 0) 100%);
9
+ border-radius: 24px;
10
+ box-shadow:
11
+ inset 0 1px 3px rgba(255, 121, 0, 0.08),
12
+ 0 4px 20px rgba(0, 0, 0, 0.15);
13
+
14
+ /* CSS Isolation - Prevent Bootstrap styles from affecting card container */
15
+ isolation: isolate;
16
+ }
17
+
18
+ /* Card preview body improvements */
19
+ .preview-body {
20
+ display: flex;
21
+ flex-direction: column;
22
+ gap: var(--spacing-6xl);
23
+ padding: var(--spacing-6xl) 0;
24
+ }
25
+
26
+ /* Section spacing improvements - using CSS variables */
27
+ .ai-section + .ai-section {
28
+ margin-top: 0; /* Spacing controlled by margin-bottom on .ai-section */
29
+ }
30
+
31
+ /* Card grid improvements - using centralized gaps */
32
+ .contact-collection,
33
+ /* Remove forced large gaps - sections now control their own spacing */
34
+ .info-grid,
35
+ .analytics-metrics,
36
+ .list-stack,
37
+ .network-collection {
38
+ gap: var(--spacing-4xl) !important;
39
+ }
40
+
41
+ /* Overview grid uses compact spacing defined in _overview.scss */
42
+
43
+ /* Global card styling enforced via variables - remove !important overrides */
44
+ /* All cards now inherit from centralized --card-* variables */
45
+
46
+ .ai-card-loading {
47
+ position: absolute;
48
+ top: 0;
49
+ left: 0;
50
+ width: 100%;
51
+ height: 100%;
52
+ display: flex;
53
+ justify-content: center;
54
+ align-items: center;
55
+ background-color: rgba(0, 0, 0, 0.2);
56
+ z-index: 10;
57
+ border-radius: 24px;
58
+ backdrop-filter: blur(4px);
59
+ }
60
+
61
+ .ai-card-error {
62
+ padding: 18px 20px;
63
+ background: linear-gradient(135deg, rgba(239, 68, 68, 0.15) 0%, rgba(239, 68, 68, 0.05) 100%);
64
+ color: rgba(239, 68, 68, 0.95);
65
+ border-radius: 14px;
66
+ margin-bottom: 20px;
67
+ border: 1px solid rgba(239, 68, 68, 0.35);
68
+ border-left: 4px solid rgba(239, 68, 68, 0.7);
69
+ font-weight: 600;
70
+ font-size: 0.9rem;
71
+ line-height: 1.5;
72
+ box-shadow: 0 6px 16px rgba(239, 68, 68, 0.12);
73
+ transition: all 0.25s ease;
74
+ }
75
+
76
+ .ai-card-error:hover {
77
+ background: linear-gradient(135deg, rgba(239, 68, 68, 0.22) 0%, rgba(239, 68, 68, 0.08) 100%);
78
+ border-color: rgba(239, 68, 68, 0.5);
79
+ transform: translateX(4px);
80
+ }
81
+
82
+ /* Responsive improvements */
83
+ @media (max-width: 768px) {
84
+ .ai-card-container {
85
+ padding: 16px;
86
+ border-radius: 20px;
87
+ }
88
+
89
+ .preview-body {
90
+ gap: 16px;
91
+ padding: 16px 0;
92
+ }
93
+
94
+ .ai-section + .ai-section {
95
+ margin-top: 0; /* Spacing controlled by margin-bottom */
96
+ }
97
+
98
+ .contact-card,
99
+ .info-card,
100
+ .metric-card,
101
+ .list-card {
102
+ padding: 14px 16px !important;
103
+ }
104
+ }
@@ -0,0 +1,317 @@
1
+ /**
2
+ * Unified Badge Component System
3
+ * ============================================================================
4
+ * Standardized badge styling across all sections and card types.
5
+ * Replaces multiple inconsistent badge patterns with unified design.
6
+ *
7
+ * Design Spec:
8
+ * - Height: ~20-22px (auto with padding)
9
+ * - Padding: 4px 8px (vertical horizontal)
10
+ * - Border radius: 4px (--radius-sm)
11
+ * - Font size: 10px (0.625rem)
12
+ * - Font weight: 600 (semibold)
13
+ * - Text transform: uppercase
14
+ * - Letter spacing: 0.05em
15
+ */
16
+
17
+ /* ===== BASE BADGE COMPONENT ===== */
18
+ .badge {
19
+ display: inline-flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ gap: var(--spacing-xs);
23
+ padding: 4px 8px;
24
+ border-radius: var(--radius-sm);
25
+ font-size: 0.625rem; /* 10px */
26
+ font-weight: 600;
27
+ text-transform: uppercase;
28
+ letter-spacing: 0.05em;
29
+ line-height: 1.2;
30
+ white-space: nowrap;
31
+ transition: var(--hover-transition);
32
+ cursor: default;
33
+ user-select: none;
34
+
35
+ /* Default variant (primary/orange) */
36
+ background: var(--badge-bg-primary);
37
+ border: 1px solid var(--color-orange-border);
38
+ color: var(--color-orange-solid);
39
+
40
+ /* Icon inside badge */
41
+ lucide-icon,
42
+ svg {
43
+ width: 12px;
44
+ height: 12px;
45
+ flex-shrink: 0;
46
+ }
47
+ }
48
+
49
+ /* ===== BADGE VARIANTS ===== */
50
+
51
+ /* Success - Green (completed, active, success states) */
52
+ .badge--success {
53
+ background: var(--badge-bg-success);
54
+ border-color: var(--color-success-border);
55
+ color: var(--color-success-solid);
56
+
57
+ lucide-icon,
58
+ svg {
59
+ color: var(--color-success-solid);
60
+ }
61
+ }
62
+
63
+ /* Warning - Amber/Yellow (pending, in-progress, warning states) */
64
+ .badge--warning {
65
+ background: var(--badge-bg-warning);
66
+ border-color: var(--color-warning-border);
67
+ color: var(--color-warning-solid);
68
+
69
+ lucide-icon,
70
+ svg {
71
+ color: var(--color-warning-solid);
72
+ }
73
+ }
74
+
75
+ /* Error - Red (failed, urgent, error states) */
76
+ .badge--error {
77
+ background: var(--badge-bg-error);
78
+ border-color: var(--color-error-border);
79
+ color: var(--color-error-solid);
80
+
81
+ lucide-icon,
82
+ svg {
83
+ color: var(--color-error-solid);
84
+ }
85
+ }
86
+
87
+ /* Info - Blue (information, notes, details) */
88
+ .badge--info {
89
+ background: var(--badge-bg-info);
90
+ border-color: var(--color-info-border);
91
+ color: var(--color-info-solid);
92
+
93
+ lucide-icon,
94
+ svg {
95
+ color: var(--color-info-solid);
96
+ }
97
+ }
98
+
99
+ /* Primary - Orange (default, highlighted items) */
100
+ .badge--primary {
101
+ background: var(--badge-bg-primary);
102
+ border-color: var(--color-orange-border);
103
+ color: var(--color-orange-solid);
104
+
105
+ lucide-icon,
106
+ svg {
107
+ color: var(--color-orange-solid);
108
+ }
109
+ }
110
+
111
+ /* Neutral - Gray (inactive, disabled, neutral states) */
112
+ .badge--neutral {
113
+ background: var(--badge-bg-neutral);
114
+ border-color: var(--color-neutral-border);
115
+ color: var(--color-neutral-solid);
116
+
117
+ lucide-icon,
118
+ svg {
119
+ color: var(--color-neutral-solid);
120
+ }
121
+ }
122
+
123
+ /* ===== BADGE SIZE VARIANTS ===== */
124
+
125
+ /* Small badge (more compact) */
126
+ .badge--sm {
127
+ padding: 2px 6px;
128
+ font-size: 0.5625rem; /* 9px */
129
+
130
+ lucide-icon,
131
+ svg {
132
+ width: 10px;
133
+ height: 10px;
134
+ }
135
+ }
136
+
137
+ /* Large badge (more prominent) */
138
+ .badge--lg {
139
+ padding: 6px 10px;
140
+ font-size: 0.6875rem; /* 11px */
141
+
142
+ lucide-icon,
143
+ svg {
144
+ width: 14px;
145
+ height: 14px;
146
+ }
147
+ }
148
+
149
+ /* ===== BADGE STYLE MODIFIERS ===== */
150
+
151
+ /* Solid badge (filled background, no border) */
152
+ .badge--solid {
153
+ border: none;
154
+ font-weight: 700;
155
+
156
+ &.badge--success {
157
+ background: var(--color-success-solid);
158
+ color: var(--color-white);
159
+ }
160
+
161
+ &.badge--warning {
162
+ background: var(--color-warning-solid);
163
+ color: var(--color-gray-900);
164
+ }
165
+
166
+ &.badge--error {
167
+ background: var(--color-error-solid);
168
+ color: var(--color-white);
169
+ }
170
+
171
+ &.badge--info {
172
+ background: var(--color-info-solid);
173
+ color: var(--color-white);
174
+ }
175
+
176
+ &.badge--primary {
177
+ background: var(--color-orange-solid);
178
+ color: var(--color-white);
179
+ }
180
+
181
+ &.badge--neutral {
182
+ background: var(--color-neutral-solid);
183
+ color: var(--color-white);
184
+ }
185
+ }
186
+
187
+ /* Outline badge (no background, border only) */
188
+ .badge--outline {
189
+ background: transparent;
190
+ border-width: 1px;
191
+
192
+ &.badge--success {
193
+ border-color: var(--color-success-border);
194
+ color: var(--color-success-solid);
195
+ }
196
+
197
+ &.badge--warning {
198
+ border-color: var(--color-warning-border);
199
+ color: var(--color-warning-solid);
200
+ }
201
+
202
+ &.badge--error {
203
+ border-color: var(--color-error-border);
204
+ color: var(--color-error-solid);
205
+ }
206
+
207
+ &.badge--info {
208
+ border-color: var(--color-info-border);
209
+ color: var(--color-info-solid);
210
+ }
211
+
212
+ &.badge--primary {
213
+ border-color: var(--color-orange-border);
214
+ color: var(--color-orange-solid);
215
+ }
216
+
217
+ &.badge--neutral {
218
+ border-color: var(--color-neutral-border);
219
+ color: var(--color-neutral-solid);
220
+ }
221
+ }
222
+
223
+ /* ===== INTERACTIVE BADGES ===== */
224
+
225
+ /* Clickable/interactive badge */
226
+ .badge--interactive {
227
+ cursor: pointer;
228
+
229
+ &:hover {
230
+ border-color: var(--hover-border-color);
231
+ background: var(--hover-bg-color);
232
+ transform: translateY(-1px);
233
+ }
234
+
235
+ &:active {
236
+ transform: translateY(0);
237
+ }
238
+
239
+ /* Variant-specific hover states */
240
+ &.badge--success:hover {
241
+ border-color: var(--color-success-border);
242
+ background: color-mix(in srgb, var(--color-success-light) 150%, transparent);
243
+ }
244
+
245
+ &.badge--warning:hover {
246
+ border-color: var(--color-warning-border);
247
+ background: color-mix(in srgb, var(--color-warning-light) 150%, transparent);
248
+ }
249
+
250
+ &.badge--error:hover {
251
+ border-color: var(--color-error-border);
252
+ background: color-mix(in srgb, var(--color-error-light) 150%, transparent);
253
+ }
254
+
255
+ &.badge--info:hover {
256
+ border-color: var(--color-info-border);
257
+ background: color-mix(in srgb, var(--color-info-light) 150%, transparent);
258
+ }
259
+ }
260
+
261
+ /* ===== BADGE WITH DOT INDICATOR ===== */
262
+
263
+ .badge--with-dot {
264
+ &::before {
265
+ content: "";
266
+ width: 6px;
267
+ height: 6px;
268
+ border-radius: 50%;
269
+ background: currentColor;
270
+ flex-shrink: 0;
271
+ }
272
+ }
273
+
274
+ /* ===== MOBILE RESPONSIVENESS ===== */
275
+
276
+ @media (max-width: 768px) {
277
+ .badge {
278
+ font-size: 0.5625rem; /* 9px on mobile */
279
+ padding: 3px 6px;
280
+
281
+ lucide-icon,
282
+ svg {
283
+ width: 10px;
284
+ height: 10px;
285
+ }
286
+ }
287
+
288
+ .badge--sm {
289
+ padding: 2px 4px;
290
+ font-size: 0.5rem; /* 8px */
291
+ }
292
+
293
+ .badge--lg {
294
+ padding: 4px 8px;
295
+ font-size: 0.625rem; /* 10px */
296
+ }
297
+ }
298
+
299
+ /* ===== UTILITY CLASSES ===== */
300
+
301
+ /* Badge group container */
302
+ .badge-group {
303
+ display: flex;
304
+ align-items: center;
305
+ gap: var(--spacing-sm);
306
+ flex-wrap: wrap;
307
+ }
308
+
309
+ /* Badge group with tight spacing */
310
+ .badge-group--tight {
311
+ gap: var(--spacing-xs);
312
+ }
313
+
314
+ /* Badge group with loose spacing */
315
+ .badge-group--loose {
316
+ gap: var(--spacing-lg);
317
+ }
@@ -0,0 +1,169 @@
1
+ // ============================================
2
+ // CARD ACTIONS - Enforced Button Styles
3
+ // ============================================
4
+ // These styles are included in the Shadow DOM bundle
5
+ // to ensure proper button styling regardless of host app CSS.
6
+ // Buttons are rendered directly without wrapper containers.
7
+
8
+ // Host component styles
9
+ app-card-actions {
10
+ display: flex !important;
11
+ flex-wrap: wrap !important;
12
+ align-items: center !important;
13
+ gap: var(--card-element-gap-lg) !important;
14
+ margin-top: var(--space-3) !important;
15
+ margin-left: var(--space-1) !important;
16
+ margin-right: var(--space-1) !important;
17
+ padding-bottom: var(--osi-card-padding) !important;
18
+ }
19
+
20
+ // Base Button Styles
21
+ .osi-action-button {
22
+ // Reset
23
+ margin: 0 !important;
24
+ -webkit-appearance: none !important;
25
+ appearance: none !important;
26
+
27
+ // Layout
28
+ display: inline-flex !important;
29
+ align-items: center !important;
30
+ gap: var(--card-element-gap-md) !important;
31
+ padding: var(--space-2) var(--space-5) !important;
32
+
33
+ // Typography
34
+ font-family:
35
+ Helvetica,
36
+ "Helvetica Neue",
37
+ -apple-system,
38
+ BlinkMacSystemFont,
39
+ "Segoe UI",
40
+ Roboto,
41
+ Arial,
42
+ sans-serif !important;
43
+ font-size: 0.875rem !important;
44
+ font-weight: 600 !important;
45
+ line-height: 1.25rem !important;
46
+ text-decoration: none !important;
47
+ white-space: nowrap !important;
48
+
49
+ // Interaction
50
+ cursor: pointer !important;
51
+
52
+ // Visual
53
+ border-radius: var(--radius-md) !important;
54
+ transition: var(--duration-fast) ease !important;
55
+ box-sizing: border-box !important;
56
+ }
57
+
58
+ // Primary Button - Solid Orange Background with WHITE text
59
+ .osi-action-button--primary {
60
+ background-color: var(--osi-card-action-primary-bg) !important;
61
+ color: var(--osi-card-action-primary-color) !important;
62
+ border: none !important;
63
+ box-shadow: var(--osi-card-action-primary-shadow) !important;
64
+
65
+ // Force white text on all child elements
66
+ * {
67
+ color: var(--osi-card-action-primary-color) !important;
68
+ }
69
+ }
70
+
71
+ .osi-action-button--primary:hover {
72
+ background-color: var(--osi-card-action-primary-bg-hover) !important;
73
+ color: var(--osi-card-action-primary-color) !important;
74
+ box-shadow: var(--osi-card-action-primary-shadow-hover) !important;
75
+ transform: translateY(calc(var(--motion-distance-xs) * -0.5)) !important;
76
+ }
77
+
78
+ .osi-action-button--primary:active {
79
+ background-color: var(--color-brand-dark) !important;
80
+ color: var(--osi-card-action-primary-color) !important;
81
+ transform: scale(0.98) translateY(0) !important;
82
+ box-shadow: var(--osi-card-action-primary-shadow) !important;
83
+ }
84
+
85
+ .osi-action-button--primary:focus-visible {
86
+ outline: var(--border-width-accent-sm) solid var(--color-brand) !important;
87
+ outline-offset: var(--border-width-accent-sm) !important;
88
+ }
89
+
90
+ // Secondary Button - Orange Border (Outline) with WHITE text
91
+ .osi-action-button--secondary {
92
+ background-color: transparent !important;
93
+ color: var(--osi-card-action-secondary-color) !important;
94
+ border: var(--osi-card-action-secondary-border) !important;
95
+
96
+ // Force white text on all child elements
97
+ * {
98
+ color: var(--osi-card-action-secondary-color) !important;
99
+ }
100
+ }
101
+
102
+ .osi-action-button--secondary:hover {
103
+ background-color: var(--osi-card-action-secondary-bg-hover) !important;
104
+ color: var(--osi-card-action-secondary-color) !important;
105
+ box-shadow: var(--osi-card-action-secondary-shadow-hover) !important;
106
+ }
107
+
108
+ .osi-action-button--secondary:active {
109
+ background-color: var(--osi-card-action-secondary-bg-hover) !important;
110
+ color: var(--osi-card-action-secondary-color) !important;
111
+ transform: scale(0.98) !important;
112
+ }
113
+
114
+ .osi-action-button--secondary:focus-visible {
115
+ outline: var(--border-width-accent-sm) solid var(--color-brand) !important;
116
+ outline-offset: var(--border-width-accent-sm) !important;
117
+ }
118
+
119
+ // Button Content Elements - Always white
120
+ .osi-action-button__label {
121
+ color: inherit !important;
122
+ font-family: inherit !important;
123
+ font-size: inherit !important;
124
+ font-weight: inherit !important;
125
+ }
126
+
127
+ .osi-action-button__icon {
128
+ width: var(--icon-sm) !important;
129
+ height: var(--icon-sm) !important;
130
+ object-fit: contain !important;
131
+ flex-shrink: 0 !important;
132
+ }
133
+
134
+ .osi-action-button__emoji {
135
+ font-size: var(--icon-sm) !important;
136
+ line-height: 1 !important;
137
+ flex-shrink: 0 !important;
138
+ }
139
+
140
+ // Lucide Icons in Buttons
141
+ .osi-action-button lucide-icon {
142
+ display: inline-flex !important;
143
+ align-items: center !important;
144
+ justify-content: center !important;
145
+ flex-shrink: 0 !important;
146
+ }
147
+
148
+ .osi-action-button lucide-icon svg {
149
+ width: var(--icon-sm) !important;
150
+ height: var(--icon-sm) !important;
151
+ stroke: currentColor !important;
152
+ fill: none !important;
153
+ stroke-width: var(--border-width-accent-sm) !important;
154
+ stroke-linecap: round !important;
155
+ stroke-linejoin: round !important;
156
+ }
157
+
158
+ // Screen Reader Only (Accessibility)
159
+ .sr-only {
160
+ position: absolute !important;
161
+ width: 1px !important;
162
+ height: 1px !important;
163
+ padding: 0 !important;
164
+ margin: -1px !important;
165
+ overflow: hidden !important;
166
+ clip: rect(0, 0, 0, 0) !important;
167
+ white-space: nowrap !important;
168
+ border-width: 0 !important;
169
+ }
@@ -0,0 +1,47 @@
1
+ // ============================================
2
+ // CARD FOOTER - Enforced Signature Styles
3
+ // ============================================
4
+ // These styles are included in the Shadow DOM bundle
5
+ // to ensure proper footer styling regardless of host app CSS.
6
+
7
+ // Card Signature / "Powered by" Footer
8
+ .card-signature {
9
+ // Layout
10
+ display: block !important;
11
+ width: 100% !important;
12
+ box-sizing: border-box !important;
13
+
14
+ // Spacing - No margin above
15
+ margin: 0 !important;
16
+ padding: var(--space-3) var(--osi-card-padding) !important;
17
+
18
+ // Typography - Small, centered, muted
19
+ font-family:
20
+ Helvetica,
21
+ "Helvetica Neue",
22
+ -apple-system,
23
+ BlinkMacSystemFont,
24
+ "Segoe UI",
25
+ Roboto,
26
+ Arial,
27
+ sans-serif !important;
28
+ font-size: var(--text-xs) !important;
29
+ font-weight: 400 !important;
30
+ line-height: 1.4 !important;
31
+ letter-spacing: 0.02em !important;
32
+ text-align: center !important;
33
+
34
+ // Color - Muted gray
35
+ color: var(--muted-foreground) !important;
36
+
37
+ // Visual reset
38
+ background: transparent !important;
39
+ border: none !important;
40
+ text-decoration: none !important;
41
+ }
42
+
43
+ // Dark theme variant - uses theme-aware variable
44
+ :host([data-theme="night"]) .card-signature,
45
+ :host-context([data-theme="night"]) .card-signature {
46
+ color: var(--muted-foreground) !important;
47
+ }