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.
- package/fesm2022/osi-cards-lib.mjs +31889 -0
- package/fesm2022/osi-cards-lib.mjs.map +1 -0
- package/index.d.ts +11528 -0
- package/package.json +25 -13
- package/scripts/setup-angular-styles.js +169 -0
- package/styles/_components.scss +38 -0
- package/styles/_index.scss +25 -0
- package/styles/_osi-cards-mixins.scss +459 -0
- package/styles/_osi-cards-tokens.scss +333 -0
- package/styles/_styles-scoped.scss +81 -0
- package/styles/_styles.scss +26 -0
- package/styles/bundles/_ai-card.scss +245 -0
- package/styles/bundles/_all.scss +68 -0
- package/styles/bundles/_base.scss +60 -0
- package/styles/bundles/_card-skeleton.scss +290 -0
- package/styles/bundles/_index.scss +25 -0
- package/styles/bundles/_sections.scss +48 -0
- package/styles/bundles/_tokens-only.scss +139 -0
- package/styles/components/_ai-card-renderer.scss +104 -0
- package/styles/components/_badges.scss +317 -0
- package/styles/components/_card-actions.scss +169 -0
- package/styles/components/_card-footer.scss +47 -0
- package/styles/components/_component-styles.scss +205 -0
- package/styles/components/_empty-state.scss +630 -0
- package/styles/components/_hero-card.scss +422 -0
- package/styles/components/_image-fallback.scss +28 -0
- package/styles/components/_streaming-effects.scss +518 -0
- package/styles/components/cards/_ai-card.scss +718 -0
- package/styles/components/sections/_all-sections.generated.scss +41 -0
- package/styles/components/sections/_all-sections.scss +1086 -0
- package/styles/components/sections/_balanced-compact-system.scss +186 -0
- package/styles/components/sections/_compact-mixins.scss +180 -0
- package/styles/components/sections/_component-mixins.scss +454 -0
- package/styles/components/sections/_design-system.scss +477 -0
- package/styles/components/sections/_design-tokens.scss +308 -0
- package/styles/components/sections/_enhanced-design-variables.scss +147 -0
- package/styles/components/sections/_master-compact-system.scss +302 -0
- package/styles/components/sections/_master-dense-system.scss +239 -0
- package/styles/components/sections/_minimalistic-design.scss +268 -0
- package/styles/components/sections/_modern-effects.scss +392 -0
- package/styles/components/sections/_modern-sections.scss +351 -0
- package/styles/components/sections/_perfect-system.scss +204 -0
- package/styles/components/sections/_section-animations.scss +331 -0
- package/styles/components/sections/_section-shell.scss +337 -0
- package/styles/components/sections/_section-types.generated.scss +30 -0
- package/styles/components/sections/_sections-all.scss +26 -0
- package/styles/components/sections/_sections-base.scss +334 -0
- package/styles/components/sections/_typography-system.scss +327 -0
- package/styles/components/sections/_ultra-compact-tokens.scss +375 -0
- package/styles/components/sections/_unified-section-style.scss +157 -0
- package/styles/components/sections/_utility-classes.scss +567 -0
- package/styles/components/sections/_visual-effects-library.scss +374 -0
- package/styles/core/_animations.scss +1498 -0
- package/styles/core/_bootstrap-reset.scss +445 -0
- package/styles/core/_color-helpers.scss +46 -0
- package/styles/core/_global-unified.scss +118 -0
- package/styles/core/_global.scss +73 -0
- package/styles/core/_mixins.scss +491 -0
- package/styles/core/_surface-layers.scss +76 -0
- package/styles/core/_utilities.scss +326 -0
- package/styles/core/_variables-unified.scss +57 -0
- package/styles/core/_variables.scss +36 -0
- package/styles/core/variables/_colors-source.scss +34 -0
- package/styles/core/variables/_colors-unified.scss +26 -0
- package/styles/core/variables/_colors.scss +21 -0
- package/styles/critical.scss +353 -0
- package/styles/design-system/_compact-theme.scss +159 -0
- package/styles/design-system/_section-base.scss +426 -0
- package/styles/design-system/_tokens.scss +237 -0
- package/styles/design-system/_unified-sections.scss +215 -0
- package/styles/layout/_feature-grid.scss +322 -0
- package/styles/layout/_masonry.scss +734 -0
- package/styles/layout/_tilt.scss +244 -0
- package/styles/micro-interactions.scss +583 -0
- package/styles/mixins/_section-mixins.scss +280 -0
- package/styles/non-critical.scss +643 -0
- package/styles/reset/_framework-reset.scss +457 -0
- package/styles/reset/_index.scss +14 -0
- package/styles/reset/_shadow-reset.scss +383 -0
- package/styles/responsive.scss +326 -0
- package/styles/themes.scss +573 -0
- package/styles/tokens/_index.scss +92 -0
- package/styles/tokens/_master.scss +1404 -0
- package/styles/tokens/_section-tokens.generated.scss +140 -0
- package/postcss.config.js +0 -81
- package/section-registry.json +0 -3864
- package/section-registry.schema.json +0 -264
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// SHADOW DOM RESET
|
|
3
|
+
// ============================================
|
|
4
|
+
//
|
|
5
|
+
// Comprehensive reset for Shadow DOM encapsulated components.
|
|
6
|
+
// This ensures components are completely isolated from host app styles.
|
|
7
|
+
//
|
|
8
|
+
// Usage: Include at the top of component style bundles
|
|
9
|
+
//
|
|
10
|
+
// ============================================
|
|
11
|
+
|
|
12
|
+
@use "../tokens/master" as tokens;
|
|
13
|
+
|
|
14
|
+
// ============================================
|
|
15
|
+
// HOST ELEMENT RESET
|
|
16
|
+
// ============================================
|
|
17
|
+
|
|
18
|
+
:host {
|
|
19
|
+
// Reset ALL inherited properties to initial state
|
|
20
|
+
// This prevents any host app styles from leaking in
|
|
21
|
+
all: initial;
|
|
22
|
+
|
|
23
|
+
// Re-establish essential display properties
|
|
24
|
+
display: block !important;
|
|
25
|
+
position: relative;
|
|
26
|
+
box-sizing: border-box;
|
|
27
|
+
width: 100% !important;
|
|
28
|
+
min-height: 0; // Allow content to determine height
|
|
29
|
+
visibility: visible !important;
|
|
30
|
+
opacity: 1 !important;
|
|
31
|
+
|
|
32
|
+
// Transparent container with 8px padding (library default)
|
|
33
|
+
// Must be set here immediately after all:initial to ensure application
|
|
34
|
+
padding: 8px;
|
|
35
|
+
background: transparent !important;
|
|
36
|
+
background-color: transparent !important;
|
|
37
|
+
|
|
38
|
+
// Typography - inherit from host but with fallbacks
|
|
39
|
+
font-family:
|
|
40
|
+
Helvetica,
|
|
41
|
+
"Helvetica Neue",
|
|
42
|
+
-apple-system,
|
|
43
|
+
BlinkMacSystemFont,
|
|
44
|
+
"Segoe UI",
|
|
45
|
+
Roboto,
|
|
46
|
+
Arial,
|
|
47
|
+
sans-serif;
|
|
48
|
+
font-size: var(--font-size-base, 14px);
|
|
49
|
+
line-height: 1.5;
|
|
50
|
+
color: var(--foreground, #{tokens.$osi-foreground-light});
|
|
51
|
+
|
|
52
|
+
// Text rendering
|
|
53
|
+
-webkit-font-smoothing: antialiased;
|
|
54
|
+
-moz-osx-font-smoothing: grayscale;
|
|
55
|
+
text-rendering: optimizeLegibility;
|
|
56
|
+
font-feature-settings: "kern" 1;
|
|
57
|
+
|
|
58
|
+
// Prevent text selection issues
|
|
59
|
+
-webkit-tap-highlight-color: transparent;
|
|
60
|
+
|
|
61
|
+
// Contain styles within shadow boundary
|
|
62
|
+
contain: layout style;
|
|
63
|
+
|
|
64
|
+
// Responsive: reduce padding on mobile
|
|
65
|
+
@media (max-width: 480px) {
|
|
66
|
+
padding: 4px;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Host context variations
|
|
71
|
+
:host([hidden]) {
|
|
72
|
+
display: none !important;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
:host([disabled]) {
|
|
76
|
+
pointer-events: none;
|
|
77
|
+
opacity: 0.6;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// ============================================
|
|
81
|
+
// UNIVERSAL BOX MODEL RESET
|
|
82
|
+
// ============================================
|
|
83
|
+
|
|
84
|
+
*,
|
|
85
|
+
*::before,
|
|
86
|
+
*::after {
|
|
87
|
+
box-sizing: border-box;
|
|
88
|
+
margin: 0;
|
|
89
|
+
padding: 0;
|
|
90
|
+
|
|
91
|
+
// Reset borders
|
|
92
|
+
border-width: 0;
|
|
93
|
+
border-style: solid;
|
|
94
|
+
border-color: currentColor;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// ============================================
|
|
98
|
+
// TYPOGRAPHY RESET
|
|
99
|
+
// ============================================
|
|
100
|
+
|
|
101
|
+
// Headings - with explicit font sizes matching demo app
|
|
102
|
+
h1,
|
|
103
|
+
h2,
|
|
104
|
+
h3,
|
|
105
|
+
h4,
|
|
106
|
+
h5,
|
|
107
|
+
h6 {
|
|
108
|
+
margin: 0;
|
|
109
|
+
line-height: 1.2;
|
|
110
|
+
font-family: inherit;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
h1 {
|
|
114
|
+
font-size: var(--text-2xl, 1.5rem);
|
|
115
|
+
font-weight: var(--font-weight-medium, 500);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
h2 {
|
|
119
|
+
font-size: var(--text-xl, 1.25rem);
|
|
120
|
+
font-weight: var(--font-weight-medium, 500);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
h3 {
|
|
124
|
+
font-size: var(--text-lg, 1.125rem);
|
|
125
|
+
font-weight: var(--font-weight-medium, 500);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
h4 {
|
|
129
|
+
font-size: var(--text-base, 1rem);
|
|
130
|
+
font-weight: var(--font-weight-medium, 500);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
h5 {
|
|
134
|
+
font-size: var(--text-sm, 0.875rem);
|
|
135
|
+
font-weight: var(--font-weight-medium, 500);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
h6 {
|
|
139
|
+
font-size: var(--text-xs, 0.75rem);
|
|
140
|
+
font-weight: var(--font-weight-medium, 500);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Paragraphs and text
|
|
144
|
+
p {
|
|
145
|
+
font-size: var(--text-base, 1rem);
|
|
146
|
+
font-weight: var(--font-weight-normal, 400);
|
|
147
|
+
line-height: 1.5;
|
|
148
|
+
margin: 0;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
span,
|
|
152
|
+
div {
|
|
153
|
+
margin: 0;
|
|
154
|
+
padding: 0;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Links
|
|
158
|
+
a {
|
|
159
|
+
color: inherit;
|
|
160
|
+
text-decoration: inherit;
|
|
161
|
+
cursor: pointer;
|
|
162
|
+
|
|
163
|
+
&:focus-visible {
|
|
164
|
+
outline: 2px solid var(--color-brand, #{tokens.$osi-color-brand});
|
|
165
|
+
outline-offset: 2px;
|
|
166
|
+
border-radius: 2px;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Lists
|
|
171
|
+
ul,
|
|
172
|
+
ol {
|
|
173
|
+
list-style: none;
|
|
174
|
+
margin: 0;
|
|
175
|
+
padding: 0;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
li {
|
|
179
|
+
margin: 0;
|
|
180
|
+
padding: 0;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// ============================================
|
|
184
|
+
// FORM ELEMENTS RESET
|
|
185
|
+
// ============================================
|
|
186
|
+
|
|
187
|
+
button,
|
|
188
|
+
input,
|
|
189
|
+
optgroup,
|
|
190
|
+
select,
|
|
191
|
+
textarea {
|
|
192
|
+
font-family: inherit;
|
|
193
|
+
font-size: 100%;
|
|
194
|
+
font-weight: inherit;
|
|
195
|
+
line-height: inherit;
|
|
196
|
+
color: inherit;
|
|
197
|
+
margin: 0;
|
|
198
|
+
padding: 0;
|
|
199
|
+
background: transparent;
|
|
200
|
+
border: none;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
button,
|
|
204
|
+
[type="button"],
|
|
205
|
+
[type="reset"],
|
|
206
|
+
[type="submit"] {
|
|
207
|
+
cursor: pointer;
|
|
208
|
+
-webkit-appearance: button;
|
|
209
|
+
background-color: transparent;
|
|
210
|
+
background-image: none;
|
|
211
|
+
|
|
212
|
+
&:focus-visible {
|
|
213
|
+
outline: 2px solid var(--color-brand, #{tokens.$osi-color-brand});
|
|
214
|
+
outline-offset: 2px;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// Remove default button styles
|
|
219
|
+
button::-moz-focus-inner,
|
|
220
|
+
[type="button"]::-moz-focus-inner,
|
|
221
|
+
[type="reset"]::-moz-focus-inner,
|
|
222
|
+
[type="submit"]::-moz-focus-inner {
|
|
223
|
+
border-style: none;
|
|
224
|
+
padding: 0;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// ============================================
|
|
228
|
+
// MEDIA ELEMENTS RESET
|
|
229
|
+
// ============================================
|
|
230
|
+
|
|
231
|
+
img,
|
|
232
|
+
svg,
|
|
233
|
+
video,
|
|
234
|
+
canvas,
|
|
235
|
+
audio,
|
|
236
|
+
iframe,
|
|
237
|
+
embed,
|
|
238
|
+
object {
|
|
239
|
+
display: block;
|
|
240
|
+
vertical-align: middle;
|
|
241
|
+
max-width: 100%;
|
|
242
|
+
height: auto;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
img,
|
|
246
|
+
video {
|
|
247
|
+
max-width: 100%;
|
|
248
|
+
height: auto;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
svg {
|
|
252
|
+
fill: currentColor;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// ============================================
|
|
256
|
+
// LUCIDE ICON SPECIFIC STYLES
|
|
257
|
+
// ============================================
|
|
258
|
+
|
|
259
|
+
// Lucide icons use stroke-based SVGs, not fill
|
|
260
|
+
lucide-icon,
|
|
261
|
+
lucide-angular {
|
|
262
|
+
display: inline-flex !important;
|
|
263
|
+
align-items: center !important;
|
|
264
|
+
justify-content: center !important;
|
|
265
|
+
vertical-align: middle !important;
|
|
266
|
+
flex-shrink: 0;
|
|
267
|
+
|
|
268
|
+
svg {
|
|
269
|
+
display: block !important;
|
|
270
|
+
width: inherit !important;
|
|
271
|
+
height: inherit !important;
|
|
272
|
+
stroke: currentColor !important;
|
|
273
|
+
fill: none !important;
|
|
274
|
+
stroke-width: 2 !important;
|
|
275
|
+
stroke-linecap: round !important;
|
|
276
|
+
stroke-linejoin: round !important;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// ============================================
|
|
281
|
+
// TABLE RESET
|
|
282
|
+
// ============================================
|
|
283
|
+
|
|
284
|
+
table {
|
|
285
|
+
text-indent: 0;
|
|
286
|
+
border-color: inherit;
|
|
287
|
+
border-collapse: collapse;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// ============================================
|
|
291
|
+
// INTERACTIVE ELEMENTS
|
|
292
|
+
// ============================================
|
|
293
|
+
|
|
294
|
+
// Summary element (disclosure widget)
|
|
295
|
+
summary {
|
|
296
|
+
display: list-item;
|
|
297
|
+
cursor: pointer;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// Prevent text selection on interactive elements
|
|
301
|
+
[role="button"] {
|
|
302
|
+
cursor: pointer;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
// ============================================
|
|
306
|
+
// ACCESSIBILITY ENHANCEMENTS
|
|
307
|
+
// ============================================
|
|
308
|
+
|
|
309
|
+
// Focus visible styles for keyboard navigation
|
|
310
|
+
:focus-visible {
|
|
311
|
+
outline: 2px solid var(--color-brand, #{tokens.$osi-color-brand});
|
|
312
|
+
outline-offset: 2px;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// Remove focus outline for mouse users
|
|
316
|
+
:focus:not(:focus-visible) {
|
|
317
|
+
outline: none;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// Reduced motion support
|
|
321
|
+
@media (prefers-reduced-motion: reduce) {
|
|
322
|
+
*,
|
|
323
|
+
*::before,
|
|
324
|
+
*::after {
|
|
325
|
+
animation-duration: 0.01ms !important;
|
|
326
|
+
animation-iteration-count: 1 !important;
|
|
327
|
+
transition-duration: 0.01ms !important;
|
|
328
|
+
scroll-behavior: auto !important;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// High contrast mode support
|
|
333
|
+
@media (prefers-contrast: high) {
|
|
334
|
+
* {
|
|
335
|
+
border-color: currentColor !important;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// ============================================
|
|
340
|
+
// SCROLLBAR STYLING
|
|
341
|
+
// ============================================
|
|
342
|
+
|
|
343
|
+
// Webkit scrollbar styling (Chrome, Safari, Edge)
|
|
344
|
+
::-webkit-scrollbar {
|
|
345
|
+
width: 8px;
|
|
346
|
+
height: 8px;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
::-webkit-scrollbar-track {
|
|
350
|
+
background: var(--muted, #{tokens.$osi-gray-200});
|
|
351
|
+
border-radius: 4px;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
::-webkit-scrollbar-thumb {
|
|
355
|
+
background: var(--muted-foreground, #{tokens.$osi-gray-400});
|
|
356
|
+
border-radius: 4px;
|
|
357
|
+
|
|
358
|
+
&:hover {
|
|
359
|
+
background: var(--foreground, #{tokens.$osi-foreground-light});
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// Firefox scrollbar styling
|
|
364
|
+
* {
|
|
365
|
+
scrollbar-width: thin;
|
|
366
|
+
scrollbar-color: var(--muted-foreground, #{tokens.$osi-gray-400})
|
|
367
|
+
var(--muted, #{tokens.$osi-gray-200});
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// ============================================
|
|
371
|
+
// PRINT STYLES
|
|
372
|
+
// ============================================
|
|
373
|
+
|
|
374
|
+
@media print {
|
|
375
|
+
*,
|
|
376
|
+
*::before,
|
|
377
|
+
*::after {
|
|
378
|
+
background: transparent !important;
|
|
379
|
+
color: black !important;
|
|
380
|
+
box-shadow: none !important;
|
|
381
|
+
text-shadow: none !important;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OSI Cards - Responsive Design System
|
|
3
|
+
*
|
|
4
|
+
* Breakpoints and responsive utilities for cards and sections.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// ============================================
|
|
8
|
+
// Breakpoint Variables
|
|
9
|
+
// ============================================
|
|
10
|
+
|
|
11
|
+
$breakpoints: (
|
|
12
|
+
"xs": 320px,
|
|
13
|
+
"sm": 480px,
|
|
14
|
+
"md": 768px,
|
|
15
|
+
"lg": 1024px,
|
|
16
|
+
"xl": 1280px,
|
|
17
|
+
"2xl": 1536px,
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
// ============================================
|
|
21
|
+
// Responsive Mixins
|
|
22
|
+
// ============================================
|
|
23
|
+
|
|
24
|
+
/// Media query for minimum width (mobile-first)
|
|
25
|
+
@mixin responsive($breakpoint) {
|
|
26
|
+
@if map-has-key($breakpoints, $breakpoint) {
|
|
27
|
+
@media (min-width: map-get($breakpoints, $breakpoint)) {
|
|
28
|
+
@content;
|
|
29
|
+
}
|
|
30
|
+
} @else {
|
|
31
|
+
@media (min-width: $breakpoint) {
|
|
32
|
+
@content;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/// Media query for maximum width
|
|
38
|
+
@mixin responsive-down($breakpoint) {
|
|
39
|
+
@if map-has-key($breakpoints, $breakpoint) {
|
|
40
|
+
@media (max-width: #{map-get($breakpoints, $breakpoint) - 1px}) {
|
|
41
|
+
@content;
|
|
42
|
+
}
|
|
43
|
+
} @else {
|
|
44
|
+
@media (max-width: #{$breakpoint - 1px}) {
|
|
45
|
+
@content;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/// Media query for range
|
|
51
|
+
@mixin responsive-between($min, $max) {
|
|
52
|
+
$min-width: if(map-has-key($breakpoints, $min), map-get($breakpoints, $min), $min);
|
|
53
|
+
$max-width: if(map-has-key($breakpoints, $max), map-get($breakpoints, $max), $max);
|
|
54
|
+
|
|
55
|
+
@media (min-width: $min-width) and (max-width: #{$max-width - 1px}) {
|
|
56
|
+
@content;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// ============================================
|
|
61
|
+
// Container Queries
|
|
62
|
+
// ============================================
|
|
63
|
+
|
|
64
|
+
@mixin container($name: card) {
|
|
65
|
+
container-type: inline-size;
|
|
66
|
+
container-name: $name;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@mixin container-query($name, $min-width: null, $max-width: null) {
|
|
70
|
+
@if $min-width and $max-width {
|
|
71
|
+
@container #{$name} (min-width: #{$min-width}) and (max-width: #{$max-width}) {
|
|
72
|
+
@content;
|
|
73
|
+
}
|
|
74
|
+
} @else if $min-width {
|
|
75
|
+
@container #{$name} (min-width: #{$min-width}) {
|
|
76
|
+
@content;
|
|
77
|
+
}
|
|
78
|
+
} @else if $max-width {
|
|
79
|
+
@container #{$name} (max-width: #{$max-width}) {
|
|
80
|
+
@content;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// ============================================
|
|
86
|
+
// Card Responsive Styles
|
|
87
|
+
// ============================================
|
|
88
|
+
|
|
89
|
+
.osi-card-container {
|
|
90
|
+
@include container(card);
|
|
91
|
+
|
|
92
|
+
// Base mobile styles
|
|
93
|
+
--card-padding: 0.75rem;
|
|
94
|
+
--card-gap: 0.5rem;
|
|
95
|
+
--card-title-size: 1rem;
|
|
96
|
+
--section-title-size: 0.875rem;
|
|
97
|
+
--field-label-size: 0.75rem;
|
|
98
|
+
--field-value-size: 0.875rem;
|
|
99
|
+
|
|
100
|
+
@include responsive("sm") {
|
|
101
|
+
--card-padding: 1rem;
|
|
102
|
+
--card-gap: 0.75rem;
|
|
103
|
+
--card-title-size: 1.125rem;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@include responsive("md") {
|
|
107
|
+
--card-padding: 1.25rem;
|
|
108
|
+
--card-gap: 1rem;
|
|
109
|
+
--card-title-size: 1.25rem;
|
|
110
|
+
--section-title-size: 1rem;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
@include responsive("lg") {
|
|
114
|
+
--card-padding: 1.5rem;
|
|
115
|
+
--card-gap: 1.25rem;
|
|
116
|
+
--card-title-size: 1.375rem;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// ============================================
|
|
121
|
+
// Grid Responsive Utilities
|
|
122
|
+
// ============================================
|
|
123
|
+
|
|
124
|
+
.masonry-container {
|
|
125
|
+
// Mobile: 1 column
|
|
126
|
+
--masonry-columns: 1;
|
|
127
|
+
|
|
128
|
+
@include responsive("sm") {
|
|
129
|
+
--masonry-columns: 2;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
@include responsive("lg") {
|
|
133
|
+
--masonry-columns: 3;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
@include responsive("xl") {
|
|
137
|
+
--masonry-columns: 4;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Container query based columns
|
|
142
|
+
.masonry-container--container-responsive {
|
|
143
|
+
@include container-query(card, $min-width: 400px) {
|
|
144
|
+
--masonry-columns: 2;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
@include container-query(card, $min-width: 700px) {
|
|
148
|
+
--masonry-columns: 3;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
@include container-query(card, $min-width: 1000px) {
|
|
152
|
+
--masonry-columns: 4;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// ============================================
|
|
157
|
+
// Section Responsive Styles
|
|
158
|
+
// ============================================
|
|
159
|
+
|
|
160
|
+
.ai-section {
|
|
161
|
+
// Info section: stack fields on mobile
|
|
162
|
+
&--info {
|
|
163
|
+
.section-field-grid {
|
|
164
|
+
grid-template-columns: 1fr;
|
|
165
|
+
|
|
166
|
+
@include responsive("sm") {
|
|
167
|
+
grid-template-columns: repeat(2, 1fr);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
@include responsive("lg") {
|
|
171
|
+
grid-template-columns: repeat(3, 1fr);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Analytics section: adjust metric sizes
|
|
177
|
+
&--analytics {
|
|
178
|
+
.metric-grid {
|
|
179
|
+
grid-template-columns: 1fr;
|
|
180
|
+
|
|
181
|
+
@include responsive("xs") {
|
|
182
|
+
grid-template-columns: repeat(2, 1fr);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
@include responsive("md") {
|
|
186
|
+
grid-template-columns: repeat(3, 1fr);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.metric-value {
|
|
191
|
+
font-size: 1.5rem;
|
|
192
|
+
|
|
193
|
+
@include responsive("md") {
|
|
194
|
+
font-size: 2rem;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// Timeline section: horizontal on desktop
|
|
200
|
+
&--timeline {
|
|
201
|
+
.timeline-items {
|
|
202
|
+
flex-direction: column;
|
|
203
|
+
|
|
204
|
+
@include responsive("lg") {
|
|
205
|
+
flex-direction: row;
|
|
206
|
+
overflow-x: auto;
|
|
207
|
+
scroll-snap-type: x mandatory;
|
|
208
|
+
|
|
209
|
+
> * {
|
|
210
|
+
scroll-snap-align: start;
|
|
211
|
+
min-width: 280px;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Contact section: adjust layout
|
|
218
|
+
&--contact {
|
|
219
|
+
.contact-grid {
|
|
220
|
+
grid-template-columns: 1fr;
|
|
221
|
+
|
|
222
|
+
@include responsive("sm") {
|
|
223
|
+
grid-template-columns: repeat(2, 1fr);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// ============================================
|
|
230
|
+
// Typography Responsive Utilities
|
|
231
|
+
// ============================================
|
|
232
|
+
|
|
233
|
+
.text-responsive {
|
|
234
|
+
font-size: clamp(0.875rem, 2vw, 1rem);
|
|
235
|
+
line-height: 1.5;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.heading-responsive {
|
|
239
|
+
font-size: clamp(1.25rem, 4vw, 2rem);
|
|
240
|
+
line-height: 1.2;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// ============================================
|
|
244
|
+
// Spacing Responsive Utilities
|
|
245
|
+
// ============================================
|
|
246
|
+
|
|
247
|
+
.space-responsive {
|
|
248
|
+
padding: clamp(0.5rem, 2vw, 1.5rem);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
.gap-responsive {
|
|
252
|
+
gap: clamp(0.5rem, 2vw, 1rem);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// ============================================
|
|
256
|
+
// Touch Target Utilities
|
|
257
|
+
// ============================================
|
|
258
|
+
|
|
259
|
+
.touch-target {
|
|
260
|
+
min-height: 44px;
|
|
261
|
+
min-width: 44px;
|
|
262
|
+
|
|
263
|
+
@include responsive("lg") {
|
|
264
|
+
min-height: 36px;
|
|
265
|
+
min-width: 36px;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// ============================================
|
|
270
|
+
// Visibility Utilities
|
|
271
|
+
// ============================================
|
|
272
|
+
|
|
273
|
+
.hide-mobile {
|
|
274
|
+
@include responsive-down("md") {
|
|
275
|
+
display: none !important;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.hide-desktop {
|
|
280
|
+
@include responsive("md") {
|
|
281
|
+
display: none !important;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
.show-mobile {
|
|
286
|
+
display: none !important;
|
|
287
|
+
|
|
288
|
+
@include responsive-down("md") {
|
|
289
|
+
display: block !important;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
.show-desktop {
|
|
294
|
+
display: none !important;
|
|
295
|
+
|
|
296
|
+
@include responsive("md") {
|
|
297
|
+
display: block !important;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// ============================================
|
|
302
|
+
// Print Styles
|
|
303
|
+
// ============================================
|
|
304
|
+
|
|
305
|
+
@media print {
|
|
306
|
+
.osi-card-container {
|
|
307
|
+
--card-padding: 1rem;
|
|
308
|
+
box-shadow: none;
|
|
309
|
+
border: 1px solid #ddd;
|
|
310
|
+
break-inside: avoid;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
.masonry-container {
|
|
314
|
+
--masonry-columns: 2;
|
|
315
|
+
display: block;
|
|
316
|
+
|
|
317
|
+
.masonry-item {
|
|
318
|
+
break-inside: avoid;
|
|
319
|
+
margin-bottom: 1rem;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
.hide-print {
|
|
324
|
+
display: none !important;
|
|
325
|
+
}
|
|
326
|
+
}
|