osi-cards-lib 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +763 -0
  2. package/esm2022/lib/components/ai-card-renderer/ai-card-renderer.component.mjs +911 -0
  3. package/esm2022/lib/components/card-preview/card-preview.component.mjs +74 -0
  4. package/esm2022/lib/components/card-skeleton/card-skeleton.component.mjs +24 -0
  5. package/esm2022/lib/components/masonry-grid/masonry-grid.component.mjs +330 -0
  6. package/esm2022/lib/components/section-renderer/section-renderer.component.mjs +166 -0
  7. package/esm2022/lib/components/sections/analytics-section/analytics-section.component.mjs +70 -0
  8. package/esm2022/lib/components/sections/base-section.component.mjs +335 -0
  9. package/esm2022/lib/components/sections/brand-colors-section/brand-colors-section.component.mjs +89 -0
  10. package/esm2022/lib/components/sections/chart-section/chart-section.component.mjs +92 -0
  11. package/esm2022/lib/components/sections/contact-card-section/contact-card-section.component.mjs +70 -0
  12. package/esm2022/lib/components/sections/event-section/event-section.component.mjs +32 -0
  13. package/esm2022/lib/components/sections/fallback-section/fallback-section.component.mjs +16 -0
  14. package/esm2022/lib/components/sections/financials-section/financials-section.component.mjs +53 -0
  15. package/esm2022/lib/components/sections/info-section.component.mjs +68 -0
  16. package/esm2022/lib/components/sections/list-section/list-section.component.mjs +36 -0
  17. package/esm2022/lib/components/sections/map-section/map-section.component.mjs +52 -0
  18. package/esm2022/lib/components/sections/network-card-section/network-card-section.component.mjs +41 -0
  19. package/esm2022/lib/components/sections/news-section/news-section.component.mjs +44 -0
  20. package/esm2022/lib/components/sections/overview-section/overview-section.component.mjs +47 -0
  21. package/esm2022/lib/components/sections/product-section/product-section.component.mjs +129 -0
  22. package/esm2022/lib/components/sections/quotation-section/quotation-section.component.mjs +39 -0
  23. package/esm2022/lib/components/sections/social-media-section/social-media-section.component.mjs +45 -0
  24. package/esm2022/lib/components/sections/solutions-section/solutions-section.component.mjs +29 -0
  25. package/esm2022/lib/components/sections/text-reference-section/text-reference-section.component.mjs +42 -0
  26. package/esm2022/lib/icons/index.mjs +2 -0
  27. package/esm2022/lib/icons/lucide-icons.module.mjs +91 -0
  28. package/esm2022/lib/models/card.model.mjs +111 -0
  29. package/esm2022/lib/models/index.mjs +2 -0
  30. package/esm2022/lib/services/icon.service.mjs +148 -0
  31. package/esm2022/lib/services/index.mjs +5 -0
  32. package/esm2022/lib/services/magnetic-tilt.service.mjs +224 -0
  33. package/esm2022/lib/services/section-normalization.service.mjs +243 -0
  34. package/esm2022/lib/services/section-utils.service.mjs +122 -0
  35. package/esm2022/lib/utils/card-diff.util.mjs +327 -0
  36. package/esm2022/lib/utils/index.mjs +3 -0
  37. package/esm2022/lib/utils/responsive.util.mjs +14 -0
  38. package/esm2022/osi-cards-lib.mjs +5 -0
  39. package/esm2022/public-api.mjs +57 -0
  40. package/fesm2022/osi-cards-lib.mjs +3960 -0
  41. package/index.d.ts +5 -0
  42. package/lib/components/ai-card-renderer/ai-card-renderer.component.d.ts +163 -0
  43. package/lib/components/card-preview/card-preview.component.d.ts +52 -0
  44. package/lib/components/card-skeleton/card-skeleton.component.d.ts +8 -0
  45. package/lib/components/masonry-grid/masonry-grid.component.d.ts +72 -0
  46. package/lib/components/section-renderer/section-renderer.component.d.ts +25 -0
  47. package/lib/components/sections/analytics-section/analytics-section.component.d.ts +32 -0
  48. package/lib/components/sections/base-section.component.d.ts +138 -0
  49. package/lib/components/sections/brand-colors-section/brand-colors-section.component.d.ts +28 -0
  50. package/lib/components/sections/chart-section/chart-section.component.d.ts +30 -0
  51. package/lib/components/sections/contact-card-section/contact-card-section.component.d.ts +35 -0
  52. package/lib/components/sections/event-section/event-section.component.d.ts +17 -0
  53. package/lib/components/sections/fallback-section/fallback-section.component.d.ts +7 -0
  54. package/lib/components/sections/financials-section/financials-section.component.d.ts +27 -0
  55. package/lib/components/sections/info-section.component.d.ts +33 -0
  56. package/lib/components/sections/list-section/list-section.component.d.ts +21 -0
  57. package/lib/components/sections/map-section/map-section.component.d.ts +22 -0
  58. package/lib/components/sections/network-card-section/network-card-section.component.d.ts +18 -0
  59. package/lib/components/sections/news-section/news-section.component.d.ts +16 -0
  60. package/lib/components/sections/overview-section/overview-section.component.d.ts +19 -0
  61. package/lib/components/sections/product-section/product-section.component.d.ts +57 -0
  62. package/lib/components/sections/quotation-section/quotation-section.component.d.ts +23 -0
  63. package/lib/components/sections/social-media-section/social-media-section.component.d.ts +11 -0
  64. package/lib/components/sections/solutions-section/solutions-section.component.d.ts +19 -0
  65. package/lib/components/sections/text-reference-section/text-reference-section.component.d.ts +25 -0
  66. package/lib/icons/index.d.ts +1 -0
  67. package/lib/icons/lucide-icons.module.d.ts +7 -0
  68. package/lib/models/card.model.d.ts +289 -0
  69. package/lib/models/index.d.ts +1 -0
  70. package/lib/services/icon.service.d.ts +9 -0
  71. package/lib/services/index.d.ts +4 -0
  72. package/lib/services/magnetic-tilt.service.d.ts +34 -0
  73. package/lib/services/section-normalization.service.d.ts +38 -0
  74. package/lib/services/section-utils.service.d.ts +46 -0
  75. package/lib/utils/card-diff.util.d.ts +52 -0
  76. package/lib/utils/index.d.ts +2 -0
  77. package/lib/utils/responsive.util.d.ts +2 -0
  78. package/package.json +63 -0
  79. package/public-api.d.ts +50 -0
  80. package/styles/_styles.scss +95 -0
  81. package/styles/components/cards/_ai-card.scss +743 -0
  82. package/styles/components/sections/_analytics.scss +280 -0
  83. package/styles/components/sections/_brand-colors.scss +280 -0
  84. package/styles/components/sections/_chart.scss +494 -0
  85. package/styles/components/sections/_contact.scss +250 -0
  86. package/styles/components/sections/_design-system.scss +540 -0
  87. package/styles/components/sections/_event.scss +246 -0
  88. package/styles/components/sections/_fallback.scss +172 -0
  89. package/styles/components/sections/_financials.scss +258 -0
  90. package/styles/components/sections/_global-enforcement.scss +648 -0
  91. package/styles/components/sections/_info.scss +224 -0
  92. package/styles/components/sections/_list.scss +216 -0
  93. package/styles/components/sections/_map.scss +186 -0
  94. package/styles/components/sections/_network.scss +115 -0
  95. package/styles/components/sections/_news.scss +81 -0
  96. package/styles/components/sections/_overview.scss +159 -0
  97. package/styles/components/sections/_product.scss +906 -0
  98. package/styles/components/sections/_quotation.scss +151 -0
  99. package/styles/components/sections/_section-shell.scss +385 -0
  100. package/styles/components/sections/_section-types.scss +290 -0
  101. package/styles/components/sections/_sections-base.scss +332 -0
  102. package/styles/components/sections/_social-media.scss +88 -0
  103. package/styles/components/sections/_solutions.scss +205 -0
  104. package/styles/components/sections/_text-reference.scss +158 -0
  105. package/styles/components/sections/_unified-cards.scss +124 -0
  106. package/styles/core/_animations.scss +766 -0
  107. package/styles/core/_global.scss +66 -0
  108. package/styles/core/_mixins.scss +140 -0
  109. package/styles/core/_surface-layers.scss +76 -0
  110. package/styles/core/_utilities.scss +193 -0
  111. package/styles/core/_variables.scss +462 -0
  112. package/styles/core/variables/_colors.scss +212 -0
  113. package/styles/layout/_masonry.scss +60 -0
  114. package/styles/layout/_tilt.scss +214 -0
@@ -0,0 +1,246 @@
1
+ /* Event Section - Timeline Design (Keeping the style you liked) */
2
+
3
+ @import 'sections/sections-base';
4
+ @import 'unified-cards';
5
+
6
+ /* Event Timeline Container */
7
+ .event-timeline {
8
+ position: relative;
9
+ display: flex;
10
+ flex-direction: column;
11
+ gap: calc(var(--section-card-gap) * 0.9);
12
+ padding-left: calc(var(--card-padding) * 1.5);
13
+ }
14
+
15
+ /* Vertical Timeline Line */
16
+ .event-timeline__line {
17
+ position: absolute;
18
+ left: calc(var(--card-padding) * 0.75);
19
+ top: calc(var(--card-padding) * 0.75);
20
+ bottom: calc(var(--card-padding) * 0.75);
21
+ width: 2px;
22
+ background: var(--color-brand);
23
+ z-index: 0;
24
+ }
25
+
26
+ /* Event Card */
27
+ .event-card {
28
+ @include card;
29
+ position: relative;
30
+ display: flex;
31
+ align-items: flex-start;
32
+ gap: var(--card-gap);
33
+ min-height: auto;
34
+ z-index: 1;
35
+ cursor: pointer;
36
+ padding: var(--card-padding) !important;
37
+ transition: all 0.22s cubic-bezier(0.4, 0, 0.2, 1);
38
+ background: var(--card-background);
39
+ overflow: hidden;
40
+
41
+ /* ENHANCED: Subtle accent indicator */
42
+ &::before {
43
+ content: '';
44
+ position: absolute;
45
+ left: 0;
46
+ top: 0;
47
+ bottom: 0;
48
+ width: 3px;
49
+ background: linear-gradient(180deg, var(--color-brand), transparent);
50
+ opacity: 0;
51
+ transition: opacity 0.22s ease;
52
+ }
53
+
54
+ &:hover {
55
+ transform: translateY(-2px);
56
+ box-shadow: 0 8px 16px color-mix(in srgb, var(--foreground) 12%, transparent),
57
+ 0 0 0 1px color-mix(in srgb, var(--color-brand) 15%, transparent);
58
+
59
+ &::before {
60
+ opacity: 0.6;
61
+ }
62
+
63
+ .event-card__title {
64
+ color: color-mix(in srgb, var(--foreground) 90%, var(--color-brand) 10%);
65
+ }
66
+ }
67
+
68
+ &:focus-visible {
69
+ outline: 2px solid var(--color-brand);
70
+ outline-offset: 2px;
71
+ }
72
+ }
73
+
74
+ /* Timeline Marker (Circular Icon) */
75
+ .event-card__marker {
76
+ position: relative;
77
+ flex-shrink: 0;
78
+ display: flex;
79
+ align-items: center;
80
+ justify-content: center;
81
+ width: 36px;
82
+ height: 36px;
83
+ border-radius: 50%;
84
+ border: 3px solid var(--color-brand);
85
+ background: color-mix(in srgb, var(--color-brand) 15%, transparent);
86
+ color: var(--color-brand);
87
+ margin-top: 2px;
88
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
89
+ box-shadow: 0 0 0 6px color-mix(in srgb, var(--color-brand) 15%, transparent);
90
+ }
91
+
92
+ .event-card:hover .event-card__marker {
93
+ box-shadow: 0 0 8px color-mix(in srgb, var(--color-brand) 25%, transparent),
94
+ 0 0 0 4px color-mix(in srgb, var(--color-brand) 10%, transparent);
95
+ transform: scale(1.1);
96
+ }
97
+
98
+ .event-card__marker-icon {
99
+ width: 14px;
100
+ height: 14px;
101
+ }
102
+
103
+ /* Connector Line from Marker to Timeline */
104
+ .event-card__marker-line {
105
+ position: absolute;
106
+ left: -21px;
107
+ top: 50%;
108
+ transform: translateY(-50%);
109
+ width: 18px;
110
+ height: 2px;
111
+ background: var(--color-brand);
112
+ opacity: 0.8;
113
+ }
114
+
115
+ /* Event Card Content */
116
+ .event-card__content {
117
+ flex: 1;
118
+ min-width: 0;
119
+ display: flex;
120
+ flex-direction: column;
121
+ gap: calc(var(--card-gap) * 0.75);
122
+ }
123
+
124
+ /* Event Header */
125
+ .event-card__header {
126
+ display: flex;
127
+ flex-wrap: wrap;
128
+ align-items: center;
129
+ gap: calc(var(--card-gap) * 0.75);
130
+ }
131
+
132
+ .event-card__title {
133
+ @include card-title-text;
134
+ margin: 0;
135
+ line-height: 1.3;
136
+ color: var(--card-text-primary);
137
+ flex: 1;
138
+ min-width: 0;
139
+ font-weight: 700;
140
+ font-size: calc(var(--card-title-font-size) * 1.15);
141
+ transition: color 0.22s ease;
142
+ letter-spacing: -0.01em;
143
+ }
144
+
145
+ .event-card__badge {
146
+ display: inline-flex;
147
+ align-items: center;
148
+ padding: calc(var(--tag-padding-y-sm) * 1) calc(var(--tag-padding-x) * 1);
149
+ border-radius: calc(var(--section-card-border-radius) * 0.8);
150
+ font-size: calc(var(--card-meta-font-size) + 1px);
151
+ font-weight: 600;
152
+ line-height: 1.2;
153
+ letter-spacing: 0.06em;
154
+ text-transform: uppercase;
155
+ white-space: nowrap;
156
+ flex-shrink: 0;
157
+ transition: all 0.25s ease;
158
+ box-shadow: none;
159
+
160
+ &[data-status="completed"],
161
+ &[data-status="done"],
162
+ &[data-status="success"] {
163
+ color: var(--color-success, #10b981);
164
+ background: color-mix(in srgb, var(--color-success, #10b981) 12%, transparent);
165
+ font-weight: 600;
166
+ }
167
+
168
+ &[data-status="in-progress"],
169
+ &[data-status="in progress"],
170
+ &[data-status="active"] {
171
+ color: var(--color-brand);
172
+ background: color-mix(in srgb, var(--color-brand) 15%, transparent);
173
+ font-weight: 600;
174
+ }
175
+
176
+ &[data-status="pending"],
177
+ &[data-status="upcoming"],
178
+ &[data-status="planned"] {
179
+ color: var(--color-warning, #f59e0b);
180
+ background: color-mix(in srgb, var(--color-warning, #f59e0b) 12%, transparent);
181
+ font-weight: 600;
182
+ }
183
+
184
+ &[data-status="blocked"],
185
+ &[data-status="delayed"],
186
+ &[data-status="cancelled"] {
187
+ color: var(--color-error, #ef4444);
188
+ background: color-mix(in srgb, var(--color-error, #ef4444) 12%, transparent);
189
+ font-weight: 600;
190
+ }
191
+ }
192
+
193
+ /* Date and Time */
194
+ .event-card__datetime {
195
+ display: flex;
196
+ flex-wrap: wrap;
197
+ align-items: center;
198
+ gap: calc(var(--card-gap) * 1.5);
199
+ }
200
+
201
+ .event-card__date,
202
+ .event-card__time {
203
+ display: inline-flex;
204
+ align-items: center;
205
+ gap: calc(var(--card-gap) * 0.5);
206
+ @include card-meta-text;
207
+ color: var(--card-text-secondary);
208
+ }
209
+
210
+ .event-card__datetime-icon {
211
+ flex-shrink: 0;
212
+ width: 14px;
213
+ height: 14px;
214
+ opacity: 0.7;
215
+ color: var(--card-text-muted);
216
+ }
217
+
218
+ /* Event Description */
219
+ .event-card__description {
220
+ @include card-subtitle-text;
221
+ margin: 0;
222
+ color: var(--card-text-secondary);
223
+ line-height: 1.5;
224
+ }
225
+
226
+ /* Empty State */
227
+ .section-empty {
228
+ display: flex;
229
+ flex-direction: column;
230
+ align-items: center;
231
+ justify-content: center;
232
+ padding: calc(var(--card-padding) * 3);
233
+ text-align: center;
234
+ color: var(--card-text-muted);
235
+ }
236
+
237
+ .section-empty__icon {
238
+ margin-bottom: calc(var(--card-gap) * 1.5);
239
+ opacity: 0.5;
240
+ }
241
+
242
+ .section-empty__text {
243
+ @include card-meta-text;
244
+ margin: 0;
245
+ color: var(--card-text-muted);
246
+ }
@@ -0,0 +1,172 @@
1
+ /* Fallback section styling - Generic section for unmapped types */
2
+
3
+ @import 'sections/sections-base';
4
+
5
+ .fallback-section {
6
+ @include card;
7
+
8
+ .fallback-content {
9
+ display: flex;
10
+ flex-direction: column;
11
+ gap: calc(var(--card-gap) * 0.75); /* COMPACT: Reduced from full gap */
12
+ align-items: center;
13
+ justify-content: center;
14
+ padding: calc(var(--card-padding) * 0.75) 0; /* COMPACT: Reduced padding */
15
+ text-align: center;
16
+ min-height: auto; /* COMPACT: No minimum height */
17
+ margin: 0;
18
+ }
19
+
20
+ .fallback-icon {
21
+ display: flex;
22
+ align-items: center;
23
+ justify-content: center;
24
+ width: var(--icon-size-xl);
25
+ height: var(--icon-size-xl);
26
+ border-radius: 50%;
27
+ background: var(--card-background);
28
+ color: rgba(255, 180, 91, 1);
29
+ font-size: var(--icon-size-lg);
30
+ }
31
+
32
+ .fallback-message {
33
+ font-size: var(--font-section-value);
34
+ font-weight: 600;
35
+ color: var(--foreground);
36
+ line-height: 1.2;
37
+ }
38
+
39
+ .fallback-description {
40
+ font-size: var(--font-section-description);
41
+ color: color-mix(in srgb, var(--foreground) 85%, transparent);
42
+ line-height: 1.2; /* COMPACT: Reduced from 1.3 */
43
+ max-width: 100%;
44
+ }
45
+
46
+ .fallback-type-hint {
47
+ display: inline-flex;
48
+ align-items: center;
49
+ gap: calc(var(--card-gap) * 0.75); /* COMPACT: Reduced from full gap */
50
+ padding: calc(var(--tag-padding-y-sm) * 0.75) calc(var(--tag-padding-x) * 0.875); /* COMPACT: Reduced padding */
51
+ border-radius: var(--section-card-border-radius);
52
+ border: none !important; /* CLEAN: No borders on hints - only cards have borders */
53
+ background: color-mix(in srgb, var(--card-background) 60%, transparent);
54
+ font-size: var(--card-label-font-size);
55
+ color: color-mix(in srgb, var(--foreground) 88%, transparent);
56
+ text-transform: uppercase;
57
+ letter-spacing: 0.02em;
58
+
59
+ .hint-label {
60
+ font-weight: 600;
61
+ }
62
+
63
+ .hint-value {
64
+ font-weight: 500;
65
+ color: color-mix(in srgb, var(--foreground) 85%, transparent);
66
+ }
67
+ }
68
+
69
+ .fallback-fields {
70
+ display: flex;
71
+ flex-direction: column;
72
+ gap: calc(var(--section-card-gap) * 0.75); /* COMPACT: Reduced from full gap */
73
+ width: 100%;
74
+ }
75
+
76
+ .fallback-field {
77
+ @include card; /* Use unified card mixin for consistency */
78
+ display: flex;
79
+ flex-direction: column;
80
+ gap: calc(var(--card-gap) * 0.75); /* COMPACT: Reduced from full gap */
81
+ margin: 0;
82
+
83
+ .field-label {
84
+ font-size: var(--font-section-label);
85
+ color: color-mix(in srgb, var(--foreground) 80%, transparent);
86
+ text-transform: uppercase;
87
+ letter-spacing: 0.04em;
88
+ line-height: 1.2;
89
+ }
90
+
91
+ .field-value {
92
+ font-size: var(--font-section-value);
93
+ font-weight: 600;
94
+ color: var(--foreground);
95
+ line-height: 1.2;
96
+ word-break: break-word;
97
+ }
98
+ }
99
+
100
+ .fallback-info {
101
+ display: flex;
102
+ align-items: center;
103
+ gap: calc(var(--card-gap) * 0.75); /* COMPACT: Reduced from full gap */
104
+ padding: calc(var(--card-padding) * 0.75); /* COMPACT: Reduced padding */
105
+ border-radius: var(--section-card-border-radius);
106
+ background: color-mix(in srgb, var(--card-background) 60%, transparent);
107
+ border: none !important; /* CLEAN: No borders on info elements - only cards have borders */
108
+ font-size: var(--font-section-meta);
109
+ color: color-mix(in srgb, var(--foreground) 88%, transparent);
110
+ line-height: 1.2; /* COMPACT: Tight line-height */
111
+
112
+ .info-icon {
113
+ display: flex;
114
+ align-items: center;
115
+ justify-content: center;
116
+ flex-shrink: 0;
117
+ width: var(--icon-size-md);
118
+ height: var(--icon-size-md);
119
+ border-radius: 50%;
120
+ background: var(--card-border);
121
+ color: rgba(255, 180, 91, 1);
122
+ font-size: var(--font-section-tag-sm);
123
+ }
124
+
125
+ .info-text {
126
+ flex: 1;
127
+ }
128
+ }
129
+ }
130
+
131
+ @media (max-width: 768px) {
132
+ .fallback-section {
133
+ .fallback-content {
134
+ padding: calc(var(--card-padding) * 0.75) 0; /* COMPACT: Reduced padding */
135
+ min-height: auto; /* COMPACT: No minimum height */
136
+ }
137
+
138
+ .fallback-icon {
139
+ width: var(--icon-size-lg);
140
+ height: var(--icon-size-lg);
141
+ font-size: var(--icon-size-md);
142
+ }
143
+
144
+ .fallback-message {
145
+ font-size: var(--font-section-value-lg);
146
+ }
147
+
148
+ .fallback-description {
149
+ font-size: var(--font-section-description-mobile);
150
+ }
151
+
152
+ .fallback-fields {
153
+ gap: calc(var(--section-card-gap) * 0.75); /* COMPACT: Reduced from full gap */
154
+ margin-top: calc(var(--card-gap) * 0.75); /* COMPACT: Reduced margin */
155
+ }
156
+
157
+ .fallback-field {
158
+ /* Padding is set by @include card */
159
+ }
160
+
161
+ .fallback-info {
162
+ font-size: var(--font-section-tag-sm);
163
+ margin-top: calc(var(--card-gap) * 0.75); /* COMPACT: Reduced margin */
164
+
165
+ .info-icon {
166
+ width: var(--icon-size-sm);
167
+ height: var(--icon-size-sm);
168
+ font-size: var(--font-section-tag-sm);
169
+ }
170
+ }
171
+ }
172
+ }
@@ -0,0 +1,258 @@
1
+ /* Financials Section - Enhanced Modern Design */
2
+
3
+ @import 'sections/sections-base';
4
+ @import 'unified-cards';
5
+
6
+ /* Financials Grid Layout */
7
+ .financials-grid {
8
+ display: grid;
9
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
10
+ gap: var(--section-card-gap);
11
+ width: 100%;
12
+
13
+ @media (max-width: 768px) {
14
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
15
+ gap: calc(var(--section-card-gap) * 0.875);
16
+ }
17
+
18
+ @media (max-width: 520px) {
19
+ grid-template-columns: 1fr;
20
+ }
21
+ }
22
+
23
+ /* Financial Card - Minimalistic Design */
24
+ .financial-card {
25
+ @include card;
26
+ display: flex;
27
+ align-items: center;
28
+ justify-content: space-between;
29
+ gap: var(--card-gap);
30
+ min-height: auto;
31
+ cursor: pointer;
32
+ position: relative;
33
+ overflow: hidden;
34
+ transition: all 0.22s cubic-bezier(0.4, 0, 0.2, 1);
35
+ border: 1px solid color-mix(in srgb, var(--color-brand) 20%, transparent);
36
+
37
+ /* Horizontal layout optimization */
38
+ .financial-card__content {
39
+ flex: 1;
40
+ min-width: 0;
41
+ }
42
+
43
+ /* Left accent border - minimalistic */
44
+ &::before {
45
+ content: '';
46
+ position: absolute;
47
+ left: 0;
48
+ top: 0;
49
+ bottom: 0;
50
+ width: 4px;
51
+ background: var(--color-brand);
52
+ opacity: 1;
53
+ transition: opacity 0.22s ease, width 0.22s ease;
54
+ border-radius: 0 2px 2px 0;
55
+ }
56
+
57
+ &:hover {
58
+ transform: translateY(-2px);
59
+ box-shadow: 0 8px 16px color-mix(in srgb, var(--foreground) 12%, transparent),
60
+ 0 0 0 1px color-mix(in srgb, var(--color-brand) 15%, transparent);
61
+ border-color: color-mix(in srgb, var(--color-brand) 30%, transparent);
62
+
63
+ &::before {
64
+ opacity: 1;
65
+ width: 6px;
66
+ }
67
+
68
+ .financial-card__value {
69
+ color: color-mix(in srgb, var(--foreground) 90%, var(--color-brand) 10%);
70
+ }
71
+ }
72
+
73
+ &:focus-visible {
74
+ outline: 2px solid var(--color-brand);
75
+ outline-offset: 2px;
76
+ }
77
+ }
78
+
79
+ /* Card Content */
80
+ .financial-card__content {
81
+ flex: 1;
82
+ min-width: 0;
83
+ display: flex;
84
+ flex-direction: column;
85
+ gap: calc(var(--card-gap) * 0.625);
86
+ position: relative;
87
+ z-index: 1;
88
+ }
89
+
90
+ .financial-card__label {
91
+ @include label-text;
92
+ margin: 0;
93
+ color: var(--card-text-label);
94
+ line-height: 1.3;
95
+ font-weight: 600;
96
+ letter-spacing: 0.04em;
97
+ display: flex;
98
+ align-items: center;
99
+ gap: calc(var(--card-gap) * 0.375);
100
+ transition: color 0.22s ease;
101
+ text-transform: uppercase;
102
+ font-size: calc(var(--card-label-font-size) * 0.95);
103
+
104
+ .financial-card:hover & {
105
+ color: color-mix(in srgb, var(--card-text-label) 90%, #FF7900 10%);
106
+ }
107
+ }
108
+
109
+ .financial-card__value-wrapper {
110
+ display: flex;
111
+ align-items: baseline;
112
+ gap: calc(var(--card-gap) * 0.625);
113
+ flex-wrap: wrap;
114
+ }
115
+
116
+ .financial-card__value {
117
+ @include value-text;
118
+ margin: 0;
119
+ color: var(--color-brand);
120
+ line-height: 1.2;
121
+ display: flex;
122
+ align-items: baseline;
123
+ gap: calc(var(--card-gap) * 0.375);
124
+ font-weight: 700;
125
+ font-size: calc(var(--card-value-font-size) * 1.3) !important;
126
+ letter-spacing: -0.01em;
127
+ transition: color 0.22s ease;
128
+
129
+ &--currency {
130
+ color: var(--color-brand);
131
+ }
132
+ }
133
+
134
+ .financial-card__currency-icon {
135
+ flex-shrink: 0;
136
+ width: 20px;
137
+ height: 20px;
138
+ opacity: 0.9;
139
+ color: var(--color-brand);
140
+ transition: opacity 0.22s ease;
141
+ }
142
+
143
+ .financial-card__trend-icon {
144
+ flex-shrink: 0;
145
+ width: 18px;
146
+ height: 18px;
147
+ opacity: 0.8;
148
+ transition: opacity 0.22s ease;
149
+
150
+ .financial-card:hover & {
151
+ opacity: 1;
152
+ }
153
+ }
154
+
155
+ /* Change Indicator - Minimalistic */
156
+ .financial-card__change {
157
+ flex-shrink: 0;
158
+ @include card-meta-text;
159
+ font-weight: 600;
160
+ line-height: 1.3;
161
+ text-align: right;
162
+ white-space: nowrap;
163
+ padding: calc(var(--card-gap) * 0.5) calc(var(--card-gap) * 0.8);
164
+ border-radius: calc(var(--card-border-radius) * 0.5);
165
+ background: color-mix(in srgb, var(--foreground) 6%, transparent);
166
+ transition: background 0.22s ease;
167
+ letter-spacing: 0.02em;
168
+ font-size: calc(var(--card-meta-font-size) + 1px);
169
+
170
+ &.text-emerald-400 {
171
+ color: var(--color-brand) !important;
172
+ background: color-mix(in srgb, var(--color-brand) 15%, transparent) !important;
173
+ }
174
+
175
+ &.text-rose-400 {
176
+ color: #ef4444 !important;
177
+ background: color-mix(in srgb, #ef4444 10%, transparent) !important;
178
+ }
179
+
180
+ &.text-amber-400 {
181
+ color: #f59e0b !important;
182
+ background: color-mix(in srgb, #f59e0b 10%, transparent) !important;
183
+ }
184
+
185
+ &.text-muted-foreground {
186
+ color: var(--card-text-muted) !important;
187
+ background: color-mix(in srgb, var(--foreground) 6%, transparent) !important;
188
+ }
189
+ }
190
+
191
+ /* Empty State */
192
+ .section-empty {
193
+ display: flex;
194
+ flex-direction: column;
195
+ align-items: center;
196
+ justify-content: center;
197
+ padding: calc(var(--card-padding) * 2.5);
198
+ text-align: center;
199
+ color: var(--card-text-muted);
200
+ border-radius: var(--card-border-radius);
201
+ background: color-mix(in srgb, var(--foreground) 2%, transparent);
202
+ transition: all 0.2s ease;
203
+ }
204
+
205
+ .section-empty__icon {
206
+ margin-bottom: calc(var(--card-gap) * 1.25);
207
+ opacity: 0.5;
208
+ color: color-mix(in srgb, var(--color-brand) 50%, transparent);
209
+ transition: all 0.2s ease;
210
+ }
211
+
212
+ .section-empty__text {
213
+ @include card-meta-text;
214
+ margin: 0;
215
+ color: var(--card-text-muted);
216
+ font-weight: 500;
217
+ }
218
+
219
+ .section-empty:hover {
220
+ background: color-mix(in srgb, var(--foreground) 3%, transparent);
221
+
222
+ .section-empty__icon {
223
+ opacity: 0.7;
224
+ transform: scale(1.1);
225
+ }
226
+ }
227
+
228
+ /* Responsive adjustments */
229
+ @media (max-width: 768px) {
230
+ .financial-card {
231
+ gap: calc(var(--card-gap) * 0.875);
232
+ }
233
+
234
+ .financial-card__content {
235
+ gap: calc(var(--card-gap) * 0.5);
236
+ }
237
+
238
+ .financial-card__value-wrapper {
239
+ gap: calc(var(--card-gap) * 0.5);
240
+ }
241
+
242
+ .financial-card__change {
243
+ padding: calc(var(--card-gap) * 0.25) calc(var(--card-gap) * 0.5);
244
+ font-size: var(--card-meta-font-size);
245
+ }
246
+ }
247
+
248
+ @media (max-width: 520px) {
249
+ .financial-card {
250
+ flex-direction: column;
251
+ align-items: flex-start;
252
+ }
253
+
254
+ .financial-card__change {
255
+ align-self: flex-end;
256
+ margin-top: calc(var(--card-gap) * 0.5);
257
+ }
258
+ }