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,422 +0,0 @@
|
|
|
1
|
-
// ============================================
|
|
2
|
-
// HERO CARD ANIMATION SYSTEM
|
|
3
|
-
// ============================================
|
|
4
|
-
//
|
|
5
|
-
// Provides hero-style card hover effects with:
|
|
6
|
-
// - Vertical lift on hover
|
|
7
|
-
// - Glow expansion with brand color
|
|
8
|
-
// - Icon scale and rotation effects
|
|
9
|
-
// - Left accent border glow
|
|
10
|
-
// - Top glow line
|
|
11
|
-
//
|
|
12
|
-
// Usage:
|
|
13
|
-
// @use 'hero-card' as *;
|
|
14
|
-
// .my-card { @include hero-card-hover(); }
|
|
15
|
-
// .my-icon { @include icon-hover-effect(); }
|
|
16
|
-
//
|
|
17
|
-
// ============================================
|
|
18
|
-
|
|
19
|
-
// ===================================================================
|
|
20
|
-
// HERO CARD HOVER PATTERN
|
|
21
|
-
// Vertical lift with glow expansion - matches homepage hero cards
|
|
22
|
-
// ===================================================================
|
|
23
|
-
|
|
24
|
-
/// Hero card hover effect with lift and glow
|
|
25
|
-
/// @param {Length} $lift - Vertical lift distance on hover (default: 6px)
|
|
26
|
-
/// @param {Boolean} $glow - Whether to show glow effect (default: true)
|
|
27
|
-
/// @param {Boolean} $accent - Whether to show left accent border (default: false)
|
|
28
|
-
@mixin hero-card-hover($lift: 6px, $glow: true, $accent: false) {
|
|
29
|
-
position: relative;
|
|
30
|
-
transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);
|
|
31
|
-
|
|
32
|
-
@if $accent {
|
|
33
|
-
&::before {
|
|
34
|
-
content: "";
|
|
35
|
-
position: absolute;
|
|
36
|
-
left: 0;
|
|
37
|
-
top: 0;
|
|
38
|
-
bottom: 0;
|
|
39
|
-
width: 3px;
|
|
40
|
-
background: var(--color-brand, #ff7900);
|
|
41
|
-
border-radius: 3px 0 0 3px;
|
|
42
|
-
opacity: 0;
|
|
43
|
-
transition: opacity 0.35s ease;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
&:hover {
|
|
48
|
-
transform: translateY(-#{$lift});
|
|
49
|
-
|
|
50
|
-
@if $glow {
|
|
51
|
-
box-shadow:
|
|
52
|
-
0 20px 40px color-mix(in srgb, var(--foreground, #000) 15%, transparent),
|
|
53
|
-
0 0 0 1px color-mix(in srgb, var(--color-brand, #ff7900) 35%, transparent);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
@if $accent {
|
|
57
|
-
&::before {
|
|
58
|
-
opacity: 1;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
@media (prefers-reduced-motion: reduce) {
|
|
64
|
-
transition: none;
|
|
65
|
-
|
|
66
|
-
&:hover {
|
|
67
|
-
transform: none;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/// Hero card with top glow line effect
|
|
73
|
-
/// @param {Length} $lift - Vertical lift distance on hover (default: 6px)
|
|
74
|
-
@mixin hero-card-with-glow-line($lift: 6px) {
|
|
75
|
-
position: relative;
|
|
76
|
-
transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);
|
|
77
|
-
overflow: hidden;
|
|
78
|
-
|
|
79
|
-
// Top glow line
|
|
80
|
-
&::before {
|
|
81
|
-
content: "";
|
|
82
|
-
position: absolute;
|
|
83
|
-
top: 0;
|
|
84
|
-
left: 0;
|
|
85
|
-
right: 0;
|
|
86
|
-
height: 2px;
|
|
87
|
-
background: linear-gradient(
|
|
88
|
-
90deg,
|
|
89
|
-
transparent 0%,
|
|
90
|
-
color-mix(in srgb, var(--color-brand, #ff7900) 60%, transparent) 50%,
|
|
91
|
-
transparent 100%
|
|
92
|
-
);
|
|
93
|
-
opacity: 0;
|
|
94
|
-
transition: opacity 0.35s ease;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// Left accent
|
|
98
|
-
&::after {
|
|
99
|
-
content: "";
|
|
100
|
-
position: absolute;
|
|
101
|
-
left: 0;
|
|
102
|
-
top: 0;
|
|
103
|
-
bottom: 0;
|
|
104
|
-
width: 3px;
|
|
105
|
-
background: var(--color-brand, #ff7900);
|
|
106
|
-
opacity: 0;
|
|
107
|
-
transition: opacity 0.35s ease;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
&:hover {
|
|
111
|
-
transform: translateY(-#{$lift});
|
|
112
|
-
box-shadow:
|
|
113
|
-
0 20px 40px color-mix(in srgb, var(--foreground, #000) 15%, transparent),
|
|
114
|
-
0 0 0 1px color-mix(in srgb, var(--color-brand, #ff7900) 35%, transparent);
|
|
115
|
-
|
|
116
|
-
&::before,
|
|
117
|
-
&::after {
|
|
118
|
-
opacity: 1;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
@media (prefers-reduced-motion: reduce) {
|
|
123
|
-
transition: none;
|
|
124
|
-
|
|
125
|
-
&:hover {
|
|
126
|
-
transform: none;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
&::before,
|
|
130
|
-
&::after {
|
|
131
|
-
transition: none;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// ===================================================================
|
|
137
|
-
// ICON HOVER EFFECTS
|
|
138
|
-
// Scale and rotation effects for icons within cards
|
|
139
|
-
// ===================================================================
|
|
140
|
-
|
|
141
|
-
/// Icon hover effect with scale and rotation
|
|
142
|
-
/// @param {Number} $scale - Scale factor on hover (default: 1.15)
|
|
143
|
-
/// @param {Angle} $rotate - Rotation angle on hover (default: 5deg)
|
|
144
|
-
/// @param {Boolean} $glow - Whether to add drop shadow glow (default: true)
|
|
145
|
-
@mixin icon-hover-effect($scale: 1.15, $rotate: 5deg, $glow: true) {
|
|
146
|
-
transition:
|
|
147
|
-
transform 0.35s ease,
|
|
148
|
-
filter 0.35s ease;
|
|
149
|
-
|
|
150
|
-
&:hover {
|
|
151
|
-
transform: scale($scale) rotateZ($rotate);
|
|
152
|
-
|
|
153
|
-
@if $glow {
|
|
154
|
-
filter: drop-shadow(
|
|
155
|
-
0 4px 12px color-mix(in srgb, var(--color-brand, #ff7900) 25%, transparent)
|
|
156
|
-
);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
@media (prefers-reduced-motion: reduce) {
|
|
161
|
-
transition: none;
|
|
162
|
-
|
|
163
|
-
&:hover {
|
|
164
|
-
transform: none;
|
|
165
|
-
filter: none;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/// Icon hover effect triggered by parent card hover
|
|
171
|
-
/// Apply to icon, effect triggers when parent .hero-card:hover
|
|
172
|
-
/// @param {Number} $scale - Scale factor on hover (default: 1.15)
|
|
173
|
-
/// @param {Angle} $rotate - Rotation angle on hover (default: 5deg)
|
|
174
|
-
@mixin icon-hover-on-card($scale: 1.15, $rotate: 5deg) {
|
|
175
|
-
transition:
|
|
176
|
-
transform 0.35s ease,
|
|
177
|
-
filter 0.35s ease;
|
|
178
|
-
|
|
179
|
-
.hero-card:hover &,
|
|
180
|
-
.hero-feature-card:hover &,
|
|
181
|
-
.feature-card:hover &,
|
|
182
|
-
[class*="card"]:hover & {
|
|
183
|
-
transform: scale($scale) rotateZ($rotate);
|
|
184
|
-
filter: drop-shadow(
|
|
185
|
-
0 4px 12px color-mix(in srgb, var(--color-brand, #ff7900) 25%, transparent)
|
|
186
|
-
);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
@media (prefers-reduced-motion: reduce) {
|
|
190
|
-
transition: none;
|
|
191
|
-
|
|
192
|
-
.hero-card:hover &,
|
|
193
|
-
.hero-feature-card:hover &,
|
|
194
|
-
.feature-card:hover &,
|
|
195
|
-
[class*="card"]:hover & {
|
|
196
|
-
transform: none;
|
|
197
|
-
filter: none;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
// ===================================================================
|
|
203
|
-
// HERO CARD UTILITY CLASSES
|
|
204
|
-
// Ready-to-use classes for hero card styling
|
|
205
|
-
// ===================================================================
|
|
206
|
-
|
|
207
|
-
// Hero card base class
|
|
208
|
-
.hero-card {
|
|
209
|
-
@include hero-card-hover();
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
// Hero card with accent border
|
|
213
|
-
.hero-card--accent {
|
|
214
|
-
@include hero-card-hover($accent: true);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
// Hero card with top glow line
|
|
218
|
-
.hero-card--glow-line {
|
|
219
|
-
@include hero-card-with-glow-line();
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
// Hero card icon that animates on card hover
|
|
223
|
-
.hero-card-icon {
|
|
224
|
-
@include icon-hover-on-card();
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
// Standalone icon hover effect
|
|
228
|
-
.icon-hover {
|
|
229
|
-
@include icon-hover-effect();
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
// Feature card style (homepage features section)
|
|
233
|
-
.hero-feature-card {
|
|
234
|
-
position: relative;
|
|
235
|
-
border-radius: var(--card-border-radius, 1rem);
|
|
236
|
-
border: 1px solid var(--border, rgba(255, 255, 255, 0.08));
|
|
237
|
-
background: var(--card-background, rgba(20, 20, 20, 0.6));
|
|
238
|
-
backdrop-filter: blur(10px);
|
|
239
|
-
-webkit-backdrop-filter: blur(10px);
|
|
240
|
-
padding: 1.5rem;
|
|
241
|
-
transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);
|
|
242
|
-
|
|
243
|
-
&:hover {
|
|
244
|
-
transform: translateY(-6px);
|
|
245
|
-
border-color: color-mix(in srgb, var(--color-brand, #ff7900) 50%, transparent);
|
|
246
|
-
box-shadow:
|
|
247
|
-
0 20px 40px color-mix(in srgb, var(--foreground, #000) 15%, transparent),
|
|
248
|
-
0 0 0 1px color-mix(in srgb, var(--color-brand, #ff7900) 35%, transparent);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
// Icon inside hero feature card
|
|
252
|
-
.hero-feature-card__icon {
|
|
253
|
-
transition:
|
|
254
|
-
transform 0.35s ease,
|
|
255
|
-
filter 0.35s ease;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
&:hover .hero-feature-card__icon {
|
|
259
|
-
transform: scale(1.15) rotateZ(5deg);
|
|
260
|
-
filter: drop-shadow(
|
|
261
|
-
0 4px 12px color-mix(in srgb, var(--color-brand, #ff7900) 25%, transparent)
|
|
262
|
-
);
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
@media (prefers-reduced-motion: reduce) {
|
|
266
|
-
transition: none;
|
|
267
|
-
|
|
268
|
-
&:hover {
|
|
269
|
-
transform: none;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
.hero-feature-card__icon {
|
|
273
|
-
transition: none;
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
&:hover .hero-feature-card__icon {
|
|
277
|
-
transform: none;
|
|
278
|
-
filter: none;
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
// System capability card (homepage capabilities section)
|
|
284
|
-
.system-capability-card {
|
|
285
|
-
position: relative;
|
|
286
|
-
border-radius: var(--card-border-radius, 1rem);
|
|
287
|
-
border: 1px solid var(--border, rgba(255, 255, 255, 0.08));
|
|
288
|
-
background: var(--card-background, rgba(20, 20, 20, 0.6));
|
|
289
|
-
backdrop-filter: blur(10px);
|
|
290
|
-
-webkit-backdrop-filter: blur(10px);
|
|
291
|
-
padding: 1.25rem;
|
|
292
|
-
transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);
|
|
293
|
-
animation: fadeInUp 0.6s ease-out backwards;
|
|
294
|
-
|
|
295
|
-
// Staggered animation delays
|
|
296
|
-
@for $i from 1 through 6 {
|
|
297
|
-
&:nth-child(#{$i}) {
|
|
298
|
-
animation-delay: #{$i * 0.08}s;
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
// Left accent (hidden by default)
|
|
303
|
-
&::before {
|
|
304
|
-
content: "";
|
|
305
|
-
position: absolute;
|
|
306
|
-
left: 0;
|
|
307
|
-
top: 0;
|
|
308
|
-
bottom: 0;
|
|
309
|
-
width: 3px;
|
|
310
|
-
background: var(--color-brand, #ff7900);
|
|
311
|
-
border-radius: 3px 0 0 3px;
|
|
312
|
-
opacity: 0;
|
|
313
|
-
transition: opacity 0.35s ease;
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
// Top glow line (hidden by default)
|
|
317
|
-
&::after {
|
|
318
|
-
content: "";
|
|
319
|
-
position: absolute;
|
|
320
|
-
top: 0;
|
|
321
|
-
left: 0;
|
|
322
|
-
right: 0;
|
|
323
|
-
height: 2px;
|
|
324
|
-
background: linear-gradient(
|
|
325
|
-
90deg,
|
|
326
|
-
transparent 0%,
|
|
327
|
-
color-mix(in srgb, var(--color-brand, #ff7900) 60%, transparent) 50%,
|
|
328
|
-
transparent 100%
|
|
329
|
-
);
|
|
330
|
-
opacity: 0;
|
|
331
|
-
transition: opacity 0.35s ease;
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
&:hover {
|
|
335
|
-
transform: translateY(-6px);
|
|
336
|
-
border-color: color-mix(in srgb, var(--color-brand, #ff7900) 50%, transparent);
|
|
337
|
-
box-shadow:
|
|
338
|
-
0 20px 40px color-mix(in srgb, var(--foreground, #000) 15%, transparent),
|
|
339
|
-
0 0 0 1px color-mix(in srgb, var(--color-brand, #ff7900) 35%, transparent);
|
|
340
|
-
|
|
341
|
-
&::before,
|
|
342
|
-
&::after {
|
|
343
|
-
opacity: 1;
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
// Icon inside capability card
|
|
348
|
-
.system-capability-card__icon {
|
|
349
|
-
transition:
|
|
350
|
-
transform 0.35s ease,
|
|
351
|
-
filter 0.35s ease;
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
&:hover .system-capability-card__icon {
|
|
355
|
-
transform: scale(1.15) rotateZ(5deg);
|
|
356
|
-
filter: drop-shadow(
|
|
357
|
-
0 4px 12px color-mix(in srgb, var(--color-brand, #ff7900) 25%, transparent)
|
|
358
|
-
);
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
@media (prefers-reduced-motion: reduce) {
|
|
362
|
-
animation: none;
|
|
363
|
-
transition: none;
|
|
364
|
-
|
|
365
|
-
&:hover {
|
|
366
|
-
transform: none;
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
&::before,
|
|
370
|
-
&::after {
|
|
371
|
-
transition: none;
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
.system-capability-card__icon {
|
|
375
|
-
transition: none;
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
&:hover .system-capability-card__icon {
|
|
379
|
-
transform: none;
|
|
380
|
-
filter: none;
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
// Feature card (simple version for features section)
|
|
386
|
-
.feature-card {
|
|
387
|
-
position: relative;
|
|
388
|
-
border-radius: var(--card-border-radius, 1rem);
|
|
389
|
-
border: 1px solid var(--border, rgba(255, 255, 255, 0.08));
|
|
390
|
-
background: var(--card-background);
|
|
391
|
-
padding: 1.5rem;
|
|
392
|
-
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
393
|
-
|
|
394
|
-
&:hover {
|
|
395
|
-
transform: translateY(-4px);
|
|
396
|
-
box-shadow: 0 10px 30px -10px color-mix(in srgb, var(--color-brand, #ff7900) 15%, transparent);
|
|
397
|
-
|
|
398
|
-
.feature-card__icon {
|
|
399
|
-
transform: scale(1.1);
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
.feature-card__icon {
|
|
404
|
-
transition: transform 0.3s ease;
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
@media (prefers-reduced-motion: reduce) {
|
|
408
|
-
transition: none;
|
|
409
|
-
|
|
410
|
-
&:hover {
|
|
411
|
-
transform: none;
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
.feature-card__icon {
|
|
415
|
-
transition: none;
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
&:hover .feature-card__icon {
|
|
419
|
-
transform: none;
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/* Responsive image wrapper with graceful fallback */
|
|
2
|
-
|
|
3
|
-
.image-container {
|
|
4
|
-
position: relative;
|
|
5
|
-
overflow: hidden;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
.image-placeholder {
|
|
9
|
-
background-color: var(--muted);
|
|
10
|
-
width: 100%;
|
|
11
|
-
height: 100%;
|
|
12
|
-
display: flex;
|
|
13
|
-
justify-content: center;
|
|
14
|
-
align-items: center;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
.image-error {
|
|
18
|
-
position: absolute;
|
|
19
|
-
top: 0;
|
|
20
|
-
left: 0;
|
|
21
|
-
width: 100%;
|
|
22
|
-
height: 100%;
|
|
23
|
-
display: flex;
|
|
24
|
-
justify-content: center;
|
|
25
|
-
align-items: center;
|
|
26
|
-
background-color: var(--muted);
|
|
27
|
-
color: var(--muted-foreground);
|
|
28
|
-
}
|