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,151 @@
1
+ @import 'sections/sections-base';
2
+ @import 'unified-cards';
3
+
4
+ .section-block--quotation {
5
+ --section-card-grid-min: 280px; /* Wider cards for quotations */
6
+ }
7
+
8
+ .section-card--quotation {
9
+ @include card;
10
+ display: flex;
11
+ flex-direction: column;
12
+ /* COMPACT: No minimum height */
13
+ min-height: auto;
14
+ gap: var(--card-gap);
15
+ background: color-mix(in srgb, var(--card-background) 98%, var(--color-brand) 1%);
16
+ }
17
+
18
+ .quotation-card__quote {
19
+ display: flex;
20
+ flex-direction: column;
21
+ gap: calc(var(--card-gap) * 0.5);
22
+ /* COMPACT: Tighter quote spacing */
23
+ position: relative;
24
+ }
25
+
26
+ .quotation-card__icon {
27
+ color: var(--color-brand);
28
+ opacity: 0.7;
29
+ align-self: flex-start;
30
+ flex-shrink: 0;
31
+ width: 24px;
32
+ height: 24px;
33
+ transition: opacity 0.22s ease, color 0.22s ease;
34
+
35
+ // Use opacity and color changes instead of transform
36
+ .section-card--quotation:hover & {
37
+ opacity: 0.9;
38
+ color: var(--color-brand);
39
+ }
40
+ }
41
+
42
+ .quotation-card__text {
43
+ @include card-title-text;
44
+ /* COMPACT: Tight line-height */
45
+ font-style: italic;
46
+ font-size: calc(var(--card-title-font-size) * 1.15);
47
+ line-height: 1.4;
48
+ color: var(--card-text-primary);
49
+ margin: 0;
50
+ padding-left: calc(var(--card-padding) * 0.75);
51
+ /* COMPACT: Reduced padding */
52
+ position: relative;
53
+ transition: color 0.22s cubic-bezier(0.4, 0, 0.2, 1);
54
+ letter-spacing: 0.01em;
55
+
56
+ &::before {
57
+ content: '';
58
+ position: absolute;
59
+ left: 0;
60
+ top: 0;
61
+ bottom: 0;
62
+ width: 4px;
63
+ /* OPTIMIZED: Thicker accent bar */
64
+ background: var(--color-brand);
65
+ opacity: 1;
66
+ border-radius: var(--radius-xs);
67
+ transition: width 0.22s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.22s cubic-bezier(0.4, 0, 0.2, 1);
68
+ }
69
+
70
+ .section-card--quotation:hover & {
71
+ color: color-mix(in srgb, var(--foreground) 95%, transparent);
72
+
73
+ &::before {
74
+ width: 4px;
75
+ opacity: 1;
76
+ }
77
+ }
78
+ }
79
+
80
+ .quotation-card__footer {
81
+ display: flex;
82
+ flex-direction: column;
83
+ gap: calc(var(--card-gap) * 0.7);
84
+ /* COMPACT: Tighter footer spacing */
85
+ padding-top: calc(var(--card-padding) * 0.6);
86
+ /* COMPACT: Reduced padding */
87
+ border-top: none !important;
88
+ /* CLEAN: No borders on footers - only cards have borders */
89
+ margin-top: calc(var(--card-gap) * 0.25);
90
+ /* COMPACT: Reduced margin */
91
+ }
92
+
93
+ .quotation-card__author {
94
+ display: flex;
95
+ flex-direction: column;
96
+ gap: calc(var(--card-gap) * 0.5);
97
+ /* OPTIMIZED: Tighter author spacing */
98
+ }
99
+
100
+ .quotation-card__author-name {
101
+ @include card-subtitle-text;
102
+ /* OPTIMIZED: Use typography mixin - names are secondary */
103
+ color: var(--color-brand);
104
+ margin: 0;
105
+ line-height: 1.2;
106
+ font-weight: 700;
107
+ font-size: calc(var(--card-subtitle-font-size) + 2px);
108
+ }
109
+
110
+ .quotation-card__author-role {
111
+ @include card-meta-text;
112
+ /* COMPACT: Tight line-height */
113
+ margin: 0;
114
+ line-height: 1.2;
115
+ }
116
+
117
+ .quotation-card__date {
118
+ @include card-meta-text;
119
+ /* COMPACT: Tight line-height */
120
+ margin: 0;
121
+ line-height: 1.2;
122
+ }
123
+
124
+ /* Removed redundant 768px media query - continuous responsive design via base system */
125
+
126
+ /* Light theme overrides - text colors only */
127
+ /* Background and border are handled by global enforcement */
128
+ :root[data-theme='day'] {
129
+ .quotation-card {
130
+ &__text {
131
+ color: #4b5563;
132
+ }
133
+
134
+ &__author-name {
135
+ color: #1a1a1a;
136
+ }
137
+
138
+ &__author-role {
139
+ color: #6b7280;
140
+ }
141
+
142
+ &__date {
143
+ color: #9ca3af;
144
+ }
145
+ }
146
+
147
+ .section-card--quotation {
148
+ /* Background and border removed - handled by global enforcement */
149
+ }
150
+ }
151
+
@@ -0,0 +1,385 @@
1
+ /* Base AI section container styling shared across card sections */
2
+ /* =========================================================== */
3
+ /* Consistent spacing across ALL sections - GLOBALLY ENFORCED */
4
+ @import 'design-system';
5
+ .ai-section {
6
+ --section-accent: var(--accent);
7
+ /* GLOBALLY ENFORCED: Use main variables - NO CUSTOM OVERRIDES */
8
+ /* All padding, border, gap, radius come from main variables */
9
+ --section-border-hover: 1px solid var(--card-border-hover);
10
+ --section-background: var(--section-surface, var(--section-background, var(--card-section-bg)));
11
+ --section-background-hover: var(--section-surface-hover, var(--section-background-hover, var(--card-section-bg)));
12
+ --section-backdrop-filter: blur(12px);
13
+ --section-spacing-bottom: clamp(4px, 0.8vw, 12px);
14
+ --section-glow-background: radial-gradient(circle at top right,
15
+ rgba(255, 121, 0, 0.35) 0%,
16
+ transparent 65%);
17
+ --section-glow-opacity-hover: 0.12;
18
+ --section-title-underline-length: clamp(32px, 3vw, 48px);
19
+ --section-title-underline-hover-length: clamp(40px, 4vw, 64px);
20
+ --section-title-underline-height: 3px;
21
+ --section-title-underline-offset: -10px;
22
+ --section-title-hover-color: rgba(255, 180, 100, 1);
23
+ height: 100%;
24
+ margin-bottom: var(--section-spacing-bottom);
25
+ -webkit-font-smoothing: antialiased;
26
+ -moz-osx-font-smoothing: grayscale;
27
+ * {
28
+ -webkit-font-smoothing: antialiased;
29
+ -moz-osx-font-smoothing: grayscale;
30
+ }
31
+
32
+ /* IMPORTANT: Only apply section-wrapper styles if NOT inside masonry-item */
33
+ /* The masonry-item already has the border, padding, background, etc. */
34
+ &:not(.masonry-item .ai-section) {
35
+ @include section-wrapper;
36
+ }
37
+
38
+ /* When inside masonry-item, just use flex layout without border/padding */
39
+ .masonry-item & {
40
+ display: flex;
41
+ flex-direction: column;
42
+ gap: var(--section-card-gap);
43
+ /* Border, padding, background are handled by .masonry-item */
44
+ }
45
+
46
+ /* GLOBALLY ENFORCED: section-wrapper mixin uses main variables */
47
+ /* Additional enforcement via global-enforcement.scss */
48
+ }
49
+
50
+ /* ✅ MAIN SECTION: Lighter background for most sections */
51
+ .ai-section--main {
52
+ --section-background: var(--section-bg-main);
53
+ --section-background-hover: var(--section-bg-main);
54
+ }
55
+
56
+ /* ✅ CONTRAST SECTION: Darker background for emphasis (1-2 max per card) */
57
+ .ai-section--contrast {
58
+ --section-background: var(--section-bg-contrast);
59
+ --section-background-hover: var(--section-bg-contrast);
60
+ }
61
+
62
+ .ai-section__header {
63
+ /* COMPACT: Reduced gap and padding */
64
+ @include section-header(row, calc(var(--card-gap) * 0.75));
65
+ align-items: center;
66
+ /* COMPACT: Reduced padding */
67
+ padding: 0 0 calc(var(--card-gap) * 0.75) 0 !important;
68
+ border-bottom: none !important;
69
+ /* CLEAN: No borders on headers */
70
+ background: transparent;
71
+ margin: 0;
72
+ flex-wrap: wrap;
73
+ gap: calc(var(--card-gap) * 0.75) !important;
74
+ }
75
+
76
+ .ai-section__title {
77
+ @include section-heading-text;
78
+ /* GLOBALLY ENFORCED: Use main variables for typography */
79
+ font-size: var(--section-title-font-size) !important;
80
+ font-weight: var(--section-title-font-weight) !important;
81
+ letter-spacing: var(--section-title-letter-spacing) !important;
82
+ line-height: var(--section-title-line-height) !important;
83
+ color: var(--card-text-primary) !important;
84
+ opacity: 1;
85
+ overflow: hidden;
86
+ text-overflow: ellipsis;
87
+ white-space: nowrap;
88
+ position: relative;
89
+ /* GLOBALLY ENFORCED: Use standard transition */
90
+ transition: color 0.22s cubic-bezier(0.4, 0, 0.2, 1);
91
+ padding: 0 !important;
92
+ margin: 0 0 8px 0 !important;
93
+
94
+ &::before {
95
+ content: '';
96
+ position: absolute;
97
+ left: 0;
98
+ bottom: var(--section-title-underline-offset, -10px);
99
+ width: var(--section-title-underline-length, 42px);
100
+ height: var(--section-title-underline-height, 3px);
101
+ background: var(--section-accent, var(--accent));
102
+ border-radius: 2px;
103
+ transition: width 0.22s ease, opacity 0.22s ease;
104
+ transform-origin: left;
105
+ opacity: 0.6;
106
+ }
107
+
108
+ // Minimalistic hover
109
+ &:hover {
110
+ color: color-mix(in srgb, var(--card-text-primary) 90%, var(--section-accent, var(--accent)) 10%);
111
+
112
+ &::before {
113
+ width: var(--section-title-underline-hover-length, 60px);
114
+ opacity: 1;
115
+ }
116
+ }
117
+ }
118
+
119
+ .ai-section__icon {
120
+ display: none;
121
+ width: var(--icon-size-section); /* ✅ Standardized to 18px */
122
+ height: var(--icon-size-section);
123
+ }
124
+
125
+ .ai-section__details {
126
+ display: flex;
127
+ flex-direction: column;
128
+ gap: calc(var(--card-gap) * 0.75); /* COMPACT: Reduced from full gap */
129
+ }
130
+
131
+ .ai-section__description {
132
+ @include section-description-text;
133
+ color: color-mix(in srgb, var(--foreground) 75%, transparent); /* Slightly darker for better readability */
134
+ letter-spacing: 0.01em;
135
+ line-height: 1.2; /* COMPACT: Tight line-height */
136
+ font-weight: 400; /* Lighter weight for hierarchy */
137
+ overflow: hidden;
138
+ text-overflow: ellipsis;
139
+ display: -webkit-box;
140
+ -webkit-line-clamp: 2;
141
+ -webkit-box-orient: vertical;
142
+ margin-top: calc(var(--card-gap) * 0.5); /* COMPACT: Reduced margin */
143
+ transition: color 0.2s ease;
144
+ }
145
+
146
+ .ai-section:hover .ai-section__description {
147
+ color: color-mix(in srgb, var(--foreground) 80%, transparent);
148
+ }
149
+
150
+ .ai-section__badge {
151
+ @include standard-badge;
152
+ display: none !important;
153
+ padding: var(--tag-padding-y-sm) var(--tag-padding-x);
154
+ border-radius: var(--radius-sm);
155
+ }
156
+
157
+ /* Show badge for sections that need it */
158
+ .ai-section--contact-card .ai-section__badge,
159
+ .ai-section--solutions .ai-section__badge,
160
+ .ai-section--event .ai-section__badge,
161
+ .ai-section--chart .ai-section__badge,
162
+ .ai-section--financials .ai-section__badge {
163
+ display: none !important;
164
+ align-items: center;
165
+ /* COMPACT: Reduced padding for badges */
166
+ padding: calc(var(--tag-padding-y-sm) * 0.75) calc(var(--tag-padding-x) * 0.875);
167
+ background: linear-gradient(135deg,
168
+ color-mix(in srgb, var(--section-accent, var(--accent)) 16%, transparent),
169
+ color-mix(in srgb, var(--section-accent, var(--accent)) 12%, transparent));
170
+ color: color-mix(in srgb, var(--section-accent, var(--accent)) 95%, transparent);
171
+ border: none !important;
172
+ /* CLEAN: No borders on badges - only sections and cards have borders */
173
+ box-shadow: none;
174
+ border-radius: var(--section-card-border-radius);
175
+ font-size: var(--card-meta-font-size);
176
+ font-weight: var(--card-meta-font-weight);
177
+ transition: opacity 0.2s ease, background 0.2s ease;
178
+ line-height: 1.2;
179
+ }
180
+
181
+ // Minimalistic badge hover
182
+ .ai-section:hover .ai-section__badge {
183
+ opacity: 1;
184
+ background: color-mix(in srgb, var(--section-accent, var(--accent)) 18%, transparent);
185
+ }
186
+
187
+ .ai-section__body {
188
+ @include section-body(var(--section-gap-internal));
189
+ padding: 0;
190
+ margin: 0;
191
+ }
192
+
193
+ /* Consistent empty state styling for all sections */
194
+ .ai-section .section-empty {
195
+ display: flex;
196
+ flex-direction: column;
197
+ align-items: center;
198
+ justify-content: center;
199
+ /* COMPACT: Reduced padding */
200
+ padding: calc(var(--card-padding) * 1.5);
201
+ text-align: center;
202
+ color: color-mix(in srgb, var(--foreground) 70%, transparent);
203
+ min-height: auto;
204
+ /* COMPACT: No minimum height */
205
+ border-radius: var(--radius-md);
206
+ background: color-mix(in srgb, var(--foreground) 2%, transparent);
207
+ border: none !important;
208
+ /* CLEAN: No borders on empty states - only sections and cards have borders */
209
+ transition: opacity 0.2s ease, background 0.2s ease;
210
+
211
+ lucide-icon {
212
+ margin-bottom: var(--card-gap);
213
+ opacity: 0.5;
214
+ color: color-mix(in srgb, var(--section-accent, var(--accent)) 60%, transparent);
215
+ transition: all 0.2s ease;
216
+ }
217
+
218
+ p {
219
+ font-size: var(--font-section-description);
220
+ margin: 0;
221
+ font-weight: 500;
222
+ }
223
+
224
+ &:hover {
225
+ background: color-mix(in srgb, var(--foreground) 3%, transparent);
226
+ border-color: color-mix(in srgb, var(--section-accent, var(--accent)) 25%, transparent);
227
+
228
+ // Use opacity change instead of transform
229
+ lucide-icon {
230
+ opacity: 0.7;
231
+ }
232
+ }
233
+ }
234
+
235
+ /* Section type differentiation - subtle visual identities */
236
+ .ai-section--info {
237
+ --section-accent: var(--section-accent-info);
238
+ }
239
+
240
+ .ai-section--analytics {
241
+ --section-accent: var(--section-accent-analytics);
242
+ }
243
+
244
+ .ai-section--financials {
245
+ --section-accent: var(--section-accent-financials);
246
+ }
247
+
248
+ .ai-section--map {
249
+ --section-accent: var(--section-accent-map);
250
+ }
251
+
252
+ .ai-section--network-card {
253
+ --section-accent: var(--section-accent-network);
254
+ }
255
+
256
+ .ai-section--contact-card {
257
+ --section-accent: var(--section-accent-contact);
258
+ }
259
+
260
+ .ai-section--product {
261
+ --section-accent: var(--section-accent-product);
262
+ }
263
+
264
+ .ai-section--solutions {
265
+ --section-accent: var(--section-accent-solutions);
266
+ }
267
+
268
+ .ai-section--overview {
269
+ --section-accent: var(--section-accent-overview);
270
+ }
271
+
272
+ .ai-section--list,
273
+ .ai-section--info-list {
274
+ --section-accent: var(--section-accent-list);
275
+ }
276
+
277
+ .ai-section--event {
278
+ --section-accent: var(--section-accent-event);
279
+ }
280
+
281
+ .ai-section--chart {
282
+ --section-accent: var(--section-accent-chart, var(--accent));
283
+ }
284
+
285
+ .ai-section--text-reference {
286
+ --section-accent: var(--section-accent-reference, var(--accent));
287
+ }
288
+
289
+ .ai-section--quotation {
290
+ --section-accent: var(--section-accent-quotation, var(--accent));
291
+ }
292
+
293
+ /* Fullscreen mode - consistent padding using main variables */
294
+ .ai-card-surface--fullscreen {
295
+ .ai-section {
296
+ --section-padding: var(--card-padding); /* COMPACT: Use main variable */
297
+ --section-spacing-bottom: calc(var(--card-gap) * 1.25);
298
+ --section-gap: var(--section-card-gap); /* COMPACT: Use main variable */
299
+ --section-gap-internal: var(--card-gap); /* COMPACT: Use main variable */
300
+ --section-title-underline-length: 32px;
301
+ --section-title-underline-hover-length: 40px;
302
+ --section-title-underline-height: 2px;
303
+ --section-title-underline-offset: -8px;
304
+ --section-box-shadow: none !important;
305
+ --section-box-shadow-hover: none !important;
306
+ }
307
+
308
+ /* Remove box-shadow from masonry items (sections) in fullscreen */
309
+ .masonry-item {
310
+ box-shadow: none !important;
311
+
312
+ &:hover {
313
+ box-shadow: none !important;
314
+ }
315
+ }
316
+
317
+ .ai-section__header {
318
+ padding: 0 0 calc(var(--card-gap) * 0.75) 0 !important; /* COMPACT: Use main variable */
319
+ gap: calc(var(--card-gap) * 0.75) !important; /* COMPACT: Use main variable */
320
+ }
321
+
322
+ .ai-section__title {
323
+ font-size: var(--card-title-font-size);
324
+ }
325
+
326
+ .ai-section__body {
327
+ gap: var(--card-gap);
328
+ }
329
+
330
+ .ai-section__description {
331
+ font-size: var(--card-meta-font-size);
332
+ margin-top: 4px;
333
+ }
334
+ }
335
+
336
+ /* Light theme overrides for better visibility */
337
+ :root[data-theme='day'] {
338
+ .ai-section {
339
+ --section-background: rgba(255, 255, 255, 0.8);
340
+ --section-background-hover: rgba(255, 255, 255, 0.95);
341
+ --section-border: 1px solid rgba(200, 200, 200, 0.4);
342
+ --section-border-hover: 1px solid rgba(255, 121, 0, 0.3);
343
+ --section-box-shadow:
344
+ 0 1px 3px rgba(0, 0, 0, 0.06),
345
+ 0 1px 2px rgba(0, 0, 0, 0.04),
346
+ inset 0 1px 0 rgba(255, 121, 0, 0.04);
347
+ --section-box-shadow-hover:
348
+ 0 4px 12px rgba(0, 0, 0, 0.08),
349
+ 0 2px 4px rgba(255, 121, 0, 0.08),
350
+ 0 0 0 1px rgba(255, 121, 0, 0.2),
351
+ inset 0 1px 0 rgba(255, 121, 0, 0.08);
352
+ }
353
+
354
+ .ai-section__title {
355
+ color: #1a1a1a;
356
+ text-shadow: none;
357
+
358
+ &::before {
359
+ background: rgba(255, 121, 0, 0.8);
360
+ }
361
+
362
+ &:hover {
363
+ color: var(--primary);
364
+ }
365
+ }
366
+
367
+ .ai-section__description {
368
+ color: #4b5563;
369
+ }
370
+
371
+ .ai-section:hover .ai-section__description {
372
+ color: #374151;
373
+ }
374
+
375
+ .section-empty {
376
+ background: rgba(250, 250, 250, 0.8);
377
+ border-color: rgba(200, 200, 200, 0.4);
378
+ color: #6b7280;
379
+ }
380
+
381
+ .section-empty:hover {
382
+ background: rgba(250, 250, 250, 1);
383
+ border-color: rgba(255, 121, 0, 0.3);
384
+ }
385
+ }