osi-cards-lib 1.5.2 → 1.5.4
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 +819 -14
- package/fesm2022/osi-cards-lib.mjs +21253 -12686
- package/index.d.ts +5240 -2510
- package/package.json +1 -1
- package/styles/_components.scss +6 -27
- package/styles/_index.scss +28 -0
- package/styles/_osi-cards-mixins.scss +430 -0
- package/styles/_osi-cards-tokens.scss +327 -0
- package/styles/_styles-scoped.scss +23 -44
- package/styles/_styles-standalone.scss +1564 -1195
- package/styles/bundles/_ai-card.scss +29 -56
- package/styles/bundles/_all.scss +4 -25
- package/styles/bundles/_base.scss +5 -6
- package/styles/bundles/_card-skeleton.scss +5 -0
- package/styles/bundles/_index.scss +6 -13
- package/styles/bundles/_sections.scss +2 -29
- package/styles/bundles/_tokens-only.scss +5 -0
- package/styles/bundles/ai-card.css +1 -1
- package/styles/bundles/ai-card.expanded.css +8175 -20768
- package/styles/bundles/all.css +1 -1
- package/styles/bundles/all.expanded.css +5067 -18374
- package/styles/bundles/base.css +1 -1
- package/styles/bundles/base.expanded.css +5562 -2460
- package/styles/bundles/sections.css +2 -0
- package/styles/bundles/sections.expanded.css +8458 -0
- package/styles/components/_ai-card-renderer.scss +5 -0
- package/styles/components/_badges.scss +5 -0
- package/styles/components/_hero-card.scss +5 -0
- package/styles/components/_image-fallback.scss +5 -0
- package/styles/components/cards/_ai-card.scss +91 -148
- package/styles/components/sections/_all-sections.generated.scss +41 -0
- package/styles/components/sections/_all-sections.scss +1079 -0
- package/styles/components/sections/_balanced-compact-system.scss +187 -0
- package/styles/components/sections/_compact-mixins.scss +181 -0
- package/styles/components/sections/_component-mixins.scss +454 -0
- package/styles/components/sections/_design-system.scss +351 -380
- package/styles/components/sections/_design-tokens.scss +301 -0
- package/styles/components/sections/_enhanced-design-variables.scss +148 -0
- package/styles/components/sections/_master-compact-system.scss +295 -0
- package/styles/components/sections/_master-dense-system.scss +237 -0
- package/styles/components/sections/_minimalistic-design.scss +269 -0
- package/styles/components/sections/_modern-effects.scss +412 -0
- package/styles/components/sections/_modern-sections.scss +336 -0
- package/styles/components/sections/_perfect-system.scss +205 -0
- package/styles/components/sections/_section-shell.scss +27 -123
- package/styles/components/sections/_section-types.generated.scss +27 -34
- package/styles/components/sections/_sections-all.scss +25 -0
- package/styles/components/sections/_sections-base.scss +161 -208
- package/styles/components/sections/_typography-system.scss +322 -0
- package/styles/components/sections/_ultra-compact-tokens.scss +352 -0
- package/styles/components/sections/_unified-section-style.scss +158 -0
- package/styles/components/sections/_utility-classes.scss +270 -0
- package/styles/components/sections/_visual-effects-library.scss +355 -0
- package/styles/core/_surface-layers.scss +9 -12
- package/styles/critical.scss +356 -0
- package/styles/design-system/_compact-theme.scss +160 -0
- package/styles/design-system/_section-base.scss +395 -0
- package/styles/design-system/_tokens.scss +238 -0
- package/styles/design-system/_unified-sections.scss +216 -0
- package/styles/layout/_feature-grid.scss +5 -0
- package/styles/layout/_masonry.scss +313 -37
- package/styles/micro-interactions.scss +5 -0
- package/styles/mixins/_section-mixins.scss +279 -0
- package/styles/non-critical.scss +641 -0
- package/styles/osi-cards-scoped.css +1 -1
- package/styles/osi-cards-scoped.expanded.css +4971 -17744
- package/styles/osi-cards-standalone.css +1 -1
- package/styles/osi-cards-standalone.expanded.css +5051 -17804
- package/styles/osi-cards-tokens.css +1 -1
- package/styles/osi-cards-tokens.expanded.css +193 -195
- package/styles/osi-cards.css +1 -1
- package/styles/osi-cards.expanded.css +4915 -17691
- package/styles/reset/_framework-reset.scss +5 -0
- package/styles/responsive.scss +5 -0
- package/styles/tokens/_master.scss +131 -127
- package/styles/_design-tokens.scss +0 -349
- package/styles/bundles/_section-analytics.scss +0 -10
- package/styles/bundles/_section-chart.scss +0 -10
- package/styles/bundles/_section-contact.scss +0 -11
- package/styles/bundles/_section-list.scss +0 -10
- package/styles/bundles/_section-news.scss +0 -10
- package/styles/bundles/_section-overview.scss +0 -10
- package/styles/bundles/section-analytics.css +0 -2
- package/styles/bundles/section-news.css +0 -2
- package/styles/bundles/section-overview.css +0 -2
- package/styles/components/sections/_analytics.scss +0 -288
- package/styles/components/sections/_brand-colors.scss +0 -259
- package/styles/components/sections/_chart.scss +0 -296
- package/styles/components/sections/_contact.scss +0 -265
- package/styles/components/sections/_event.scss +0 -285
- package/styles/components/sections/_fallback.scss +0 -175
- package/styles/components/sections/_financials.scss +0 -264
- package/styles/components/sections/_global-enforcement.scss +0 -757
- package/styles/components/sections/_info.scss +0 -230
- package/styles/components/sections/_list.scss +0 -260
- package/styles/components/sections/_map.scss +0 -208
- package/styles/components/sections/_network.scss +0 -122
- package/styles/components/sections/_news.scss +0 -98
- package/styles/components/sections/_overview.scss +0 -165
- package/styles/components/sections/_product.scss +0 -950
- package/styles/components/sections/_quotation.scss +0 -137
- package/styles/components/sections/_section-types.scss +0 -348
- package/styles/components/sections/_social-media.scss +0 -94
- package/styles/components/sections/_solutions.scss +0 -220
- package/styles/components/sections/_text-reference.scss +0 -141
- package/styles/components/sections/_unified-cards.scss +0 -124
- package/styles/core/_animations-shadow.scss +0 -763
- package/styles/core/_tokens-source.scss +0 -16
package/package.json
CHANGED
package/styles/_components.scss
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/* ===================================================================
|
|
2
2
|
SHARED COMPONENT STYLES BUNDLE
|
|
3
|
-
|
|
3
|
+
|
|
4
4
|
This file contains all component imports shared across all entry points:
|
|
5
5
|
- _styles.scss (demo app, :root scope)
|
|
6
6
|
- _styles-scoped.scss (integration, .osi-cards-container scope)
|
|
7
7
|
- _styles-standalone.scss (full isolation with Bootstrap reset)
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
Each entry point imports this bundle after setting up its scope and variables.
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
Note: Using @import here as Sass @use/@forward requires restructuring
|
|
12
12
|
the entire SCSS architecture. These warnings can be safely ignored
|
|
13
13
|
until Dart Sass 3.0.0 when migration will be required.
|
|
@@ -33,27 +33,6 @@
|
|
|
33
33
|
|
|
34
34
|
// Component styles
|
|
35
35
|
@import "components/cards/ai-card";
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
@import "components/sections/
|
|
39
|
-
@import "components/sections/section-shell";
|
|
40
|
-
@import "components/sections/overview";
|
|
41
|
-
@import "components/sections/analytics";
|
|
42
|
-
@import "components/sections/news";
|
|
43
|
-
@import "components/sections/social-media";
|
|
44
|
-
@import "components/sections/info";
|
|
45
|
-
@import "components/sections/map";
|
|
46
|
-
@import "components/sections/list";
|
|
47
|
-
@import "components/sections/contact";
|
|
48
|
-
@import "components/sections/network";
|
|
49
|
-
@import "components/sections/product";
|
|
50
|
-
@import "components/sections/chart";
|
|
51
|
-
@import "components/sections/event";
|
|
52
|
-
@import "components/sections/financials";
|
|
53
|
-
@import "components/sections/solutions";
|
|
54
|
-
@import "components/sections/quotation";
|
|
55
|
-
@import "components/sections/text-reference";
|
|
56
|
-
@import "components/sections/brand-colors";
|
|
57
|
-
@import "components/sections/fallback";
|
|
58
|
-
@import "components/sections/unified-cards"; /* Must be last to override all section-specific styles */
|
|
59
|
-
@import "components/sections/global-enforcement"; /* GLOBAL ENFORCEMENT - MUST BE ABSOLUTELY LAST to enforce all settings */
|
|
36
|
+
|
|
37
|
+
// All section styles (consolidated)
|
|
38
|
+
@import "components/sections/sections-all";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OSI Cards Style System
|
|
3
|
+
* Single entry point for all styles
|
|
4
|
+
*
|
|
5
|
+
* Usage in applications:
|
|
6
|
+
* @use 'osi-cards-lib/styles' as osi;
|
|
7
|
+
*
|
|
8
|
+
* Or import individual parts:
|
|
9
|
+
* @use 'osi-cards-lib/styles/tokens' as tokens;
|
|
10
|
+
* @use 'osi-cards-lib/styles/mixins' as mixins;
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
// Design tokens (CSS custom properties)
|
|
14
|
+
@forward 'osi-cards-tokens';
|
|
15
|
+
|
|
16
|
+
// SCSS mixins and utilities
|
|
17
|
+
@forward 'osi-cards-mixins';
|
|
18
|
+
|
|
19
|
+
// Component styles
|
|
20
|
+
@forward 'components/card' as card-*;
|
|
21
|
+
@forward 'components/section' as section-*;
|
|
22
|
+
|
|
23
|
+
// Optional: Theme utilities
|
|
24
|
+
@forward 'themes/light' as light-*;
|
|
25
|
+
@forward 'themes/dark' as dark-*;
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OSI Cards SCSS Mixins
|
|
3
|
+
* Reusable style patterns for components
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* @use 'osi-cards-mixins' as mixins;
|
|
7
|
+
*
|
|
8
|
+
* .my-component {
|
|
9
|
+
* @include mixins.card-base;
|
|
10
|
+
* }
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// CARD MIXINS
|
|
15
|
+
// ============================================================================
|
|
16
|
+
|
|
17
|
+
/// Base card styles
|
|
18
|
+
@mixin card-base {
|
|
19
|
+
background: var(--osi-card-bg, white);
|
|
20
|
+
border: 1px solid var(--osi-card-border, var(--osi-neutral-200));
|
|
21
|
+
border-radius: var(--osi-card-radius, var(--osi-radius-xl));
|
|
22
|
+
box-shadow: var(--osi-card-shadow, var(--osi-shadow-md));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/// Card hover state
|
|
26
|
+
@mixin card-hover {
|
|
27
|
+
transition: transform var(--osi-duration-200) var(--osi-ease-out),
|
|
28
|
+
box-shadow var(--osi-duration-200) var(--osi-ease-out);
|
|
29
|
+
|
|
30
|
+
&:hover {
|
|
31
|
+
transform: translateY(-2px);
|
|
32
|
+
box-shadow: var(--osi-shadow-lg);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/// Card interactive (clickable)
|
|
37
|
+
@mixin card-interactive {
|
|
38
|
+
@include card-hover;
|
|
39
|
+
cursor: pointer;
|
|
40
|
+
|
|
41
|
+
&:active {
|
|
42
|
+
transform: translateY(0);
|
|
43
|
+
box-shadow: var(--osi-shadow-sm);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
&:focus-visible {
|
|
47
|
+
outline: 2px solid var(--osi-primary-500);
|
|
48
|
+
outline-offset: 2px;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// ============================================================================
|
|
53
|
+
// SECTION MIXINS
|
|
54
|
+
// ============================================================================
|
|
55
|
+
|
|
56
|
+
/// Base section styles
|
|
57
|
+
@mixin section-base {
|
|
58
|
+
padding: var(--osi-spacing-4);
|
|
59
|
+
|
|
60
|
+
& + & {
|
|
61
|
+
border-top: 1px solid var(--osi-border-default);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/// Section header styles
|
|
66
|
+
@mixin section-header {
|
|
67
|
+
display: flex;
|
|
68
|
+
align-items: center;
|
|
69
|
+
gap: var(--osi-spacing-2);
|
|
70
|
+
margin-bottom: var(--osi-spacing-3);
|
|
71
|
+
font-size: var(--osi-text-sm);
|
|
72
|
+
font-weight: var(--osi-font-semibold);
|
|
73
|
+
color: var(--osi-section-header-color);
|
|
74
|
+
text-transform: uppercase;
|
|
75
|
+
letter-spacing: 0.05em;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/// Section content styles
|
|
79
|
+
@mixin section-content {
|
|
80
|
+
color: var(--osi-section-content-color);
|
|
81
|
+
font-size: var(--osi-text-sm);
|
|
82
|
+
line-height: var(--osi-leading-relaxed);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// ============================================================================
|
|
86
|
+
// FIELD MIXINS
|
|
87
|
+
// ============================================================================
|
|
88
|
+
|
|
89
|
+
/// Field container
|
|
90
|
+
@mixin field-container {
|
|
91
|
+
display: flex;
|
|
92
|
+
flex-direction: column;
|
|
93
|
+
gap: var(--osi-field-gap);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/// Field label
|
|
97
|
+
@mixin field-label {
|
|
98
|
+
font-size: var(--osi-text-xs);
|
|
99
|
+
font-weight: var(--osi-font-medium);
|
|
100
|
+
color: var(--osi-field-label-color);
|
|
101
|
+
text-transform: uppercase;
|
|
102
|
+
letter-spacing: 0.05em;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/// Field value
|
|
106
|
+
@mixin field-value {
|
|
107
|
+
font-size: var(--osi-text-base);
|
|
108
|
+
font-weight: var(--osi-font-medium);
|
|
109
|
+
color: var(--osi-field-value-color);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/// Field value large (for metrics)
|
|
113
|
+
@mixin field-value-lg {
|
|
114
|
+
font-size: var(--osi-text-2xl);
|
|
115
|
+
font-weight: var(--osi-font-bold);
|
|
116
|
+
color: var(--osi-field-value-color);
|
|
117
|
+
line-height: var(--osi-leading-tight);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// ============================================================================
|
|
121
|
+
// GRID MIXINS
|
|
122
|
+
// ============================================================================
|
|
123
|
+
|
|
124
|
+
/// Responsive grid container
|
|
125
|
+
@mixin grid-container($min-column: 200px, $gap: var(--osi-grid-gap)) {
|
|
126
|
+
display: grid;
|
|
127
|
+
grid-template-columns: repeat(auto-fit, minmax($min-column, 1fr));
|
|
128
|
+
gap: $gap;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/// Fixed column grid
|
|
132
|
+
@mixin grid-fixed($columns: 2, $gap: var(--osi-grid-gap)) {
|
|
133
|
+
display: grid;
|
|
134
|
+
grid-template-columns: repeat($columns, 1fr);
|
|
135
|
+
gap: $gap;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/// Masonry-like grid (using CSS grid)
|
|
139
|
+
@mixin masonry-grid($min-column: 250px) {
|
|
140
|
+
display: grid;
|
|
141
|
+
grid-template-columns: repeat(auto-fill, minmax($min-column, 1fr));
|
|
142
|
+
grid-auto-rows: 20px;
|
|
143
|
+
gap: var(--osi-spacing-4);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// ============================================================================
|
|
147
|
+
// TYPOGRAPHY MIXINS
|
|
148
|
+
// ============================================================================
|
|
149
|
+
|
|
150
|
+
/// Heading styles
|
|
151
|
+
@mixin heading($level: 1) {
|
|
152
|
+
font-family: var(--osi-font-sans);
|
|
153
|
+
font-weight: var(--osi-font-bold);
|
|
154
|
+
line-height: var(--osi-leading-tight);
|
|
155
|
+
color: var(--osi-text-primary);
|
|
156
|
+
|
|
157
|
+
@if $level == 1 {
|
|
158
|
+
font-size: var(--osi-text-3xl);
|
|
159
|
+
} @else if $level == 2 {
|
|
160
|
+
font-size: var(--osi-text-2xl);
|
|
161
|
+
} @else if $level == 3 {
|
|
162
|
+
font-size: var(--osi-text-xl);
|
|
163
|
+
} @else if $level == 4 {
|
|
164
|
+
font-size: var(--osi-text-lg);
|
|
165
|
+
} @else {
|
|
166
|
+
font-size: var(--osi-text-base);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/// Body text
|
|
171
|
+
@mixin body-text {
|
|
172
|
+
font-family: var(--osi-font-sans);
|
|
173
|
+
font-size: var(--osi-text-base);
|
|
174
|
+
font-weight: var(--osi-font-normal);
|
|
175
|
+
line-height: var(--osi-leading-normal);
|
|
176
|
+
color: var(--osi-text-secondary);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/// Small text
|
|
180
|
+
@mixin small-text {
|
|
181
|
+
font-size: var(--osi-text-sm);
|
|
182
|
+
color: var(--osi-text-tertiary);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/// Truncate text with ellipsis
|
|
186
|
+
@mixin truncate {
|
|
187
|
+
overflow: hidden;
|
|
188
|
+
text-overflow: ellipsis;
|
|
189
|
+
white-space: nowrap;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/// Multi-line truncate
|
|
193
|
+
@mixin line-clamp($lines: 2) {
|
|
194
|
+
display: -webkit-box;
|
|
195
|
+
-webkit-line-clamp: $lines;
|
|
196
|
+
-webkit-box-orient: vertical;
|
|
197
|
+
overflow: hidden;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// ============================================================================
|
|
201
|
+
// BUTTON MIXINS
|
|
202
|
+
// ============================================================================
|
|
203
|
+
|
|
204
|
+
/// Base button styles
|
|
205
|
+
@mixin button-base {
|
|
206
|
+
display: inline-flex;
|
|
207
|
+
align-items: center;
|
|
208
|
+
justify-content: center;
|
|
209
|
+
gap: var(--osi-spacing-2);
|
|
210
|
+
padding: var(--osi-btn-padding-y) var(--osi-btn-padding-x);
|
|
211
|
+
font-size: var(--osi-btn-font-size);
|
|
212
|
+
font-weight: var(--osi-btn-font-weight);
|
|
213
|
+
border-radius: var(--osi-btn-radius);
|
|
214
|
+
border: none;
|
|
215
|
+
cursor: pointer;
|
|
216
|
+
transition: all var(--osi-duration-150) var(--osi-ease-out);
|
|
217
|
+
|
|
218
|
+
&:disabled {
|
|
219
|
+
opacity: 0.5;
|
|
220
|
+
cursor: not-allowed;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
&:focus-visible {
|
|
224
|
+
outline: 2px solid var(--osi-primary-500);
|
|
225
|
+
outline-offset: 2px;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/// Primary button
|
|
230
|
+
@mixin button-primary {
|
|
231
|
+
@include button-base;
|
|
232
|
+
background: var(--osi-primary-500);
|
|
233
|
+
color: white;
|
|
234
|
+
|
|
235
|
+
&:hover:not(:disabled) {
|
|
236
|
+
background: var(--osi-primary-600);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
&:active:not(:disabled) {
|
|
240
|
+
background: var(--osi-primary-700);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/// Secondary button
|
|
245
|
+
@mixin button-secondary {
|
|
246
|
+
@include button-base;
|
|
247
|
+
background: var(--osi-neutral-100);
|
|
248
|
+
color: var(--osi-text-primary);
|
|
249
|
+
|
|
250
|
+
&:hover:not(:disabled) {
|
|
251
|
+
background: var(--osi-neutral-200);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
&:active:not(:disabled) {
|
|
255
|
+
background: var(--osi-neutral-300);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/// Ghost button
|
|
260
|
+
@mixin button-ghost {
|
|
261
|
+
@include button-base;
|
|
262
|
+
background: transparent;
|
|
263
|
+
color: var(--osi-text-secondary);
|
|
264
|
+
|
|
265
|
+
&:hover:not(:disabled) {
|
|
266
|
+
background: var(--osi-neutral-100);
|
|
267
|
+
color: var(--osi-text-primary);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// ============================================================================
|
|
272
|
+
// UTILITY MIXINS
|
|
273
|
+
// ============================================================================
|
|
274
|
+
|
|
275
|
+
/// Visually hidden (for screen readers)
|
|
276
|
+
@mixin visually-hidden {
|
|
277
|
+
position: absolute !important;
|
|
278
|
+
width: 1px !important;
|
|
279
|
+
height: 1px !important;
|
|
280
|
+
padding: 0 !important;
|
|
281
|
+
margin: -1px !important;
|
|
282
|
+
overflow: hidden !important;
|
|
283
|
+
clip: rect(0, 0, 0, 0) !important;
|
|
284
|
+
white-space: nowrap !important;
|
|
285
|
+
border: 0 !important;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/// Reset list styles
|
|
289
|
+
@mixin list-reset {
|
|
290
|
+
list-style: none;
|
|
291
|
+
margin: 0;
|
|
292
|
+
padding: 0;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/// Reset button styles
|
|
296
|
+
@mixin button-reset {
|
|
297
|
+
appearance: none;
|
|
298
|
+
background: none;
|
|
299
|
+
border: none;
|
|
300
|
+
padding: 0;
|
|
301
|
+
margin: 0;
|
|
302
|
+
font: inherit;
|
|
303
|
+
color: inherit;
|
|
304
|
+
cursor: pointer;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/// Flexbox center
|
|
308
|
+
@mixin flex-center {
|
|
309
|
+
display: flex;
|
|
310
|
+
align-items: center;
|
|
311
|
+
justify-content: center;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/// Flex column
|
|
315
|
+
@mixin flex-column {
|
|
316
|
+
display: flex;
|
|
317
|
+
flex-direction: column;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/// Flex between
|
|
321
|
+
@mixin flex-between {
|
|
322
|
+
display: flex;
|
|
323
|
+
align-items: center;
|
|
324
|
+
justify-content: space-between;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/// Absolute fill (position absolute, fill container)
|
|
328
|
+
@mixin absolute-fill {
|
|
329
|
+
position: absolute;
|
|
330
|
+
inset: 0;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/// Fixed fill (position fixed, fill viewport)
|
|
334
|
+
@mixin fixed-fill {
|
|
335
|
+
position: fixed;
|
|
336
|
+
inset: 0;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// ============================================================================
|
|
340
|
+
// RESPONSIVE MIXINS
|
|
341
|
+
// ============================================================================
|
|
342
|
+
|
|
343
|
+
/// Mobile-first breakpoint
|
|
344
|
+
@mixin breakpoint($size) {
|
|
345
|
+
@if $size == 'sm' {
|
|
346
|
+
@media (min-width: 640px) { @content; }
|
|
347
|
+
} @else if $size == 'md' {
|
|
348
|
+
@media (min-width: 768px) { @content; }
|
|
349
|
+
} @else if $size == 'lg' {
|
|
350
|
+
@media (min-width: 1024px) { @content; }
|
|
351
|
+
} @else if $size == 'xl' {
|
|
352
|
+
@media (min-width: 1280px) { @content; }
|
|
353
|
+
} @else if $size == '2xl' {
|
|
354
|
+
@media (min-width: 1536px) { @content; }
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/// Max-width breakpoint
|
|
359
|
+
@mixin breakpoint-down($size) {
|
|
360
|
+
@if $size == 'sm' {
|
|
361
|
+
@media (max-width: 639px) { @content; }
|
|
362
|
+
} @else if $size == 'md' {
|
|
363
|
+
@media (max-width: 767px) { @content; }
|
|
364
|
+
} @else if $size == 'lg' {
|
|
365
|
+
@media (max-width: 1023px) { @content; }
|
|
366
|
+
} @else if $size == 'xl' {
|
|
367
|
+
@media (max-width: 1279px) { @content; }
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
// ============================================================================
|
|
372
|
+
// ANIMATION MIXINS
|
|
373
|
+
// ============================================================================
|
|
374
|
+
|
|
375
|
+
/// Fade in animation
|
|
376
|
+
@mixin fade-in($duration: var(--osi-duration-200)) {
|
|
377
|
+
animation: osi-fade-in $duration var(--osi-ease-out);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/// Slide up animation
|
|
381
|
+
@mixin slide-up($duration: var(--osi-duration-300)) {
|
|
382
|
+
animation: osi-slide-up $duration var(--osi-ease-out);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/// Pulse animation
|
|
386
|
+
@mixin pulse($duration: 2s) {
|
|
387
|
+
animation: osi-pulse $duration infinite;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/// Loading shimmer
|
|
391
|
+
@mixin loading-shimmer {
|
|
392
|
+
background: linear-gradient(
|
|
393
|
+
90deg,
|
|
394
|
+
var(--osi-neutral-200) 25%,
|
|
395
|
+
var(--osi-neutral-100) 50%,
|
|
396
|
+
var(--osi-neutral-200) 75%
|
|
397
|
+
);
|
|
398
|
+
background-size: 200% 100%;
|
|
399
|
+
animation: osi-shimmer 1.5s infinite;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// Keyframe definitions
|
|
403
|
+
@keyframes osi-fade-in {
|
|
404
|
+
from { opacity: 0; }
|
|
405
|
+
to { opacity: 1; }
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
@keyframes osi-slide-up {
|
|
409
|
+
from {
|
|
410
|
+
opacity: 0;
|
|
411
|
+
transform: translateY(10px);
|
|
412
|
+
}
|
|
413
|
+
to {
|
|
414
|
+
opacity: 1;
|
|
415
|
+
transform: translateY(0);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
@keyframes osi-pulse {
|
|
420
|
+
0%, 100% { opacity: 1; }
|
|
421
|
+
50% { opacity: 0.5; }
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
@keyframes osi-shimmer {
|
|
425
|
+
0% { background-position: 200% 0; }
|
|
426
|
+
100% { background-position: -200% 0; }
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
|