osi-cards-lib 1.5.30 → 1.5.32

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 (88) hide show
  1. package/README.md +58 -20
  2. package/package.json +13 -25
  3. package/postcss.config.js +81 -0
  4. package/section-registry.json +3864 -0
  5. package/section-registry.schema.json +264 -0
  6. package/fesm2022/osi-cards-lib.mjs +0 -31878
  7. package/fesm2022/osi-cards-lib.mjs.map +0 -1
  8. package/index.d.ts +0 -11522
  9. package/scripts/setup-angular-styles.js +0 -169
  10. package/styles/_components.scss +0 -38
  11. package/styles/_index.scss +0 -25
  12. package/styles/_osi-cards-mixins.scss +0 -459
  13. package/styles/_osi-cards-tokens.scss +0 -333
  14. package/styles/_styles-scoped.scss +0 -81
  15. package/styles/_styles.scss +0 -26
  16. package/styles/bundles/_ai-card.scss +0 -245
  17. package/styles/bundles/_all.scss +0 -68
  18. package/styles/bundles/_base.scss +0 -60
  19. package/styles/bundles/_card-skeleton.scss +0 -290
  20. package/styles/bundles/_index.scss +0 -25
  21. package/styles/bundles/_sections.scss +0 -48
  22. package/styles/bundles/_tokens-only.scss +0 -139
  23. package/styles/components/_ai-card-renderer.scss +0 -104
  24. package/styles/components/_badges.scss +0 -317
  25. package/styles/components/_card-actions.scss +0 -169
  26. package/styles/components/_card-footer.scss +0 -47
  27. package/styles/components/_component-styles.scss +0 -205
  28. package/styles/components/_empty-state.scss +0 -630
  29. package/styles/components/_hero-card.scss +0 -422
  30. package/styles/components/_image-fallback.scss +0 -28
  31. package/styles/components/_streaming-effects.scss +0 -518
  32. package/styles/components/cards/_ai-card.scss +0 -718
  33. package/styles/components/sections/_all-sections.generated.scss +0 -41
  34. package/styles/components/sections/_all-sections.scss +0 -1086
  35. package/styles/components/sections/_balanced-compact-system.scss +0 -186
  36. package/styles/components/sections/_compact-mixins.scss +0 -180
  37. package/styles/components/sections/_component-mixins.scss +0 -454
  38. package/styles/components/sections/_design-system.scss +0 -477
  39. package/styles/components/sections/_design-tokens.scss +0 -308
  40. package/styles/components/sections/_enhanced-design-variables.scss +0 -147
  41. package/styles/components/sections/_master-compact-system.scss +0 -302
  42. package/styles/components/sections/_master-dense-system.scss +0 -239
  43. package/styles/components/sections/_minimalistic-design.scss +0 -268
  44. package/styles/components/sections/_modern-effects.scss +0 -392
  45. package/styles/components/sections/_modern-sections.scss +0 -351
  46. package/styles/components/sections/_perfect-system.scss +0 -204
  47. package/styles/components/sections/_section-animations.scss +0 -331
  48. package/styles/components/sections/_section-shell.scss +0 -337
  49. package/styles/components/sections/_section-types.generated.scss +0 -30
  50. package/styles/components/sections/_sections-all.scss +0 -26
  51. package/styles/components/sections/_sections-base.scss +0 -334
  52. package/styles/components/sections/_typography-system.scss +0 -327
  53. package/styles/components/sections/_ultra-compact-tokens.scss +0 -375
  54. package/styles/components/sections/_unified-section-style.scss +0 -157
  55. package/styles/components/sections/_utility-classes.scss +0 -567
  56. package/styles/components/sections/_visual-effects-library.scss +0 -374
  57. package/styles/core/_animations.scss +0 -1498
  58. package/styles/core/_bootstrap-reset.scss +0 -445
  59. package/styles/core/_color-helpers.scss +0 -46
  60. package/styles/core/_global-unified.scss +0 -118
  61. package/styles/core/_global.scss +0 -73
  62. package/styles/core/_mixins.scss +0 -491
  63. package/styles/core/_surface-layers.scss +0 -76
  64. package/styles/core/_utilities.scss +0 -326
  65. package/styles/core/_variables-unified.scss +0 -57
  66. package/styles/core/_variables.scss +0 -36
  67. package/styles/core/variables/_colors-source.scss +0 -34
  68. package/styles/core/variables/_colors-unified.scss +0 -26
  69. package/styles/core/variables/_colors.scss +0 -21
  70. package/styles/critical.scss +0 -353
  71. package/styles/design-system/_compact-theme.scss +0 -159
  72. package/styles/design-system/_section-base.scss +0 -426
  73. package/styles/design-system/_tokens.scss +0 -237
  74. package/styles/design-system/_unified-sections.scss +0 -215
  75. package/styles/layout/_feature-grid.scss +0 -322
  76. package/styles/layout/_masonry.scss +0 -734
  77. package/styles/layout/_tilt.scss +0 -244
  78. package/styles/micro-interactions.scss +0 -583
  79. package/styles/mixins/_section-mixins.scss +0 -280
  80. package/styles/non-critical.scss +0 -643
  81. package/styles/reset/_framework-reset.scss +0 -457
  82. package/styles/reset/_index.scss +0 -14
  83. package/styles/reset/_shadow-reset.scss +0 -383
  84. package/styles/responsive.scss +0 -326
  85. package/styles/themes.scss +0 -573
  86. package/styles/tokens/_index.scss +0 -92
  87. package/styles/tokens/_master.scss +0 -1404
  88. package/styles/tokens/_section-tokens.generated.scss +0 -140
@@ -1,1086 +0,0 @@
1
- // =====================================================================
2
- // ALL SECTIONS - Unified Styling Using Master Tokens
3
- // =====================================================================
4
- //
5
- // All sections use unified mixins from modern-sections.scss.
6
- // Consistent, minimalistic design across all section types.
7
- //
8
- // =====================================================================
9
-
10
- @use "../../tokens/master" as *;
11
- @import "sections-base";
12
- @import "design-system";
13
- @import "modern-sections";
14
-
15
- // =====================================================================
16
- // BASE CLASSES
17
- // =====================================================================
18
-
19
- .section-card,
20
- .unified-card {
21
- @include unified-card;
22
- @include stream-animation;
23
- }
24
-
25
- // =====================================================================
26
- // ANALYTICS SECTION
27
- // =====================================================================
28
-
29
- .analytics-metrics {
30
- @include grid(160px);
31
- }
32
-
33
- .analytics-metric {
34
- @include unified-card;
35
- @include stream-animation;
36
- }
37
-
38
- .analytics-metric__label {
39
- @include type-label;
40
- }
41
-
42
- .analytics-metric__value {
43
- @include type-value;
44
- display: flex;
45
- align-items: baseline;
46
- gap: var(--space-2);
47
- flex-wrap: wrap;
48
- }
49
-
50
- .analytics-metric__change {
51
- @include trend;
52
- }
53
-
54
- .analytics-metric__progress {
55
- @include progress-track;
56
- }
57
-
58
- .analytics-metric__progress-bar {
59
- @include progress-bar;
60
- }
61
-
62
- .analytics-empty {
63
- @include empty-state;
64
- }
65
-
66
- // =====================================================================
67
- // FINANCIALS SECTION
68
- // =====================================================================
69
-
70
- .financials-grid {
71
- @include grid(160px);
72
- }
73
-
74
- .financial-card {
75
- @include unified-card;
76
- @include stream-animation;
77
- }
78
-
79
- .financial-card__label {
80
- @include type-label;
81
- }
82
-
83
- .financial-card__value {
84
- @include type-value-large;
85
- display: flex;
86
- align-items: baseline;
87
- gap: var(--space-2);
88
- }
89
-
90
- .financial-card__change {
91
- @include trend;
92
- }
93
-
94
- .financial-card__icon {
95
- @include icon-container(var(--icon-md));
96
- }
97
-
98
- .financials-empty {
99
- @include empty-state;
100
- }
101
-
102
- // =====================================================================
103
- // OVERVIEW SECTION
104
- // =====================================================================
105
-
106
- .overview-grid {
107
- @include stack(var(--gap-xs));
108
- }
109
-
110
- .overview-card {
111
- @include unified-card;
112
- @include stream-animation;
113
- flex-direction: row;
114
- align-items: center;
115
- justify-content: space-between;
116
- padding: var(--space-2) var(--space-3);
117
- }
118
-
119
- .overview-card__label {
120
- @include type-label;
121
- margin-bottom: 0;
122
- }
123
-
124
- .overview-card__value {
125
- @include type-title;
126
- text-align: right;
127
- }
128
-
129
- .overview-empty {
130
- @include empty-state;
131
- }
132
-
133
- // =====================================================================
134
- // INFO SECTION
135
- // =====================================================================
136
-
137
- .info-matrix {
138
- @include stack(var(--gap-xs));
139
- }
140
-
141
- .info-row {
142
- @include unified-card;
143
- @include stream-animation;
144
- flex-direction: row;
145
- align-items: center;
146
- justify-content: space-between;
147
- padding: var(--space-2) var(--space-3);
148
- gap: var(--space-4);
149
- }
150
-
151
- .info-row__label {
152
- @include type-label;
153
- margin-bottom: 0;
154
- min-width: 80px;
155
- }
156
-
157
- .info-row__value {
158
- @include type-subtitle;
159
- text-align: right;
160
- flex: 1;
161
- color: var(--foreground);
162
- }
163
-
164
- .info-empty {
165
- @include empty-state;
166
- }
167
-
168
- // =====================================================================
169
- // NEWS SECTION
170
- // =====================================================================
171
-
172
- .news-feed {
173
- @include stack(var(--gap-sm));
174
- }
175
-
176
- .news-item {
177
- @include unified-card;
178
- @include stream-animation;
179
- }
180
-
181
- .news-item__header {
182
- @include row(var(--space-2));
183
- justify-content: space-between;
184
- margin-bottom: var(--space-1);
185
- }
186
-
187
- .news-item__tag {
188
- @include badge;
189
- }
190
-
191
- .news-item__date {
192
- @include type-meta;
193
- }
194
-
195
- .news-item__title {
196
- @include type-title;
197
- margin: 0 0 var(--space-1) 0;
198
- }
199
-
200
- .news-item__summary {
201
- @include type-subtitle;
202
- display: -webkit-box;
203
- -webkit-line-clamp: 2;
204
- -webkit-box-orient: vertical;
205
- overflow: hidden;
206
- margin: 0;
207
- }
208
-
209
- .news-empty {
210
- @include empty-state;
211
- }
212
-
213
- // =====================================================================
214
- // CONTACT SECTION
215
- // =====================================================================
216
-
217
- .contact-grid {
218
- @include grid(200px);
219
- }
220
-
221
- .contact-card {
222
- @include unified-card;
223
- @include stream-animation;
224
- flex-direction: row;
225
- align-items: flex-start;
226
- gap: var(--space-3);
227
- }
228
-
229
- .contact-card__avatar {
230
- @include avatar(36px);
231
- }
232
-
233
- .contact-card__initials {
234
- font-size: 0.75rem;
235
- font-weight: 600;
236
- color: var(--accent);
237
- }
238
-
239
- .contact-card__info {
240
- @include stack(var(--space-1));
241
- flex: 1;
242
- min-width: 0;
243
- }
244
-
245
- .contact-card__name {
246
- @include type-title;
247
- }
248
-
249
- .contact-card__role {
250
- @include type-subtitle;
251
- }
252
-
253
- .contact-card__email,
254
- .contact-card__phone {
255
- @include type-meta;
256
- display: inline-flex;
257
- align-items: center;
258
- gap: var(--space-1);
259
- text-decoration: none;
260
-
261
- lucide-icon,
262
- svg {
263
- width: var(--icon-xs);
264
- height: var(--icon-xs);
265
- opacity: 0.6;
266
- }
267
-
268
- &:hover {
269
- color: var(--accent);
270
- }
271
- }
272
-
273
- .contact-empty {
274
- @include empty-state;
275
- }
276
-
277
- // =====================================================================
278
- // EVENT SECTION
279
- // =====================================================================
280
-
281
- .event-grid {
282
- @include stack(var(--gap-sm));
283
- }
284
-
285
- .event-card {
286
- @include unified-card;
287
- @include stream-animation;
288
- flex-direction: row;
289
- align-items: flex-start;
290
- gap: var(--space-3);
291
- }
292
-
293
- .event-card__icon {
294
- @include icon-bg(var(--icon-xl));
295
- }
296
-
297
- .event-card__content {
298
- @include stack(var(--space-1));
299
- flex: 1;
300
- min-width: 0;
301
- }
302
-
303
- .event-card__title {
304
- @include type-title;
305
- }
306
-
307
- .event-card__datetime {
308
- @include type-meta;
309
- @include row(var(--space-3));
310
- flex-wrap: wrap;
311
-
312
- lucide-icon,
313
- svg {
314
- width: var(--icon-xs);
315
- height: var(--icon-xs);
316
- opacity: 0.5;
317
- }
318
- }
319
-
320
- .event-card__date,
321
- .event-card__time,
322
- .event-card__location {
323
- display: inline-flex;
324
- align-items: center;
325
- gap: var(--space-1);
326
- }
327
-
328
- .event-card__status {
329
- @include badge;
330
- @include badge-status;
331
- }
332
-
333
- .event-empty {
334
- @include empty-state;
335
- }
336
-
337
- // =====================================================================
338
- // QUOTATION SECTION
339
- // =====================================================================
340
-
341
- .quotation-grid {
342
- @include grid(240px);
343
- }
344
-
345
- .quotation-card {
346
- @include unified-card;
347
- @include stream-animation;
348
- }
349
-
350
- .quotation-card__icon {
351
- display: none;
352
- }
353
-
354
- .quotation-card__text {
355
- @include type-subtitle;
356
- font-style: italic;
357
- line-height: 1.6;
358
- padding-left: var(--space-3);
359
- border-left: 2px solid var(--accent);
360
- color: var(--foreground);
361
- }
362
-
363
- .quotation-card__author {
364
- @include stack(var(--space-0));
365
- margin-top: var(--space-3);
366
- }
367
-
368
- .quotation-card__author-name {
369
- @include type-title;
370
- color: var(--accent);
371
- }
372
-
373
- .quotation-card__author-role {
374
- @include type-meta;
375
- }
376
-
377
- .quotation-empty {
378
- @include empty-state;
379
- }
380
-
381
- // =====================================================================
382
- // TEXT REFERENCE SECTION
383
- // =====================================================================
384
-
385
- .reference-grid {
386
- @include stack(var(--gap-xs));
387
- }
388
-
389
- .reference-card {
390
- @include unified-card;
391
- @include stream-animation;
392
- }
393
-
394
- .reference-card__header {
395
- @include row(var(--space-2));
396
- justify-content: space-between;
397
- }
398
-
399
- .reference-card__title {
400
- @include type-title;
401
- flex: 1;
402
- }
403
-
404
- .reference-card__category {
405
- @include badge;
406
- }
407
-
408
- .reference-card__meta {
409
- @include row(var(--space-4));
410
- flex-wrap: wrap;
411
- margin-top: var(--space-1);
412
- }
413
-
414
- .reference-card__source,
415
- .reference-card__date {
416
- @include type-meta;
417
- display: inline-flex;
418
- align-items: center;
419
- gap: var(--space-1);
420
-
421
- lucide-icon,
422
- svg {
423
- width: var(--icon-xs);
424
- height: var(--icon-xs);
425
- opacity: 0.5;
426
- }
427
- }
428
-
429
- .reference-empty {
430
- @include empty-state;
431
- }
432
-
433
- // =====================================================================
434
- // NETWORK SECTION
435
- // =====================================================================
436
-
437
- .network-grid {
438
- @include grid(180px);
439
- }
440
-
441
- .network-card {
442
- @include unified-card;
443
- @include stream-animation;
444
- }
445
-
446
- .network-card__icon {
447
- @include icon-container(var(--icon-lg));
448
- margin-bottom: var(--space-1);
449
- }
450
-
451
- .network-card__name {
452
- @include type-title;
453
- margin: 0 0 var(--space-1) 0;
454
- }
455
-
456
- .network-card__type {
457
- @include badge;
458
- margin-bottom: var(--space-1);
459
- }
460
-
461
- .network-card__description {
462
- @include type-subtitle;
463
- margin: 0;
464
- }
465
-
466
- .network-empty {
467
- @include empty-state;
468
- }
469
-
470
- // =====================================================================
471
- // PRODUCT SECTION
472
- // =====================================================================
473
-
474
- .product-grid {
475
- @include grid(200px);
476
- }
477
-
478
- .product-card {
479
- @include unified-card;
480
- @include stream-animation;
481
- }
482
-
483
- .product-card__header {
484
- @include row(var(--space-2));
485
- justify-content: space-between;
486
- margin-bottom: var(--space-1);
487
- }
488
-
489
- .product-card__name {
490
- @include type-title;
491
- flex: 1;
492
- }
493
-
494
- .product-card__category {
495
- @include badge;
496
- }
497
-
498
- .product-card__description {
499
- @include type-subtitle;
500
- margin: 0 0 var(--space-3) 0;
501
- }
502
-
503
- .product-card__features {
504
- @include stack(var(--space-1));
505
- }
506
-
507
- .product-card__feature {
508
- @include type-meta;
509
- display: flex;
510
- align-items: center;
511
- gap: var(--space-2);
512
-
513
- lucide-icon,
514
- svg {
515
- width: var(--icon-xs);
516
- height: var(--icon-xs);
517
- color: var(--status-success);
518
- }
519
- }
520
-
521
- .product-empty {
522
- @include empty-state;
523
- }
524
-
525
- // =====================================================================
526
- // SOLUTIONS SECTION
527
- // =====================================================================
528
-
529
- .solutions-grid {
530
- @include grid(200px);
531
- }
532
-
533
- .solution-card {
534
- @include unified-card;
535
- @include stream-animation;
536
- }
537
-
538
- .solution-card__icon {
539
- @include icon-container(var(--icon-xl));
540
- margin-bottom: var(--space-2);
541
- }
542
-
543
- .solution-card__name {
544
- @include type-title;
545
- margin: 0 0 var(--space-1) 0;
546
- }
547
-
548
- .solution-card__description {
549
- @include type-subtitle;
550
- margin: 0;
551
- }
552
-
553
- .solution-card__benefits {
554
- @include stack(var(--space-1));
555
- margin-top: var(--space-3);
556
- padding-top: var(--space-3);
557
- border-top: 1px solid var(--border);
558
- }
559
-
560
- .solution-card__benefit {
561
- @include type-meta;
562
- display: flex;
563
- align-items: center;
564
- gap: var(--space-2);
565
-
566
- lucide-icon,
567
- svg {
568
- width: var(--icon-xs);
569
- height: var(--icon-xs);
570
- color: var(--accent);
571
- }
572
- }
573
-
574
- .solutions-empty {
575
- @include empty-state;
576
- }
577
-
578
- // =====================================================================
579
- // TIMELINE SECTION
580
- // =====================================================================
581
-
582
- .timeline-grid {
583
- @include stack(0);
584
- position: relative;
585
- padding-left: var(--space-5);
586
-
587
- &::before {
588
- content: "";
589
- position: absolute;
590
- left: var(--space-1);
591
- top: var(--space-3);
592
- bottom: var(--space-3);
593
- width: 1px;
594
- background: var(--accent);
595
- opacity: 0.3;
596
- }
597
- }
598
-
599
- .timeline-item {
600
- @include unified-card;
601
- @include stream-animation;
602
- position: relative;
603
-
604
- &::before {
605
- content: "";
606
- position: absolute;
607
- left: calc(-1 * var(--space-5) + var(--space-1) - 3px);
608
- top: var(--space-3);
609
- width: 7px;
610
- height: 7px;
611
- background: var(--accent);
612
- border-radius: var(--radius-full);
613
- z-index: 1;
614
- }
615
- }
616
-
617
- .timeline-item__date {
618
- @include badge;
619
- margin-bottom: var(--space-1);
620
- }
621
-
622
- .timeline-item__title {
623
- @include type-title;
624
- margin: 0 0 var(--space-1) 0;
625
- }
626
-
627
- .timeline-item__description {
628
- @include type-subtitle;
629
- margin: 0;
630
- }
631
-
632
- .timeline-empty {
633
- @include empty-state;
634
- }
635
-
636
- // =====================================================================
637
- // BRAND COLORS SECTION
638
- // =====================================================================
639
-
640
- .brand-colors-grid {
641
- @include grid(100px);
642
- }
643
-
644
- .brand-color-tile {
645
- @include unified-card;
646
- @include stream-animation;
647
- padding: 0;
648
- overflow: hidden;
649
- }
650
-
651
- .brand-color-tile__swatch {
652
- width: 100%;
653
- height: 48px;
654
- }
655
-
656
- .brand-color-tile__info {
657
- padding: var(--space-2);
658
- }
659
-
660
- .brand-color-tile__name {
661
- @include type-title;
662
- font-size: var(--card-subtitle-font-size);
663
- margin: 0 0 var(--space-0) 0;
664
- }
665
-
666
- .brand-color-tile__code {
667
- @include type-meta;
668
- font-family: "SF Mono", Monaco, "Consolas", monospace;
669
- }
670
-
671
- .brand-colors-empty {
672
- @include empty-state;
673
- }
674
-
675
- // =====================================================================
676
- // SOCIAL MEDIA SECTION
677
- // =====================================================================
678
-
679
- .social-feed {
680
- @include grid(160px);
681
- }
682
-
683
- .social-post {
684
- @include unified-card;
685
- @include stream-animation;
686
- }
687
-
688
- .social-post__header {
689
- @include row(var(--space-2));
690
- margin-bottom: var(--space-2);
691
- }
692
-
693
- .social-post__platform {
694
- @include badge;
695
- text-transform: capitalize;
696
- }
697
-
698
- .social-post__handle {
699
- @include type-title;
700
- }
701
-
702
- .social-post__followers {
703
- @include type-value;
704
- margin-bottom: var(--space-1);
705
- }
706
-
707
- .social-post__label {
708
- @include type-label;
709
- }
710
-
711
- .social-post__content {
712
- @include type-subtitle;
713
- margin: var(--space-2) 0 0 0;
714
- }
715
-
716
- .social-media-empty {
717
- @include empty-state;
718
- }
719
-
720
- // =====================================================================
721
- // GALLERY SECTION
722
- // =====================================================================
723
-
724
- .gallery-grid {
725
- @include grid(120px);
726
- }
727
-
728
- .gallery-item {
729
- @include unified-card;
730
- @include stream-animation;
731
- padding: 0;
732
- overflow: hidden;
733
- aspect-ratio: 4/3;
734
- }
735
-
736
- .gallery-item__image {
737
- width: 100%;
738
- height: 100%;
739
- object-fit: cover;
740
- }
741
-
742
- .gallery-item__caption {
743
- @include type-meta;
744
- position: absolute;
745
- bottom: 0;
746
- left: 0;
747
- right: 0;
748
- padding: var(--space-2);
749
- background: linear-gradient(transparent, rgba(0, 0, 0, 0.7));
750
- color: white;
751
- }
752
-
753
- .gallery-empty {
754
- @include empty-state;
755
- }
756
-
757
- // =====================================================================
758
- // VIDEO SECTION
759
- // =====================================================================
760
-
761
- .video-grid {
762
- @include grid(180px);
763
- }
764
-
765
- .video-card {
766
- @include unified-card;
767
- @include stream-animation;
768
- padding: 0;
769
- overflow: hidden;
770
- }
771
-
772
- .video-card__thumbnail {
773
- width: 100%;
774
- height: 90px;
775
- background: #{$brand-color-10};
776
- display: flex;
777
- align-items: center;
778
- justify-content: center;
779
- position: relative;
780
-
781
- img {
782
- width: 100%;
783
- height: 100%;
784
- object-fit: cover;
785
- }
786
-
787
- &::after {
788
- content: "▶";
789
- position: absolute;
790
- width: 28px;
791
- height: 28px;
792
- background: rgba(0, 0, 0, 0.6);
793
- border-radius: var(--radius-full);
794
- display: flex;
795
- align-items: center;
796
- justify-content: center;
797
- font-size: 0.7rem;
798
- color: white;
799
- padding-left: 2px;
800
- }
801
- }
802
-
803
- .video-card__info {
804
- padding: var(--space-2) var(--space-3);
805
- }
806
-
807
- .video-card__title {
808
- @include type-title;
809
- margin: 0 0 var(--space-1) 0;
810
- }
811
-
812
- .video-card__meta {
813
- @include row(var(--space-3));
814
- }
815
-
816
- .video-card__duration,
817
- .video-card__views {
818
- @include type-meta;
819
- display: inline-flex;
820
- align-items: center;
821
- gap: var(--space-1);
822
-
823
- lucide-icon,
824
- svg {
825
- width: var(--icon-xs);
826
- height: var(--icon-xs);
827
- opacity: 0.5;
828
- }
829
- }
830
-
831
- .video-empty {
832
- @include empty-state;
833
- }
834
-
835
- // =====================================================================
836
- // CHART SECTION
837
- // =====================================================================
838
-
839
- .chart-container {
840
- @include unified-card;
841
- min-height: 180px;
842
-
843
- canvas {
844
- max-width: 100%;
845
- height: auto !important;
846
- }
847
- }
848
-
849
- .chart-header {
850
- @include row(var(--space-2));
851
- justify-content: space-between;
852
- margin-bottom: var(--space-3);
853
- }
854
-
855
- .chart-title {
856
- @include type-title;
857
- }
858
-
859
- .chart-legend {
860
- @include row(var(--space-4));
861
- }
862
-
863
- .chart-legend__item {
864
- @include type-meta;
865
- display: inline-flex;
866
- align-items: center;
867
- gap: var(--space-1);
868
- }
869
-
870
- .chart-legend__color {
871
- width: 8px;
872
- height: 8px;
873
- border-radius: var(--radius-xs);
874
- }
875
-
876
- .chart-empty {
877
- @include empty-state;
878
- }
879
-
880
- // =====================================================================
881
- // LIST SECTION
882
- // =====================================================================
883
-
884
- .list-grid {
885
- @include stack(var(--gap-xs));
886
- }
887
-
888
- .list-card {
889
- @include unified-card;
890
- @include stream-animation;
891
- flex-direction: row;
892
- align-items: center;
893
- gap: var(--space-3);
894
- padding: var(--space-2) var(--space-3);
895
- }
896
-
897
- .list-card__icon {
898
- @include icon-container(var(--icon-lg));
899
- }
900
-
901
- .list-card__content {
902
- @include stack(var(--space-0));
903
- flex: 1;
904
- min-width: 0;
905
- }
906
-
907
- .list-card__title {
908
- @include type-title;
909
- }
910
-
911
- .list-card__description {
912
- @include type-subtitle;
913
- }
914
-
915
- .list-card__badge {
916
- @include badge;
917
- @include badge-status;
918
- }
919
-
920
- .list-empty {
921
- @include empty-state;
922
- }
923
-
924
- // =====================================================================
925
- // MAP SECTION
926
- // =====================================================================
927
-
928
- .map-container {
929
- @include unified-card;
930
- padding: var(--space-5);
931
- min-height: 120px;
932
- display: flex;
933
- flex-direction: column;
934
- align-items: center;
935
- justify-content: center;
936
- gap: var(--space-3);
937
- text-align: center;
938
- }
939
-
940
- .map-grid {
941
- @include grid(160px);
942
- }
943
-
944
- .map-card {
945
- @include unified-card;
946
- @include stream-animation;
947
- }
948
-
949
- .map-card__icon {
950
- @include icon-container(var(--icon-lg));
951
- margin-bottom: var(--space-2);
952
- }
953
-
954
- .map-card__name {
955
- @include type-title;
956
- margin: 0 0 var(--space-1) 0;
957
- }
958
-
959
- .map-card__address {
960
- @include type-subtitle;
961
- margin: 0 0 var(--space-1) 0;
962
- }
963
-
964
- .map-card__coordinates {
965
- @include type-meta;
966
- font-family: "SF Mono", Monaco, "Consolas", monospace;
967
- }
968
-
969
- .map-location {
970
- @include type-title;
971
- }
972
-
973
- .map-placeholder {
974
- @include type-meta;
975
- }
976
-
977
- .map-empty {
978
- @include empty-state;
979
- }
980
-
981
- // =====================================================================
982
- // FAQ SECTION
983
- // =====================================================================
984
-
985
- .faq-grid {
986
- @include stack(var(--gap-xs));
987
- }
988
-
989
- .faq-card {
990
- @include unified-card;
991
- @include stream-animation;
992
- }
993
-
994
- .faq-card__question {
995
- @include type-title;
996
- margin: 0 0 var(--space-2) 0;
997
- }
998
-
999
- .faq-card__answer {
1000
- @include type-subtitle;
1001
- margin: 0;
1002
- padding-left: var(--space-3);
1003
- border-left: 2px solid var(--accent);
1004
- opacity: 0.9;
1005
- }
1006
-
1007
- .faq-empty {
1008
- @include empty-state;
1009
- }
1010
-
1011
- // =====================================================================
1012
- // PRICING SECTION
1013
- // =====================================================================
1014
-
1015
- .pricing-grid {
1016
- @include grid(180px);
1017
- }
1018
-
1019
- .pricing-card {
1020
- @include unified-card;
1021
- @include stream-animation;
1022
- text-align: center;
1023
- }
1024
-
1025
- .pricing-card__name {
1026
- @include type-title;
1027
- margin: 0 0 var(--space-3) 0;
1028
- }
1029
-
1030
- .pricing-card__price {
1031
- @include type-value-large;
1032
- color: var(--accent);
1033
- margin-bottom: var(--space-1);
1034
- }
1035
-
1036
- .pricing-card__period {
1037
- @include type-meta;
1038
- margin-bottom: var(--space-4);
1039
- }
1040
-
1041
- .pricing-card__features {
1042
- @include stack(var(--space-2));
1043
- text-align: left;
1044
- padding-top: var(--space-4);
1045
- border-top: 1px solid var(--border);
1046
- }
1047
-
1048
- .pricing-card__feature {
1049
- @include type-meta;
1050
- display: flex;
1051
- align-items: center;
1052
- gap: var(--space-2);
1053
-
1054
- lucide-icon,
1055
- svg {
1056
- width: var(--icon-xs);
1057
- height: var(--icon-xs);
1058
- color: var(--status-success);
1059
- }
1060
- }
1061
-
1062
- .pricing-empty {
1063
- @include empty-state;
1064
- }
1065
-
1066
- // =====================================================================
1067
- // FALLBACK SECTION
1068
- // =====================================================================
1069
-
1070
- .fallback-empty {
1071
- @include empty-state;
1072
- }
1073
-
1074
- .fallback-message {
1075
- @include type-subtitle;
1076
- margin: 0;
1077
- }
1078
-
1079
- // =====================================================================
1080
- // SECTION BODY
1081
- // =====================================================================
1082
-
1083
- .ai-section__body {
1084
- width: 100%;
1085
- box-sizing: border-box;
1086
- }