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.
Files changed (44) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/osi-cards-lib.mjs +6109 -3631
  3. package/fesm2022/osi-cards-lib.mjs.map +1 -1
  4. package/index.d.ts +211 -270
  5. package/package.json +4 -3
  6. package/scripts/setup-angular-styles.js +1 -0
  7. package/styles/bundles/_ai-card.scss +11 -4
  8. package/styles/bundles/_card-skeleton.scss +1 -1
  9. package/styles/components/_ai-card-renderer.scss +0 -2
  10. package/styles/components/_badges.scss +1 -2
  11. package/styles/components/_card-actions.scss +5 -4
  12. package/styles/components/_component-styles.scss +1 -1
  13. package/styles/components/cards/_ai-card.scss +7 -13
  14. package/styles/components/sections/_all-sections.generated.scss +0 -3
  15. package/styles/components/sections/_all-sections.scss +88 -64
  16. package/styles/components/sections/_compact-mixins.scss +9 -8
  17. package/styles/components/sections/_component-mixins.scss +40 -11
  18. package/styles/components/sections/_design-system.scss +96 -11
  19. package/styles/components/sections/_design-tokens.scss +1 -1
  20. package/styles/components/sections/_master-compact-system.scss +0 -17
  21. package/styles/components/sections/_minimalistic-design.scss +1 -4
  22. package/styles/components/sections/_modern-effects.scss +1 -3
  23. package/styles/components/sections/_modern-sections.scss +13 -69
  24. package/styles/components/sections/_section-animations.scss +158 -77
  25. package/styles/components/sections/_section-shell.scss +39 -9
  26. package/styles/components/sections/_section-types.generated.scss +0 -3
  27. package/styles/components/sections/_sections-all.scss +7 -0
  28. package/styles/components/sections/_sections-base.scss +340 -64
  29. package/styles/components/sections/_unified-section-style.scss +17 -44
  30. package/styles/components/sections/_visual-effects-library.scss +3 -3
  31. package/styles/core/_bootstrap-reset.scss +1 -1
  32. package/styles/core/_global-unified.scss +2 -6
  33. package/styles/core/_mixins.scss +4 -4
  34. package/styles/core/_surface-layers.scss +20 -11
  35. package/styles/design-system/_section-base.scss +9 -32
  36. package/styles/design-system/_tokens.scss +68 -6
  37. package/styles/design-system/_unified-sections.scss +21 -42
  38. package/styles/layout/_masonry.scss +26 -32
  39. package/styles/layout/_tilt.scss +3 -3
  40. package/styles/mixins/_section-mixins.scss +2 -2
  41. package/styles/reset/_shadow-reset.scss +3 -7
  42. package/styles/responsive.scss +9 -7
  43. package/styles/tokens/_master.scss +271 -79
  44. 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
  // ═══════════════════════════════════════════════════════════════════
@@ -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: var(--spacing-md);
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: 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));
@@ -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, 12px)
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, 12px)) {
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, 12px)) {
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.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;
@@ -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: var(--osi-spacing-sm); // 8px (was 12px)
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
- --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,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(--osi-text-sm); // 14px - Consistent size
16
- font-weight: var(--osi-font-semibold); // 600
17
- line-height: var(--osi-leading-snug); // 1.375
18
- color: var(--osi-foreground);
19
-
20
- @include mobile {
21
- font-size: var(--osi-text-sm); // Keep same on mobile
22
- }
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: 0.7rem; // 11.2px - Compact
28
- font-weight: var(--osi-font-medium); // 500
29
- line-height: var(--osi-leading-tight); // 1.25
30
- color: var(--osi-muted-foreground);
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.04em;
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(--osi-text-sm); // 14px - Consistent
42
- font-weight: var(--osi-font-semibold); // 600
43
- line-height: var(--osi-leading-normal); // 1.5
44
- color: var(--osi-foreground);
45
-
46
- @include mobile {
47
- font-size: var(--osi-text-sm); // Keep same on mobile
48
- }
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(--osi-text-xs); // 12px
54
- font-weight: var(--osi-font-normal); // 400
55
- line-height: var(--osi-leading-relaxed); // 1.625
56
- color: var(--osi-muted-foreground);
57
-
58
- @include mobile {
59
- font-size: var(--osi-text-xs); // Keep same on mobile
60
- line-height: var(--osi-leading-normal); // Tighter on mobile
61
- }
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(--osi-text-xl); // 24px - Compact (was 30px)
67
- font-weight: var(--osi-font-bold); // 700
49
+ font-size: var(--text-2xl);
50
+ font-weight: var(--font-bold);
68
51
  line-height: 1;
69
- letter-spacing: var(--osi-tracking-tight);
52
+ letter-spacing: -0.02em;
70
53
  font-variant-numeric: tabular-nums;
71
- color: var(--osi-foreground);
72
-
73
- @include mobile {
74
- font-size: var(--osi-text-lg); // 20px on mobile
75
- }
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, 12px);
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
- .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
-
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, 12px) * 3) / 4);
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, 12px) * 3) / 4 * 2 + var(--masonry-gap, 12px));
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, 12px) * 3) / 4 * 3 + var(--masonry-gap, 12px) * 2);
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: 2px solid var(--focus-color, #3b82f6);
667
- outline-offset: 2px;
661
+ outline: none;
668
662
  z-index: 10;
669
663
  }
670
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