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.
- package/README.md +58 -20
- package/package.json +13 -25
- package/postcss.config.js +81 -0
- package/section-registry.json +3864 -0
- package/section-registry.schema.json +264 -0
- package/fesm2022/osi-cards-lib.mjs +0 -31878
- package/fesm2022/osi-cards-lib.mjs.map +0 -1
- package/index.d.ts +0 -11522
- package/scripts/setup-angular-styles.js +0 -169
- package/styles/_components.scss +0 -38
- package/styles/_index.scss +0 -25
- package/styles/_osi-cards-mixins.scss +0 -459
- package/styles/_osi-cards-tokens.scss +0 -333
- package/styles/_styles-scoped.scss +0 -81
- package/styles/_styles.scss +0 -26
- package/styles/bundles/_ai-card.scss +0 -245
- package/styles/bundles/_all.scss +0 -68
- package/styles/bundles/_base.scss +0 -60
- package/styles/bundles/_card-skeleton.scss +0 -290
- package/styles/bundles/_index.scss +0 -25
- package/styles/bundles/_sections.scss +0 -48
- package/styles/bundles/_tokens-only.scss +0 -139
- package/styles/components/_ai-card-renderer.scss +0 -104
- package/styles/components/_badges.scss +0 -317
- package/styles/components/_card-actions.scss +0 -169
- package/styles/components/_card-footer.scss +0 -47
- package/styles/components/_component-styles.scss +0 -205
- package/styles/components/_empty-state.scss +0 -630
- package/styles/components/_hero-card.scss +0 -422
- package/styles/components/_image-fallback.scss +0 -28
- package/styles/components/_streaming-effects.scss +0 -518
- package/styles/components/cards/_ai-card.scss +0 -718
- package/styles/components/sections/_all-sections.generated.scss +0 -41
- package/styles/components/sections/_all-sections.scss +0 -1086
- package/styles/components/sections/_balanced-compact-system.scss +0 -186
- package/styles/components/sections/_compact-mixins.scss +0 -180
- package/styles/components/sections/_component-mixins.scss +0 -454
- package/styles/components/sections/_design-system.scss +0 -477
- package/styles/components/sections/_design-tokens.scss +0 -308
- package/styles/components/sections/_enhanced-design-variables.scss +0 -147
- package/styles/components/sections/_master-compact-system.scss +0 -302
- package/styles/components/sections/_master-dense-system.scss +0 -239
- package/styles/components/sections/_minimalistic-design.scss +0 -268
- package/styles/components/sections/_modern-effects.scss +0 -392
- package/styles/components/sections/_modern-sections.scss +0 -351
- package/styles/components/sections/_perfect-system.scss +0 -204
- package/styles/components/sections/_section-animations.scss +0 -331
- package/styles/components/sections/_section-shell.scss +0 -337
- package/styles/components/sections/_section-types.generated.scss +0 -30
- package/styles/components/sections/_sections-all.scss +0 -26
- package/styles/components/sections/_sections-base.scss +0 -334
- package/styles/components/sections/_typography-system.scss +0 -327
- package/styles/components/sections/_ultra-compact-tokens.scss +0 -375
- package/styles/components/sections/_unified-section-style.scss +0 -157
- package/styles/components/sections/_utility-classes.scss +0 -567
- package/styles/components/sections/_visual-effects-library.scss +0 -374
- package/styles/core/_animations.scss +0 -1498
- package/styles/core/_bootstrap-reset.scss +0 -445
- package/styles/core/_color-helpers.scss +0 -46
- package/styles/core/_global-unified.scss +0 -118
- package/styles/core/_global.scss +0 -73
- package/styles/core/_mixins.scss +0 -491
- package/styles/core/_surface-layers.scss +0 -76
- package/styles/core/_utilities.scss +0 -326
- package/styles/core/_variables-unified.scss +0 -57
- package/styles/core/_variables.scss +0 -36
- package/styles/core/variables/_colors-source.scss +0 -34
- package/styles/core/variables/_colors-unified.scss +0 -26
- package/styles/core/variables/_colors.scss +0 -21
- package/styles/critical.scss +0 -353
- package/styles/design-system/_compact-theme.scss +0 -159
- package/styles/design-system/_section-base.scss +0 -426
- package/styles/design-system/_tokens.scss +0 -237
- package/styles/design-system/_unified-sections.scss +0 -215
- package/styles/layout/_feature-grid.scss +0 -322
- package/styles/layout/_masonry.scss +0 -734
- package/styles/layout/_tilt.scss +0 -244
- package/styles/micro-interactions.scss +0 -583
- package/styles/mixins/_section-mixins.scss +0 -280
- package/styles/non-critical.scss +0 -643
- package/styles/reset/_framework-reset.scss +0 -457
- package/styles/reset/_index.scss +0 -14
- package/styles/reset/_shadow-reset.scss +0 -383
- package/styles/responsive.scss +0 -326
- package/styles/themes.scss +0 -573
- package/styles/tokens/_index.scss +0 -92
- package/styles/tokens/_master.scss +0 -1404
- package/styles/tokens/_section-tokens.generated.scss +0 -140
|
@@ -1,426 +0,0 @@
|
|
|
1
|
-
// =====================================================================
|
|
2
|
-
// SECTION BASE STYLES - Common Patterns for All Sections
|
|
3
|
-
// =====================================================================
|
|
4
|
-
// These styles define the standard structure and patterns used across
|
|
5
|
-
// all section types. Import this file to get consistent styling.
|
|
6
|
-
|
|
7
|
-
@use "./tokens" as *;
|
|
8
|
-
|
|
9
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
10
|
-
// SECTION CONTAINER (Standard wrapper for all sections)
|
|
11
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
12
|
-
|
|
13
|
-
@mixin section-container {
|
|
14
|
-
display: flex;
|
|
15
|
-
flex-direction: column;
|
|
16
|
-
gap: var(--osi-section-header-gap);
|
|
17
|
-
width: 100%;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
21
|
-
// GRID LAYOUTS (Standardized grid patterns)
|
|
22
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
23
|
-
|
|
24
|
-
// Small cards (analytics, metrics)
|
|
25
|
-
@mixin grid-small-cards {
|
|
26
|
-
display: grid;
|
|
27
|
-
grid-template-columns: repeat(auto-fit, minmax(var(--osi-grid-min-small), 1fr));
|
|
28
|
-
gap: var(--osi-grid-gap);
|
|
29
|
-
|
|
30
|
-
@include mobile {
|
|
31
|
-
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
|
|
32
|
-
gap: var(--osi-spacing-sm);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// Medium cards (contacts, products)
|
|
37
|
-
@mixin grid-medium-cards {
|
|
38
|
-
display: grid;
|
|
39
|
-
grid-template-columns: repeat(auto-fit, minmax(var(--osi-grid-min-medium), 1fr));
|
|
40
|
-
gap: var(--osi-grid-gap);
|
|
41
|
-
|
|
42
|
-
@include mobile {
|
|
43
|
-
grid-template-columns: 1fr;
|
|
44
|
-
gap: var(--osi-spacing-sm);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// Large cards (gallery, features)
|
|
49
|
-
@mixin grid-large-cards {
|
|
50
|
-
display: grid;
|
|
51
|
-
grid-template-columns: repeat(auto-fit, minmax(var(--osi-grid-min-large), 1fr));
|
|
52
|
-
gap: var(--osi-grid-gap);
|
|
53
|
-
|
|
54
|
-
@include mobile {
|
|
55
|
-
grid-template-columns: 1fr;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Two-column layout
|
|
60
|
-
@mixin grid-two-column {
|
|
61
|
-
display: grid;
|
|
62
|
-
grid-template-columns: repeat(2, 1fr);
|
|
63
|
-
gap: var(--osi-grid-gap);
|
|
64
|
-
|
|
65
|
-
@include mobile {
|
|
66
|
-
grid-template-columns: 1fr;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Three-column layout
|
|
71
|
-
@mixin grid-three-column {
|
|
72
|
-
display: grid;
|
|
73
|
-
grid-template-columns: repeat(3, 1fr);
|
|
74
|
-
gap: var(--osi-grid-gap);
|
|
75
|
-
|
|
76
|
-
@include tablet {
|
|
77
|
-
grid-template-columns: repeat(2, 1fr);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
@include mobile {
|
|
81
|
-
grid-template-columns: 1fr;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
86
|
-
// LIST LAYOUTS (Vertical stacking)
|
|
87
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
88
|
-
|
|
89
|
-
@mixin list-layout {
|
|
90
|
-
display: flex;
|
|
91
|
-
flex-direction: column;
|
|
92
|
-
gap: var(--osi-item-gap);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
96
|
-
// CARD STYLES (Standard card appearance)
|
|
97
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
98
|
-
|
|
99
|
-
@mixin card-base {
|
|
100
|
-
background: var(--osi-surface-raised);
|
|
101
|
-
border: 1px solid var(--osi-border);
|
|
102
|
-
border-radius: var(--osi-radius-md);
|
|
103
|
-
padding: var(--osi-item-padding);
|
|
104
|
-
transition: all var(--osi-duration-normal) var(--osi-ease-out);
|
|
105
|
-
position: relative;
|
|
106
|
-
overflow: hidden;
|
|
107
|
-
|
|
108
|
-
// Ensure proper stacking context
|
|
109
|
-
isolation: isolate;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
@mixin card-elevated {
|
|
113
|
-
@include card-base;
|
|
114
|
-
box-shadow: var(--osi-shadow-sm);
|
|
115
|
-
position: relative;
|
|
116
|
-
|
|
117
|
-
// Subtle accent border on hover for visual interest
|
|
118
|
-
&::before {
|
|
119
|
-
content: "";
|
|
120
|
-
position: absolute;
|
|
121
|
-
top: 0;
|
|
122
|
-
left: 0;
|
|
123
|
-
right: 0;
|
|
124
|
-
height: 2px;
|
|
125
|
-
background: linear-gradient(90deg, var(--osi-accent) 0%, transparent 100%);
|
|
126
|
-
opacity: 0;
|
|
127
|
-
transition: opacity var(--osi-duration-normal) var(--osi-ease-out);
|
|
128
|
-
border-radius: var(--osi-radius-md) var(--osi-radius-md) 0 0;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
&:hover {
|
|
132
|
-
transform: translateY(-2px);
|
|
133
|
-
box-shadow: var(--osi-shadow-md);
|
|
134
|
-
border-color: var(--osi-border);
|
|
135
|
-
|
|
136
|
-
&::before {
|
|
137
|
-
opacity: 0.6;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
&:focus-visible {
|
|
142
|
-
outline: 2px solid var(--osi-accent);
|
|
143
|
-
outline-offset: 2px;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
@mixin card-interactive {
|
|
148
|
-
@include card-elevated;
|
|
149
|
-
cursor: pointer;
|
|
150
|
-
|
|
151
|
-
&:hover {
|
|
152
|
-
background: var(--osi-surface-hover);
|
|
153
|
-
border-color: var(--osi-border);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
&:active {
|
|
157
|
-
transform: translateY(0);
|
|
158
|
-
box-shadow: var(--osi-shadow-sm);
|
|
159
|
-
background: var(--osi-surface-raised);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
&:focus-visible {
|
|
163
|
-
outline: 2px solid var(--osi-accent);
|
|
164
|
-
outline-offset: 2px;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
169
|
-
// ITEM STYLES (Individual items in lists/grids)
|
|
170
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
171
|
-
|
|
172
|
-
@mixin item-base {
|
|
173
|
-
padding: var(--osi-item-padding);
|
|
174
|
-
border-radius: var(--osi-radius-sm);
|
|
175
|
-
transition: all var(--osi-duration-normal) var(--osi-ease-out);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
@mixin item-hoverable {
|
|
179
|
-
@include item-base;
|
|
180
|
-
|
|
181
|
-
&:hover {
|
|
182
|
-
background: var(--osi-surface-raised);
|
|
183
|
-
transform: translateX(4px);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
@mixin item-with-border {
|
|
188
|
-
@include item-base;
|
|
189
|
-
background: var(--osi-surface-raised);
|
|
190
|
-
border: 1px solid var(--osi-border);
|
|
191
|
-
|
|
192
|
-
&:hover {
|
|
193
|
-
border-color: var(--osi-border);
|
|
194
|
-
background: var(--osi-surface-hover);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
199
|
-
// TYPOGRAPHY PATTERNS
|
|
200
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
201
|
-
|
|
202
|
-
// Item title (h4-h6 level headings in items)
|
|
203
|
-
@mixin item-title {
|
|
204
|
-
margin: 0;
|
|
205
|
-
font-size: var(--osi-text-base);
|
|
206
|
-
font-weight: var(--osi-font-semibold);
|
|
207
|
-
line-height: var(--osi-leading-snug);
|
|
208
|
-
color: var(--osi-foreground);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// Item label (small uppercase labels)
|
|
212
|
-
@mixin item-label {
|
|
213
|
-
font-size: var(--osi-text-xs);
|
|
214
|
-
font-weight: var(--osi-font-medium);
|
|
215
|
-
line-height: var(--osi-leading-tight);
|
|
216
|
-
color: var(--osi-muted-foreground);
|
|
217
|
-
text-transform: uppercase;
|
|
218
|
-
letter-spacing: var(--osi-tracking-wider);
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
// Item value (prominent values)
|
|
222
|
-
@mixin item-value {
|
|
223
|
-
font-size: var(--osi-text-md);
|
|
224
|
-
font-weight: var(--osi-font-semibold);
|
|
225
|
-
line-height: var(--osi-leading-normal);
|
|
226
|
-
color: var(--osi-foreground);
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
// Item description (secondary text)
|
|
230
|
-
@mixin item-description {
|
|
231
|
-
font-size: var(--osi-text-sm);
|
|
232
|
-
font-weight: var(--osi-font-normal);
|
|
233
|
-
line-height: var(--osi-leading-relaxed);
|
|
234
|
-
color: var(--osi-muted-foreground);
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
// Number display (for metrics, analytics)
|
|
238
|
-
@mixin number-display {
|
|
239
|
-
font-size: var(--osi-text-2xl);
|
|
240
|
-
font-weight: var(--osi-font-bold);
|
|
241
|
-
line-height: 1;
|
|
242
|
-
letter-spacing: var(--osi-tracking-tight);
|
|
243
|
-
font-variant-numeric: tabular-nums;
|
|
244
|
-
color: var(--osi-foreground);
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
248
|
-
// CONTENT STRUCTURE (Common element layouts)
|
|
249
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
250
|
-
|
|
251
|
-
@mixin content-header {
|
|
252
|
-
display: flex;
|
|
253
|
-
align-items: center;
|
|
254
|
-
justify-content: space-between;
|
|
255
|
-
gap: var(--osi-spacing-md);
|
|
256
|
-
margin-bottom: var(--osi-spacing-sm);
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
@mixin content-body {
|
|
260
|
-
display: flex;
|
|
261
|
-
flex-direction: column;
|
|
262
|
-
gap: var(--osi-element-gap);
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
@mixin content-footer {
|
|
266
|
-
display: flex;
|
|
267
|
-
align-items: center;
|
|
268
|
-
gap: var(--osi-spacing-sm);
|
|
269
|
-
margin-top: var(--osi-spacing-sm);
|
|
270
|
-
padding-top: var(--osi-spacing-sm);
|
|
271
|
-
border-top: 1px solid var(--osi-border-muted);
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
275
|
-
// COMMON PATTERNS
|
|
276
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
277
|
-
|
|
278
|
-
// Metadata row (icons + text)
|
|
279
|
-
@mixin metadata-row {
|
|
280
|
-
display: flex;
|
|
281
|
-
align-items: center;
|
|
282
|
-
gap: var(--osi-spacing-xs);
|
|
283
|
-
font-size: var(--osi-text-sm);
|
|
284
|
-
color: var(--osi-muted-foreground);
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
// Badge container
|
|
288
|
-
@mixin badge-container {
|
|
289
|
-
display: flex;
|
|
290
|
-
align-items: center;
|
|
291
|
-
gap: var(--osi-spacing-xs);
|
|
292
|
-
flex-wrap: wrap;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
// Avatar (circular)
|
|
296
|
-
@mixin avatar($size: 40px) {
|
|
297
|
-
width: $size;
|
|
298
|
-
height: $size;
|
|
299
|
-
border-radius: var(--osi-radius-full);
|
|
300
|
-
object-fit: cover;
|
|
301
|
-
background: var(--osi-surface-hover);
|
|
302
|
-
display: flex;
|
|
303
|
-
align-items: center;
|
|
304
|
-
justify-content: center;
|
|
305
|
-
font-size: calc($size * 0.4);
|
|
306
|
-
font-weight: var(--osi-font-semibold);
|
|
307
|
-
color: var(--osi-foreground);
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
// Icon wrapper
|
|
311
|
-
@mixin icon-wrapper($size: 24px) {
|
|
312
|
-
width: $size;
|
|
313
|
-
height: $size;
|
|
314
|
-
display: flex;
|
|
315
|
-
align-items: center;
|
|
316
|
-
justify-content: center;
|
|
317
|
-
flex-shrink: 0;
|
|
318
|
-
color: var(--osi-muted-foreground);
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
// Divider line
|
|
322
|
-
@mixin divider {
|
|
323
|
-
height: 1px;
|
|
324
|
-
background: var(--osi-border-muted);
|
|
325
|
-
margin: var(--osi-spacing-sm) 0;
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
329
|
-
// ANIMATION PATTERNS
|
|
330
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
331
|
-
|
|
332
|
-
// Fade in animation
|
|
333
|
-
@mixin fade-in {
|
|
334
|
-
animation: fadeIn var(--osi-duration-medium) var(--osi-ease-out);
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
@keyframes fadeIn {
|
|
338
|
-
from {
|
|
339
|
-
opacity: 0;
|
|
340
|
-
transform: translateY(8px);
|
|
341
|
-
}
|
|
342
|
-
to {
|
|
343
|
-
opacity: 1;
|
|
344
|
-
transform: translateY(0);
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
// Slide in animation
|
|
349
|
-
@mixin slide-in-right {
|
|
350
|
-
animation: slideInRight var(--osi-duration-medium) var(--osi-ease-out);
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
@keyframes slideInRight {
|
|
354
|
-
from {
|
|
355
|
-
opacity: 0;
|
|
356
|
-
transform: translateX(-16px);
|
|
357
|
-
}
|
|
358
|
-
to {
|
|
359
|
-
opacity: 1;
|
|
360
|
-
transform: translateX(0);
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
// Scale in animation
|
|
365
|
-
@mixin scale-in {
|
|
366
|
-
animation: scaleIn var(--osi-duration-normal) var(--osi-ease-bounce);
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
@keyframes scaleIn {
|
|
370
|
-
from {
|
|
371
|
-
opacity: 0;
|
|
372
|
-
transform: scale(0.95);
|
|
373
|
-
}
|
|
374
|
-
to {
|
|
375
|
-
opacity: 1;
|
|
376
|
-
transform: scale(1);
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
381
|
-
// ACCESSIBILITY PATTERNS
|
|
382
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
383
|
-
|
|
384
|
-
// Screen reader only
|
|
385
|
-
@mixin sr-only {
|
|
386
|
-
position: absolute;
|
|
387
|
-
width: 1px;
|
|
388
|
-
height: 1px;
|
|
389
|
-
padding: 0;
|
|
390
|
-
margin: -1px;
|
|
391
|
-
overflow: hidden;
|
|
392
|
-
clip: rect(0, 0, 0, 0);
|
|
393
|
-
white-space: nowrap;
|
|
394
|
-
border-width: 0;
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
// Focus visible (keyboard navigation)
|
|
398
|
-
@mixin focus-visible {
|
|
399
|
-
&:focus-visible {
|
|
400
|
-
outline: 2px solid var(--osi-accent);
|
|
401
|
-
outline-offset: 2px;
|
|
402
|
-
border-radius: var(--osi-radius-sm);
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
// Interactive element states
|
|
407
|
-
@mixin interactive-states {
|
|
408
|
-
@include focus-visible;
|
|
409
|
-
|
|
410
|
-
&:hover {
|
|
411
|
-
@content;
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
&:active {
|
|
415
|
-
transform: scale(0.98);
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
@media (prefers-reduced-motion: reduce) {
|
|
419
|
-
transition: none;
|
|
420
|
-
|
|
421
|
-
&:hover,
|
|
422
|
-
&:active {
|
|
423
|
-
transform: none;
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
}
|
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
// =====================================================================
|
|
2
|
-
// DESIGN SYSTEM TOKENS - Universal Variables
|
|
3
|
-
// =====================================================================
|
|
4
|
-
// This file defines all design tokens used across sections
|
|
5
|
-
// Use these tokens instead of hardcoded values for consistency
|
|
6
|
-
|
|
7
|
-
:root {
|
|
8
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
9
|
-
// SPACING SCALE (4px base unit)
|
|
10
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
11
|
-
--osi-spacing-xs: 4px;
|
|
12
|
-
--osi-spacing-sm: 8px;
|
|
13
|
-
--osi-spacing-md: 12px;
|
|
14
|
-
--osi-spacing-lg: 16px;
|
|
15
|
-
--osi-spacing-xl: 24px;
|
|
16
|
-
--osi-spacing-2xl: 32px;
|
|
17
|
-
--osi-spacing-3xl: 48px;
|
|
18
|
-
|
|
19
|
-
// Section-specific spacing (More compact by default)
|
|
20
|
-
--osi-section-header-gap: var(--osi-spacing-sm); // 8px (was 12px)
|
|
21
|
-
--osi-section-padding: var(--osi-spacing-sm); // 8px (was 12px)
|
|
22
|
-
--osi-section-gap: var(--osi-spacing-md); // 12px (was 16px)
|
|
23
|
-
--osi-item-padding: var(--osi-spacing-sm); // 8px (was 12px)
|
|
24
|
-
--osi-item-gap: var(--osi-spacing-xs); // 4px (was 8px)
|
|
25
|
-
--osi-element-gap: 2px; // 2px (was 4px)
|
|
26
|
-
|
|
27
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
28
|
-
// TYPOGRAPHY SCALE
|
|
29
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
30
|
-
|
|
31
|
-
// Font Sizes (rem-based for accessibility)
|
|
32
|
-
--osi-text-xs: 0.75rem; // 12px
|
|
33
|
-
--osi-text-sm: 0.875rem; // 14px
|
|
34
|
-
--osi-text-base: 1rem; // 16px
|
|
35
|
-
--osi-text-md: 1.125rem; // 18px
|
|
36
|
-
--osi-text-lg: 1.25rem; // 20px
|
|
37
|
-
--osi-text-xl: 1.5rem; // 24px
|
|
38
|
-
--osi-text-2xl: 1.875rem; // 30px
|
|
39
|
-
--osi-text-3xl: 2.25rem; // 36px
|
|
40
|
-
|
|
41
|
-
// Font Weights
|
|
42
|
-
--osi-font-normal: 400;
|
|
43
|
-
--osi-font-medium: 500;
|
|
44
|
-
--osi-font-semibold: 600;
|
|
45
|
-
--osi-font-bold: 700;
|
|
46
|
-
|
|
47
|
-
// Line Heights
|
|
48
|
-
--osi-leading-tight: 1.25;
|
|
49
|
-
--osi-leading-snug: 1.375;
|
|
50
|
-
--osi-leading-normal: 1.5;
|
|
51
|
-
--osi-leading-relaxed: 1.625;
|
|
52
|
-
--osi-leading-loose: 2;
|
|
53
|
-
|
|
54
|
-
// Letter Spacing
|
|
55
|
-
--osi-tracking-tight: -0.025em;
|
|
56
|
-
--osi-tracking-normal: 0;
|
|
57
|
-
--osi-tracking-wide: 0.025em;
|
|
58
|
-
--osi-tracking-wider: 0.05em;
|
|
59
|
-
|
|
60
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
61
|
-
// COLOR SYSTEM - Semantic Colors
|
|
62
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
63
|
-
|
|
64
|
-
// Surface Colors (Layering)
|
|
65
|
-
--osi-surface: hsl(0, 0%, 10%); // #1a1a1a
|
|
66
|
-
--osi-surface-raised: hsl(0, 0%, 15%); // #262626
|
|
67
|
-
--osi-surface-hover: hsl(0, 0%, 20%); // #333333
|
|
68
|
-
--osi-surface-subtle: hsl(0, 0%, 12%); // #1f1f1f
|
|
69
|
-
|
|
70
|
-
// Text Colors
|
|
71
|
-
--osi-foreground: hsl(0, 0%, 95%); // #f2f2f2
|
|
72
|
-
--osi-foreground-strong: hsl(0, 0%, 100%); // #ffffff
|
|
73
|
-
--osi-muted-foreground: hsl(0, 0%, 60%); // #999999
|
|
74
|
-
--osi-disabled-foreground: hsl(0, 0%, 40%); // #666666
|
|
75
|
-
|
|
76
|
-
// Brand/Accent Colors
|
|
77
|
-
--osi-accent: hsl(25, 100%, 50%); // #ff7900
|
|
78
|
-
--osi-accent-bright: hsl(25, 100%, 60%); // #ffa347
|
|
79
|
-
--osi-accent-muted: hsl(25, 50%, 40%); // #bf7400
|
|
80
|
-
|
|
81
|
-
// Status Colors
|
|
82
|
-
--osi-success: hsl(142, 71%, 45%); // #22c55e
|
|
83
|
-
--osi-success-bg: hsla(142, 71%, 45%, 0.15);
|
|
84
|
-
--osi-success-bright: hsl(142, 71%, 55%);
|
|
85
|
-
|
|
86
|
-
--osi-error: hsl(0, 84%, 60%); // #ef4444
|
|
87
|
-
--osi-error-bg: hsla(0, 84%, 60%, 0.15);
|
|
88
|
-
--osi-error-bright: hsl(0, 84%, 70%);
|
|
89
|
-
|
|
90
|
-
--osi-warning: hsl(45, 93%, 47%); // #eab308
|
|
91
|
-
--osi-warning-bg: hsla(45, 93%, 47%, 0.15);
|
|
92
|
-
--osi-warning-bright: hsl(45, 93%, 57%);
|
|
93
|
-
|
|
94
|
-
--osi-info: hsl(221, 83%, 53%); // #3b82f6
|
|
95
|
-
--osi-info-bg: hsla(221, 83%, 53%, 0.15);
|
|
96
|
-
--osi-info-bright: hsl(221, 83%, 63%);
|
|
97
|
-
|
|
98
|
-
// Border Colors
|
|
99
|
-
--osi-border: hsla(0, 0%, 100%, 0.2); // rgba(255, 255, 255, 0.2)
|
|
100
|
-
--osi-border-muted: hsla(0, 0%, 100%, 0.06);
|
|
101
|
-
--osi-border-strong: hsla(0, 0%, 100%, 0.35);
|
|
102
|
-
|
|
103
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
104
|
-
// BORDER RADIUS
|
|
105
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
106
|
-
--osi-radius-none: 0;
|
|
107
|
-
--osi-radius-sm: 4px;
|
|
108
|
-
--osi-radius-md: 8px;
|
|
109
|
-
--osi-radius-lg: 12px;
|
|
110
|
-
--osi-radius-xl: 16px;
|
|
111
|
-
--osi-radius-full: 9999px;
|
|
112
|
-
|
|
113
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
114
|
-
// SHADOWS (Elevation)
|
|
115
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
116
|
-
--osi-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
|
|
117
|
-
--osi-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);
|
|
118
|
-
--osi-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);
|
|
119
|
-
--osi-shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.15);
|
|
120
|
-
--osi-shadow-2xl: 0 25px 50px rgba(0, 0, 0, 0.25);
|
|
121
|
-
|
|
122
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
123
|
-
// TRANSITIONS & ANIMATIONS
|
|
124
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
125
|
-
|
|
126
|
-
// Durations
|
|
127
|
-
--osi-duration-fast: 150ms;
|
|
128
|
-
--osi-duration-normal: 200ms;
|
|
129
|
-
--osi-duration-medium: 300ms;
|
|
130
|
-
--osi-duration-slow: 600ms;
|
|
131
|
-
|
|
132
|
-
// Easing Functions
|
|
133
|
-
--osi-ease-linear: linear;
|
|
134
|
-
--osi-ease-in: cubic-bezier(0.4, 0, 1, 1);
|
|
135
|
-
--osi-ease-out: cubic-bezier(0, 0, 0.2, 1);
|
|
136
|
-
--osi-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
|
|
137
|
-
--osi-ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
|
|
138
|
-
|
|
139
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
140
|
-
// Z-INDEX SCALE
|
|
141
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
142
|
-
--osi-z-base: 0;
|
|
143
|
-
--osi-z-raised: 10;
|
|
144
|
-
--osi-z-dropdown: 100;
|
|
145
|
-
--osi-z-sticky: 200;
|
|
146
|
-
--osi-z-fixed: 300;
|
|
147
|
-
--osi-z-modal: 400;
|
|
148
|
-
--osi-z-popover: 500;
|
|
149
|
-
--osi-z-tooltip: 600;
|
|
150
|
-
|
|
151
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
152
|
-
// GRID & LAYOUT
|
|
153
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
154
|
-
--osi-grid-gap: var(--osi-spacing-md);
|
|
155
|
-
--osi-grid-row-gap: var(--osi-grid-gap);
|
|
156
|
-
--osi-grid-column-gap: var(--osi-grid-gap);
|
|
157
|
-
|
|
158
|
-
// Common grid column widths
|
|
159
|
-
--osi-grid-min-small: 140px; // Analytics cards
|
|
160
|
-
--osi-grid-min-medium: 200px; // Contact cards
|
|
161
|
-
--osi-grid-min-large: 300px; // Gallery items
|
|
162
|
-
|
|
163
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
164
|
-
// COMPACT SIZES (for min-heights, etc.)
|
|
165
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
166
|
-
--osi-card-min-height: 90px; // Compact metric cards (was 120px)
|
|
167
|
-
--osi-card-min-height-large: 120px; // Larger cards when needed
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
171
|
-
// RESPONSIVE BREAKPOINTS
|
|
172
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
173
|
-
|
|
174
|
-
$osi-breakpoint-sm: 640px; // Small devices
|
|
175
|
-
$osi-breakpoint-md: 768px; // Medium devices
|
|
176
|
-
$osi-breakpoint-lg: 1024px; // Large devices
|
|
177
|
-
$osi-breakpoint-xl: 1280px; // Extra large devices
|
|
178
|
-
|
|
179
|
-
// Responsive mixins
|
|
180
|
-
@mixin mobile {
|
|
181
|
-
@media (max-width: #{$osi-breakpoint-sm - 1px}) {
|
|
182
|
-
@content;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
@mixin tablet {
|
|
187
|
-
@media (min-width: $osi-breakpoint-sm) and (max-width: #{$osi-breakpoint-md - 1px}) {
|
|
188
|
-
@content;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
@mixin desktop {
|
|
193
|
-
@media (min-width: $osi-breakpoint-md) {
|
|
194
|
-
@content;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
@mixin large-desktop {
|
|
199
|
-
@media (min-width: $osi-breakpoint-lg) {
|
|
200
|
-
@content;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
205
|
-
// DARK MODE OVERRIDES
|
|
206
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
207
|
-
|
|
208
|
-
@media (prefers-color-scheme: dark) {
|
|
209
|
-
:root {
|
|
210
|
-
--osi-surface: hsl(0, 0%, 8%);
|
|
211
|
-
--osi-surface-raised: hsl(0, 0%, 12%);
|
|
212
|
-
--osi-surface-hover: hsl(0, 0%, 16%);
|
|
213
|
-
--osi-border-muted: hsla(0, 0%, 100%, 0.04);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
218
|
-
// ACCESSIBILITY
|
|
219
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
220
|
-
|
|
221
|
-
// High contrast mode support
|
|
222
|
-
@media (prefers-contrast: high) {
|
|
223
|
-
:root {
|
|
224
|
-
--osi-border: hsla(0, 0%, 100%, 0.4);
|
|
225
|
-
--osi-border-strong: hsla(0, 0%, 100%, 0.6);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
// Reduced motion support
|
|
230
|
-
@media (prefers-reduced-motion: reduce) {
|
|
231
|
-
:root {
|
|
232
|
-
--osi-duration-fast: 0ms;
|
|
233
|
-
--osi-duration-normal: 0ms;
|
|
234
|
-
--osi-duration-medium: 0ms;
|
|
235
|
-
--osi-duration-slow: 0ms;
|
|
236
|
-
}
|
|
237
|
-
}
|