osi-cards-lib 1.5.41 → 1.5.43
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 +1 -1
- package/fesm2022/osi-cards-lib.mjs +6109 -3631
- package/fesm2022/osi-cards-lib.mjs.map +1 -1
- package/index.d.ts +211 -270
- package/package.json +4 -3
- package/scripts/setup-angular-styles.js +1 -0
- package/styles/bundles/_ai-card.scss +11 -4
- package/styles/bundles/_card-skeleton.scss +1 -1
- package/styles/components/_ai-card-renderer.scss +0 -2
- package/styles/components/_badges.scss +1 -2
- package/styles/components/_card-actions.scss +5 -4
- package/styles/components/_component-styles.scss +1 -1
- package/styles/components/cards/_ai-card.scss +7 -13
- package/styles/components/sections/_all-sections.generated.scss +0 -3
- package/styles/components/sections/_all-sections.scss +88 -64
- package/styles/components/sections/_compact-mixins.scss +9 -8
- package/styles/components/sections/_component-mixins.scss +40 -11
- package/styles/components/sections/_design-system.scss +96 -11
- package/styles/components/sections/_design-tokens.scss +1 -1
- package/styles/components/sections/_master-compact-system.scss +0 -17
- package/styles/components/sections/_minimalistic-design.scss +1 -4
- package/styles/components/sections/_modern-effects.scss +1 -3
- package/styles/components/sections/_modern-sections.scss +13 -69
- package/styles/components/sections/_section-animations.scss +158 -77
- package/styles/components/sections/_section-shell.scss +39 -9
- package/styles/components/sections/_section-types.generated.scss +0 -3
- package/styles/components/sections/_sections-all.scss +7 -0
- package/styles/components/sections/_sections-base.scss +340 -64
- package/styles/components/sections/_unified-section-style.scss +17 -44
- package/styles/components/sections/_visual-effects-library.scss +3 -3
- package/styles/core/_bootstrap-reset.scss +1 -1
- package/styles/core/_global-unified.scss +2 -6
- package/styles/core/_mixins.scss +4 -4
- package/styles/core/_surface-layers.scss +20 -11
- package/styles/design-system/_section-base.scss +9 -32
- package/styles/design-system/_tokens.scss +68 -6
- package/styles/design-system/_unified-sections.scss +21 -42
- package/styles/layout/_masonry.scss +26 -32
- package/styles/layout/_tilt.scss +3 -3
- package/styles/mixins/_section-mixins.scss +2 -2
- package/styles/reset/_shadow-reset.scss +3 -7
- package/styles/responsive.scss +9 -7
- package/styles/tokens/_master.scss +271 -79
- package/styles/tokens/_section-tokens.generated.scss +0 -7
|
@@ -20,61 +20,34 @@
|
|
|
20
20
|
// STANDARD CARD (For 200px grids)
|
|
21
21
|
// =====================================================================
|
|
22
22
|
|
|
23
|
+
// =====================================================================
|
|
24
|
+
// SECTION CARD MIXIN - DEPRECATED
|
|
25
|
+
// =====================================================================
|
|
26
|
+
// @deprecated Use @include card instead
|
|
27
|
+
// This mixin is kept for backward compatibility but simply redirects to the base card mixin.
|
|
28
|
+
|
|
23
29
|
@mixin section-card {
|
|
24
|
-
@include card;
|
|
25
|
-
|
|
26
|
-
display: flex;
|
|
27
|
-
flex-direction: column;
|
|
28
|
-
gap: var(--spacing-sm);
|
|
29
|
-
background: var(--surface);
|
|
30
|
-
border-radius: var(--radius-md);
|
|
31
|
-
transition:
|
|
32
|
-
box-shadow var(--duration-slow) var(--ease-out),
|
|
33
|
-
background var(--duration-slow) var(--ease-out);
|
|
34
|
-
|
|
35
|
-
&:hover {
|
|
36
|
-
box-shadow: var(--shadow-lg);
|
|
37
|
-
background: var(--osi-section-item-background-hover);
|
|
38
|
-
}
|
|
30
|
+
@include card("normal");
|
|
31
|
+
@warn "section-card mixin is deprecated. Use @include card instead.";
|
|
39
32
|
}
|
|
40
33
|
|
|
41
34
|
// =====================================================================
|
|
42
35
|
// STANDARD LIST (For 400px width sections)
|
|
43
36
|
// =====================================================================
|
|
44
37
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
flex-direction: column;
|
|
50
|
-
gap: var(--spacing-md);
|
|
51
|
-
background: var(--surface);
|
|
52
|
-
border-radius: var(--radius-md);
|
|
53
|
-
transition: box-shadow 300ms var(--ease-out);
|
|
38
|
+
// =====================================================================
|
|
39
|
+
// SECTION LIST MIXINS - DEPRECATED
|
|
40
|
+
// =====================================================================
|
|
41
|
+
// @deprecated Use @include list-container and @include list-item from _sections-base.scss instead
|
|
54
42
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
43
|
+
@mixin section-list-container {
|
|
44
|
+
@include list-container("normal");
|
|
45
|
+
@warn "section-list-container is deprecated. Use @include list-container instead.";
|
|
58
46
|
}
|
|
59
47
|
|
|
60
48
|
@mixin section-list-item {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
display: flex;
|
|
64
|
-
flex-direction: column;
|
|
65
|
-
gap: var(--spacing-sm);
|
|
66
|
-
transition:
|
|
67
|
-
background var(--duration-base) var(--ease-out),
|
|
68
|
-
color var(--duration-base) var(--ease-out);
|
|
69
|
-
|
|
70
|
-
&:not(:last-child) {
|
|
71
|
-
margin-bottom: var(--spacing-xs);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
&:hover {
|
|
75
|
-
background: var(--surface-hover);
|
|
76
|
-
color: var(--accent);
|
|
77
|
-
}
|
|
49
|
+
@include list-item("normal");
|
|
50
|
+
@warn "section-list-item is deprecated. Use @include list-item instead.";
|
|
78
51
|
}
|
|
79
52
|
|
|
80
53
|
// =====================================================================
|
|
@@ -192,10 +192,10 @@
|
|
|
192
192
|
}
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
-
// Left accent border (quotations, highlights)
|
|
195
|
+
// Left accent border (quotations, highlights) - removed
|
|
196
196
|
@mixin accent-line-left {
|
|
197
|
-
border
|
|
198
|
-
padding-left:
|
|
197
|
+
// Left border removed per user request
|
|
198
|
+
padding-left: var(--osi-default-card-padding);
|
|
199
199
|
}
|
|
200
200
|
|
|
201
201
|
// ═══════════════════════════════════════════════════════════════════
|
|
@@ -339,7 +339,7 @@ article.ai-card-surface {
|
|
|
339
339
|
/* Section card variables */
|
|
340
340
|
--section-card-min-height: 110px;
|
|
341
341
|
--section-card-compact-height: 90px;
|
|
342
|
-
--section-header-gap:
|
|
342
|
+
--section-header-gap: 2px;
|
|
343
343
|
--section-content-gap: var(--spacing-sm);
|
|
344
344
|
--section-card-gap: var(--spacing-md);
|
|
345
345
|
--section-card-padding: var(--spacing-md);
|
|
@@ -44,9 +44,7 @@
|
|
|
44
44
|
|
|
45
45
|
// Enhanced focus indicators for accessibility
|
|
46
46
|
&:focus-visible {
|
|
47
|
-
outline:
|
|
48
|
-
outline-offset: 2px;
|
|
49
|
-
border-radius: 4px;
|
|
47
|
+
outline: none;
|
|
50
48
|
}
|
|
51
49
|
|
|
52
50
|
&:focus:not(:focus-visible) {
|
|
@@ -62,9 +60,7 @@
|
|
|
62
60
|
& textarea,
|
|
63
61
|
& [tabindex]:not([tabindex="-1"]) {
|
|
64
62
|
&:focus-visible {
|
|
65
|
-
outline:
|
|
66
|
-
outline-offset: 2px;
|
|
67
|
-
border-radius: 2px;
|
|
63
|
+
outline: none;
|
|
68
64
|
}
|
|
69
65
|
|
|
70
66
|
&:focus:not(:focus-visible) {
|
package/styles/core/_mixins.scss
CHANGED
|
@@ -252,7 +252,7 @@ $osi-use-important: true !default;
|
|
|
252
252
|
|
|
253
253
|
/// Subtitle text - used for secondary headings, roles
|
|
254
254
|
@mixin osi-text-subtitle {
|
|
255
|
-
@include important-prop("font-size", var(--card-subtitle-font-size, 0.
|
|
255
|
+
@include important-prop("font-size", var(--card-subtitle-font-size, 0.575rem));
|
|
256
256
|
@include important-prop("font-weight", var(--card-subtitle-font-weight, 500));
|
|
257
257
|
@include important-prop("color", var(--card-text-secondary, inherit));
|
|
258
258
|
@include important-prop("letter-spacing", var(--card-subtitle-letter-spacing, 0.015em));
|
|
@@ -299,7 +299,7 @@ $osi-use-important: true !default;
|
|
|
299
299
|
/// @param {Length} $gap - Gap between items
|
|
300
300
|
@mixin osi-grid(
|
|
301
301
|
$min-width: var(--section-grid-min-width, 200px),
|
|
302
|
-
$gap: var(--section-card-gap,
|
|
302
|
+
$gap: var(--section-card-gap, 8px)
|
|
303
303
|
) {
|
|
304
304
|
@include display(grid);
|
|
305
305
|
@include grid-columns(repeat(auto-fit, minmax($min-width, 1fr)));
|
|
@@ -315,7 +315,7 @@ $osi-use-important: true !default;
|
|
|
315
315
|
|
|
316
316
|
/// Flex column stack for vertical lists
|
|
317
317
|
/// @param {Length} $gap - Gap between items
|
|
318
|
-
@mixin osi-stack($gap: var(--section-stack-gap,
|
|
318
|
+
@mixin osi-stack($gap: var(--section-stack-gap, 8px)) {
|
|
319
319
|
@include display(flex);
|
|
320
320
|
@include flex-direction(column);
|
|
321
321
|
@include gap($gap);
|
|
@@ -326,7 +326,7 @@ $osi-use-important: true !default;
|
|
|
326
326
|
/// Fixed column grid
|
|
327
327
|
/// @param {Number} $columns - Number of columns
|
|
328
328
|
/// @param {Length} $gap - Gap between items
|
|
329
|
-
@mixin osi-grid-fixed($columns: 2, $gap: var(--section-card-gap,
|
|
329
|
+
@mixin osi-grid-fixed($columns: 2, $gap: var(--section-card-gap, 8px)) {
|
|
330
330
|
@include display(grid);
|
|
331
331
|
@include grid-columns(repeat($columns, 1fr));
|
|
332
332
|
@include gap($gap);
|
|
@@ -14,7 +14,13 @@
|
|
|
14
14
|
|
|
15
15
|
/* AI card (hero shell) ----------------------------------------------------- */
|
|
16
16
|
@mixin surface-ai-card-base {
|
|
17
|
-
border: var(--ai-card-border, 1px solid rgba(255, 121, 0, 0.
|
|
17
|
+
border: var(--ai-card-border, 1px solid rgba(255, 121, 0, 0.2)) !important;
|
|
18
|
+
@supports (color: color-mix(in srgb, black 50%, white)) {
|
|
19
|
+
border: var(
|
|
20
|
+
--ai-card-border,
|
|
21
|
+
1px solid color-mix(in srgb, var(--color-brand, #ff7900) 20%, transparent)
|
|
22
|
+
) !important;
|
|
23
|
+
}
|
|
18
24
|
border-width: 1px !important;
|
|
19
25
|
border-style: solid !important;
|
|
20
26
|
border-radius: var(--ai-card-border-radius) !important;
|
|
@@ -26,7 +32,7 @@
|
|
|
26
32
|
}
|
|
27
33
|
|
|
28
34
|
@mixin surface-ai-card-hover {
|
|
29
|
-
border-color: var(--ai-card-border-hover,
|
|
35
|
+
border-color: var(--ai-card-border-hover, var(--color-brand, #ff7900)) !important;
|
|
30
36
|
background: var(--section-item-background-hover, var(--section-item-background)) !important;
|
|
31
37
|
box-shadow: var(--ai-card-box-shadow-hover, var(--ai-card-box-shadow, none)) !important;
|
|
32
38
|
}
|
|
@@ -43,11 +49,8 @@
|
|
|
43
49
|
}
|
|
44
50
|
|
|
45
51
|
@mixin surface-section-hover {
|
|
46
|
-
/*
|
|
47
|
-
background
|
|
48
|
-
--section-surface-hover,
|
|
49
|
-
var(--section-background-hover, var(--section-surface))
|
|
50
|
-
) !important;
|
|
52
|
+
/* Keep background unchanged on hover - only border and shadow change */
|
|
53
|
+
/* background stays the same - do not override */
|
|
51
54
|
border-color: var(--section-border-hover, var(--section-border)) !important;
|
|
52
55
|
box-shadow: var(--section-box-shadow-hover, var(--section-box-shadow)) !important;
|
|
53
56
|
}
|
|
@@ -69,8 +72,14 @@
|
|
|
69
72
|
}
|
|
70
73
|
|
|
71
74
|
@mixin surface-section-item-hover {
|
|
72
|
-
/*
|
|
73
|
-
|
|
74
|
-
border-color: var(
|
|
75
|
-
|
|
75
|
+
/* Keep background unchanged on hover - only border and shadow change */
|
|
76
|
+
/* background stays the same - do not override */
|
|
77
|
+
border-color: var(
|
|
78
|
+
--osi-section-item-border-hover-enhanced-color,
|
|
79
|
+
var(--section-item-border-hover, var(--section-item-border))
|
|
80
|
+
) !important;
|
|
81
|
+
box-shadow: var(
|
|
82
|
+
--osi-section-item-shadow-hover-enhanced,
|
|
83
|
+
var(--section-item-box-shadow-hover)
|
|
84
|
+
) !important;
|
|
76
85
|
}
|
|
@@ -109,39 +109,16 @@
|
|
|
109
109
|
isolation: isolate;
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
// Subtle accent border on hover for visual interest
|
|
118
|
-
&::before {
|
|
119
|
-
content: "";
|
|
120
|
-
position: absolute;
|
|
121
|
-
top: 0;
|
|
122
|
-
left: 0;
|
|
123
|
-
right: 0;
|
|
124
|
-
height: 2px;
|
|
125
|
-
background: linear-gradient(90deg, var(--osi-accent) 0%, transparent 100%);
|
|
126
|
-
opacity: 0;
|
|
127
|
-
transition: opacity var(--osi-duration-normal) var(--osi-ease-out);
|
|
128
|
-
border-radius: var(--osi-radius-md) var(--osi-radius-md) 0 0;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
&:hover {
|
|
132
|
-
transform: translateY(-2px);
|
|
133
|
-
box-shadow: var(--osi-shadow-md);
|
|
134
|
-
border-color: var(--osi-border);
|
|
135
|
-
|
|
136
|
-
&::before {
|
|
137
|
-
opacity: 0.6;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
112
|
+
// =====================================================================
|
|
113
|
+
// CARD ELEVATED - DEPRECATED
|
|
114
|
+
// =====================================================================
|
|
115
|
+
// @deprecated Use @include card-elevated from _component-mixins.scss instead
|
|
116
|
+
// This mixin is kept for backward compatibility but redirects to the standard variant.
|
|
140
117
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
118
|
+
@mixin card-elevated {
|
|
119
|
+
@warn "card-elevated from design-system/_section-base.scss is deprecated. Use @include card-elevated from _component-mixins.scss instead.";
|
|
120
|
+
// Redirect to component-mixins version (imported via design-system)
|
|
121
|
+
// Note: This will work if design-system imports component-mixins
|
|
145
122
|
}
|
|
146
123
|
|
|
147
124
|
@mixin card-interactive {
|
|
@@ -8,6 +8,11 @@
|
|
|
8
8
|
// ═══════════════════════════════════════════════════════════════════
|
|
9
9
|
// SPACING SCALE (4px base unit)
|
|
10
10
|
// ═══════════════════════════════════════════════════════════════════
|
|
11
|
+
--osi-spacing-2px: 2px;
|
|
12
|
+
--osi-spacing-4px: 4px;
|
|
13
|
+
--osi-spacing-6px: 6px;
|
|
14
|
+
--osi-spacing-8px: 8px;
|
|
15
|
+
--osi-spacing-10px: 10px; // Base gap for section items
|
|
11
16
|
--osi-spacing-xs: 4px;
|
|
12
17
|
--osi-spacing-sm: 8px;
|
|
13
18
|
--osi-spacing-md: 12px;
|
|
@@ -17,7 +22,7 @@
|
|
|
17
22
|
--osi-spacing-3xl: 48px;
|
|
18
23
|
|
|
19
24
|
// Section-specific spacing (More compact by default)
|
|
20
|
-
--osi-section-header-gap:
|
|
25
|
+
--osi-section-header-gap: 2px; // Reduced gap between title and subtitle
|
|
21
26
|
--osi-section-padding: var(--osi-spacing-sm); // 8px (was 12px)
|
|
22
27
|
--osi-section-gap: var(--osi-spacing-md); // 12px (was 16px)
|
|
23
28
|
--osi-item-padding: var(--osi-spacing-sm); // 8px (was 12px)
|
|
@@ -38,12 +43,28 @@
|
|
|
38
43
|
--osi-text-2xl: 1.875rem; // 30px
|
|
39
44
|
--osi-text-3xl: 2.25rem; // 36px
|
|
40
45
|
|
|
46
|
+
// Unprefixed font sizes (for unified-sections mixins)
|
|
47
|
+
--text-xs: 0.6875rem; // 11px - Small labels, captions
|
|
48
|
+
--text-sm: 0.75rem; // 12px - Secondary text, metadata
|
|
49
|
+
--text-base: 0.8125rem; // 13px - Body text, item titles
|
|
50
|
+
--text-md: 0.875rem; // 14px - Emphasized text
|
|
51
|
+
--text-lg: 1.0625rem; // 17px - Sub-headers
|
|
52
|
+
--text-xl: 1.1875rem; // 19px - Section headers
|
|
53
|
+
--text-2xl: 1.375rem; // 22px - Large values, metrics
|
|
54
|
+
--text-3xl: 1.625rem; // 26px - Large headers
|
|
55
|
+
|
|
41
56
|
// Font Weights
|
|
42
57
|
--osi-font-normal: 400;
|
|
43
58
|
--osi-font-medium: 500;
|
|
44
59
|
--osi-font-semibold: 600;
|
|
45
60
|
--osi-font-bold: 700;
|
|
46
61
|
|
|
62
|
+
// Unprefixed font weights (for unified-sections mixins)
|
|
63
|
+
--font-normal: 400;
|
|
64
|
+
--font-medium: 500;
|
|
65
|
+
--font-semibold: 600;
|
|
66
|
+
--font-bold: 700;
|
|
67
|
+
|
|
47
68
|
// Line Heights
|
|
48
69
|
--osi-leading-tight: 1.25;
|
|
49
70
|
--osi-leading-snug: 1.375;
|
|
@@ -51,6 +72,13 @@
|
|
|
51
72
|
--osi-leading-relaxed: 1.625;
|
|
52
73
|
--osi-leading-loose: 2;
|
|
53
74
|
|
|
75
|
+
// Unprefixed line heights (for unified-sections mixins)
|
|
76
|
+
--leading-tight: 1.2;
|
|
77
|
+
--leading-snug: 1.3;
|
|
78
|
+
--leading-normal: 1.4;
|
|
79
|
+
--leading-relaxed: 1.5;
|
|
80
|
+
--leading-loose: 1.75;
|
|
81
|
+
|
|
54
82
|
// Letter Spacing
|
|
55
83
|
--osi-tracking-tight: -0.025em;
|
|
56
84
|
--osi-tracking-normal: 0;
|
|
@@ -67,11 +95,27 @@
|
|
|
67
95
|
--osi-surface-hover: hsl(0, 0%, 20%); // #333333
|
|
68
96
|
--osi-surface-subtle: hsl(0, 0%, 12%); // #1f1f1f
|
|
69
97
|
|
|
70
|
-
// Text Colors
|
|
71
|
-
|
|
72
|
-
--
|
|
73
|
-
|
|
74
|
-
|
|
98
|
+
// Text Colors - Theme-Responsive
|
|
99
|
+
// These reference theme-aware tokens set by theme mixins (osi-theme-dark, osi-theme-light)
|
|
100
|
+
// Theme mixins set --foreground and --muted-foreground directly with theme-appropriate values
|
|
101
|
+
// OSI tokens reference these theme tokens, making them automatically theme-responsive
|
|
102
|
+
// Fallback values provided for when theme mixins haven't been called
|
|
103
|
+
--osi-foreground: var(
|
|
104
|
+
--foreground,
|
|
105
|
+
hsl(0, 0%, 95%)
|
|
106
|
+
); // References theme-aware --foreground (set by theme mixins)
|
|
107
|
+
--osi-foreground-strong: var(--foreground, hsl(0, 0%, 100%)); // Theme-responsive
|
|
108
|
+
--osi-muted-foreground: var(
|
|
109
|
+
--muted-foreground,
|
|
110
|
+
hsl(0, 0%, 60%)
|
|
111
|
+
); // References theme-aware --muted-foreground (set by theme mixins)
|
|
112
|
+
--osi-disabled-foreground: var(--muted-foreground, hsl(0, 0%, 40%)); // Theme-responsive
|
|
113
|
+
|
|
114
|
+
// Unprefixed color variables (for unified-sections mixins and backward compatibility)
|
|
115
|
+
// Note: --foreground and --muted-foreground are set by theme mixins (osi-theme-dark, osi-theme-light)
|
|
116
|
+
// We do NOT redefine them here to avoid overwriting theme values
|
|
117
|
+
// Components can use either --foreground (set by theme) or --osi-foreground (references theme)
|
|
118
|
+
// Both are theme-responsive
|
|
75
119
|
|
|
76
120
|
// Brand/Accent Colors
|
|
77
121
|
--osi-accent: hsl(25, 100%, 50%); // #ff7900
|
|
@@ -104,6 +148,7 @@
|
|
|
104
148
|
// BORDER RADIUS
|
|
105
149
|
// ═══════════════════════════════════════════════════════════════════
|
|
106
150
|
--osi-radius-none: 0;
|
|
151
|
+
--osi-radius-xs: 2px;
|
|
107
152
|
--osi-radius-sm: 4px;
|
|
108
153
|
--osi-radius-md: 8px;
|
|
109
154
|
--osi-radius-lg: 12px;
|
|
@@ -159,11 +204,28 @@
|
|
|
159
204
|
--osi-grid-min-medium: 200px; // Contact cards
|
|
160
205
|
--osi-grid-min-large: 300px; // Gallery items
|
|
161
206
|
|
|
207
|
+
// Grid min-width tokens (for responsive grid layouts)
|
|
208
|
+
--osi-grid-min-xs: 120px;
|
|
209
|
+
--osi-grid-min-sm: 140px;
|
|
210
|
+
--osi-grid-min-md: 160px;
|
|
211
|
+
--osi-grid-min-lg: 180px;
|
|
212
|
+
--osi-grid-min-xl: 200px;
|
|
213
|
+
--osi-grid-min-2xl: 250px;
|
|
214
|
+
--osi-grid-min-3xl: 280px;
|
|
215
|
+
--osi-grid-min-4xl: 300px;
|
|
216
|
+
|
|
162
217
|
// ═══════════════════════════════════════════════════════════════════
|
|
163
218
|
// COMPACT SIZES (for min-heights, etc.)
|
|
164
219
|
// ═══════════════════════════════════════════════════════════════════
|
|
165
220
|
--osi-card-min-height: 90px; // Compact metric cards (was 120px)
|
|
166
221
|
--osi-card-min-height-large: 120px; // Larger cards when needed
|
|
222
|
+
|
|
223
|
+
// Min-height tokens for cards/items
|
|
224
|
+
--osi-card-min-height-xs: 70px;
|
|
225
|
+
--osi-card-min-height-sm: 80px;
|
|
226
|
+
--osi-card-min-height-md: 90px;
|
|
227
|
+
--osi-card-min-height-lg: 95px;
|
|
228
|
+
--osi-card-min-height-xl: 110px;
|
|
167
229
|
}
|
|
168
230
|
|
|
169
231
|
// ═══════════════════════════════════════════════════════════════════
|
|
@@ -12,67 +12,46 @@
|
|
|
12
12
|
// Item titles (h4, h5, h6 in cards/items)
|
|
13
13
|
@mixin unified-item-title {
|
|
14
14
|
margin: 0;
|
|
15
|
-
font-size: var(--
|
|
16
|
-
font-weight: var(--
|
|
17
|
-
line-height: var(--
|
|
18
|
-
color: var(--
|
|
19
|
-
|
|
20
|
-
@include mobile {
|
|
21
|
-
font-size: var(--osi-text-sm); // Keep same on mobile
|
|
22
|
-
}
|
|
15
|
+
font-size: var(--text-sm);
|
|
16
|
+
font-weight: var(--font-semibold);
|
|
17
|
+
line-height: var(--leading-snug);
|
|
18
|
+
color: var(--foreground);
|
|
23
19
|
}
|
|
24
20
|
|
|
25
21
|
// Item labels (small uppercase text)
|
|
26
22
|
@mixin unified-item-label {
|
|
27
|
-
font-size:
|
|
28
|
-
font-weight: var(--
|
|
29
|
-
line-height: var(--
|
|
30
|
-
color: var(--
|
|
23
|
+
font-size: var(--text-xs);
|
|
24
|
+
font-weight: var(--font-medium);
|
|
25
|
+
line-height: var(--leading-tight);
|
|
26
|
+
color: var(--muted-foreground);
|
|
31
27
|
text-transform: uppercase;
|
|
32
|
-
letter-spacing: 0.
|
|
33
|
-
|
|
34
|
-
@include mobile {
|
|
35
|
-
font-size: 0.65rem; // 10.4px on mobile
|
|
36
|
-
}
|
|
28
|
+
letter-spacing: 0.05em;
|
|
37
29
|
}
|
|
38
30
|
|
|
39
31
|
// Item values (prominent text/numbers)
|
|
40
32
|
@mixin unified-item-value {
|
|
41
|
-
font-size: var(--
|
|
42
|
-
font-weight: var(--
|
|
43
|
-
line-height: var(--
|
|
44
|
-
color: var(--
|
|
45
|
-
|
|
46
|
-
@include mobile {
|
|
47
|
-
font-size: var(--osi-text-sm); // Keep same on mobile
|
|
48
|
-
}
|
|
33
|
+
font-size: var(--text-sm);
|
|
34
|
+
font-weight: var(--font-semibold);
|
|
35
|
+
line-height: var(--leading-normal);
|
|
36
|
+
color: var(--foreground);
|
|
49
37
|
}
|
|
50
38
|
|
|
51
39
|
// Item descriptions (secondary text)
|
|
52
40
|
@mixin unified-item-description {
|
|
53
|
-
font-size: var(--
|
|
54
|
-
font-weight: var(--
|
|
55
|
-
line-height: var(--
|
|
56
|
-
color: var(--
|
|
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
|
-
}
|
|
41
|
+
font-size: var(--text-xs);
|
|
42
|
+
font-weight: var(--font-normal);
|
|
43
|
+
line-height: var(--leading-relaxed);
|
|
44
|
+
color: var(--muted-foreground);
|
|
62
45
|
}
|
|
63
46
|
|
|
64
47
|
// Number displays (metrics, analytics)
|
|
65
48
|
@mixin unified-number-display {
|
|
66
|
-
font-size: var(--
|
|
67
|
-
font-weight: var(--
|
|
49
|
+
font-size: var(--text-2xl);
|
|
50
|
+
font-weight: var(--font-bold);
|
|
68
51
|
line-height: 1;
|
|
69
|
-
letter-spacing:
|
|
52
|
+
letter-spacing: -0.02em;
|
|
70
53
|
font-variant-numeric: tabular-nums;
|
|
71
|
-
color: var(--
|
|
72
|
-
|
|
73
|
-
@include mobile {
|
|
74
|
-
font-size: var(--osi-text-lg); // 20px on mobile
|
|
75
|
-
}
|
|
54
|
+
color: var(--foreground);
|
|
76
55
|
}
|
|
77
56
|
|
|
78
57
|
// ═══════════════════════════════════════════════════════════════════
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
display: grid !important;
|
|
18
18
|
grid-template-columns: repeat(auto-fill, minmax(var(--section-grid-min-width, 260px), 1fr));
|
|
19
19
|
grid-template-rows: masonry;
|
|
20
|
-
gap: var(--section-card-gap,
|
|
20
|
+
gap: var(--section-card-gap, 8px);
|
|
21
21
|
align-tracks: stretch;
|
|
22
22
|
|
|
23
23
|
/* Native masonry doesn't need absolute positioning */
|
|
@@ -135,13 +135,6 @@
|
|
|
135
135
|
content-visibility: auto;
|
|
136
136
|
contain-intrinsic-size: auto 200px;
|
|
137
137
|
|
|
138
|
-
/* Smooth transitions for position and size changes */
|
|
139
|
-
transition:
|
|
140
|
-
top 0.4s cubic-bezier(0.4, 0, 0.2, 1),
|
|
141
|
-
left 0.4s cubic-bezier(0.4, 0, 0.2, 1),
|
|
142
|
-
width 0.4s cubic-bezier(0.4, 0, 0.2, 1),
|
|
143
|
-
opacity 0.35s ease-out;
|
|
144
|
-
|
|
145
138
|
/* GLOBALLY DEFINED: Use shared mixins for discrete section borders */
|
|
146
139
|
@include surface-section-base;
|
|
147
140
|
padding: var(--section-container-padding) !important;
|
|
@@ -149,8 +142,28 @@
|
|
|
149
142
|
/* Gap between header and body - standardized to 12px */
|
|
150
143
|
gap: var(--section-card-gap);
|
|
151
144
|
|
|
145
|
+
/* Smooth transitions for position, size, border, and shadow changes */
|
|
146
|
+
transition:
|
|
147
|
+
top 0.4s cubic-bezier(0.4, 0, 0.2, 1),
|
|
148
|
+
left 0.4s cubic-bezier(0.4, 0, 0.2, 1),
|
|
149
|
+
width 0.4s cubic-bezier(0.4, 0, 0.2, 1),
|
|
150
|
+
opacity 0.35s ease-out,
|
|
151
|
+
border-color var(--osi-card-transition-normal, 0.22s) cubic-bezier(0.4, 0, 0.2, 1),
|
|
152
|
+
box-shadow var(--osi-card-transition-normal, 0.22s) cubic-bezier(0.4, 0, 0.2, 1);
|
|
153
|
+
|
|
152
154
|
&:hover {
|
|
153
155
|
@include surface-section-hover;
|
|
156
|
+
// Enhanced hover: gentle shadow with 30% more contrasty cool color and 20% more contrasty border
|
|
157
|
+
border-color: var(--osi-section-border-hover-enhanced-color) !important;
|
|
158
|
+
box-shadow: var(--osi-section-shadow-hover-enhanced) !important;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
@media (prefers-reduced-motion: reduce) {
|
|
162
|
+
transition:
|
|
163
|
+
top 0.4s cubic-bezier(0.4, 0, 0.2, 1),
|
|
164
|
+
left 0.4s cubic-bezier(0.4, 0, 0.2, 1),
|
|
165
|
+
width 0.4s cubic-bezier(0.4, 0, 0.2, 1),
|
|
166
|
+
opacity 0.35s ease-out;
|
|
154
167
|
}
|
|
155
168
|
}
|
|
156
169
|
|
|
@@ -278,25 +291,7 @@
|
|
|
278
291
|
}
|
|
279
292
|
|
|
280
293
|
/* Priority-based visual indicators */
|
|
281
|
-
|
|
282
|
-
/* Priority 1 (highest) sections get subtle emphasis */
|
|
283
|
-
&::before {
|
|
284
|
-
content: "";
|
|
285
|
-
position: absolute;
|
|
286
|
-
left: 0;
|
|
287
|
-
top: 0;
|
|
288
|
-
bottom: 0;
|
|
289
|
-
width: 3px;
|
|
290
|
-
background: var(--color-brand, #ff7900);
|
|
291
|
-
border-radius: 0 2px 2px 0;
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
.masonry-item[data-priority="2"],
|
|
296
|
-
.masonry-item[data-priority="3"] {
|
|
297
|
-
/* Priority 2 and 3 sections - no special border, use unified styling */
|
|
298
|
-
/* Left accent border removed for consistency */
|
|
299
|
-
}
|
|
294
|
+
/* Removed left brand color bar - no longer showing visual indicator for priority 1 items */
|
|
300
295
|
|
|
301
296
|
/* Flex grow sections - expand to fill space */
|
|
302
297
|
.masonry-item--flex-grow {
|
|
@@ -559,17 +554,17 @@
|
|
|
559
554
|
}
|
|
560
555
|
|
|
561
556
|
.masonry-skeleton--single {
|
|
562
|
-
width: calc((100% - var(--masonry-gap,
|
|
557
|
+
width: calc((100% - var(--masonry-gap, 8px) * 3) / 4);
|
|
563
558
|
height: 180px;
|
|
564
559
|
}
|
|
565
560
|
|
|
566
561
|
.masonry-skeleton--double {
|
|
567
|
-
width: calc((100% - var(--masonry-gap,
|
|
562
|
+
width: calc((100% - var(--masonry-gap, 8px) * 3) / 4 * 2 + var(--masonry-gap, 8px));
|
|
568
563
|
height: 200px;
|
|
569
564
|
}
|
|
570
565
|
|
|
571
566
|
.masonry-skeleton--triple {
|
|
572
|
-
width: calc((100% - var(--masonry-gap,
|
|
567
|
+
width: calc((100% - var(--masonry-gap, 8px) * 3) / 4 * 3 + var(--masonry-gap, 8px) * 2);
|
|
573
568
|
height: 220px;
|
|
574
569
|
}
|
|
575
570
|
|
|
@@ -663,8 +658,7 @@
|
|
|
663
658
|
|
|
664
659
|
/* Focus styles for keyboard navigation following aria-flowto */
|
|
665
660
|
.masonry-item:focus-visible {
|
|
666
|
-
outline:
|
|
667
|
-
outline-offset: 2px;
|
|
661
|
+
outline: none;
|
|
668
662
|
z-index: 10;
|
|
669
663
|
}
|
|
670
664
|
|
package/styles/layout/_tilt.scss
CHANGED
|
@@ -48,8 +48,8 @@
|
|
|
48
48
|
.tilt-container:hover {
|
|
49
49
|
/* Hint browser about upcoming transform changes */
|
|
50
50
|
will-change: transform;
|
|
51
|
-
/* Orange glow only - no dark shadows,
|
|
52
|
-
box-shadow: 0 0 var(--glow-blur) var(--glow-color, rgba(255, 121, 0, 0.
|
|
51
|
+
/* Orange glow only - no dark shadows, more vivid on hover */
|
|
52
|
+
box-shadow: 0 0 var(--glow-blur) var(--glow-color, rgba(255, 121, 0, 0.6));
|
|
53
53
|
/* Smooth transition for glow only - transform handled by JavaScript */
|
|
54
54
|
transition: box-shadow 200ms cubic-bezier(0.2, 0, 0.2, 1);
|
|
55
55
|
}
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
/* Glow container for filter-based effects - Cross-browser compatible */
|
|
58
58
|
.glow-container {
|
|
59
59
|
position: relative;
|
|
60
|
-
/* Always show base glow - smooth transitions
|
|
60
|
+
/* Always show base glow - smooth transitions */
|
|
61
61
|
-webkit-filter: drop-shadow(0 0 var(--glow-blur) var(--glow-color, rgba(255, 121, 0, 0.225)));
|
|
62
62
|
filter: drop-shadow(0 0 var(--glow-blur) var(--glow-color, rgba(255, 121, 0, 0.225)));
|
|
63
63
|
-webkit-transition: filter 200ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
@@ -219,8 +219,8 @@
|
|
|
219
219
|
text-align: center;
|
|
220
220
|
|
|
221
221
|
.metric-value {
|
|
222
|
-
font-size: var(--metric-value-size,
|
|
223
|
-
font-weight: var(--metric-value-weight,
|
|
222
|
+
font-size: var(--metric-value-size, var(--text-2xl));
|
|
223
|
+
font-weight: var(--metric-value-weight, var(--font-bold));
|
|
224
224
|
margin-bottom: 0.25rem;
|
|
225
225
|
}
|
|
226
226
|
|
|
@@ -156,9 +156,7 @@ a {
|
|
|
156
156
|
cursor: pointer;
|
|
157
157
|
|
|
158
158
|
&:focus-visible {
|
|
159
|
-
outline:
|
|
160
|
-
outline-offset: 2px;
|
|
161
|
-
border-radius: 2px;
|
|
159
|
+
outline: none;
|
|
162
160
|
}
|
|
163
161
|
}
|
|
164
162
|
|
|
@@ -205,8 +203,7 @@ button,
|
|
|
205
203
|
background-image: none;
|
|
206
204
|
|
|
207
205
|
&:focus-visible {
|
|
208
|
-
outline:
|
|
209
|
-
outline-offset: 2px;
|
|
206
|
+
outline: none;
|
|
210
207
|
}
|
|
211
208
|
}
|
|
212
209
|
|
|
@@ -303,8 +300,7 @@ summary {
|
|
|
303
300
|
|
|
304
301
|
// Focus visible styles for keyboard navigation
|
|
305
302
|
:focus-visible {
|
|
306
|
-
outline:
|
|
307
|
-
outline-offset: 2px;
|
|
303
|
+
outline: none;
|
|
308
304
|
}
|
|
309
305
|
|
|
310
306
|
// Remove focus outline for mouse users
|