osi-cards-lib 1.5.32 → 1.5.34
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/fesm2022/osi-cards-lib.mjs +31889 -0
- package/fesm2022/osi-cards-lib.mjs.map +1 -0
- package/index.d.ts +11528 -0
- package/package.json +25 -13
- package/scripts/setup-angular-styles.js +169 -0
- package/styles/_components.scss +38 -0
- package/styles/_index.scss +25 -0
- package/styles/_osi-cards-mixins.scss +459 -0
- package/styles/_osi-cards-tokens.scss +333 -0
- package/styles/_styles-scoped.scss +81 -0
- package/styles/_styles.scss +26 -0
- package/styles/bundles/_ai-card.scss +245 -0
- package/styles/bundles/_all.scss +68 -0
- package/styles/bundles/_base.scss +60 -0
- package/styles/bundles/_card-skeleton.scss +290 -0
- package/styles/bundles/_index.scss +25 -0
- package/styles/bundles/_sections.scss +48 -0
- package/styles/bundles/_tokens-only.scss +139 -0
- package/styles/components/_ai-card-renderer.scss +104 -0
- package/styles/components/_badges.scss +317 -0
- package/styles/components/_card-actions.scss +169 -0
- package/styles/components/_card-footer.scss +47 -0
- package/styles/components/_component-styles.scss +205 -0
- package/styles/components/_empty-state.scss +630 -0
- package/styles/components/_hero-card.scss +422 -0
- package/styles/components/_image-fallback.scss +28 -0
- package/styles/components/_streaming-effects.scss +518 -0
- package/styles/components/cards/_ai-card.scss +718 -0
- package/styles/components/sections/_all-sections.generated.scss +41 -0
- package/styles/components/sections/_all-sections.scss +1086 -0
- package/styles/components/sections/_balanced-compact-system.scss +186 -0
- package/styles/components/sections/_compact-mixins.scss +180 -0
- package/styles/components/sections/_component-mixins.scss +454 -0
- package/styles/components/sections/_design-system.scss +477 -0
- package/styles/components/sections/_design-tokens.scss +308 -0
- package/styles/components/sections/_enhanced-design-variables.scss +147 -0
- package/styles/components/sections/_master-compact-system.scss +302 -0
- package/styles/components/sections/_master-dense-system.scss +239 -0
- package/styles/components/sections/_minimalistic-design.scss +268 -0
- package/styles/components/sections/_modern-effects.scss +392 -0
- package/styles/components/sections/_modern-sections.scss +351 -0
- package/styles/components/sections/_perfect-system.scss +204 -0
- package/styles/components/sections/_section-animations.scss +331 -0
- package/styles/components/sections/_section-shell.scss +337 -0
- package/styles/components/sections/_section-types.generated.scss +30 -0
- package/styles/components/sections/_sections-all.scss +26 -0
- package/styles/components/sections/_sections-base.scss +334 -0
- package/styles/components/sections/_typography-system.scss +327 -0
- package/styles/components/sections/_ultra-compact-tokens.scss +375 -0
- package/styles/components/sections/_unified-section-style.scss +157 -0
- package/styles/components/sections/_utility-classes.scss +567 -0
- package/styles/components/sections/_visual-effects-library.scss +374 -0
- package/styles/core/_animations.scss +1498 -0
- package/styles/core/_bootstrap-reset.scss +445 -0
- package/styles/core/_color-helpers.scss +46 -0
- package/styles/core/_global-unified.scss +118 -0
- package/styles/core/_global.scss +73 -0
- package/styles/core/_mixins.scss +491 -0
- package/styles/core/_surface-layers.scss +76 -0
- package/styles/core/_utilities.scss +326 -0
- package/styles/core/_variables-unified.scss +57 -0
- package/styles/core/_variables.scss +36 -0
- package/styles/core/variables/_colors-source.scss +34 -0
- package/styles/core/variables/_colors-unified.scss +26 -0
- package/styles/core/variables/_colors.scss +21 -0
- package/styles/critical.scss +353 -0
- package/styles/design-system/_compact-theme.scss +159 -0
- package/styles/design-system/_section-base.scss +426 -0
- package/styles/design-system/_tokens.scss +237 -0
- package/styles/design-system/_unified-sections.scss +215 -0
- package/styles/layout/_feature-grid.scss +322 -0
- package/styles/layout/_masonry.scss +734 -0
- package/styles/layout/_tilt.scss +244 -0
- package/styles/micro-interactions.scss +583 -0
- package/styles/mixins/_section-mixins.scss +280 -0
- package/styles/non-critical.scss +643 -0
- package/styles/reset/_framework-reset.scss +457 -0
- package/styles/reset/_index.scss +14 -0
- package/styles/reset/_shadow-reset.scss +383 -0
- package/styles/responsive.scss +326 -0
- package/styles/themes.scss +573 -0
- package/styles/tokens/_index.scss +92 -0
- package/styles/tokens/_master.scss +1404 -0
- package/styles/tokens/_section-tokens.generated.scss +140 -0
- package/postcss.config.js +0 -81
- package/section-registry.json +0 -3864
- package/section-registry.schema.json +0 -264
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
// =====================================================================
|
|
2
|
+
// MASTER COMPACT SYSTEM - Intelligent Structure
|
|
3
|
+
// =====================================================================
|
|
4
|
+
//
|
|
5
|
+
// This isn't just about reducing padding - it's about SMART LAYOUT
|
|
6
|
+
// Horizontal when possible, vertical when needed, adaptive always
|
|
7
|
+
//
|
|
8
|
+
// =====================================================================
|
|
9
|
+
|
|
10
|
+
// =====================================================================
|
|
11
|
+
// CONSISTENT SPACING SYSTEM
|
|
12
|
+
// =====================================================================
|
|
13
|
+
|
|
14
|
+
:root {
|
|
15
|
+
// Base spacing scale (strictly enforced)
|
|
16
|
+
--compact-space-1: 2px; // Micro
|
|
17
|
+
--compact-space-2: 4px; // Tight
|
|
18
|
+
--compact-space-3: 6px; // Compact
|
|
19
|
+
--compact-space-4: 8px; // Standard
|
|
20
|
+
--compact-space-5: 10px; // Comfortable
|
|
21
|
+
--compact-space-6: 12px; // Spacious
|
|
22
|
+
|
|
23
|
+
// Component spacing (consistent application)
|
|
24
|
+
--compact-card-padding: 8px;
|
|
25
|
+
--compact-item-padding-y: 6px;
|
|
26
|
+
--compact-item-padding-x: 8px;
|
|
27
|
+
--compact-gap-tight: 4px;
|
|
28
|
+
--compact-gap-standard: 6px;
|
|
29
|
+
--compact-gap-comfortable: 8px;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// =====================================================================
|
|
33
|
+
// INTELLIGENT LAYOUT MIXINS
|
|
34
|
+
// =====================================================================
|
|
35
|
+
|
|
36
|
+
// Smart card that uses horizontal space wisely
|
|
37
|
+
@mixin smart-card-horizontal {
|
|
38
|
+
display: grid;
|
|
39
|
+
grid-template-columns: auto 1fr auto;
|
|
40
|
+
grid-template-rows: auto auto;
|
|
41
|
+
gap: var(--compact-gap-tight);
|
|
42
|
+
align-items: center;
|
|
43
|
+
|
|
44
|
+
// On narrow screens, switch to vertical
|
|
45
|
+
@media (max-width: 200px) {
|
|
46
|
+
grid-template-columns: 1fr;
|
|
47
|
+
grid-template-rows: auto;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Metric card optimized for 200px width
|
|
52
|
+
@mixin metric-card-200px {
|
|
53
|
+
padding: var(--compact-card-padding);
|
|
54
|
+
display: grid;
|
|
55
|
+
grid-template-areas:
|
|
56
|
+
"label trend"
|
|
57
|
+
"value value"
|
|
58
|
+
"extra extra";
|
|
59
|
+
grid-template-columns: 1fr auto;
|
|
60
|
+
gap: var(--compact-gap-tight);
|
|
61
|
+
align-items: start;
|
|
62
|
+
min-height: 75px;
|
|
63
|
+
|
|
64
|
+
.label {
|
|
65
|
+
grid-area: label;
|
|
66
|
+
}
|
|
67
|
+
.trend {
|
|
68
|
+
grid-area: trend;
|
|
69
|
+
}
|
|
70
|
+
.value {
|
|
71
|
+
grid-area: value;
|
|
72
|
+
}
|
|
73
|
+
.extra {
|
|
74
|
+
grid-area: extra;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// List item optimized for 400px width
|
|
79
|
+
@mixin list-item-400px {
|
|
80
|
+
padding: var(--compact-item-padding-y) var(--compact-item-padding-x);
|
|
81
|
+
display: grid;
|
|
82
|
+
grid-template-columns: auto 1fr auto;
|
|
83
|
+
gap: var(--compact-gap-standard);
|
|
84
|
+
align-items: center;
|
|
85
|
+
min-height: 40px;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Contact card optimized for vertical space
|
|
89
|
+
@mixin contact-card-compact {
|
|
90
|
+
padding: var(--compact-card-padding);
|
|
91
|
+
display: grid;
|
|
92
|
+
grid-template-areas:
|
|
93
|
+
"avatar"
|
|
94
|
+
"info"
|
|
95
|
+
"actions";
|
|
96
|
+
grid-template-rows: auto 1fr auto;
|
|
97
|
+
gap: var(--compact-gap-tight);
|
|
98
|
+
justify-items: center;
|
|
99
|
+
text-align: center;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// =====================================================================
|
|
103
|
+
// RESPONSIVE GRID SYSTEM
|
|
104
|
+
// =====================================================================
|
|
105
|
+
|
|
106
|
+
@mixin responsive-grid-200px {
|
|
107
|
+
display: grid;
|
|
108
|
+
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
109
|
+
gap: var(--compact-gap-comfortable);
|
|
110
|
+
|
|
111
|
+
@media (max-width: 640px) {
|
|
112
|
+
grid-template-columns: repeat(2, 1fr);
|
|
113
|
+
gap: var(--compact-gap-standard);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
@media (max-width: 420px) {
|
|
117
|
+
grid-template-columns: 1fr;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
@mixin responsive-list-400px {
|
|
122
|
+
display: flex;
|
|
123
|
+
flex-direction: column;
|
|
124
|
+
gap: 0;
|
|
125
|
+
min-width: 400px;
|
|
126
|
+
|
|
127
|
+
@media (max-width: 640px) {
|
|
128
|
+
min-width: 100%;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// =====================================================================
|
|
133
|
+
// CONSISTENT CARD STRUCTURE
|
|
134
|
+
// =====================================================================
|
|
135
|
+
|
|
136
|
+
@mixin base-card {
|
|
137
|
+
position: relative;
|
|
138
|
+
background: var(--card, #0c0c0c);
|
|
139
|
+
border: 1px solid rgba(255, 255, 255, 0.06);
|
|
140
|
+
border-radius: 8px;
|
|
141
|
+
transition: all 200ms ease-out;
|
|
142
|
+
box-sizing: border-box;
|
|
143
|
+
|
|
144
|
+
// Accent line (consistent across all cards)
|
|
145
|
+
&::before {
|
|
146
|
+
content: "";
|
|
147
|
+
position: absolute;
|
|
148
|
+
top: 0;
|
|
149
|
+
left: 0;
|
|
150
|
+
right: 0;
|
|
151
|
+
height: 1px;
|
|
152
|
+
background: var(--accent, #ff7900);
|
|
153
|
+
opacity: 0;
|
|
154
|
+
transition: opacity 200ms ease-out;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
&:hover {
|
|
158
|
+
border-color: rgba(255, 255, 255, 0.12);
|
|
159
|
+
transform: translateY(-1px);
|
|
160
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
|
161
|
+
|
|
162
|
+
&::before {
|
|
163
|
+
opacity: 0.6;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
@mixin base-list {
|
|
169
|
+
padding: var(--compact-space-2);
|
|
170
|
+
background: var(--card, #0c0c0c);
|
|
171
|
+
border: 1px solid rgba(255, 255, 255, 0.06);
|
|
172
|
+
border-radius: 8px;
|
|
173
|
+
box-sizing: border-box;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
@mixin base-item {
|
|
177
|
+
padding: var(--compact-item-padding-y) var(--compact-item-padding-x);
|
|
178
|
+
border-radius: 4px;
|
|
179
|
+
transition: background 150ms ease-out;
|
|
180
|
+
box-sizing: border-box;
|
|
181
|
+
|
|
182
|
+
&:not(:last-child) {
|
|
183
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.04);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
&:hover {
|
|
187
|
+
background: rgba(255, 255, 255, 0.02);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// =====================================================================
|
|
192
|
+
// TYPOGRAPHY - CONSISTENT SYSTEM
|
|
193
|
+
// =====================================================================
|
|
194
|
+
|
|
195
|
+
@mixin text-label-compact {
|
|
196
|
+
font-size: 0.6rem;
|
|
197
|
+
font-weight: 600;
|
|
198
|
+
letter-spacing: 0.05em;
|
|
199
|
+
text-transform: uppercase;
|
|
200
|
+
color: var(--muted-foreground, #999);
|
|
201
|
+
line-height: 1.1;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
@mixin text-value-compact {
|
|
205
|
+
font-size: 1.1rem;
|
|
206
|
+
font-weight: 700;
|
|
207
|
+
font-variant-numeric: tabular-nums;
|
|
208
|
+
color: var(--foreground, #fff);
|
|
209
|
+
line-height: 1;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
@mixin text-title-compact {
|
|
213
|
+
font-size: 0.75rem;
|
|
214
|
+
font-weight: 600;
|
|
215
|
+
color: var(--foreground, #fff);
|
|
216
|
+
line-height: 1.2;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
@mixin text-body-compact {
|
|
220
|
+
font-size: 0.7rem;
|
|
221
|
+
font-weight: 400;
|
|
222
|
+
color: var(--muted-foreground, #999);
|
|
223
|
+
line-height: 1.3;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// =====================================================================
|
|
227
|
+
// REDUCED MOTION - CONSISTENT
|
|
228
|
+
// =====================================================================
|
|
229
|
+
|
|
230
|
+
@mixin reduced-motion-safe {
|
|
231
|
+
@media (prefers-reduced-motion: reduce) {
|
|
232
|
+
transition: none;
|
|
233
|
+
animation: none;
|
|
234
|
+
|
|
235
|
+
&:hover {
|
|
236
|
+
transform: none;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// =====================================================================
|
|
242
|
+
// VISUAL HIERARCHY - SMART SPACING
|
|
243
|
+
// =====================================================================
|
|
244
|
+
|
|
245
|
+
// Breathing room for visual appeal
|
|
246
|
+
@mixin visual-spacing {
|
|
247
|
+
// Not everything needs to be cramped
|
|
248
|
+
// Strategic spacing for visual hierarchy
|
|
249
|
+
|
|
250
|
+
> *:not(:first-child) {
|
|
251
|
+
margin-top: var(--compact-gap-tight);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.primary-content {
|
|
255
|
+
margin: var(--compact-gap-standard) 0;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
.secondary-content {
|
|
259
|
+
margin-top: auto; // Push to bottom
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// =====================================================================
|
|
264
|
+
// SMART TRUNCATION
|
|
265
|
+
// =====================================================================
|
|
266
|
+
|
|
267
|
+
@mixin smart-truncate($lines: 1) {
|
|
268
|
+
@if $lines == 1 {
|
|
269
|
+
white-space: nowrap;
|
|
270
|
+
overflow: hidden;
|
|
271
|
+
text-overflow: ellipsis;
|
|
272
|
+
} @else {
|
|
273
|
+
display: -webkit-box;
|
|
274
|
+
-webkit-line-clamp: $lines;
|
|
275
|
+
-webkit-box-orient: vertical;
|
|
276
|
+
overflow: hidden;
|
|
277
|
+
text-overflow: ellipsis;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// =====================================================================
|
|
282
|
+
// INTERACTIVE STATES - CONSISTENT
|
|
283
|
+
// =====================================================================
|
|
284
|
+
|
|
285
|
+
@mixin interactive-card {
|
|
286
|
+
cursor: pointer;
|
|
287
|
+
|
|
288
|
+
&:hover {
|
|
289
|
+
.accent-text {
|
|
290
|
+
color: var(--accent, #ff7900);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
&:active {
|
|
295
|
+
transform: translateY(0);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
&:focus-visible {
|
|
299
|
+
outline: 2px solid var(--accent, #ff7900);
|
|
300
|
+
outline-offset: 2px;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
// =====================================================================
|
|
2
|
+
// MASTER DENSE SYSTEM - Final Consolidated Design Library
|
|
3
|
+
// =====================================================================
|
|
4
|
+
//
|
|
5
|
+
// Optimized typography, smart structures, adaptive layouts
|
|
6
|
+
// Each component preserves style while maximizing density
|
|
7
|
+
//
|
|
8
|
+
// =====================================================================
|
|
9
|
+
|
|
10
|
+
// =====================================================================
|
|
11
|
+
// CONSOLIDATED SPACING (Consistent across all sections)
|
|
12
|
+
// =====================================================================
|
|
13
|
+
|
|
14
|
+
:root {
|
|
15
|
+
// Standard spacing
|
|
16
|
+
--ds-space-2: 2px;
|
|
17
|
+
--ds-space-4: 4px;
|
|
18
|
+
--ds-space-6: 6px;
|
|
19
|
+
--ds-space-8: 8px;
|
|
20
|
+
--ds-space-10: 10px;
|
|
21
|
+
--ds-space-12: 12px;
|
|
22
|
+
--ds-space-14: 14px;
|
|
23
|
+
--ds-space-16: 16px;
|
|
24
|
+
|
|
25
|
+
// Component spacing (final standards)
|
|
26
|
+
--ds-card-padding: 14px 12px; // Slightly reduced
|
|
27
|
+
--ds-card-gap: 8px; // Tighter internal
|
|
28
|
+
--ds-item-padding: 10px 12px; // Good for lists
|
|
29
|
+
--ds-grid-gap: 12px; // Between cards
|
|
30
|
+
--ds-section-gap: 10px; // Section to content
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// =====================================================================
|
|
34
|
+
// CONSOLIDATED TYPOGRAPHY (Reduced sizes, tight hierarchy)
|
|
35
|
+
// =====================================================================
|
|
36
|
+
|
|
37
|
+
:root {
|
|
38
|
+
// Reduced font scale
|
|
39
|
+
--ds-text-xs: 0.5625rem; // 9px - Tiny meta
|
|
40
|
+
--ds-text-sm: 0.625rem; // 10px - Labels
|
|
41
|
+
--ds-text-base: 0.6875rem; // 11px - Small body
|
|
42
|
+
--ds-text-md: 0.75rem; // 12px - Body text
|
|
43
|
+
--ds-text-lg: 0.8125rem; // 13px - Titles
|
|
44
|
+
--ds-text-xl: 0.875rem; // 14px - Large titles
|
|
45
|
+
--ds-text-2xl: 1rem; // 16px - Values
|
|
46
|
+
--ds-text-3xl: 1.125rem; // 18px - Large values
|
|
47
|
+
--ds-text-4xl: 1.25rem; // 20px - Metrics
|
|
48
|
+
|
|
49
|
+
// Tight line heights
|
|
50
|
+
--ds-leading-tight: 1;
|
|
51
|
+
--ds-leading-snug: 1.1;
|
|
52
|
+
--ds-leading-normal: 1.2;
|
|
53
|
+
--ds-leading-relaxed: 1.3;
|
|
54
|
+
--ds-leading-loose: 1.4;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// =====================================================================
|
|
58
|
+
// MASTER CARD MIXIN (Consolidated)
|
|
59
|
+
// =====================================================================
|
|
60
|
+
|
|
61
|
+
@mixin ds-card {
|
|
62
|
+
position: relative;
|
|
63
|
+
background: var(--surface);
|
|
64
|
+
border: 1px solid var(--border);
|
|
65
|
+
border-radius: var(--radius-md);
|
|
66
|
+
padding: var(--ds-card-padding);
|
|
67
|
+
display: flex;
|
|
68
|
+
flex-direction: column;
|
|
69
|
+
gap: var(--ds-card-gap);
|
|
70
|
+
transition: all 300ms var(--ease-out);
|
|
71
|
+
|
|
72
|
+
&::after {
|
|
73
|
+
content: "";
|
|
74
|
+
position: absolute;
|
|
75
|
+
bottom: 0;
|
|
76
|
+
left: 0;
|
|
77
|
+
right: 0;
|
|
78
|
+
height: 2px;
|
|
79
|
+
background: linear-gradient(90deg, var(--accent) 0%, transparent 100%);
|
|
80
|
+
opacity: 0;
|
|
81
|
+
transition: opacity 300ms var(--ease-out);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
&:hover {
|
|
85
|
+
transform: translateY(-3px);
|
|
86
|
+
box-shadow: var(--shadow-lg);
|
|
87
|
+
|
|
88
|
+
&::after {
|
|
89
|
+
opacity: 0.8;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// =====================================================================
|
|
95
|
+
// MASTER LIST MIXINS (Consolidated)
|
|
96
|
+
// =====================================================================
|
|
97
|
+
|
|
98
|
+
@mixin ds-list {
|
|
99
|
+
background: var(--surface);
|
|
100
|
+
border: 1px solid var(--border);
|
|
101
|
+
border-radius: var(--radius-md);
|
|
102
|
+
padding: 8px 10px;
|
|
103
|
+
display: flex;
|
|
104
|
+
flex-direction: column;
|
|
105
|
+
gap: 0;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
@mixin ds-item {
|
|
109
|
+
padding: var(--ds-item-padding);
|
|
110
|
+
border-radius: var(--radius-sm);
|
|
111
|
+
transition: all 200ms var(--ease-out);
|
|
112
|
+
|
|
113
|
+
&:not(:last-child) {
|
|
114
|
+
border-bottom: 1px solid var(--border);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
&:hover {
|
|
118
|
+
background: var(--surface-raised);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// =====================================================================
|
|
123
|
+
// TYPOGRAPHY MIXINS (Consolidated & Reduced)
|
|
124
|
+
// =====================================================================
|
|
125
|
+
|
|
126
|
+
@mixin ds-label {
|
|
127
|
+
font-size: var(--ds-text-sm);
|
|
128
|
+
font-weight: 600;
|
|
129
|
+
letter-spacing: 0.05em;
|
|
130
|
+
text-transform: uppercase;
|
|
131
|
+
color: var(--muted-foreground);
|
|
132
|
+
line-height: var(--ds-leading-snug);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
@mixin ds-title {
|
|
136
|
+
font-size: var(--ds-text-lg);
|
|
137
|
+
font-weight: 600;
|
|
138
|
+
color: var(--foreground);
|
|
139
|
+
line-height: var(--ds-leading-normal);
|
|
140
|
+
transition: color 200ms ease-out;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
@mixin ds-body {
|
|
144
|
+
font-size: var(--ds-text-md);
|
|
145
|
+
font-weight: 400;
|
|
146
|
+
color: var(--muted-foreground);
|
|
147
|
+
line-height: var(--ds-leading-relaxed);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
@mixin ds-value {
|
|
151
|
+
font-size: var(--ds-text-4xl);
|
|
152
|
+
font-weight: 700;
|
|
153
|
+
color: var(--foreground);
|
|
154
|
+
line-height: var(--ds-leading-tight);
|
|
155
|
+
font-variant-numeric: tabular-nums;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
@mixin ds-meta {
|
|
159
|
+
font-size: var(--ds-text-base);
|
|
160
|
+
color: var(--muted-foreground);
|
|
161
|
+
opacity: 0.7;
|
|
162
|
+
line-height: var(--ds-leading-snug);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// =====================================================================
|
|
166
|
+
// GRID SYSTEMS (Responsive & Adaptive)
|
|
167
|
+
// =====================================================================
|
|
168
|
+
|
|
169
|
+
@mixin ds-grid-adaptive($min-width) {
|
|
170
|
+
display: grid;
|
|
171
|
+
grid-template-columns: repeat(auto-fit, minmax($min-width, 1fr));
|
|
172
|
+
gap: var(--ds-grid-gap);
|
|
173
|
+
|
|
174
|
+
@media (max-width: 768px) {
|
|
175
|
+
gap: 10px;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
@media (max-width: 640px) {
|
|
179
|
+
grid-template-columns: repeat(2, 1fr);
|
|
180
|
+
gap: 8px;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
@media (max-width: 420px) {
|
|
184
|
+
grid-template-columns: 1fr;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// =====================================================================
|
|
189
|
+
// OVERLAY SYSTEM (For max density)
|
|
190
|
+
// =====================================================================
|
|
191
|
+
|
|
192
|
+
@mixin ds-overlay-dark {
|
|
193
|
+
position: absolute;
|
|
194
|
+
bottom: 0;
|
|
195
|
+
left: 0;
|
|
196
|
+
right: 0;
|
|
197
|
+
padding: 8px 10px;
|
|
198
|
+
background: linear-gradient(
|
|
199
|
+
to top,
|
|
200
|
+
rgba(0, 0, 0, 0.88) 0%,
|
|
201
|
+
rgba(0, 0, 0, 0.65) 65%,
|
|
202
|
+
transparent 100%
|
|
203
|
+
);
|
|
204
|
+
-webkit-backdrop-filter: blur(6px);
|
|
205
|
+
backdrop-filter: blur(6px);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
@mixin ds-text-overlay {
|
|
209
|
+
color: #fff;
|
|
210
|
+
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.6);
|
|
211
|
+
line-height: var(--ds-leading-snug);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// =====================================================================
|
|
215
|
+
// UTILITIES
|
|
216
|
+
// =====================================================================
|
|
217
|
+
|
|
218
|
+
@mixin ds-truncate($lines: 1) {
|
|
219
|
+
@if $lines == 1 {
|
|
220
|
+
white-space: nowrap;
|
|
221
|
+
overflow: hidden;
|
|
222
|
+
text-overflow: ellipsis;
|
|
223
|
+
} @else {
|
|
224
|
+
display: -webkit-box;
|
|
225
|
+
-webkit-line-clamp: $lines;
|
|
226
|
+
-webkit-box-orient: vertical;
|
|
227
|
+
overflow: hidden;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
@mixin ds-reduced-motion {
|
|
232
|
+
@media (prefers-reduced-motion: reduce) {
|
|
233
|
+
transition: none;
|
|
234
|
+
animation: none;
|
|
235
|
+
&:hover {
|
|
236
|
+
transform: none;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|