osi-cards-lib 1.5.42 → 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.
Files changed (38) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/osi-cards-lib.mjs +5176 -3720
  3. package/fesm2022/osi-cards-lib.mjs.map +1 -1
  4. package/index.d.ts +134 -272
  5. package/package.json +4 -3
  6. package/styles/bundles/_ai-card.scss +10 -3
  7. package/styles/bundles/_card-skeleton.scss +1 -1
  8. package/styles/components/_ai-card-renderer.scss +0 -2
  9. package/styles/components/_card-actions.scss +2 -4
  10. package/styles/components/sections/_all-sections.generated.scss +0 -3
  11. package/styles/components/sections/_all-sections.scss +88 -64
  12. package/styles/components/sections/_compact-mixins.scss +9 -8
  13. package/styles/components/sections/_component-mixins.scss +40 -11
  14. package/styles/components/sections/_design-system.scss +96 -11
  15. package/styles/components/sections/_master-compact-system.scss +0 -17
  16. package/styles/components/sections/_minimalistic-design.scss +1 -4
  17. package/styles/components/sections/_modern-effects.scss +1 -3
  18. package/styles/components/sections/_modern-sections.scss +13 -69
  19. package/styles/components/sections/_section-animations.scss +158 -77
  20. package/styles/components/sections/_section-shell.scss +38 -9
  21. package/styles/components/sections/_section-types.generated.scss +0 -3
  22. package/styles/components/sections/_sections-all.scss +7 -0
  23. package/styles/components/sections/_sections-base.scss +340 -64
  24. package/styles/components/sections/_unified-section-style.scss +17 -44
  25. package/styles/components/sections/_visual-effects-library.scss +3 -3
  26. package/styles/core/_global-unified.scss +2 -6
  27. package/styles/core/_mixins.scss +1 -1
  28. package/styles/core/_surface-layers.scss +20 -11
  29. package/styles/design-system/_section-base.scss +9 -32
  30. package/styles/design-system/_tokens.scss +67 -5
  31. package/styles/design-system/_unified-sections.scss +21 -21
  32. package/styles/layout/_masonry.scss +22 -22
  33. package/styles/layout/_tilt.scss +3 -3
  34. package/styles/mixins/_section-mixins.scss +2 -2
  35. package/styles/reset/_shadow-reset.scss +3 -7
  36. package/styles/responsive.scss +9 -7
  37. package/styles/tokens/_master.scss +259 -66
  38. 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
- padding: var(--spacing-md);
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
- @mixin section-list-container {
46
- @include card;
47
- padding: var(--spacing-md);
48
- display: flex;
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
- &:hover {
56
- box-shadow: var(--shadow-lg);
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
- padding: var(--spacing-sm);
62
- border-radius: var(--radius-sm);
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-left: 3px solid var(--accent);
198
- padding-left: calc(var(--osi-default-card-padding) - 3px);
197
+ // Left border removed per user request
198
+ padding-left: var(--osi-default-card-padding);
199
199
  }
200
200
 
201
201
  // ═══════════════════════════════════════════════════════════════════
@@ -44,9 +44,7 @@
44
44
 
45
45
  // Enhanced focus indicators for accessibility
46
46
  &:focus-visible {
47
- outline: 2px solid var(--color-brand, #ff7900);
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: 2px solid var(--color-brand, #ff7900);
66
- outline-offset: 2px;
67
- border-radius: 2px;
63
+ outline: none;
68
64
  }
69
65
 
70
66
  &:focus:not(:focus-visible) {
@@ -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.7rem));
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));
@@ -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.12)) !important;
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, rgba(255, 121, 0, 0.2)) !important;
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
- /* Use hover background variable - flat color with theme border */
47
- background: var(
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
- /* Use hover background variable - flat color with theme border */
73
- background: var(--section-item-background-hover, var(--section-item-background)) !important;
74
- border-color: var(--section-item-border-hover, var(--section-item-border)) !important;
75
- box-shadow: var(--section-item-box-shadow-hover) !important;
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
- @mixin card-elevated {
113
- @include card-base;
114
- box-shadow: var(--osi-shadow-sm);
115
- position: relative;
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
- &:focus-visible {
142
- outline: 2px solid var(--osi-accent);
143
- outline-offset: 2px;
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;
@@ -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
- --osi-foreground: hsl(0, 0%, 95%); // #f2f2f2
72
- --osi-foreground-strong: hsl(0, 0%, 100%); // #ffffff
73
- --osi-muted-foreground: hsl(0, 0%, 60%); // #999999
74
- --osi-disabled-foreground: hsl(0, 0%, 40%); // #666666
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,46 +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(--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);
15
+ font-size: var(--text-sm);
16
+ font-weight: var(--font-semibold);
17
+ line-height: var(--leading-snug);
18
+ color: var(--foreground);
19
19
  }
20
20
 
21
21
  // Item labels (small uppercase text)
22
22
  @mixin unified-item-label {
23
- font-size: 0.7rem; // 11.2px - Compact, fixed size
24
- font-weight: var(--osi-font-medium); // 500
25
- line-height: var(--osi-leading-tight); // 1.25
26
- color: var(--osi-muted-foreground);
23
+ font-size: var(--text-xs);
24
+ font-weight: var(--font-medium);
25
+ line-height: var(--leading-tight);
26
+ color: var(--muted-foreground);
27
27
  text-transform: uppercase;
28
- letter-spacing: 0.04em;
28
+ letter-spacing: 0.05em;
29
29
  }
30
30
 
31
31
  // Item values (prominent text/numbers)
32
32
  @mixin unified-item-value {
33
- font-size: var(--osi-text-sm); // 14px - Consistent
34
- font-weight: var(--osi-font-semibold); // 600
35
- line-height: var(--osi-leading-normal); // 1.5
36
- color: var(--osi-foreground);
33
+ font-size: var(--text-sm);
34
+ font-weight: var(--font-semibold);
35
+ line-height: var(--leading-normal);
36
+ color: var(--foreground);
37
37
  }
38
38
 
39
39
  // Item descriptions (secondary text)
40
40
  @mixin unified-item-description {
41
- font-size: var(--osi-text-xs); // 12px
42
- font-weight: var(--osi-font-normal); // 400
43
- line-height: var(--osi-leading-relaxed); // 1.625
44
- color: var(--osi-muted-foreground);
41
+ font-size: var(--text-xs);
42
+ font-weight: var(--font-normal);
43
+ line-height: var(--leading-relaxed);
44
+ color: var(--muted-foreground);
45
45
  }
46
46
 
47
47
  // Number displays (metrics, analytics)
48
48
  @mixin unified-number-display {
49
- font-size: var(--osi-text-xl); // 24px - Fixed size for all screen sizes
50
- font-weight: var(--osi-font-bold); // 700
49
+ font-size: var(--text-2xl);
50
+ font-weight: var(--font-bold);
51
51
  line-height: 1;
52
- letter-spacing: var(--osi-tracking-tight);
52
+ letter-spacing: -0.02em;
53
53
  font-variant-numeric: tabular-nums;
54
- color: var(--osi-foreground);
54
+ color: var(--foreground);
55
55
  }
56
56
 
57
57
  // ═══════════════════════════════════════════════════════════════════
@@ -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,19 +291,7 @@
278
291
  }
279
292
 
280
293
  /* Priority-based visual indicators */
281
- .masonry-item[data-priority="1"] {
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
+ /* Removed left brand color bar - no longer showing visual indicator for priority 1 items */
294
295
 
295
296
  /* Flex grow sections - expand to fill space */
296
297
  .masonry-item--flex-grow {
@@ -657,8 +658,7 @@
657
658
 
658
659
  /* Focus styles for keyboard navigation following aria-flowto */
659
660
  .masonry-item:focus-visible {
660
- outline: 2px solid var(--focus-color, #3b82f6);
661
- outline-offset: 2px;
661
+ outline: none;
662
662
  z-index: 10;
663
663
  }
664
664
 
@@ -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, intensified by 50% */
52
- box-shadow: 0 0 var(--glow-blur) var(--glow-color, rgba(255, 121, 0, 0.375));
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, intensified by 50% */
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, 1.5rem);
223
- font-weight: var(--metric-value-weight, 700);
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: 2px solid var(--color-brand, #{tokens.$osi-color-brand});
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: 2px solid var(--color-brand, #{tokens.$osi-color-brand});
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: 2px solid var(--color-brand, #{tokens.$osi-color-brand});
307
- outline-offset: 2px;
303
+ outline: none;
308
304
  }
309
305
 
310
306
  // Remove focus outline for mouse users
@@ -4,6 +4,8 @@
4
4
  * Breakpoints and responsive utilities for cards and sections.
5
5
  */
6
6
 
7
+ @use "sass:map";
8
+
7
9
  // ============================================
8
10
  // Breakpoint Variables
9
11
  // ============================================
@@ -23,8 +25,8 @@ $breakpoints: (
23
25
 
24
26
  /// Media query for minimum width (mobile-first)
25
27
  @mixin responsive($breakpoint) {
26
- @if map-has-key($breakpoints, $breakpoint) {
27
- @media (min-width: map-get($breakpoints, $breakpoint)) {
28
+ @if map.has-key($breakpoints, $breakpoint) {
29
+ @media (min-width: map.get($breakpoints, $breakpoint)) {
28
30
  @content;
29
31
  }
30
32
  } @else {
@@ -36,8 +38,8 @@ $breakpoints: (
36
38
 
37
39
  /// Media query for maximum width
38
40
  @mixin responsive-down($breakpoint) {
39
- @if map-has-key($breakpoints, $breakpoint) {
40
- @media (max-width: #{map-get($breakpoints, $breakpoint) - 1px}) {
41
+ @if map.has-key($breakpoints, $breakpoint) {
42
+ @media (max-width: #{map.get($breakpoints, $breakpoint) - 1px}) {
41
43
  @content;
42
44
  }
43
45
  } @else {
@@ -49,8 +51,8 @@ $breakpoints: (
49
51
 
50
52
  /// Media query for range
51
53
  @mixin responsive-between($min, $max) {
52
- $min-width: if(map-has-key($breakpoints, $min), map-get($breakpoints, $min), $min);
53
- $max-width: if(map-has-key($breakpoints, $max), map-get($breakpoints, $max), $max);
54
+ $min-width: if(map.has-key($breakpoints, $min), map.get($breakpoints, $min), $min);
55
+ $max-width: if(map.has-key($breakpoints, $max), map.get($breakpoints, $max), $max);
54
56
 
55
57
  @media (min-width: $min-width) and (max-width: #{$max-width - 1px}) {
56
58
  @content;
@@ -169,7 +171,7 @@ $breakpoints: (
169
171
  }
170
172
 
171
173
  .metric-value {
172
- font-size: 1.5rem;
174
+ font-size: var(--text-2xl);
173
175
  }
174
176
  }
175
177