osi-cards-lib 1.0.0
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 +763 -0
- package/esm2022/lib/components/ai-card-renderer/ai-card-renderer.component.mjs +911 -0
- package/esm2022/lib/components/card-preview/card-preview.component.mjs +74 -0
- package/esm2022/lib/components/card-skeleton/card-skeleton.component.mjs +24 -0
- package/esm2022/lib/components/masonry-grid/masonry-grid.component.mjs +330 -0
- package/esm2022/lib/components/section-renderer/section-renderer.component.mjs +166 -0
- package/esm2022/lib/components/sections/analytics-section/analytics-section.component.mjs +70 -0
- package/esm2022/lib/components/sections/base-section.component.mjs +335 -0
- package/esm2022/lib/components/sections/brand-colors-section/brand-colors-section.component.mjs +89 -0
- package/esm2022/lib/components/sections/chart-section/chart-section.component.mjs +92 -0
- package/esm2022/lib/components/sections/contact-card-section/contact-card-section.component.mjs +70 -0
- package/esm2022/lib/components/sections/event-section/event-section.component.mjs +32 -0
- package/esm2022/lib/components/sections/fallback-section/fallback-section.component.mjs +16 -0
- package/esm2022/lib/components/sections/financials-section/financials-section.component.mjs +53 -0
- package/esm2022/lib/components/sections/info-section.component.mjs +68 -0
- package/esm2022/lib/components/sections/list-section/list-section.component.mjs +36 -0
- package/esm2022/lib/components/sections/map-section/map-section.component.mjs +52 -0
- package/esm2022/lib/components/sections/network-card-section/network-card-section.component.mjs +41 -0
- package/esm2022/lib/components/sections/news-section/news-section.component.mjs +44 -0
- package/esm2022/lib/components/sections/overview-section/overview-section.component.mjs +47 -0
- package/esm2022/lib/components/sections/product-section/product-section.component.mjs +129 -0
- package/esm2022/lib/components/sections/quotation-section/quotation-section.component.mjs +39 -0
- package/esm2022/lib/components/sections/social-media-section/social-media-section.component.mjs +45 -0
- package/esm2022/lib/components/sections/solutions-section/solutions-section.component.mjs +29 -0
- package/esm2022/lib/components/sections/text-reference-section/text-reference-section.component.mjs +42 -0
- package/esm2022/lib/icons/index.mjs +2 -0
- package/esm2022/lib/icons/lucide-icons.module.mjs +91 -0
- package/esm2022/lib/models/card.model.mjs +111 -0
- package/esm2022/lib/models/index.mjs +2 -0
- package/esm2022/lib/services/icon.service.mjs +148 -0
- package/esm2022/lib/services/index.mjs +5 -0
- package/esm2022/lib/services/magnetic-tilt.service.mjs +224 -0
- package/esm2022/lib/services/section-normalization.service.mjs +243 -0
- package/esm2022/lib/services/section-utils.service.mjs +122 -0
- package/esm2022/lib/utils/card-diff.util.mjs +327 -0
- package/esm2022/lib/utils/index.mjs +3 -0
- package/esm2022/lib/utils/responsive.util.mjs +14 -0
- package/esm2022/osi-cards-lib.mjs +5 -0
- package/esm2022/public-api.mjs +57 -0
- package/fesm2022/osi-cards-lib.mjs +3960 -0
- package/index.d.ts +5 -0
- package/lib/components/ai-card-renderer/ai-card-renderer.component.d.ts +163 -0
- package/lib/components/card-preview/card-preview.component.d.ts +52 -0
- package/lib/components/card-skeleton/card-skeleton.component.d.ts +8 -0
- package/lib/components/masonry-grid/masonry-grid.component.d.ts +72 -0
- package/lib/components/section-renderer/section-renderer.component.d.ts +25 -0
- package/lib/components/sections/analytics-section/analytics-section.component.d.ts +32 -0
- package/lib/components/sections/base-section.component.d.ts +138 -0
- package/lib/components/sections/brand-colors-section/brand-colors-section.component.d.ts +28 -0
- package/lib/components/sections/chart-section/chart-section.component.d.ts +30 -0
- package/lib/components/sections/contact-card-section/contact-card-section.component.d.ts +35 -0
- package/lib/components/sections/event-section/event-section.component.d.ts +17 -0
- package/lib/components/sections/fallback-section/fallback-section.component.d.ts +7 -0
- package/lib/components/sections/financials-section/financials-section.component.d.ts +27 -0
- package/lib/components/sections/info-section.component.d.ts +33 -0
- package/lib/components/sections/list-section/list-section.component.d.ts +21 -0
- package/lib/components/sections/map-section/map-section.component.d.ts +22 -0
- package/lib/components/sections/network-card-section/network-card-section.component.d.ts +18 -0
- package/lib/components/sections/news-section/news-section.component.d.ts +16 -0
- package/lib/components/sections/overview-section/overview-section.component.d.ts +19 -0
- package/lib/components/sections/product-section/product-section.component.d.ts +57 -0
- package/lib/components/sections/quotation-section/quotation-section.component.d.ts +23 -0
- package/lib/components/sections/social-media-section/social-media-section.component.d.ts +11 -0
- package/lib/components/sections/solutions-section/solutions-section.component.d.ts +19 -0
- package/lib/components/sections/text-reference-section/text-reference-section.component.d.ts +25 -0
- package/lib/icons/index.d.ts +1 -0
- package/lib/icons/lucide-icons.module.d.ts +7 -0
- package/lib/models/card.model.d.ts +289 -0
- package/lib/models/index.d.ts +1 -0
- package/lib/services/icon.service.d.ts +9 -0
- package/lib/services/index.d.ts +4 -0
- package/lib/services/magnetic-tilt.service.d.ts +34 -0
- package/lib/services/section-normalization.service.d.ts +38 -0
- package/lib/services/section-utils.service.d.ts +46 -0
- package/lib/utils/card-diff.util.d.ts +52 -0
- package/lib/utils/index.d.ts +2 -0
- package/lib/utils/responsive.util.d.ts +2 -0
- package/package.json +63 -0
- package/public-api.d.ts +50 -0
- package/styles/_styles.scss +95 -0
- package/styles/components/cards/_ai-card.scss +743 -0
- package/styles/components/sections/_analytics.scss +280 -0
- package/styles/components/sections/_brand-colors.scss +280 -0
- package/styles/components/sections/_chart.scss +494 -0
- package/styles/components/sections/_contact.scss +250 -0
- package/styles/components/sections/_design-system.scss +540 -0
- package/styles/components/sections/_event.scss +246 -0
- package/styles/components/sections/_fallback.scss +172 -0
- package/styles/components/sections/_financials.scss +258 -0
- package/styles/components/sections/_global-enforcement.scss +648 -0
- package/styles/components/sections/_info.scss +224 -0
- package/styles/components/sections/_list.scss +216 -0
- package/styles/components/sections/_map.scss +186 -0
- package/styles/components/sections/_network.scss +115 -0
- package/styles/components/sections/_news.scss +81 -0
- package/styles/components/sections/_overview.scss +159 -0
- package/styles/components/sections/_product.scss +906 -0
- package/styles/components/sections/_quotation.scss +151 -0
- package/styles/components/sections/_section-shell.scss +385 -0
- package/styles/components/sections/_section-types.scss +290 -0
- package/styles/components/sections/_sections-base.scss +332 -0
- package/styles/components/sections/_social-media.scss +88 -0
- package/styles/components/sections/_solutions.scss +205 -0
- package/styles/components/sections/_text-reference.scss +158 -0
- package/styles/components/sections/_unified-cards.scss +124 -0
- package/styles/core/_animations.scss +766 -0
- package/styles/core/_global.scss +66 -0
- package/styles/core/_mixins.scss +140 -0
- package/styles/core/_surface-layers.scss +76 -0
- package/styles/core/_utilities.scss +193 -0
- package/styles/core/_variables.scss +462 -0
- package/styles/core/variables/_colors.scss +212 -0
- package/styles/layout/_masonry.scss +60 -0
- package/styles/layout/_tilt.scss +214 -0
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
@import 'sections/sections-base';
|
|
2
|
+
@import 'unified-cards';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Section Type System
|
|
6
|
+
* ---------------------------------------------------------------------------
|
|
7
|
+
* All sections share a common base structure defined here. Each type sets a
|
|
8
|
+
* palette via CSS variables so that light and dark themes stay in sync while
|
|
9
|
+
* preserving individual personalities.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
$section-base-shadow: 0 18px 40px color-mix(in srgb, var(--foreground) 8%, transparent);
|
|
13
|
+
|
|
14
|
+
.section-block {
|
|
15
|
+
--section-accent: var(--color-brand);
|
|
16
|
+
--section-bg: var(--section-surface, var(--section-background, var(--card-section-bg))); /* Dedicated section background */
|
|
17
|
+
--section-border: color-mix(in srgb, var(--section-accent) 30%, transparent); /* Use accent color with transparency */
|
|
18
|
+
--section-header-text: color-mix(in srgb, var(--foreground) 85%, transparent); /* More contrast */
|
|
19
|
+
--section-header-meta: color-mix(in srgb, var(--foreground) 65%, transparent); /* Improved readability */
|
|
20
|
+
--section-card-background: var(--card-section-card-bg); /* Theme-aware: grey-700 (night) or grey-100 (day) - more contrasty */
|
|
21
|
+
--section-card-border: color-mix(in srgb, var(--color-gray-400) 50%, transparent); /* Grey border for both themes */
|
|
22
|
+
--section-card-hover: var(--card-section-card-bg); /* Theme-aware: grey-700 (night) or grey-100 (day) - more contrasty */
|
|
23
|
+
--section-card-grid-min: 180px; /* More flexible, allows more items per row */
|
|
24
|
+
--section-reflection-opacity: var(--section-reflection-opacity, 0);
|
|
25
|
+
--section-reflection-offset-x: var(--section-reflection-offset-x, 0%);
|
|
26
|
+
--section-reflection-offset-y: var(--section-reflection-offset-y, 0%);
|
|
27
|
+
--section-reflection-angle: var(--section-reflection-angle, 0deg);
|
|
28
|
+
|
|
29
|
+
position: relative;
|
|
30
|
+
display: flex;
|
|
31
|
+
flex-direction: column;
|
|
32
|
+
/* COMPACT: Reduced padding and gaps */
|
|
33
|
+
gap: var(--section-card-gap) !important;
|
|
34
|
+
padding: var(--section-padding) !important;
|
|
35
|
+
border-radius: var(--card-border-radius) !important;
|
|
36
|
+
border: var(--section-border) !important; /* DISCRETE: Subtle borders for elegance */
|
|
37
|
+
background: var(--section-bg);
|
|
38
|
+
box-shadow: var(--card-box-shadow);
|
|
39
|
+
/* Enhanced transitions for premium feel */
|
|
40
|
+
transition: border-color 350ms cubic-bezier(0.4, 0, 0.2, 1),
|
|
41
|
+
background 350ms cubic-bezier(0.4, 0, 0.2, 1),
|
|
42
|
+
box-shadow 350ms cubic-bezier(0.4, 0, 0.2, 1),
|
|
43
|
+
transform 350ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
44
|
+
overflow: hidden;
|
|
45
|
+
|
|
46
|
+
/* Subtle entrance animation */
|
|
47
|
+
animation: sectionFadeIn 0.5s cubic-bezier(0.4, 0, 0.2, 1) backwards;
|
|
48
|
+
|
|
49
|
+
@keyframes sectionFadeIn {
|
|
50
|
+
from {
|
|
51
|
+
opacity: 0;
|
|
52
|
+
transform: translateY(10px);
|
|
53
|
+
}
|
|
54
|
+
to {
|
|
55
|
+
opacity: 1;
|
|
56
|
+
transform: translateY(0);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* Minimalistic hover effect */
|
|
61
|
+
&:hover {
|
|
62
|
+
transform: translateY(-2px);
|
|
63
|
+
box-shadow: var(--card-box-shadow-hover),
|
|
64
|
+
0 0 0 1px color-mix(in srgb, var(--section-accent) 15%, transparent);
|
|
65
|
+
border-color: color-mix(in srgb, var(--section-accent) 30%, transparent);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.section-block__header {
|
|
70
|
+
display: flex;
|
|
71
|
+
align-items: center;
|
|
72
|
+
justify-content: space-between;
|
|
73
|
+
gap: calc(var(--card-gap) * 0.75); /* COMPACT: Reduced from full gap */
|
|
74
|
+
flex-wrap: wrap;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.section-block__title {
|
|
78
|
+
/* GLOBALLY ENFORCED: Use main variables for typography */
|
|
79
|
+
font-size: var(--section-title-font-size) !important;
|
|
80
|
+
font-weight: var(--section-title-font-weight) !important;
|
|
81
|
+
letter-spacing: var(--section-title-letter-spacing) !important;
|
|
82
|
+
line-height: var(--section-title-line-height) !important;
|
|
83
|
+
color: var(--card-text-primary) !important;
|
|
84
|
+
padding: 0 !important;
|
|
85
|
+
margin: 0 !important;
|
|
86
|
+
transition: color 0.22s ease;
|
|
87
|
+
|
|
88
|
+
/* Minimalistic hover */
|
|
89
|
+
.section-block:hover & {
|
|
90
|
+
color: color-mix(in srgb, var(--card-text-primary) 90%, var(--section-accent) 10%);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.section-block__subtitle {
|
|
95
|
+
font-size: var(--font-section-description);
|
|
96
|
+
color: var(--section-header-meta);
|
|
97
|
+
margin: 0;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.section-block__badge {
|
|
101
|
+
display: inline-flex;
|
|
102
|
+
align-items: center;
|
|
103
|
+
gap: calc(var(--card-gap) * 0.75); /* COMPACT: Reduced from full gap */
|
|
104
|
+
padding: calc(var(--tag-padding-y-sm) * 0.75) calc(var(--tag-padding-x) * 0.875); /* COMPACT: Reduced padding */
|
|
105
|
+
border-radius: 999px;
|
|
106
|
+
border: none !important;
|
|
107
|
+
/* NO BORDER (only cards have borders) */
|
|
108
|
+
background: color-mix(in srgb, var(--section-accent) 12%, transparent);
|
|
109
|
+
font-size: var(--font-section-meta);
|
|
110
|
+
font-weight: 600;
|
|
111
|
+
text-transform: uppercase;
|
|
112
|
+
letter-spacing: 0.08em;
|
|
113
|
+
color: color-mix(in srgb, var(--section-accent) 80%, var(--foreground) 20%);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.section-grid {
|
|
117
|
+
@include section-responsive-grid(var(--section-grid-min-width), var(--section-card-gap));
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.section-list {
|
|
121
|
+
display: flex;
|
|
122
|
+
flex-direction: column;
|
|
123
|
+
gap: var(--section-card-gap);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.section-card {
|
|
127
|
+
@include card;
|
|
128
|
+
/* All properties (padding, border, background, border-radius, hover) are set by @include card */
|
|
129
|
+
/* Matches: rounded-3xl border border-border/40 bg-card/70 p-5 */
|
|
130
|
+
/* Background is forced by @include card with !important */
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.section-card--metric {
|
|
134
|
+
min-height: auto !important;
|
|
135
|
+
height: auto !important;
|
|
136
|
+
display: flex;
|
|
137
|
+
flex-direction: column;
|
|
138
|
+
gap: var(--card-gap);
|
|
139
|
+
|
|
140
|
+
/* Remove any minimum height constraints to allow perfect content fit */
|
|
141
|
+
& > * {
|
|
142
|
+
flex-shrink: 0;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.section-card__label {
|
|
147
|
+
@extend %unified-card-label;
|
|
148
|
+
display: flex;
|
|
149
|
+
align-items: center;
|
|
150
|
+
gap: calc(var(--card-gap) * 0.75); /* COMPACT: Reduced from full gap */
|
|
151
|
+
text-transform: capitalize;
|
|
152
|
+
|
|
153
|
+
> lucide-icon {
|
|
154
|
+
color: color-mix(in srgb, var(--section-accent) 70%, transparent);
|
|
155
|
+
filter: none; /* Removed drop-shadow */
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.section-card__value {
|
|
160
|
+
@extend %unified-card-value;
|
|
161
|
+
font-size: calc(var(--card-value-font-size) + 4px) !important; /* Bigger font */
|
|
162
|
+
font-weight: var(--card-value-font-weight) !important;
|
|
163
|
+
letter-spacing: var(--card-value-letter-spacing) !important;
|
|
164
|
+
line-height: var(--card-value-line-height) !important;
|
|
165
|
+
color: var(--card-text-primary) !important;
|
|
166
|
+
transition: color 0.25s ease;
|
|
167
|
+
text-shadow: none;
|
|
168
|
+
display: flex;
|
|
169
|
+
align-items: center;
|
|
170
|
+
gap: calc(var(--card-gap) * 0.75);
|
|
171
|
+
|
|
172
|
+
> lucide-icon {
|
|
173
|
+
flex-shrink: 0;
|
|
174
|
+
opacity: 0.85;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.section-card__meta {
|
|
179
|
+
display: flex;
|
|
180
|
+
align-items: center;
|
|
181
|
+
gap: calc(var(--card-gap) * 0.75); /* COMPACT: Reduced from full gap */
|
|
182
|
+
font-size: var(--font-section-meta);
|
|
183
|
+
color: color-mix(in srgb, var(--foreground) 85%, transparent);
|
|
184
|
+
line-height: 1.2; /* COMPACT: Tight line-height */
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.section-card__progress {
|
|
188
|
+
width: 100%;
|
|
189
|
+
height: 6px;
|
|
190
|
+
border-radius: var(--radius-xs);
|
|
191
|
+
background: color-mix(in srgb, var(--section-accent) 12%, transparent);
|
|
192
|
+
overflow: hidden;
|
|
193
|
+
|
|
194
|
+
&-bar {
|
|
195
|
+
height: 100%;
|
|
196
|
+
border-radius: inherit;
|
|
197
|
+
background: color-mix(in srgb, var(--section-accent) 72%, transparent);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.section-empty {
|
|
202
|
+
/* COMPACT: Reduced padding */
|
|
203
|
+
padding: calc(var(--card-padding) * 1.5);
|
|
204
|
+
border-radius: var(--section-card-border-radius);
|
|
205
|
+
border: none !important;
|
|
206
|
+
/* CLEAN: No borders on empty states - only sections and cards have borders */
|
|
207
|
+
background: color-mix(in srgb, var(--section-accent) 10%, transparent);
|
|
208
|
+
text-align: center;
|
|
209
|
+
color: color-mix(in srgb, var(--foreground) 85%, transparent);
|
|
210
|
+
min-height: auto;
|
|
211
|
+
/* COMPACT: No minimum height */
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/* -------------------------------------------------------------------------- */
|
|
215
|
+
/* Section Type Modifiers */
|
|
216
|
+
/* -------------------------------------------------------------------------- */
|
|
217
|
+
|
|
218
|
+
.section-block--metrics {
|
|
219
|
+
--section-accent: var(--color-brand);
|
|
220
|
+
--section-background: var(--card-section-bg); /* Theme-aware: grey-800 (night) or grey-50 (day) */
|
|
221
|
+
--section-card-background: var(--card-section-card-bg); /* Theme-aware: grey-700 (night) or grey-100 (day) - more contrasty */
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.section-block--insights {
|
|
225
|
+
--section-accent: color-mix(in srgb, var(--color-brand) 65%, var(--foreground) 35%);
|
|
226
|
+
--section-background: color-mix(in srgb, var(--card) 94%, transparent);
|
|
227
|
+
--section-card-background: var(--card-section-card-bg); /* Theme-aware: grey-700 (night) or grey-100 (day) - more contrasty */
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
.section-block--list {
|
|
231
|
+
--section-accent: color-mix(in srgb, var(--color-brand) 45%, var(--foreground) 55%);
|
|
232
|
+
--section-card-grid-min: 180px;
|
|
233
|
+
--section-background: color-mix(in srgb, var(--card) 93%, transparent);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.section-block--contacts {
|
|
237
|
+
--section-accent: color-mix(in srgb, var(--color-brand) 70%, var(--foreground) 30%);
|
|
238
|
+
--section-card-grid-min: 180px; /* More compact */
|
|
239
|
+
--section-card-background: var(--card-section-card-bg); /* Theme-aware: grey-700 (night) or grey-100 (day) - more contrasty */
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
.section-block--timeline {
|
|
243
|
+
--section-accent: color-mix(in srgb, var(--color-brand) 55%, var(--foreground) 45%);
|
|
244
|
+
--section-card-grid-min: 200px; /* More compact */
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.section-block--map {
|
|
248
|
+
--section-accent: color-mix(in srgb, var(--color-brand) 50%, var(--foreground) 50%);
|
|
249
|
+
--section-card-grid-min: 220px; /* More compact */
|
|
250
|
+
--section-background: color-mix(in srgb, var(--card) 90%, transparent);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.section-block--network {
|
|
254
|
+
--section-accent: color-mix(in srgb, var(--color-brand) 60%, var(--foreground) 40%);
|
|
255
|
+
--section-card-grid-min: 200px; /* More compact */
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
.section-block--product {
|
|
259
|
+
--section-accent: color-mix(in srgb, var(--color-brand) 75%, var(--foreground) 25%);
|
|
260
|
+
--section-background: color-mix(in srgb, var(--card) 88%, transparent);
|
|
261
|
+
--section-card-background: var(--card-section-card-bg); /* Theme-aware: grey-700 (night) or grey-100 (day) - more contrasty */
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
.section-block--financial {
|
|
265
|
+
--section-accent: color-mix(in srgb, var(--color-brand) 40%, var(--foreground) 60%);
|
|
266
|
+
--section-card-background: var(--card-section-card-bg); /* Theme-aware: grey-700 (night) or grey-100 (day) - more contrasty */
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
.section-block--solutions {
|
|
270
|
+
--section-accent: color-mix(in srgb, var(--color-brand) 65%, var(--foreground) 35%);
|
|
271
|
+
--section-card-grid-min: 220px; /* More compact */
|
|
272
|
+
--section-card-background: var(--card-section-card-bg); /* Theme-aware: grey-700 (night) or grey-100 (day) - more contrasty */
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
@media (max-width: 768px) {
|
|
276
|
+
.section-block {
|
|
277
|
+
gap: var(--card-gap);
|
|
278
|
+
padding: clamp(12px, 2.5vw, 18px); /* Increased by 2px */
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
.section-grid {
|
|
282
|
+
grid-template-columns: repeat(auto-fit, minmax(var(--section-grid-min-width), 1fr));
|
|
283
|
+
gap: var(--section-grid-gap-mobile);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.section-list {
|
|
287
|
+
gap: var(--section-grid-gap-mobile);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/* Consolidated base styles for all card sections */
|
|
2
|
+
|
|
3
|
+
/* ===== GRID MIXINS ===== */
|
|
4
|
+
/* Default gap values map to CSS variables: --grid-gap-xs (3px), --grid-gap-sm (4px) */
|
|
5
|
+
@mixin section-grid($min-width: var(--section-grid-min-width), $gap: var(--card-gap)) {
|
|
6
|
+
display: grid !important;
|
|
7
|
+
gap: $gap;
|
|
8
|
+
grid-template-columns: repeat(auto-fit, minmax($min-width, 1fr)) !important;
|
|
9
|
+
min-height: 0;
|
|
10
|
+
|
|
11
|
+
@media (max-width: 520px) {
|
|
12
|
+
grid-template-columns: 1fr !important;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@mixin section-grid-responsive($min-width: var(--section-grid-min-width), $gap: var(--section-card-gap), $tablet-breakpoint: 820px) {
|
|
17
|
+
display: grid !important;
|
|
18
|
+
gap: $gap;
|
|
19
|
+
grid-template-columns: repeat(auto-fit, minmax($min-width, 1fr)) !important;
|
|
20
|
+
min-height: 0;
|
|
21
|
+
|
|
22
|
+
@media (max-width: $tablet-breakpoint) {
|
|
23
|
+
grid-template-columns: 1fr !important;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* ===== UNIVERSAL CARD MIXIN ===== */
|
|
28
|
+
/* Used for ALL card types: metric, contact, list, product, etc. */
|
|
29
|
+
/* Guarantees 100% consistency across entire application */
|
|
30
|
+
/* Style matches: rounded-2xl, border-border/40, bg-card/70, hover effects */
|
|
31
|
+
@mixin card {
|
|
32
|
+
/* UNIFIED CARD DESIGN - All section items use identical styling */
|
|
33
|
+
/* NOTE: Global enforcement (_global-enforcement.scss) overrides all these values with !important */
|
|
34
|
+
/* This mixin provides defaults, but global enforcement ensures 100% consistency */
|
|
35
|
+
|
|
36
|
+
/* Use section-item variables for consistency (global enforcement overrides with !important) */
|
|
37
|
+
border: var(--section-item-border);
|
|
38
|
+
border-radius: var(--section-item-border-radius);
|
|
39
|
+
padding: var(--card-padding);
|
|
40
|
+
background: linear-gradient(135deg, var(--section-item-background) 0%, color-mix(in srgb, var(--section-item-background) 98%, rgba(255, 121, 0, 0.02)) 100%);
|
|
41
|
+
display: flex;
|
|
42
|
+
flex-direction: column;
|
|
43
|
+
gap: var(--card-gap);
|
|
44
|
+
min-height: var(--card-min-height);
|
|
45
|
+
cursor: pointer;
|
|
46
|
+
position: relative;
|
|
47
|
+
overflow: hidden;
|
|
48
|
+
box-shadow: var(--section-item-box-shadow);
|
|
49
|
+
|
|
50
|
+
/* Minimalistic transitions */
|
|
51
|
+
transition: background 0.22s ease,
|
|
52
|
+
box-shadow 0.22s ease,
|
|
53
|
+
border-color 0.22s ease,
|
|
54
|
+
transform 0.22s ease;
|
|
55
|
+
|
|
56
|
+
/* Minimalistic accent line on left */
|
|
57
|
+
&::before {
|
|
58
|
+
content: '';
|
|
59
|
+
position: absolute;
|
|
60
|
+
left: 0;
|
|
61
|
+
top: 0;
|
|
62
|
+
bottom: 0;
|
|
63
|
+
width: 3px;
|
|
64
|
+
background: rgba(255, 121, 0, 0.6);
|
|
65
|
+
opacity: 0;
|
|
66
|
+
transition: opacity 0.22s ease;
|
|
67
|
+
border-radius: 0 2px 2px 0;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
&:hover {
|
|
71
|
+
/* Minimalistic hover */
|
|
72
|
+
box-shadow: var(--section-item-box-shadow-hover),
|
|
73
|
+
0 0 0 1px color-mix(in srgb, rgba(255, 121, 0, 0.15), transparent);
|
|
74
|
+
transform: translateY(-2px) var(--section-item-hover-transform);
|
|
75
|
+
border-color: color-mix(in srgb, rgba(255, 121, 0, 0.2), transparent);
|
|
76
|
+
|
|
77
|
+
/* Accent line appears on hover */
|
|
78
|
+
&::before {
|
|
79
|
+
opacity: 0.6;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* Focus state for keyboard navigation and accessibility */
|
|
84
|
+
&:focus-visible {
|
|
85
|
+
outline: 2px solid rgba(255, 121, 0, 0.6);
|
|
86
|
+
outline-offset: 2px;
|
|
87
|
+
border-color: rgba(255, 121, 0, 0.5);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* Reset will-change when not hovering to free resources */
|
|
91
|
+
&:not(:hover) {
|
|
92
|
+
will-change: auto;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* Accessibility: Disable animations for reduced motion preference */
|
|
96
|
+
@media (prefers-reduced-motion: reduce) {
|
|
97
|
+
transition: none !important;
|
|
98
|
+
will-change: auto !important;
|
|
99
|
+
transform: none !important;
|
|
100
|
+
|
|
101
|
+
&::before {
|
|
102
|
+
display: none;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/* ===== METRIC CARD MIXIN (DEPRECATED) ===== */
|
|
108
|
+
/* Legacy alias for backward compatibility - use @mixin card instead */
|
|
109
|
+
@mixin metric-card {
|
|
110
|
+
@include card;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* ===== CARD BASE STYLES (DEPRECATED) ===== */
|
|
114
|
+
/* Legacy alias for backward compatibility - use @mixin card instead */
|
|
115
|
+
@mixin section-card-base($accent: var(--section-accent, var(--accent))) {
|
|
116
|
+
@include card;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* ===== UNIFIED SECTION CARD CLASS ===== */
|
|
120
|
+
/* Master card component for direct use without mixins */
|
|
121
|
+
/* This class provides the same style as Tailwind: rounded-2xl, border-border/40, bg-card/70 */
|
|
122
|
+
.unified-card {
|
|
123
|
+
@include card;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/* Alias for backward compatibility */
|
|
127
|
+
.section-card {
|
|
128
|
+
@include card;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/* ===== METRIC TYPOGRAPHY MIXINS ===== */
|
|
132
|
+
/* Consistent label/value styling for all metric cards */
|
|
133
|
+
/* NOTE: Font sizes are now enforced by unified-cards.scss - do not set font-size here */
|
|
134
|
+
@mixin metric-label {
|
|
135
|
+
/* font-size is set by unified-cards.scss - do not override */
|
|
136
|
+
letter-spacing: 0.04em;
|
|
137
|
+
text-transform: none;
|
|
138
|
+
color: var(--card-text-label);
|
|
139
|
+
line-height: 1.3;
|
|
140
|
+
font-weight: 600;
|
|
141
|
+
transition: color 0.22s ease;
|
|
142
|
+
|
|
143
|
+
/* Minimalistic hover */
|
|
144
|
+
.section-card:hover &,
|
|
145
|
+
.unified-card:hover & {
|
|
146
|
+
color: color-mix(in srgb, var(--card-text-label) 90%, rgba(255, 121, 0, 0.1));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
@mixin metric-value {
|
|
151
|
+
/* font-size is set by unified-cards.scss - do not override */
|
|
152
|
+
font-weight: 700;
|
|
153
|
+
color: var(--foreground);
|
|
154
|
+
letter-spacing: -0.01em;
|
|
155
|
+
line-height: 1.2;
|
|
156
|
+
transition: color 0.22s ease;
|
|
157
|
+
|
|
158
|
+
/* Minimalistic hover */
|
|
159
|
+
.section-card:hover &,
|
|
160
|
+
.unified-card:hover & {
|
|
161
|
+
color: color-mix(in srgb, var(--foreground) 90%, rgba(255, 121, 0, 0.1));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
@mixin section-description {
|
|
166
|
+
font-size: var(--font-section-description);
|
|
167
|
+
color: color-mix(in srgb, var(--foreground) 70%, transparent);
|
|
168
|
+
letter-spacing: 0.01em;
|
|
169
|
+
line-height: 1.4;
|
|
170
|
+
font-weight: 400;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/* Legacy aliases for backward compatibility */
|
|
174
|
+
@mixin section-label {
|
|
175
|
+
@include metric-label;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
@mixin section-value {
|
|
179
|
+
@include metric-value;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/* ===== COMMON COMPONENTS ===== */
|
|
183
|
+
@mixin section-empty-state($accent: var(--section-accent, var(--accent))) {
|
|
184
|
+
/* COMPACT: Reduced padding */
|
|
185
|
+
padding: calc(var(--card-padding) * 1.5);
|
|
186
|
+
text-align: center;
|
|
187
|
+
color: color-mix(in srgb, var(--foreground) 55%, transparent);
|
|
188
|
+
border: none !important;
|
|
189
|
+
/* CLEAN: No borders on empty states - only sections and cards have borders */
|
|
190
|
+
border-radius: var(--section-card-border-radius);
|
|
191
|
+
background: color-mix(in srgb, #{$accent} 10%, transparent);
|
|
192
|
+
min-height: auto;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
@mixin section-empty-icon {
|
|
196
|
+
margin: 0 auto var(--card-gap);
|
|
197
|
+
opacity: 0.65;
|
|
198
|
+
filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.22));
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/* ===== TREND COLORS ===== */
|
|
202
|
+
/* Standardized trend colors used across ALL sections */
|
|
203
|
+
@mixin trend-colors {
|
|
204
|
+
&.trend--up {
|
|
205
|
+
color: #4ade80 !important;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
&.trend--down {
|
|
209
|
+
color: #f87171 !important;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
&.trend--stable {
|
|
213
|
+
color: #facc15 !important;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
&.trend--neutral {
|
|
217
|
+
color: #94a3b8 !important;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/* ===== STANDARDIZED STATUS CLASSES ===== */
|
|
222
|
+
/* Use these classes across ALL sections for consistent status styling */
|
|
223
|
+
.status--completed,
|
|
224
|
+
.status--success {
|
|
225
|
+
border-color: rgba(74, 222, 128, 0.4) !important;
|
|
226
|
+
color: rgba(134, 239, 172, 1) !important;
|
|
227
|
+
background: color-mix(in srgb, rgba(34, 197, 94, 0.15), transparent) !important;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
.status--active,
|
|
231
|
+
.status--in-progress {
|
|
232
|
+
border-color: color-mix(in srgb, var(--section-accent, var(--accent)) 40%, transparent) !important;
|
|
233
|
+
color: color-mix(in srgb, var(--section-accent, var(--accent)) 70%, var(--foreground) 30%) !important;
|
|
234
|
+
background: color-mix(in srgb, var(--section-accent, var(--accent)) 15%, transparent) !important;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.status--pending,
|
|
238
|
+
.status--warning {
|
|
239
|
+
border-color: rgba(251, 191, 36, 0.4) !important;
|
|
240
|
+
color: rgba(253, 224, 71, 1) !important;
|
|
241
|
+
background: color-mix(in srgb, rgba(253, 186, 116, 0.15), transparent) !important;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
.status--blocked,
|
|
245
|
+
.status--cancelled,
|
|
246
|
+
.status--delayed,
|
|
247
|
+
.status--inactive,
|
|
248
|
+
.status--error {
|
|
249
|
+
border-color: rgba(248, 113, 113, 0.4) !important;
|
|
250
|
+
color: rgba(252, 165, 165, 1) !important;
|
|
251
|
+
background: color-mix(in srgb, rgba(239, 68, 68, 0.15), transparent) !important;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.status--default {
|
|
255
|
+
border-color: rgba(120, 120, 120, 0.4) !important;
|
|
256
|
+
color: rgba(200, 200, 200, 0.85) !important;
|
|
257
|
+
background: color-mix(in srgb, rgba(40, 40, 40, 0.2), transparent) !important;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/* ===== STANDARDIZED PRIORITY CLASSES ===== */
|
|
261
|
+
.priority--high {
|
|
262
|
+
border-color: rgba(248, 113, 113, 0.4) !important;
|
|
263
|
+
color: rgba(252, 165, 165, 1) !important;
|
|
264
|
+
background: color-mix(in srgb, rgba(239, 68, 68, 0.15), transparent) !important;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.priority--medium {
|
|
268
|
+
border-color: rgba(251, 191, 36, 0.4) !important;
|
|
269
|
+
color: rgba(253, 224, 71, 1) !important;
|
|
270
|
+
background: color-mix(in srgb, rgba(253, 186, 116, 0.15), transparent) !important;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.priority--low {
|
|
274
|
+
border-color: rgba(74, 222, 128, 0.4) !important;
|
|
275
|
+
color: rgba(134, 239, 172, 1) !important;
|
|
276
|
+
background: color-mix(in srgb, rgba(34, 197, 94, 0.15), transparent) !important;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.priority--default {
|
|
280
|
+
border-color: rgba(120, 120, 120, 0.4) !important;
|
|
281
|
+
color: rgba(200, 200, 200, 0.85) !important;
|
|
282
|
+
background: color-mix(in srgb, rgba(40, 40, 40, 0.2), transparent) !important;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/* Removed obsolete section-card-mobile mixin - continuous responsive design via base system */
|
|
286
|
+
|
|
287
|
+
/* ===================================================================
|
|
288
|
+
REDUCED MOTION SUPPORT
|
|
289
|
+
Global accessibility support for all sections
|
|
290
|
+
=================================================================== */
|
|
291
|
+
|
|
292
|
+
@media (prefers-reduced-motion: reduce) {
|
|
293
|
+
/* Disable all card animations and transitions */
|
|
294
|
+
.unified-card,
|
|
295
|
+
.section-card,
|
|
296
|
+
[class*="__card"],
|
|
297
|
+
[class*="-card"],
|
|
298
|
+
[class*="__item"],
|
|
299
|
+
[class*="-item"] {
|
|
300
|
+
transition: none !important;
|
|
301
|
+
animation: none !important;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/* Disable trend color effects */
|
|
305
|
+
.trend--up,
|
|
306
|
+
.trend--down,
|
|
307
|
+
.trend--stable,
|
|
308
|
+
.trend--neutral {
|
|
309
|
+
text-shadow: none !important;
|
|
310
|
+
filter: none !important;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/* Disable status effects */
|
|
314
|
+
.status--completed,
|
|
315
|
+
.status--success,
|
|
316
|
+
.status--active,
|
|
317
|
+
.status--in-progress,
|
|
318
|
+
.status--pending,
|
|
319
|
+
.status--warning,
|
|
320
|
+
.status--blocked,
|
|
321
|
+
.status--cancelled,
|
|
322
|
+
.status--delayed,
|
|
323
|
+
.status--inactive,
|
|
324
|
+
.status--error,
|
|
325
|
+
.status--default,
|
|
326
|
+
.priority--high,
|
|
327
|
+
.priority--medium,
|
|
328
|
+
.priority--low,
|
|
329
|
+
.priority--default {
|
|
330
|
+
filter: none !important;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
@import 'sections/sections-base';
|
|
2
|
+
|
|
3
|
+
/* Social media section adhering to shared token system */
|
|
4
|
+
.ai-section--social-media {
|
|
5
|
+
--section-accent: var(--color-brand);
|
|
6
|
+
--section-item-radius: var(--card-border-radius);
|
|
7
|
+
--post-gap: calc(var(--card-gap) * 0.6);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.social-feed {
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-direction: column;
|
|
13
|
+
gap: var(--post-gap);
|
|
14
|
+
width: 100%;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.social-post {
|
|
18
|
+
@include card;
|
|
19
|
+
border: 1px solid color-mix(in srgb, var(--section-accent) 60%, transparent);
|
|
20
|
+
background: var(--card-background);
|
|
21
|
+
padding: var(--card-padding);
|
|
22
|
+
display: grid;
|
|
23
|
+
grid-template-columns: auto 1fr;
|
|
24
|
+
gap: var(--card-gap);
|
|
25
|
+
align-items: center;
|
|
26
|
+
min-height: 140px;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.social-post__avatar {
|
|
30
|
+
width: 48px;
|
|
31
|
+
height: 48px;
|
|
32
|
+
border-radius: 50%;
|
|
33
|
+
background: color-mix(in srgb, var(--section-accent) 20%, var(--card));
|
|
34
|
+
display: flex;
|
|
35
|
+
align-items: center;
|
|
36
|
+
justify-content: center;
|
|
37
|
+
font-size: var(--font-section-meta);
|
|
38
|
+
color: var(--card-background);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.social-post__body {
|
|
42
|
+
display: flex;
|
|
43
|
+
flex-direction: column;
|
|
44
|
+
gap: calc(var(--card-gap) * 0.4);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.social-post__header {
|
|
48
|
+
display: flex;
|
|
49
|
+
align-items: center;
|
|
50
|
+
justify-content: space-between;
|
|
51
|
+
gap: var(--card-gap);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.social-post__author {
|
|
55
|
+
font-weight: 600;
|
|
56
|
+
font-size: var(--card-title-font-size);
|
|
57
|
+
color: var(--card-text-primary);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.social-post__handle {
|
|
61
|
+
font-size: var(--font-section-meta);
|
|
62
|
+
color: var(--card-text-muted);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.social-post__content {
|
|
66
|
+
font-size: var(--card-value-font-size);
|
|
67
|
+
color: var(--card-text-primary);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.social-post__stats {
|
|
71
|
+
display: flex;
|
|
72
|
+
gap: calc(var(--card-gap) * 0.7);
|
|
73
|
+
font-size: var(--font-section-meta);
|
|
74
|
+
color: color-mix(in srgb, var(--foreground) 70%, transparent);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.social-post__stat {
|
|
78
|
+
display: inline-flex;
|
|
79
|
+
align-items: center;
|
|
80
|
+
gap: calc(var(--card-gap) * 0.3);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.social-post__stat-icon {
|
|
84
|
+
width: 12px;
|
|
85
|
+
height: 12px;
|
|
86
|
+
border-radius: 50%;
|
|
87
|
+
background: var(--section-accent);
|
|
88
|
+
}
|