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
package/styles/core/_mixins.scss
DELETED
|
@@ -1,491 +0,0 @@
|
|
|
1
|
-
/* ===================================================================
|
|
2
|
-
SHARED STYLING MIXINS FOR OSI CARDS
|
|
3
|
-
=================================================================== */
|
|
4
|
-
|
|
5
|
-
/* ===================================================================
|
|
6
|
-
IMPORTANT FLAG SYSTEM
|
|
7
|
-
Controls whether !important is applied for Bootstrap/Boosted overrides.
|
|
8
|
-
|
|
9
|
-
Usage:
|
|
10
|
-
- In scoped/standalone styles: $osi-use-important: true (default)
|
|
11
|
-
- In demo app styles: $osi-use-important: false
|
|
12
|
-
=================================================================== */
|
|
13
|
-
|
|
14
|
-
// Global flag - set to false in demo app entry point to disable !important
|
|
15
|
-
$osi-use-important: true !default;
|
|
16
|
-
|
|
17
|
-
/// Apply a property with conditional !important
|
|
18
|
-
/// @param {String} $property - CSS property name
|
|
19
|
-
/// @param {*} $value - Property value
|
|
20
|
-
@mixin important-prop($property, $value) {
|
|
21
|
-
@if $osi-use-important {
|
|
22
|
-
#{$property}: #{$value} !important;
|
|
23
|
-
} @else {
|
|
24
|
-
#{$property}: #{$value};
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/// Apply display property with conditional !important
|
|
29
|
-
@mixin display($value) {
|
|
30
|
-
@include important-prop("display", $value);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/// Apply width property with conditional !important
|
|
34
|
-
@mixin width($value) {
|
|
35
|
-
@include important-prop("width", $value);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/// Apply grid-template-columns with conditional !important
|
|
39
|
-
@mixin grid-columns($value) {
|
|
40
|
-
@include important-prop("grid-template-columns", $value);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/// Apply gap property with conditional !important
|
|
44
|
-
@mixin gap($value) {
|
|
45
|
-
@include important-prop("gap", $value);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/// Apply flex-direction with conditional !important
|
|
49
|
-
@mixin flex-direction($value) {
|
|
50
|
-
@include important-prop("flex-direction", $value);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/// Apply box-sizing with conditional !important
|
|
54
|
-
@mixin box-sizing($value) {
|
|
55
|
-
@include important-prop("box-sizing", $value);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/// Apply min-height with conditional !important
|
|
59
|
-
@mixin min-height($value) {
|
|
60
|
-
@include important-prop("min-height", $value);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/* Glass panel effect for cards and modals */
|
|
64
|
-
@mixin glass-panel(
|
|
65
|
-
$padding: 1.5rem,
|
|
66
|
-
$border-color: rgba(255, 255, 255, 0.08),
|
|
67
|
-
$background-start: rgba(16, 16, 24, 0.86),
|
|
68
|
-
$background-end: rgba(10, 10, 18, 0.92),
|
|
69
|
-
$shadow: 0 28px 70px rgba(0, 0, 0, 0.5)
|
|
70
|
-
) {
|
|
71
|
-
position: relative;
|
|
72
|
-
border-radius: 22px;
|
|
73
|
-
border: 1px solid $border-color;
|
|
74
|
-
background: color-mix(in srgb, $background-start 50%, $background-end 50%);
|
|
75
|
-
box-shadow: $shadow;
|
|
76
|
-
-webkit-backdrop-filter: blur(18px);
|
|
77
|
-
backdrop-filter: blur(18px);
|
|
78
|
-
padding: $padding;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/* Shimmer overlay effect */
|
|
82
|
-
@mixin shimmer-overlay($border-radius: 20px, $start-opacity: 0.08, $end-opacity: 0) {
|
|
83
|
-
content: "";
|
|
84
|
-
position: absolute;
|
|
85
|
-
inset: 1px;
|
|
86
|
-
border-radius: $border-radius;
|
|
87
|
-
background: rgba(255, 255, 255, $start-opacity);
|
|
88
|
-
pointer-events: none;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/* ===================================================================
|
|
92
|
-
ANIMATION & TRANSITION MIXINS
|
|
93
|
-
Performance-optimized with design system variables
|
|
94
|
-
=================================================================== */
|
|
95
|
-
|
|
96
|
-
/* Standard smooth transition for all properties */
|
|
97
|
-
@mixin smooth-transition($duration: var(--duration-normal)) {
|
|
98
|
-
transition: all $duration var(--ease-out-smooth);
|
|
99
|
-
|
|
100
|
-
@media (prefers-reduced-motion: reduce) {
|
|
101
|
-
transition: none;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/* Transform-only transition (best performance) */
|
|
106
|
-
@mixin transition-transform($duration: var(--duration-normal)) {
|
|
107
|
-
transition: transform $duration var(--ease-out-smooth);
|
|
108
|
-
|
|
109
|
-
@media (prefers-reduced-motion: reduce) {
|
|
110
|
-
transition: none;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/* Opacity transition */
|
|
115
|
-
@mixin transition-opacity($duration: var(--duration-normal)) {
|
|
116
|
-
transition: opacity $duration var(--ease-out-smooth);
|
|
117
|
-
|
|
118
|
-
@media (prefers-reduced-motion: reduce) {
|
|
119
|
-
transition: none;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/* Multiple property transition */
|
|
124
|
-
@mixin transition-properties(
|
|
125
|
-
$properties,
|
|
126
|
-
$duration: var(--duration-normal),
|
|
127
|
-
$easing: var(--ease-out-smooth)
|
|
128
|
-
) {
|
|
129
|
-
$transition-list: ();
|
|
130
|
-
|
|
131
|
-
@each $property in $properties {
|
|
132
|
-
$transition-list: append($transition-list, #{$property} $duration $easing, comma);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
transition: $transition-list;
|
|
136
|
-
|
|
137
|
-
@media (prefers-reduced-motion: reduce) {
|
|
138
|
-
transition: none;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/* Card interaction transitions - standard for all cards */
|
|
143
|
-
@mixin card-transition() {
|
|
144
|
-
transition:
|
|
145
|
-
transform var(--card-hover-duration) var(--ease-out-smooth),
|
|
146
|
-
border-color var(--card-hover-duration) var(--ease-out-smooth),
|
|
147
|
-
background var(--card-hover-duration) var(--ease-out-smooth),
|
|
148
|
-
box-shadow var(--card-hover-duration) var(--ease-out-smooth);
|
|
149
|
-
|
|
150
|
-
@media (prefers-reduced-motion: reduce) {
|
|
151
|
-
transition: none;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/* Hardware acceleration hint */
|
|
156
|
-
@mixin gpu-accelerated() {
|
|
157
|
-
transform: translateZ(0);
|
|
158
|
-
backface-visibility: hidden;
|
|
159
|
-
perspective: 1000px;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/* Will-change optimization (use sparingly) */
|
|
163
|
-
@mixin will-change-transform() {
|
|
164
|
-
will-change: transform;
|
|
165
|
-
|
|
166
|
-
&:not(:hover):not(:focus):not(:active) {
|
|
167
|
-
will-change: auto;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
@media (prefers-reduced-motion: reduce) {
|
|
171
|
-
will-change: auto;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
/* Hover lift effect - DISABLED: Cards should not move vertically */
|
|
176
|
-
@mixin hover-lift($distance: 0px) {
|
|
177
|
-
@include transition-transform();
|
|
178
|
-
|
|
179
|
-
&:hover {
|
|
180
|
-
/* No vertical movement, only GPU acceleration */
|
|
181
|
-
transform: translateZ(0);
|
|
182
|
-
|
|
183
|
-
@media (prefers-reduced-motion: reduce) {
|
|
184
|
-
transform: none;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/* Hover scale effect */
|
|
190
|
-
@mixin hover-scale($scale: 1.05) {
|
|
191
|
-
@include transition-transform();
|
|
192
|
-
|
|
193
|
-
&:hover {
|
|
194
|
-
transform: scale($scale) translateZ(0);
|
|
195
|
-
|
|
196
|
-
@media (prefers-reduced-motion: reduce) {
|
|
197
|
-
transform: none;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
/* ===================================================================
|
|
203
|
-
TYPOGRAPHY MIXINS
|
|
204
|
-
Unified typography patterns for consistent text styling
|
|
205
|
-
=================================================================== */
|
|
206
|
-
|
|
207
|
-
/// Label text - used for field names, categories, tags
|
|
208
|
-
/// @example @include osi-text('label');
|
|
209
|
-
@mixin osi-text-label {
|
|
210
|
-
@include important-prop("font-size", var(--card-label-font-size, 0.5rem));
|
|
211
|
-
@include important-prop("font-weight", var(--card-label-font-weight, 700));
|
|
212
|
-
@include important-prop("letter-spacing", var(--card-label-letter-spacing, 0.065em));
|
|
213
|
-
@include important-prop("text-transform", var(--card-label-text-transform, uppercase));
|
|
214
|
-
@include important-prop("color", var(--card-text-label, inherit));
|
|
215
|
-
@include important-prop("line-height", var(--card-label-line-height, 1.25));
|
|
216
|
-
@include important-prop("text-align", left);
|
|
217
|
-
@include important-prop("font-family", inherit);
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
/// Value text - used for field values, data points
|
|
221
|
-
@mixin osi-text-value {
|
|
222
|
-
@include important-prop("font-size", var(--card-value-font-size, 1rem));
|
|
223
|
-
@include important-prop("font-weight", var(--card-value-font-weight, 600));
|
|
224
|
-
@include important-prop("color", var(--card-text-primary, inherit));
|
|
225
|
-
@include important-prop("letter-spacing", var(--card-value-letter-spacing, -0.015em));
|
|
226
|
-
@include important-prop("line-height", var(--card-value-line-height, 1.35));
|
|
227
|
-
@include important-prop("text-align", left);
|
|
228
|
-
@include important-prop("font-family", inherit);
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
/// Large value text - for emphasized stats, metrics
|
|
232
|
-
@mixin osi-text-value-lg {
|
|
233
|
-
@include important-prop("font-size", var(--card-value-font-size-large, 1.2rem));
|
|
234
|
-
@include important-prop("font-weight", var(--card-value-font-weight, 600));
|
|
235
|
-
@include important-prop("color", var(--card-text-primary, inherit));
|
|
236
|
-
@include important-prop("letter-spacing", var(--card-value-letter-spacing, -0.015em));
|
|
237
|
-
@include important-prop("line-height", var(--card-value-line-height, 1.35));
|
|
238
|
-
@include important-prop("text-align", left);
|
|
239
|
-
@include important-prop("font-family", inherit);
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
/// Title text - used for card titles, headings within cards
|
|
243
|
-
@mixin osi-text-title {
|
|
244
|
-
@include important-prop("font-size", var(--card-title-font-size, 0.95rem));
|
|
245
|
-
@include important-prop("font-weight", var(--card-title-font-weight, 700));
|
|
246
|
-
@include important-prop("color", var(--card-text-primary, inherit));
|
|
247
|
-
@include important-prop("letter-spacing", var(--card-title-letter-spacing, -0.01em));
|
|
248
|
-
@include important-prop("line-height", var(--card-title-line-height, 1.4));
|
|
249
|
-
@include important-prop("text-align", left);
|
|
250
|
-
@include important-prop("font-family", inherit);
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
/// Subtitle text - used for secondary headings, roles
|
|
254
|
-
@mixin osi-text-subtitle {
|
|
255
|
-
@include important-prop("font-size", var(--card-subtitle-font-size, 0.7rem));
|
|
256
|
-
@include important-prop("font-weight", var(--card-subtitle-font-weight, 500));
|
|
257
|
-
@include important-prop("color", var(--card-text-secondary, inherit));
|
|
258
|
-
@include important-prop("letter-spacing", var(--card-subtitle-letter-spacing, 0.015em));
|
|
259
|
-
@include important-prop("line-height", var(--card-subtitle-line-height, 1.3));
|
|
260
|
-
@include important-prop("text-align", left);
|
|
261
|
-
@include important-prop("font-family", inherit);
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
/// Meta text - used for timestamps, small descriptions
|
|
265
|
-
@mixin osi-text-meta {
|
|
266
|
-
@include important-prop("font-size", var(--card-meta-font-size, 0.6rem));
|
|
267
|
-
@include important-prop("font-weight", var(--card-meta-font-weight, 500));
|
|
268
|
-
@include important-prop("color", var(--card-text-muted, inherit));
|
|
269
|
-
@include important-prop("line-height", var(--card-meta-line-height, 1.3));
|
|
270
|
-
@include important-prop("text-align", left);
|
|
271
|
-
@include important-prop("font-family", inherit);
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/// Unified text mixin with variant selector
|
|
275
|
-
/// @param {String} $variant - label, value, value-lg, title, subtitle, meta
|
|
276
|
-
@mixin osi-text($variant) {
|
|
277
|
-
@if $variant == "label" {
|
|
278
|
-
@include osi-text-label;
|
|
279
|
-
} @else if $variant == "value" {
|
|
280
|
-
@include osi-text-value;
|
|
281
|
-
} @else if $variant == "value-lg" {
|
|
282
|
-
@include osi-text-value-lg;
|
|
283
|
-
} @else if $variant == "title" {
|
|
284
|
-
@include osi-text-title;
|
|
285
|
-
} @else if $variant == "subtitle" {
|
|
286
|
-
@include osi-text-subtitle;
|
|
287
|
-
} @else if $variant == "meta" {
|
|
288
|
-
@include osi-text-meta;
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
/* ===================================================================
|
|
293
|
-
GRID MIXINS
|
|
294
|
-
Unified grid patterns for consistent layouts
|
|
295
|
-
=================================================================== */
|
|
296
|
-
|
|
297
|
-
/// Responsive auto-fit grid
|
|
298
|
-
/// @param {Length} $min-width - Minimum column width
|
|
299
|
-
/// @param {Length} $gap - Gap between items
|
|
300
|
-
@mixin osi-grid(
|
|
301
|
-
$min-width: var(--section-grid-min-width, 200px),
|
|
302
|
-
$gap: var(--section-card-gap, 12px)
|
|
303
|
-
) {
|
|
304
|
-
@include display(grid);
|
|
305
|
-
@include grid-columns(repeat(auto-fit, minmax($min-width, 1fr)));
|
|
306
|
-
@include gap($gap);
|
|
307
|
-
@include width(100%);
|
|
308
|
-
@include min-height(0);
|
|
309
|
-
@include box-sizing(border-box);
|
|
310
|
-
|
|
311
|
-
@media (max-width: 420px) {
|
|
312
|
-
@include grid-columns(1fr);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
/// Flex column stack for vertical lists
|
|
317
|
-
/// @param {Length} $gap - Gap between items
|
|
318
|
-
@mixin osi-stack($gap: var(--section-stack-gap, 12px)) {
|
|
319
|
-
@include display(flex);
|
|
320
|
-
@include flex-direction(column);
|
|
321
|
-
@include gap($gap);
|
|
322
|
-
@include width(100%);
|
|
323
|
-
@include box-sizing(border-box);
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
/// Fixed column grid
|
|
327
|
-
/// @param {Number} $columns - Number of columns
|
|
328
|
-
/// @param {Length} $gap - Gap between items
|
|
329
|
-
@mixin osi-grid-fixed($columns: 2, $gap: var(--section-card-gap, 12px)) {
|
|
330
|
-
@include display(grid);
|
|
331
|
-
@include grid-columns(repeat($columns, 1fr));
|
|
332
|
-
@include gap($gap);
|
|
333
|
-
@include width(100%);
|
|
334
|
-
@include box-sizing(border-box);
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
/* ===================================================================
|
|
338
|
-
STAGGER ANIMATION MIXINS
|
|
339
|
-
Reusable patterns for staggered animations
|
|
340
|
-
=================================================================== */
|
|
341
|
-
|
|
342
|
-
/// Apply staggered animation delays to child elements
|
|
343
|
-
/// @param {Number} $count - Number of children to stagger
|
|
344
|
-
/// @param {Time} $base-delay - Base delay between items (default: 0.08s)
|
|
345
|
-
/// @param {String} $selector - Child selector (default: '&')
|
|
346
|
-
/// @param {String} $property - CSS property to delay (default: animation-delay)
|
|
347
|
-
@mixin stagger-animation(
|
|
348
|
-
$count: 10,
|
|
349
|
-
$base-delay: 0.08s,
|
|
350
|
-
$selector: "&",
|
|
351
|
-
$property: animation-delay
|
|
352
|
-
) {
|
|
353
|
-
@for $i from 1 through $count {
|
|
354
|
-
#{$selector}:nth-child(#{$i}) {
|
|
355
|
-
#{$property}: #{$i * $base-delay};
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
/// Apply staggered transition delays to child elements
|
|
361
|
-
/// @param {Number} $count - Number of children to stagger
|
|
362
|
-
/// @param {Time} $base-delay - Base delay between items (default: 0.05s)
|
|
363
|
-
/// @param {String} $selector - Child selector (default: '&')
|
|
364
|
-
@mixin stagger-transition($count: 10, $base-delay: 0.05s, $selector: "&") {
|
|
365
|
-
@include stagger-animation($count, $base-delay, $selector, transition-delay);
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
/// Apply staggered entrance animation with fade-in-up
|
|
369
|
-
/// @param {Number} $count - Number of children to stagger
|
|
370
|
-
/// @param {Time} $base-delay - Base delay between items (default: 0.08s)
|
|
371
|
-
/// @param {Time} $duration - Animation duration (default: 0.6s)
|
|
372
|
-
@mixin stagger-entrance($count: 10, $base-delay: 0.08s, $duration: 0.6s) {
|
|
373
|
-
animation: fadeInUp $duration ease-out backwards;
|
|
374
|
-
|
|
375
|
-
@for $i from 1 through $count {
|
|
376
|
-
&:nth-child(#{$i}) {
|
|
377
|
-
animation-delay: #{$i * $base-delay};
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
@media (prefers-reduced-motion: reduce) {
|
|
382
|
-
animation: none;
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
/* ===================================================================
|
|
387
|
-
BRAND GRADIENT MIXINS
|
|
388
|
-
Consistent gradient patterns for brand styling
|
|
389
|
-
=================================================================== */
|
|
390
|
-
|
|
391
|
-
/// Brand radial gradient background
|
|
392
|
-
/// @param {Number} $opacity - Opacity of the gradient (default: 0.1)
|
|
393
|
-
/// @param {String} $position - Gradient position (default: center)
|
|
394
|
-
@mixin brand-gradient-bg($opacity: 0.1, $position: center) {
|
|
395
|
-
background: radial-gradient(
|
|
396
|
-
circle at $position,
|
|
397
|
-
color-mix(in srgb, var(--color-brand, #ff7900) #{$opacity * 100}%, transparent) 0%,
|
|
398
|
-
transparent 70%
|
|
399
|
-
);
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
/// Brand linear gradient background
|
|
403
|
-
/// @param {Angle} $angle - Gradient angle (default: 135deg)
|
|
404
|
-
/// @param {Number} $start-opacity - Start opacity (default: 0.15)
|
|
405
|
-
/// @param {Number} $end-opacity - End opacity (default: 0.05)
|
|
406
|
-
@mixin brand-gradient-linear($angle: 135deg, $start-opacity: 0.15, $end-opacity: 0.05) {
|
|
407
|
-
background: linear-gradient(
|
|
408
|
-
$angle,
|
|
409
|
-
color-mix(in srgb, var(--color-brand, #ff7900) #{$start-opacity * 100}%, transparent) 0%,
|
|
410
|
-
color-mix(in srgb, var(--color-brand, #ff7900) #{$end-opacity * 100}%, transparent) 100%
|
|
411
|
-
);
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
/// Brand gradient text effect
|
|
415
|
-
/// Creates a shimmering gradient text effect
|
|
416
|
-
@mixin brand-gradient-text() {
|
|
417
|
-
background: linear-gradient(
|
|
418
|
-
90deg,
|
|
419
|
-
var(--foreground, #ffffff) 0%,
|
|
420
|
-
var(--color-brand, #ff7900) 50%,
|
|
421
|
-
var(--foreground, #ffffff) 100%
|
|
422
|
-
);
|
|
423
|
-
background-size: 200% 100%;
|
|
424
|
-
background-clip: text;
|
|
425
|
-
-webkit-background-clip: text;
|
|
426
|
-
-webkit-text-fill-color: transparent;
|
|
427
|
-
|
|
428
|
-
@media (prefers-reduced-motion: reduce) {
|
|
429
|
-
background: none;
|
|
430
|
-
-webkit-text-fill-color: currentColor;
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
/// Brand gradient text with animation
|
|
435
|
-
/// @param {Time} $duration - Animation duration (default: 2s)
|
|
436
|
-
@mixin brand-gradient-text-animated($duration: 2s) {
|
|
437
|
-
@include brand-gradient-text();
|
|
438
|
-
animation: textShimmer $duration ease-in-out infinite;
|
|
439
|
-
|
|
440
|
-
@media (prefers-reduced-motion: reduce) {
|
|
441
|
-
animation: none;
|
|
442
|
-
background: none;
|
|
443
|
-
-webkit-text-fill-color: currentColor;
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
/// Glow effect mixin
|
|
448
|
-
/// @param {Color} $color - Glow color (default: brand color)
|
|
449
|
-
/// @param {Length} $blur - Blur radius (default: 20px)
|
|
450
|
-
/// @param {Number} $opacity - Opacity (default: 0.4)
|
|
451
|
-
@mixin glow-effect($color: var(--color-brand, #ff7900), $blur: 20px, $opacity: 0.4) {
|
|
452
|
-
box-shadow: 0 0 $blur color-mix(in srgb, $color #{$opacity * 100}%, transparent);
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
/// Glow effect on hover
|
|
456
|
-
/// @param {Color} $color - Glow color (default: brand color)
|
|
457
|
-
/// @param {Length} $blur - Blur radius (default: 25px)
|
|
458
|
-
/// @param {Number} $opacity - Opacity (default: 0.5)
|
|
459
|
-
@mixin glow-effect-hover($color: var(--color-brand, #ff7900), $blur: 25px, $opacity: 0.5) {
|
|
460
|
-
transition: box-shadow var(--duration-normal, 200ms) var(--ease-out-smooth, ease-out);
|
|
461
|
-
|
|
462
|
-
&:hover {
|
|
463
|
-
@include glow-effect($color, $blur, $opacity);
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
@media (prefers-reduced-motion: reduce) {
|
|
467
|
-
transition: none;
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
|
|
471
|
-
/* ===================================================================
|
|
472
|
-
BACKDROP BLUR MIXINS
|
|
473
|
-
Glass-morphism effect mixins
|
|
474
|
-
=================================================================== */
|
|
475
|
-
|
|
476
|
-
/// Apply backdrop blur with vendor prefix
|
|
477
|
-
/// @param {Length} $blur - Blur amount (default: 12px)
|
|
478
|
-
@mixin backdrop-blur($blur: 12px) {
|
|
479
|
-
backdrop-filter: blur($blur);
|
|
480
|
-
-webkit-backdrop-filter: blur($blur);
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
/// Glass panel effect
|
|
484
|
-
/// @param {Length} $blur - Blur amount (default: 12px)
|
|
485
|
-
/// @param {Number} $opacity - Background opacity (default: 0.8)
|
|
486
|
-
/// @param {Color} $bg-color - Background color (default: var(--background))
|
|
487
|
-
@mixin glass-effect($blur: 12px, $opacity: 0.8, $bg-color: var(--background, #0c0c0c)) {
|
|
488
|
-
background: color-mix(in srgb, $bg-color #{$opacity * 100}%, transparent);
|
|
489
|
-
@include backdrop-blur($blur);
|
|
490
|
-
border: 1px solid color-mix(in srgb, var(--border, rgba(255, 255, 255, 0.1)) 50%, transparent);
|
|
491
|
-
}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
/* -------------------------------------------------------------------------- */
|
|
2
|
-
/* Surface Layer Mixins */
|
|
3
|
-
/* -------------------------------------------------------------------------- */
|
|
4
|
-
/*
|
|
5
|
-
* Centralized mixins for the three visual layers in the card stack:
|
|
6
|
-
* 1. Hero AI card shell (.ai-card-surface)
|
|
7
|
-
* 2. Section containers (.masonry-item)
|
|
8
|
-
* 3. Section items (cards rendered inside sections)
|
|
9
|
-
*
|
|
10
|
-
* Each mixin relies exclusively on CSS custom properties declared in
|
|
11
|
-
* core/_variables.scss so that switching providers or day/night themes only
|
|
12
|
-
* requires token tweaks rather than touching component styles.
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
/* AI card (hero shell) ----------------------------------------------------- */
|
|
16
|
-
@mixin surface-ai-card-base {
|
|
17
|
-
border: var(--ai-card-border, 1px solid rgba(255, 121, 0, 0.12)) !important;
|
|
18
|
-
border-width: 1px !important;
|
|
19
|
-
border-style: solid !important;
|
|
20
|
-
border-radius: var(--ai-card-border-radius) !important;
|
|
21
|
-
background: var(--section-item-background) !important;
|
|
22
|
-
box-shadow: var(--ai-card-box-shadow, none) !important;
|
|
23
|
-
transition: var(--ai-card-transition, none) !important;
|
|
24
|
-
animation: var(--ai-card-entrance-animation, none);
|
|
25
|
-
will-change: opacity, transform;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
@mixin surface-ai-card-hover {
|
|
29
|
-
border-color: var(--ai-card-border-hover, rgba(255, 121, 0, 0.2)) !important;
|
|
30
|
-
background: var(--section-item-background-hover, var(--section-item-background)) !important;
|
|
31
|
-
box-shadow: var(--ai-card-box-shadow-hover, var(--ai-card-box-shadow, none)) !important;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/* Section container (masonry item) ---------------------------------------- */
|
|
35
|
-
@mixin surface-section-base {
|
|
36
|
-
border: var(--section-border) !important;
|
|
37
|
-
border-radius: var(--section-border-radius) !important;
|
|
38
|
-
background: var(--section-surface, var(--section-background, var(--card-section-bg))) !important;
|
|
39
|
-
box-shadow: var(--section-box-shadow) !important;
|
|
40
|
-
transition: var(--section-transition, none) !important;
|
|
41
|
-
animation: var(--section-entrance-animation, none);
|
|
42
|
-
will-change: opacity, transform;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
@mixin surface-section-hover {
|
|
46
|
-
/* Use hover background variable - flat color with theme border */
|
|
47
|
-
background: var(
|
|
48
|
-
--section-surface-hover,
|
|
49
|
-
var(--section-background-hover, var(--section-surface))
|
|
50
|
-
) !important;
|
|
51
|
-
border-color: var(--section-border-hover, var(--section-border)) !important;
|
|
52
|
-
box-shadow: var(--section-box-shadow-hover, var(--section-box-shadow)) !important;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/* Section items (cards rendered inside sections) --------------------------- */
|
|
56
|
-
@mixin surface-section-item-base {
|
|
57
|
-
padding: var(--section-item-padding) !important;
|
|
58
|
-
border: var(--section-item-border) !important;
|
|
59
|
-
border-width: 1px !important;
|
|
60
|
-
border-style: solid !important;
|
|
61
|
-
border-radius: var(--section-item-border-radius) !important;
|
|
62
|
-
background: var(--section-item-background) !important;
|
|
63
|
-
box-shadow: var(--section-item-box-shadow) !important;
|
|
64
|
-
gap: var(--card-gap) !important;
|
|
65
|
-
min-height: var(--card-min-height) !important;
|
|
66
|
-
transition: var(--section-item-transition) !important;
|
|
67
|
-
animation: var(--section-item-entrance-animation, none);
|
|
68
|
-
will-change: opacity, transform;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
@mixin surface-section-item-hover {
|
|
72
|
-
/* Use hover background variable - flat color with theme border */
|
|
73
|
-
background: var(--section-item-background-hover, var(--section-item-background)) !important;
|
|
74
|
-
border-color: var(--section-item-border-hover, var(--section-item-border)) !important;
|
|
75
|
-
box-shadow: var(--section-item-box-shadow-hover) !important;
|
|
76
|
-
}
|