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,215 +0,0 @@
|
|
|
1
|
-
// =====================================================================
|
|
2
|
-
// UNIFIED SECTION STYLES - Compact, Responsive, Consistent
|
|
3
|
-
// =====================================================================
|
|
4
|
-
// Apply these styles to ALL sections for perfect consistency
|
|
5
|
-
|
|
6
|
-
@use "./tokens" as *;
|
|
7
|
-
|
|
8
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
9
|
-
// UNIVERSAL TYPOGRAPHY (Consistent across ALL sections)
|
|
10
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
11
|
-
|
|
12
|
-
// Item titles (h4, h5, h6 in cards/items)
|
|
13
|
-
@mixin unified-item-title {
|
|
14
|
-
margin: 0;
|
|
15
|
-
font-size: var(--osi-text-sm); // 14px - Consistent size
|
|
16
|
-
font-weight: var(--osi-font-semibold); // 600
|
|
17
|
-
line-height: var(--osi-leading-snug); // 1.375
|
|
18
|
-
color: var(--osi-foreground);
|
|
19
|
-
|
|
20
|
-
@include mobile {
|
|
21
|
-
font-size: var(--osi-text-sm); // Keep same on mobile
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// Item labels (small uppercase text)
|
|
26
|
-
@mixin unified-item-label {
|
|
27
|
-
font-size: 0.7rem; // 11.2px - Compact
|
|
28
|
-
font-weight: var(--osi-font-medium); // 500
|
|
29
|
-
line-height: var(--osi-leading-tight); // 1.25
|
|
30
|
-
color: var(--osi-muted-foreground);
|
|
31
|
-
text-transform: uppercase;
|
|
32
|
-
letter-spacing: 0.04em;
|
|
33
|
-
|
|
34
|
-
@include mobile {
|
|
35
|
-
font-size: 0.65rem; // 10.4px on mobile
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// Item values (prominent text/numbers)
|
|
40
|
-
@mixin unified-item-value {
|
|
41
|
-
font-size: var(--osi-text-sm); // 14px - Consistent
|
|
42
|
-
font-weight: var(--osi-font-semibold); // 600
|
|
43
|
-
line-height: var(--osi-leading-normal); // 1.5
|
|
44
|
-
color: var(--osi-foreground);
|
|
45
|
-
|
|
46
|
-
@include mobile {
|
|
47
|
-
font-size: var(--osi-text-sm); // Keep same on mobile
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// Item descriptions (secondary text)
|
|
52
|
-
@mixin unified-item-description {
|
|
53
|
-
font-size: var(--osi-text-xs); // 12px
|
|
54
|
-
font-weight: var(--osi-font-normal); // 400
|
|
55
|
-
line-height: var(--osi-leading-relaxed); // 1.625
|
|
56
|
-
color: var(--osi-muted-foreground);
|
|
57
|
-
|
|
58
|
-
@include mobile {
|
|
59
|
-
font-size: var(--osi-text-xs); // Keep same on mobile
|
|
60
|
-
line-height: var(--osi-leading-normal); // Tighter on mobile
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// Number displays (metrics, analytics)
|
|
65
|
-
@mixin unified-number-display {
|
|
66
|
-
font-size: var(--osi-text-xl); // 24px - Compact (was 30px)
|
|
67
|
-
font-weight: var(--osi-font-bold); // 700
|
|
68
|
-
line-height: 1;
|
|
69
|
-
letter-spacing: var(--osi-tracking-tight);
|
|
70
|
-
font-variant-numeric: tabular-nums;
|
|
71
|
-
color: var(--osi-foreground);
|
|
72
|
-
|
|
73
|
-
@include mobile {
|
|
74
|
-
font-size: var(--osi-text-lg); // 20px on mobile
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
79
|
-
// COMPACT CARD STYLES
|
|
80
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
81
|
-
|
|
82
|
-
@mixin unified-card-compact {
|
|
83
|
-
padding: var(--osi-spacing-sm); // 8px
|
|
84
|
-
border-radius: var(--osi-radius-sm); // 4px
|
|
85
|
-
gap: var(--osi-spacing-xs); // 4px
|
|
86
|
-
min-height: var(--osi-card-min-height); // 90px
|
|
87
|
-
|
|
88
|
-
@include mobile {
|
|
89
|
-
padding: var(--osi-spacing-xs); // 4px on mobile
|
|
90
|
-
min-height: auto; // Remove min-height on mobile
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
@mixin unified-item-compact {
|
|
95
|
-
padding: var(--osi-spacing-sm); // 8px
|
|
96
|
-
gap: var(--osi-spacing-xs); // 4px
|
|
97
|
-
|
|
98
|
-
@include mobile {
|
|
99
|
-
padding: var(--osi-spacing-xs); // 4px on mobile
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
104
|
-
// COMPACT GRID LAYOUTS (Responsive)
|
|
105
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
106
|
-
|
|
107
|
-
@mixin unified-grid-small-compact {
|
|
108
|
-
display: grid;
|
|
109
|
-
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
|
|
110
|
-
gap: var(--osi-spacing-sm); // 8px
|
|
111
|
-
|
|
112
|
-
@include mobile {
|
|
113
|
-
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
|
|
114
|
-
gap: var(--osi-spacing-xs); // 4px
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
@mixin unified-grid-medium-compact {
|
|
119
|
-
display: grid;
|
|
120
|
-
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
|
|
121
|
-
gap: var(--osi-spacing-sm); // 8px
|
|
122
|
-
|
|
123
|
-
@include mobile {
|
|
124
|
-
grid-template-columns: 1fr;
|
|
125
|
-
gap: var(--osi-spacing-xs); // 4px
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
@mixin unified-list-compact {
|
|
130
|
-
display: flex;
|
|
131
|
-
flex-direction: column;
|
|
132
|
-
gap: 0; // No gap for seamless items
|
|
133
|
-
|
|
134
|
-
> * {
|
|
135
|
-
border-bottom: 1px solid var(--osi-border-muted);
|
|
136
|
-
|
|
137
|
-
&:last-child {
|
|
138
|
-
border-bottom: none;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
144
|
-
// UNIFIED RESPONSIVE BEHAVIOR
|
|
145
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
146
|
-
|
|
147
|
-
// Apply consistent mobile behavior to all sections
|
|
148
|
-
@mixin unified-mobile-behavior {
|
|
149
|
-
@include mobile {
|
|
150
|
-
// Reduce padding
|
|
151
|
-
padding: var(--osi-spacing-xs);
|
|
152
|
-
|
|
153
|
-
// Stack flex items
|
|
154
|
-
&.flex-row {
|
|
155
|
-
flex-direction: column;
|
|
156
|
-
align-items: stretch;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// Reduce gaps
|
|
160
|
-
gap: var(--osi-spacing-xs);
|
|
161
|
-
|
|
162
|
-
// Full width buttons/actions
|
|
163
|
-
.action-button,
|
|
164
|
-
.contact-link,
|
|
165
|
-
.news-link {
|
|
166
|
-
width: 100%;
|
|
167
|
-
text-align: center;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
173
|
-
// UTILITY: Apply to Section Container
|
|
174
|
-
// ═══════════════════════════════════════════════════════════════════
|
|
175
|
-
|
|
176
|
-
@mixin apply-unified-section-styles {
|
|
177
|
-
// Container
|
|
178
|
-
display: flex;
|
|
179
|
-
flex-direction: column;
|
|
180
|
-
gap: var(--osi-section-header-gap);
|
|
181
|
-
|
|
182
|
-
// Typography defaults
|
|
183
|
-
.item-title,
|
|
184
|
-
.metric-title,
|
|
185
|
-
.contact-name,
|
|
186
|
-
.event-title,
|
|
187
|
-
.news-title,
|
|
188
|
-
.product-title {
|
|
189
|
-
@include unified-item-title;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
.item-label,
|
|
193
|
-
.metric-label,
|
|
194
|
-
.field-label {
|
|
195
|
-
@include unified-item-label;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
.item-value,
|
|
199
|
-
.field-value {
|
|
200
|
-
@include unified-item-value;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
.item-description,
|
|
204
|
-
.field-description {
|
|
205
|
-
@include unified-item-description;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
.metric-value,
|
|
209
|
-
.number-display {
|
|
210
|
-
@include unified-number-display;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
// Responsive
|
|
214
|
-
@include unified-mobile-behavior;
|
|
215
|
-
}
|
|
@@ -1,322 +0,0 @@
|
|
|
1
|
-
// ============================================
|
|
2
|
-
// FEATURE GRID LAYOUT
|
|
3
|
-
// ============================================
|
|
4
|
-
//
|
|
5
|
-
// Simple responsive grid layouts as an alternative to masonry.
|
|
6
|
-
// Provides Tailwind-like responsive grid classes without
|
|
7
|
-
// requiring Tailwind CSS.
|
|
8
|
-
//
|
|
9
|
-
// Usage:
|
|
10
|
-
// <div class="feature-grid feature-grid--3col">
|
|
11
|
-
// <div class="feature-grid__item">...</div>
|
|
12
|
-
// </div>
|
|
13
|
-
//
|
|
14
|
-
// Or use mixins:
|
|
15
|
-
// @include feature-grid(3, 1.5rem);
|
|
16
|
-
//
|
|
17
|
-
// ============================================
|
|
18
|
-
|
|
19
|
-
// ===================================================================
|
|
20
|
-
// FEATURE GRID MIXINS
|
|
21
|
-
// ===================================================================
|
|
22
|
-
|
|
23
|
-
/// Create a responsive feature grid
|
|
24
|
-
/// @param {Number} $columns - Maximum number of columns
|
|
25
|
-
/// @param {Length} $gap - Gap between items (default: 1.5rem)
|
|
26
|
-
/// @param {Length} $min-width - Minimum item width for auto-fit (default: 280px)
|
|
27
|
-
@mixin feature-grid($columns: 3, $gap: 1.5rem, $min-width: 280px) {
|
|
28
|
-
display: grid;
|
|
29
|
-
gap: $gap;
|
|
30
|
-
width: 100%;
|
|
31
|
-
|
|
32
|
-
@if $columns == 2 {
|
|
33
|
-
grid-template-columns: repeat(auto-fit, minmax(min(100%, $min-width), 1fr));
|
|
34
|
-
|
|
35
|
-
@media (min-width: 768px) {
|
|
36
|
-
grid-template-columns: repeat(2, 1fr);
|
|
37
|
-
}
|
|
38
|
-
} @else if $columns == 3 {
|
|
39
|
-
grid-template-columns: 1fr;
|
|
40
|
-
|
|
41
|
-
@media (min-width: 640px) {
|
|
42
|
-
grid-template-columns: repeat(2, 1fr);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
@media (min-width: 1024px) {
|
|
46
|
-
grid-template-columns: repeat(3, 1fr);
|
|
47
|
-
}
|
|
48
|
-
} @else if $columns == 4 {
|
|
49
|
-
grid-template-columns: 1fr;
|
|
50
|
-
|
|
51
|
-
@media (min-width: 640px) {
|
|
52
|
-
grid-template-columns: repeat(2, 1fr);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
@media (min-width: 1024px) {
|
|
56
|
-
grid-template-columns: repeat(3, 1fr);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
@media (min-width: 1280px) {
|
|
60
|
-
grid-template-columns: repeat(4, 1fr);
|
|
61
|
-
}
|
|
62
|
-
} @else {
|
|
63
|
-
// Default auto-fit behavior
|
|
64
|
-
grid-template-columns: repeat(auto-fit, minmax(min(100%, $min-width), 1fr));
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/// Auto-fit grid with minimum width constraint
|
|
69
|
-
/// @param {Length} $min-width - Minimum column width
|
|
70
|
-
/// @param {Length} $gap - Gap between items
|
|
71
|
-
@mixin auto-fit-grid($min-width: 320px, $gap: 1.5rem) {
|
|
72
|
-
display: grid;
|
|
73
|
-
grid-template-columns: repeat(auto-fit, minmax(min(100%, $min-width), 1fr));
|
|
74
|
-
gap: $gap;
|
|
75
|
-
width: 100%;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// ===================================================================
|
|
79
|
-
// FEATURE GRID BASE CLASSES
|
|
80
|
-
// ===================================================================
|
|
81
|
-
|
|
82
|
-
.feature-grid {
|
|
83
|
-
display: grid;
|
|
84
|
-
gap: var(--feature-grid-gap, 1.5rem);
|
|
85
|
-
width: 100%;
|
|
86
|
-
|
|
87
|
-
// Default: single column on mobile
|
|
88
|
-
grid-template-columns: 1fr;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// ===================================================================
|
|
92
|
-
// COLUMN VARIANTS
|
|
93
|
-
// ===================================================================
|
|
94
|
-
|
|
95
|
-
// 2-column grid
|
|
96
|
-
.feature-grid--2col {
|
|
97
|
-
@media (min-width: 640px) {
|
|
98
|
-
grid-template-columns: repeat(2, 1fr);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// 3-column grid (homepage features style)
|
|
103
|
-
.feature-grid--3col {
|
|
104
|
-
@media (min-width: 640px) {
|
|
105
|
-
grid-template-columns: repeat(2, 1fr);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
@media (min-width: 1024px) {
|
|
109
|
-
grid-template-columns: repeat(3, 1fr);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// 4-column grid
|
|
114
|
-
.feature-grid--4col {
|
|
115
|
-
@media (min-width: 640px) {
|
|
116
|
-
grid-template-columns: repeat(2, 1fr);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
@media (min-width: 1024px) {
|
|
120
|
-
grid-template-columns: repeat(3, 1fr);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
@media (min-width: 1280px) {
|
|
124
|
-
grid-template-columns: repeat(4, 1fr);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// Auto-fit with minimum width
|
|
129
|
-
.feature-grid--auto {
|
|
130
|
-
grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr));
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
.feature-grid--auto-lg {
|
|
134
|
-
grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr));
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
.feature-grid--auto-sm {
|
|
138
|
-
grid-template-columns: repeat(auto-fit, minmax(min(100%, 200px), 1fr));
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
// ===================================================================
|
|
142
|
-
// GAP VARIANTS
|
|
143
|
-
// ===================================================================
|
|
144
|
-
|
|
145
|
-
.feature-grid--gap-sm {
|
|
146
|
-
--feature-grid-gap: 0.75rem;
|
|
147
|
-
gap: var(--feature-grid-gap);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
.feature-grid--gap-md {
|
|
151
|
-
--feature-grid-gap: 1rem;
|
|
152
|
-
gap: var(--feature-grid-gap);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
.feature-grid--gap-lg {
|
|
156
|
-
--feature-grid-gap: 2rem;
|
|
157
|
-
gap: var(--feature-grid-gap);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
.feature-grid--gap-xl {
|
|
161
|
-
--feature-grid-gap: 3rem;
|
|
162
|
-
gap: var(--feature-grid-gap);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
// ===================================================================
|
|
166
|
-
// GRID ITEMS
|
|
167
|
-
// ===================================================================
|
|
168
|
-
|
|
169
|
-
.feature-grid__item {
|
|
170
|
-
display: flex;
|
|
171
|
-
flex-direction: column;
|
|
172
|
-
min-width: 0; // Prevent overflow
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
// Span multiple columns
|
|
176
|
-
.feature-grid__item--span-2 {
|
|
177
|
-
grid-column: span 2;
|
|
178
|
-
|
|
179
|
-
@media (max-width: 639px) {
|
|
180
|
-
grid-column: span 1; // Reset on mobile
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
.feature-grid__item--span-full {
|
|
185
|
-
grid-column: 1 / -1;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
// ===================================================================
|
|
189
|
-
// HERO GRID LAYOUT
|
|
190
|
-
// Specific layout matching homepage hero section
|
|
191
|
-
// ===================================================================
|
|
192
|
-
|
|
193
|
-
.hero-grid {
|
|
194
|
-
display: grid;
|
|
195
|
-
gap: 1rem;
|
|
196
|
-
width: 100%;
|
|
197
|
-
|
|
198
|
-
// Mobile: single column
|
|
199
|
-
grid-template-columns: 1fr;
|
|
200
|
-
|
|
201
|
-
// Tablet: 2 columns
|
|
202
|
-
@media (min-width: 768px) {
|
|
203
|
-
grid-template-columns: repeat(2, 1fr);
|
|
204
|
-
gap: 1.5rem;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// Desktop: 3 columns
|
|
208
|
-
@media (min-width: 1024px) {
|
|
209
|
-
grid-template-columns: repeat(3, 1fr);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
// ===================================================================
|
|
214
|
-
// CAPABILITIES GRID LAYOUT
|
|
215
|
-
// Specific layout for capability cards section
|
|
216
|
-
// ===================================================================
|
|
217
|
-
|
|
218
|
-
.capabilities-grid {
|
|
219
|
-
display: grid;
|
|
220
|
-
gap: 1.5rem;
|
|
221
|
-
width: 100%;
|
|
222
|
-
grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr));
|
|
223
|
-
|
|
224
|
-
@media (min-width: 1024px) {
|
|
225
|
-
grid-template-columns: repeat(3, 1fr);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
// ===================================================================
|
|
230
|
-
// FEATURES SECTION GRID
|
|
231
|
-
// Specific layout for features section
|
|
232
|
-
// ===================================================================
|
|
233
|
-
|
|
234
|
-
.features-grid {
|
|
235
|
-
display: grid;
|
|
236
|
-
gap: 1.5rem;
|
|
237
|
-
width: 100%;
|
|
238
|
-
|
|
239
|
-
// Mobile: single column
|
|
240
|
-
grid-template-columns: 1fr;
|
|
241
|
-
|
|
242
|
-
// Small screens: 2 columns
|
|
243
|
-
@media (min-width: 640px) {
|
|
244
|
-
grid-template-columns: repeat(2, 1fr);
|
|
245
|
-
gap: 2rem;
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
// Large screens: 3 columns
|
|
249
|
-
@media (min-width: 1024px) {
|
|
250
|
-
grid-template-columns: repeat(3, 1fr);
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
// ===================================================================
|
|
255
|
-
// DENSE PACKING
|
|
256
|
-
// For grids that should fill gaps
|
|
257
|
-
// ===================================================================
|
|
258
|
-
|
|
259
|
-
.feature-grid--dense {
|
|
260
|
-
grid-auto-flow: dense;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
// ===================================================================
|
|
264
|
-
// ALIGNMENT UTILITIES
|
|
265
|
-
// ===================================================================
|
|
266
|
-
|
|
267
|
-
.feature-grid--center {
|
|
268
|
-
justify-items: center;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
.feature-grid--stretch {
|
|
272
|
-
align-items: stretch;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
.feature-grid--start {
|
|
276
|
-
align-items: start;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
// ===================================================================
|
|
280
|
-
// ANIMATION SUPPORT
|
|
281
|
-
// Staggered entrance animations for grid items
|
|
282
|
-
// ===================================================================
|
|
283
|
-
|
|
284
|
-
.feature-grid--animated {
|
|
285
|
-
.feature-grid__item {
|
|
286
|
-
opacity: 0;
|
|
287
|
-
animation: fadeInUp 0.6s ease-out forwards;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
// Staggered delays
|
|
291
|
-
@for $i from 1 through 12 {
|
|
292
|
-
.feature-grid__item:nth-child(#{$i}) {
|
|
293
|
-
animation-delay: #{($i - 1) * 0.08}s;
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
@media (prefers-reduced-motion: reduce) {
|
|
298
|
-
.feature-grid__item {
|
|
299
|
-
opacity: 1;
|
|
300
|
-
animation: none;
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
// ===================================================================
|
|
306
|
-
// RESPONSIVE UTILITIES
|
|
307
|
-
// Override columns at specific breakpoints
|
|
308
|
-
// ===================================================================
|
|
309
|
-
|
|
310
|
-
// Force single column on small screens
|
|
311
|
-
@media (max-width: 639px) {
|
|
312
|
-
.feature-grid--mobile-1col {
|
|
313
|
-
grid-template-columns: 1fr !important;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
// Force 2 columns on tablets
|
|
318
|
-
@media (min-width: 640px) and (max-width: 1023px) {
|
|
319
|
-
.feature-grid--tablet-2col {
|
|
320
|
-
grid-template-columns: repeat(2, 1fr) !important;
|
|
321
|
-
}
|
|
322
|
-
}
|