@syuttechnologies/layout 1.0.21 → 1.0.22

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.
@@ -211,1964 +211,1964 @@ export const EnterpriseLayout = ({ config, componentRegistry, children, router =
211
211
  const footerHeight = footerVisible && config.layout.enableFooter
212
212
  ? config.layout.footerHeight
213
213
  : "0px";
214
- return `
215
- * {
216
- margin: 0;
217
- padding: 0;
218
- box-sizing: border-box;
219
- }
220
-
221
- :root {
222
- --primary: ${colors.primary};
223
- --secondary: ${colors.secondary};
224
- --success: ${colors.success};
225
- --warning: ${colors.warning};
226
- --danger: ${colors.danger};
227
- --info: ${colors.info};
228
-
229
- --bg-primary: #ffffff;
230
- --bg-secondary: #f8fafc;
231
- --bg-gradient: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
232
- --text-primary: #1e293b;
233
- --text-secondary: #64748b;
234
- --text-muted: #94a3b8;
235
- --border-color: rgba(226, 232, 240, 0.5);
236
- --glass-bg: rgba(255, 255, 255, 0.95);
237
- --shadow: 0 8px 12px -2px rgba(0, 0, 0, 0.1);
238
- --accent-primary: ${colors.primary};
239
- --accent-gradient: linear-gradient(135deg, ${colors.primary}, ${colors.info});
240
-
241
- --header-height: ${config.layout.headerHeight};
242
- --sidebar-width: ${config.layout.sidebarWidth};
243
- --sidebar-collapsed-width: ${config.layout.sidebarCollapsedWidth};
244
- --footer-height: ${footerHeight};
245
- --tab-bar-height: ${config.layout.tabBarHeight};
246
- }
247
-
248
- [data-theme="dark"] {
249
- --bg-primary: #0f172a;
250
- --bg-secondary: #1e293b;
251
- --bg-gradient: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
252
- --text-primary: #f1f5f9;
253
- --text-secondary: #cbd5e1;
254
- --text-muted: #64748b;
255
- --border-color: rgba(71, 85, 105, 0.5);
256
- --glass-bg: rgba(15, 23, 42, 0.95);
257
- --shadow: 0 8px 12px -2px rgba(0, 0, 0, 0.3);
258
- }
259
-
260
- html {
261
- margin: 0;
262
- padding: 0;
263
- width: 100%;
264
- overflow: hidden;
265
- }
266
-
267
- body {
268
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
269
- background: var(--bg-gradient);
270
- color: var(--text-primary);
271
- line-height: 1.5;
272
- height: 100vh;
273
- width: 100%;
274
- margin: 0;
275
- padding: 0;
276
- overflow: hidden;
277
- transition: background 0.3s ease, color 0.3s ease;
278
- }
279
-
280
- .enterprise-layout {
281
- width: 100%;
282
- height: 100vh;
283
- display: flex;
284
- flex-direction: column;
285
- overflow: hidden;
286
- }
287
-
288
- .layout-header {
289
- position: fixed;
290
- top: 0;
291
- left: 0;
292
- right: 0;
293
- height: var(--header-height);
294
- background: var(--glass-bg);
295
- backdrop-filter: blur(15px);
296
- border-bottom: 1px solid var(--border-color);
297
- display: flex;
298
- align-items: center;
299
- justify-content: space-between;
300
- padding: 0 1rem;
301
- z-index: 1000;
302
- box-shadow: var(--shadow);
303
- }
304
-
305
- .header-left {
306
- display: flex;
307
- align-items: center;
308
- gap: 0.75rem;
309
- flex: 0 0 auto;
310
- min-width: 0;
311
- }
312
-
313
- .header-center {
314
- display: flex;
315
- align-items: center;
316
- flex: 1;
317
- justify-content: center;
318
- min-width: 0;
319
- }
320
-
321
- .header-right {
322
- display: flex;
323
- align-items: center;
324
- gap: 0.75rem;
325
- flex-shrink: 0;
326
- position: relative;
327
- }
328
-
329
- .header-info-section {
330
- display: flex;
331
- align-items: center;
332
- gap: 0.5rem;
333
- height: fit-content;
334
- max-height: calc(var(--header-height) - 1rem);
335
- }
336
-
337
- .header-info-card {
338
- display: flex;
339
- align-items: center;
340
- gap: 0.5rem;
341
- padding: 0.375rem 0.875rem;
342
- border-radius: 1.25rem;
343
- backdrop-filter: blur(10px);
344
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
345
- cursor: pointer;
346
- position: relative;
347
- overflow: visible;
348
- height: fit-content;
349
- max-height: 2.25rem;
350
- }
351
-
352
- .header-info-card-blue {
353
- background: linear-gradient(135deg, rgba(37, 99, 235, 0.1) 0%, rgba(59, 130, 246, 0.06) 100%);
354
- border: 1px solid rgba(37, 99, 235, 0.2);
355
- box-shadow: 0 2px 6px rgba(37, 99, 235, 0.08),
356
- 0 1px 2px rgba(0, 0, 0, 0.04);
357
- }
358
-
359
- .header-info-card-green {
360
- background: linear-gradient(135deg, rgba(16, 185, 129, 0.1) 0%, rgba(34, 197, 94, 0.06) 100%);
361
- border: 1px solid rgba(16, 185, 129, 0.2);
362
- box-shadow: 0 2px 6px rgba(16, 185, 129, 0.08),
363
- 0 1px 2px rgba(0, 0, 0, 0.04);
364
- }
365
-
366
- .header-info-card::before {
367
- content: '';
368
- position: absolute;
369
- top: 50%;
370
- left: 50%;
371
- width: 100%;
372
- height: 100%;
373
- background: radial-gradient(circle, rgba(255, 255, 255, 0.12) 0%, transparent 70%);
374
- transform: translate(-50%, -50%) scale(0);
375
- transition: transform 0.5s ease-out;
376
- pointer-events: none;
377
- }
378
-
379
- .header-info-card:hover::before {
380
- transform: translate(-50%, -50%) scale(2);
381
- }
382
-
383
- .header-info-card-blue:hover {
384
- transform: translateY(-2px);
385
- box-shadow: 0 4px 12px rgba(37, 99, 235, 0.18),
386
- 0 2px 4px rgba(0, 0, 0, 0.06);
387
- border-color: rgba(37, 99, 235, 0.35);
388
- background: linear-gradient(135deg, rgba(37, 99, 235, 0.14) 0%, rgba(59, 130, 246, 0.08) 100%);
389
- }
390
-
391
- .header-info-card-green:hover {
392
- transform: translateY(-2px);
393
- box-shadow: 0 4px 12px rgba(16, 185, 129, 0.18),
394
- 0 2px 4px rgba(0, 0, 0, 0.06);
395
- border-color: rgba(16, 185, 129, 0.35);
396
- background: linear-gradient(135deg, rgba(16, 185, 129, 0.14) 0%, rgba(34, 197, 94, 0.08) 100%);
397
- }
398
-
399
- .header-info-card:active {
400
- transform: translateY(0) scale(0.98);
401
- transition: all 0.1s ease;
402
- }
403
-
404
- .header-info-icon {
405
- display: flex;
406
- align-items: center;
407
- justify-content: center;
408
- width: 1.25rem;
409
- height: 1.25rem;
410
- flex-shrink: 0;
411
- }
412
-
413
- .header-info-card-blue .header-info-icon {
414
- color: #2563eb;
415
- }
416
-
417
- .header-info-card-green .header-info-icon {
418
- color: #10b981;
419
- }
420
-
421
- .header-info-content {
422
- display: flex;
423
- flex-direction: column;
424
- gap: 0.0625rem;
425
- min-width: 0;
426
- }
427
-
428
- .header-info-label {
429
- font-size: 0.5625rem;
430
- text-transform: uppercase;
431
- letter-spacing: 0.08em;
432
- font-weight: 700;
433
- line-height: 1;
434
- white-space: nowrap;
435
- }
436
-
437
- .header-info-card-blue .header-info-label {
438
- color: #1d4ed8;
439
- opacity: 0.85;
440
- }
441
-
442
- .header-info-card-green .header-info-label {
443
- color: #059669;
444
- opacity: 0.85;
445
- }
446
-
447
- .header-info-value {
448
- font-size: 0.8125rem;
449
- font-weight: 700;
450
- white-space: nowrap;
451
- letter-spacing: -0.01em;
452
- line-height: 1.2;
453
- }
454
-
455
- .header-info-card-blue .header-info-value {
456
- color: #1e3a8a;
457
- }
458
-
459
- .header-info-card-green .header-info-value {
460
- color: #065f46;
461
- }
462
-
463
- .header-info-card:hover .header-info-label,
464
- .header-info-card:hover .header-info-value {
465
- opacity: 1;
466
- }
467
-
468
- .header-info-card.selectable {
469
- cursor: pointer;
470
- padding-right: 0.625rem;
471
- }
472
-
473
- .header-info-chevron {
474
- display: flex;
475
- align-items: center;
476
- justify-content: center;
477
- margin-left: 0.25rem;
478
- transition: transform 0.3s ease;
479
- opacity: 0.7;
480
- }
481
-
482
- .header-info-card:hover .header-info-chevron {
483
- opacity: 1;
484
- }
485
-
486
- .header-info-dropdown {
487
- position: absolute;
488
- top: calc(100% + 0.5rem);
489
- left: 0;
490
- right: 0;
491
- background: var(--glass-bg);
492
- border-radius: 0.75rem;
493
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15),
494
- 0 4px 8px rgba(0, 0, 0, 0.1);
495
- backdrop-filter: blur(12px);
496
- z-index: 1000;
497
- overflow: hidden;
498
- animation: dropdownSlideIn 0.2s ease-out;
499
- min-width: 180px;
500
- }
501
-
502
- @keyframes dropdownSlideIn {
503
- from {
504
- opacity: 0;
505
- transform: translateY(-8px);
506
- }
507
- to {
508
- opacity: 1;
509
- transform: translateY(0);
510
- }
511
- }
512
-
513
- .header-info-dropdown-blue {
514
- border: 1px solid rgba(37, 99, 235, 0.3);
515
- }
516
-
517
- .header-info-dropdown-green {
518
- border: 1px solid rgba(16, 185, 129, 0.3);
519
- }
520
-
521
- .header-info-dropdown-item {
522
- display: flex;
523
- align-items: center;
524
- justify-content: space-between;
525
- padding: 0.625rem 0.875rem;
526
- font-size: 0.8125rem;
527
- font-weight: 500;
528
- color: var(--text-primary);
529
- transition: all 0.2s ease;
530
- cursor: pointer;
531
- gap: 0.5rem;
532
- }
533
-
534
- .header-info-dropdown-item:hover {
535
- background: rgba(37, 99, 235, 0.08);
536
- }
537
-
538
- .header-info-dropdown-blue .header-info-dropdown-item:hover {
539
- background: rgba(37, 99, 235, 0.12);
540
- color: #1e40af;
541
- }
542
-
543
- .header-info-dropdown-green .header-info-dropdown-item:hover {
544
- background: rgba(16, 185, 129, 0.12);
545
- color: #047857;
546
- }
547
-
548
- .header-info-dropdown-item.active {
549
- font-weight: 700;
550
- background: rgba(37, 99, 235, 0.1);
551
- }
552
-
553
- .header-info-dropdown-blue .header-info-dropdown-item.active {
554
- background: rgba(37, 99, 235, 0.15);
555
- color: #1e40af;
556
- }
557
-
558
- .header-info-dropdown-green .header-info-dropdown-item.active {
559
- background: rgba(16, 185, 129, 0.15);
560
- color: #047857;
561
- }
562
-
563
- .header-info-dropdown-item svg {
564
- flex-shrink: 0;
565
- }
566
-
567
- .app-logo {
568
- display: flex;
569
- align-items: center;
570
- gap: 0.5rem;
571
- font-size: 1.125rem;
572
- font-weight: 700;
573
- background: var(--accent-gradient);
574
- -webkit-background-clip: text;
575
- -webkit-text-fill-color: transparent;
576
- background-clip: text;
577
- white-space: nowrap;
578
- flex-shrink: 0;
579
- }
580
-
581
- .logo-image {
582
- flex-shrink: 0;
583
- border-radius: 0.375rem;
584
- }
585
-
586
- .breadcrumb-container {
587
- display: flex;
588
- align-items: center;
589
- font-size: 0.75rem;
590
- opacity: 0.8;
591
- margin-left: 1rem;
592
- }
593
-
594
- .breadcrumb {
595
- display: flex;
596
- align-items: center;
597
- gap: 0.375rem;
598
- color: var(--text-secondary);
599
- }
600
-
601
- .breadcrumb-item {
602
- display: flex;
603
- align-items: center;
604
- gap: 0.25rem;
605
- }
606
-
607
- .breadcrumb-link {
608
- color: var(--text-secondary);
609
- text-decoration: none;
610
- transition: color 0.2s ease;
611
- }
612
-
613
- .breadcrumb-link:hover {
614
- color: var(--accent-primary);
615
- }
616
-
617
- .breadcrumb-current {
618
- color: var(--accent-primary);
619
- font-weight: 500;
620
- }
621
-
622
- .breadcrumb-separator {
623
- color: var(--text-muted);
624
- opacity: 0.6;
625
- }
626
-
627
- .layout-body {
628
- display: flex;
629
- height: calc(100vh - var(--header-height) - var(--footer-height));
630
- margin-top: var(--header-height);
631
- overflow: hidden;
632
- }
633
-
634
- .layout-body.footer-hidden {
635
- height: calc(100vh - var(--header-height));
636
- }
637
-
638
- .layout-sidebar {
639
- width: var(--sidebar-width);
640
- background: var(--glass-bg);
641
- backdrop-filter: blur(15px);
642
- border-right: 1px solid var(--border-color);
643
- overflow-y: auto;
644
- overflow-x: hidden;
645
- transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1), transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
646
- flex-shrink: 0;
647
- will-change: width;
648
- backface-visibility: hidden;
649
- contain: layout style paint;
650
- }
651
-
652
- .layout-sidebar.collapsed {
653
- width: var(--sidebar-collapsed-width);
654
- overflow-y: hidden;
655
- }
656
-
657
- .layout-sidebar.mobile-hidden {
658
- transform: translateX(-100%);
659
- width: 0;
660
- }
661
-
662
- .layout-main {
663
- flex: 1;
664
- display: flex;
665
- flex-direction: column;
666
- background: var(--bg-gradient);
667
- min-width: 0;
668
- width: 100%;
669
- height: 100%;
670
- overflow: hidden;
671
- box-sizing: border-box;
672
- }
673
-
674
- .layout-footer {
675
- position: fixed;
676
- bottom: 0;
677
- left: 0;
678
- right: 0;
679
- height: var(--footer-height);
680
- background: var(--glass-bg);
681
- backdrop-filter: blur(15px);
682
- border-top: 1px solid var(--border-color);
683
- display: flex;
684
- align-items: center;
685
- justify-content: space-between;
686
- padding: 0 1rem;
687
- z-index: 1000;
688
- box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.1);
689
- font-size: 0.7rem;
690
- color: var(--text-secondary);
691
- transition: transform 0.3s ease;
692
- }
693
-
694
- .layout-footer.hidden {
695
- transform: translateY(100%);
696
- visibility: hidden;
697
- opacity: 0;
698
- }
699
-
700
- .footer-left {
701
- display: flex;
702
- align-items: center;
703
- gap: 0.75rem;
704
- }
705
-
706
- .footer-environment {
707
- display: flex;
708
- align-items: center;
709
- gap: 0.25rem;
710
- padding: 0.125rem 0.375rem;
711
- border-radius: 0.375rem;
712
- font-weight: 500;
713
- font-size: 0.625rem;
714
- }
715
-
716
- .env-development {
717
- background: var(--danger);
718
- color: white;
719
- }
720
-
721
- .env-staging {
722
- background: var(--warning);
723
- color: white;
724
- }
725
-
726
- .env-production {
727
- background: var(--success);
728
- color: white;
729
- }
730
-
731
- .env-uat {
732
- background: var(--info);
733
- color: white;
734
- }
735
-
736
- .footer-right {
737
- display: flex;
738
- align-items: center;
739
- gap: 0.75rem;
740
- }
741
-
742
- .footer-support {
743
- color: var(--accent-primary);
744
- text-decoration: none;
745
- transition: opacity 0.2s ease;
746
- }
747
-
748
- .footer-support:hover {
749
- opacity: 0.8;
750
- }
751
-
752
- .content-wrapper {
753
- display: flex;
754
- flex-direction: column;
755
- height: 100%;
756
- overflow: hidden;
757
- width: 100%;
758
- }
759
-
760
- .tab-bar {
761
- display: flex;
762
- align-items: center;
763
- background: var(--glass-bg);
764
- border-bottom: 1px solid var(--border-color);
765
- padding: 0;
766
- margin: 0;
767
- min-height: var(--tab-bar-height);
768
- overflow-x: hidden;
769
- flex-shrink: 0;
770
- gap: 0.25rem;
771
- transition: all 0.3s ease;
772
- width: 100%;
773
- box-sizing: border-box;
774
- }
775
-
776
- .tab-bar.hidden {
777
- display: none;
778
- }
779
-
780
- .single-page-header {
781
- display: flex;
782
- align-items: center;
783
- justify-content: space-between;
784
- background: var(--glass-bg);
785
- border-bottom: 1px solid var(--border-color);
786
- padding: 0.5rem 1.25rem;
787
- flex-shrink: 0;
788
- }
789
-
790
- .page-title {
791
- font-size: 1.125rem;
792
- font-weight: 600;
793
- color: var(--text-primary);
794
- }
795
-
796
- .back-button {
797
- display: flex;
798
- align-items: center;
799
- gap: 0.5rem;
800
- padding: 0.375rem 0.75rem;
801
- background: transparent;
802
- border: 1px solid var(--border-color);
803
- border-radius: 0.5rem;
804
- color: var(--text-secondary);
805
- text-decoration: none;
806
- font-size: 0.8rem;
807
- transition: all 0.3s ease;
808
- cursor: pointer;
809
- }
810
-
811
- .back-button:hover {
812
- background: var(--bg-secondary);
813
- color: var(--text-primary);
814
- border-color: var(--border-color);
815
- }
816
-
817
- .tab {
818
- display: flex;
819
- align-items: center;
820
- gap: 0.5rem;
821
- padding: 0.375rem 0.5rem;
822
- margin: 0;
823
- background: var(--bg-secondary);
824
- border: 1px solid var(--border-color);
825
- border-bottom: none;
826
- border-radius: 0.75rem 0.75rem 0 0;
827
- cursor: pointer;
828
- transition: all 0.3s ease;
829
- white-space: nowrap;
830
- min-width: 100px;
831
- max-width: 180px;
832
- font-size: 0.8rem;
833
- color: var(--text-secondary);
834
- }
835
-
836
- .tab:hover {
837
- background: var(--bg-primary);
838
- color: var(--text-primary);
839
- }
840
-
841
- .tab.active {
842
- background: var(--bg-primary);
843
- border-color: var(--accent-primary);
844
- color: var(--accent-primary);
845
- box-shadow: 0 -2px 4px rgba(37, 99, 235, 0.1);
846
- }
847
-
848
- .tab-title {
849
- flex: 1;
850
- overflow: hidden;
851
- text-overflow: ellipsis;
852
- white-space: nowrap;
853
- min-width: 0;
854
- }
855
-
856
- .tab-close {
857
- display: flex;
858
- align-items: center;
859
- justify-content: center;
860
- width: 1rem;
861
- height: 1rem;
862
- border-radius: 50%;
863
- background: none;
864
- border: none;
865
- cursor: pointer;
866
- color: var(--text-muted);
867
- transition: all 0.3s ease;
868
- flex-shrink: 0;
869
- }
870
-
871
- .tab-close:hover {
872
- background: var(--border-color);
873
- color: var(--text-secondary);
874
- }
875
-
876
- .tab.active .tab-close:hover {
877
- background: rgba(37, 99, 235, 0.1);
878
- color: var(--accent-primary);
879
- }
880
-
881
- /* Tab overflow menu styles for mobile */
882
- .tab-bar-wrapper {
883
- display: flex;
884
- align-items: center;
885
- width: 100%;
886
- background: var(--glass-bg);
887
- border-bottom: 1px solid var(--border-color);
888
- min-height: var(--tab-bar-height);
889
- }
890
-
891
- .tab-bar-visible {
892
- display: flex;
893
- align-items: center;
894
- gap: 0.25rem;
895
- flex: 1;
896
- overflow: hidden;
897
- min-height: var(--tab-bar-height);
898
- }
899
-
900
- .tab-more-container {
901
- position: relative;
902
- flex-shrink: 0;
903
- }
904
-
905
- .tab-more-btn {
906
- display: none;
907
- align-items: center;
908
- gap: 0.25rem;
909
- padding: 0.375rem 0.75rem;
910
- background: var(--bg-secondary);
911
- border: 1px solid var(--border-color);
912
- border-radius: 0.5rem;
913
- cursor: pointer;
914
- font-size: 0.8rem;
915
- color: var(--text-secondary);
916
- transition: all 0.3s ease;
917
- margin-right: 0.5rem;
918
- white-space: nowrap;
919
- }
920
-
921
- .tab-more-btn:hover {
922
- background: var(--bg-primary);
923
- color: var(--accent-primary);
924
- border-color: var(--accent-primary);
925
- }
926
-
927
- .tab-more-btn.active {
928
- background: var(--accent-primary);
929
- color: white;
930
- border-color: var(--accent-primary);
931
- }
932
-
933
- .tab-overflow-menu {
934
- position: absolute;
935
- top: 100%;
936
- right: 0;
937
- min-width: 200px;
938
- max-width: 280px;
939
- background: var(--glass-bg);
940
- backdrop-filter: blur(15px);
941
- border: 1px solid var(--border-color);
942
- border-radius: 0.75rem;
943
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
944
- padding: 0.5rem;
945
- z-index: 1002;
946
- margin-top: 0.25rem;
947
- opacity: 0;
948
- visibility: hidden;
949
- transform: translateY(-10px);
950
- transition: all 0.3s ease;
951
- }
952
-
953
- .tab-overflow-menu.open {
954
- opacity: 1;
955
- visibility: visible;
956
- transform: translateY(0);
957
- }
958
-
959
- .tab-overflow-item {
960
- display: flex;
961
- align-items: center;
962
- justify-content: space-between;
963
- padding: 0.5rem 0.75rem;
964
- border-radius: 0.5rem;
965
- cursor: pointer;
966
- font-size: 0.8rem;
967
- color: var(--text-secondary);
968
- transition: all 0.3s ease;
969
- gap: 0.5rem;
970
- }
971
-
972
- .tab-overflow-item:hover {
973
- background: var(--bg-secondary);
974
- color: var(--text-primary);
975
- }
976
-
977
- .tab-overflow-item.active {
978
- background: rgba(37, 99, 235, 0.1);
979
- color: var(--accent-primary);
980
- }
981
-
982
- .tab-overflow-item-title {
983
- flex: 1;
984
- overflow: hidden;
985
- text-overflow: ellipsis;
986
- white-space: nowrap;
987
- }
988
-
989
- .tab-overflow-item-close {
990
- display: flex;
991
- align-items: center;
992
- justify-content: center;
993
- width: 1.25rem;
994
- height: 1.25rem;
995
- border-radius: 50%;
996
- background: none;
997
- border: none;
998
- cursor: pointer;
999
- color: var(--text-muted);
1000
- transition: all 0.3s ease;
1001
- flex-shrink: 0;
1002
- }
1003
-
1004
- .tab-overflow-item-close:hover {
1005
- background: var(--border-color);
1006
- color: var(--danger);
1007
- }
1008
-
1009
- .tab-content-area {
1010
- flex: 1;
1011
- overflow: auto;
1012
- width: 100%;
1013
- height: 100%;
1014
- min-height: 0;
1015
- background: var(--bg-gradient);
1016
- box-sizing: border-box;
1017
- }
1018
-
1019
- .enterprise-module {
1020
- display: none;
1021
- width: 100%;
1022
- height: 100%;
1023
- overflow: auto;
1024
- box-sizing: border-box;
1025
- }
1026
-
1027
- .enterprise-module.active {
1028
- display: block;
1029
- }
1030
-
1031
- .module-header {
1032
- background: var(--glass-bg);
1033
- backdrop-filter: blur(15px);
1034
- border: 1px solid var(--border-color);
1035
- border-radius: 1rem;
1036
- padding: 0.75rem 1.25rem;
1037
- margin: 0.75rem 1.25rem 0 1.25rem;
1038
- box-shadow: var(--shadow);
1039
- display: flex;
1040
- align-items: flex-start;
1041
- justify-content: space-between;
1042
- gap: 1rem;
1043
- flex-shrink: 0;
1044
- }
1045
-
1046
- .module-header-content {
1047
- flex: 1;
1048
- text-align: left;
1049
- }
1050
-
1051
- .module-title {
1052
- font-size: 1.25rem;
1053
- font-weight: 700;
1054
- background: var(--accent-gradient);
1055
- -webkit-background-clip: text;
1056
- -webkit-text-fill-color: transparent;
1057
- background-clip: text;
1058
- margin-bottom: 0.375rem;
1059
- line-height: 1.2;
1060
- }
1061
-
1062
- .module-description {
1063
- font-size: 0.8rem;
1064
- color: var(--text-secondary);
1065
- margin-bottom: 0;
1066
- line-height: 1.3;
1067
- }
1068
-
1069
- .module-actions {
1070
- display: flex;
1071
- align-items: flex-start;
1072
- gap: 0.75rem;
1073
- flex-wrap: wrap;
1074
- flex-shrink: 0;
1075
- }
1076
-
1077
- .module-content {
1078
- padding: 0 1.25rem 2rem 1.25rem;
1079
- max-width: 100%;
1080
- overflow: hidden;
1081
- }
1082
-
1083
- .layout-body.footer-hidden .module-content {
1084
- padding-bottom: 0;
1085
- }
1086
-
1087
- .btn {
1088
- display: inline-flex;
1089
- align-items: center;
1090
- justify-content: center;
1091
- gap: 0.375rem;
1092
- padding: 0.5rem 1rem;
1093
- font-size: 0.8rem;
1094
- font-weight: 500;
1095
- border: none;
1096
- border-radius: 0.75rem;
1097
- cursor: pointer;
1098
- text-decoration: none;
1099
- transition: all 0.3s ease;
1100
- white-space: nowrap;
1101
- }
1102
-
1103
- .btn-primary {
1104
- background: var(--accent-gradient);
1105
- color: white;
1106
- box-shadow: 0 4px 15px rgba(37, 99, 235, 0.3);
1107
- }
1108
-
1109
- .btn-primary:hover {
1110
- transform: translateY(-2px);
1111
- box-shadow: 0 8px 25px rgba(37, 99, 235, 0.4);
1112
- }
1113
-
1114
- .btn-secondary {
1115
- background: var(--glass-bg);
1116
- color: var(--text-primary);
1117
- border: 1px solid var(--border-color);
1118
- }
1119
-
1120
- .btn-secondary:hover {
1121
- background: var(--bg-secondary);
1122
- transform: translateY(-2px);
1123
- }
1124
-
1125
- .nav-section {
1126
- padding: 0.75rem 0 0 0;
1127
- border-bottom: 1px solid var(--border-color);
1128
- }
1129
-
1130
- .nav-section:last-child {
1131
- border-bottom: none;
1132
- }
1133
-
1134
- .nav-section-header {
1135
- display: flex;
1136
- align-items: center;
1137
- justify-content: space-between;
1138
- padding: 0.5rem 1rem;
1139
- cursor: pointer;
1140
- transition: all 0.3s ease;
1141
- border-radius: 0.75rem;
1142
- margin: 0 0.75rem 0.375rem 0.75rem;
1143
- position: relative;
1144
- }
1145
-
1146
- .nav-section-header:hover {
1147
- background: var(--bg-secondary);
1148
- }
1149
-
1150
- .nav-section-title {
1151
- font-size: 0.6875rem;
1152
- font-weight: 600;
1153
- color: var(--text-secondary);
1154
- text-transform: uppercase;
1155
- letter-spacing: 0.075em;
1156
- margin: 0;
1157
- flex: 1;
1158
- }
1159
-
1160
- .nav-chevron {
1161
- color: var(--text-muted);
1162
- transition: all 0.2s ease;
1163
- display: flex;
1164
- align-items: center;
1165
- justify-content: center;
1166
- }
1167
-
1168
- .nav-section-header.expanded .nav-chevron {
1169
- transform: rotate(0deg);
1170
- }
1171
-
1172
- .nav-section-header.collapsed .nav-chevron {
1173
- transform: rotate(-90deg);
1174
- }
1175
-
1176
- .nav-section-content {
1177
- overflow: hidden;
1178
- transition: all 0.3s ease;
1179
- padding-bottom: 0.75rem;
1180
- }
1181
-
1182
- .nav-section-content.expanded {
1183
- max-height: 500px;
1184
- opacity: 1;
1185
- }
1186
-
1187
- .nav-section-content.collapsed {
1188
- max-height: 0;
1189
- opacity: 0;
1190
- padding-bottom: 0;
1191
- }
1192
-
1193
- .nav-menu {
1194
- list-style: none;
1195
- }
1196
-
1197
- .nav-item {
1198
- margin: 0 0.75rem;
1199
- }
1200
-
1201
- .nav-link {
1202
- display: flex;
1203
- align-items: center;
1204
- gap: 0.75rem;
1205
- padding: 0.5rem 0.75rem;
1206
- color: var(--text-secondary);
1207
- text-decoration: none;
1208
- border-radius: 0.75rem;
1209
- transition: all 0.3s ease;
1210
- font-size: 0.8rem;
1211
- position: relative;
1212
- }
1213
-
1214
- .nav-link:hover,
1215
- .nav-link.active {
1216
- background: var(--accent-gradient);
1217
- color: white;
1218
- transform: translateX(4px);
1219
- box-shadow: var(--shadow);
1220
- }
1221
-
1222
- /* NEW: Multi-level menu styles */
1223
- .nav-sub-menu {
1224
- margin-left: 1.5rem;
1225
- border-left: 1px solid var(--border-color);
1226
- padding-left: 0.5rem;
1227
- margin-top: 0.25rem;
1228
- list-style: none;
1229
- }
1230
-
1231
- .nav-sub-item {
1232
- margin: 0 0.5rem;
1233
- }
1234
-
1235
- .nav-sub-link {
1236
- display: flex;
1237
- align-items: center;
1238
- gap: 0.5rem;
1239
- padding: 0.375rem 0.5rem;
1240
- color: var(--text-muted);
1241
- text-decoration: none;
1242
- border-radius: 0.5rem;
1243
- transition: all 0.3s ease;
1244
- font-size: 0.75rem;
1245
- position: relative;
1246
- }
1247
-
1248
- .nav-sub-link:hover,
1249
- .nav-sub-link.active {
1250
- background: var(--accent-gradient);
1251
- color: white;
1252
- transform: translateX(2px);
1253
- box-shadow: var(--shadow);
1254
- }
1255
-
1256
- .nav-item-with-children > .nav-link {
1257
- position: relative;
1258
- }
1259
-
1260
- .nav-item-expand {
1261
- position: absolute;
1262
- right: 0.5rem;
1263
- color: var(--text-muted);
1264
- transition: all 0.2s ease;
1265
- display: flex;
1266
- align-items: center;
1267
- justify-content: center;
1268
- }
1269
-
1270
- .nav-item-expand.expanded {
1271
- transform: rotate(90deg);
1272
- }
1273
-
1274
- .nav-badge {
1275
- background: var(--danger);
1276
- color: white;
1277
- font-size: 0.625rem;
1278
- padding: 0.125rem 0.3rem;
1279
- border-radius: 0.5rem;
1280
- margin-left: auto;
1281
- font-weight: 600;
1282
- }
1283
-
1284
- .menu-toggle {
1285
- background: none;
1286
- border: none;
1287
- padding: 0.5rem;
1288
- border-radius: 0.75rem;
1289
- cursor: pointer;
1290
- color: var(--text-secondary);
1291
- transition: all 0.3s ease;
1292
- }
1293
-
1294
- .menu-toggle:hover {
1295
- background: var(--bg-secondary);
1296
- color: var(--text-primary);
1297
- }
1298
-
1299
- .persona-control {
1300
- position: relative;
1301
- display: flex;
1302
- align-items: center;
1303
- gap: 0.375rem;
1304
- padding: 0.375rem;
1305
- border-radius: 0.75rem;
1306
- cursor: pointer;
1307
- transition: all 0.3s ease;
1308
- flex-shrink: 0;
1309
- z-index: 10002;
1310
- }
1311
-
1312
- .persona-control:hover {
1313
- background: var(--bg-secondary);
1314
- }
1315
-
1316
- .persona-avatar {
1317
- width: 2rem;
1318
- height: 2rem;
1319
- border-radius: 50%;
1320
- background: var(--accent-gradient);
1321
- display: flex;
1322
- align-items: center;
1323
- justify-content: center;
1324
- color: white;
1325
- font-weight: 600;
1326
- font-size: 0.75rem;
1327
- flex-shrink: 0;
1328
- }
1329
-
1330
- .persona-role {
1331
- font-size: 0.75rem;
1332
- color: var(--text-secondary);
1333
- white-space: nowrap;
1334
- overflow: hidden;
1335
- text-overflow: ellipsis;
1336
- max-width: 100px;
1337
- }
1338
-
1339
- .persona-panel {
1340
- position: absolute;
1341
- top: 100%;
1342
- right: 0;
1343
- width: 300px;
1344
- background: var(--glass-bg);
1345
- backdrop-filter: blur(15px);
1346
- border: 2px solid rgba(203, 213, 225, 0.8);
1347
- border-radius: 1rem;
1348
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
1349
- padding: 1rem;
1350
- z-index: 10001;
1351
- margin-top: 0.5rem;
1352
- opacity: 0;
1353
- visibility: hidden;
1354
- transform: translateY(-10px);
1355
- transition: all 0.3s ease;
1356
- }
1357
-
1358
- .persona-panel.open {
1359
- opacity: 1;
1360
- visibility: visible;
1361
- transform: translateY(0);
1362
- }
1363
-
1364
- .persona-panel-header {
1365
- display: flex;
1366
- align-items: center;
1367
- gap: 0.75rem;
1368
- padding-bottom: 0.75rem;
1369
- margin-bottom: 0.75rem;
1370
- border-bottom: 2px solid rgba(226, 232, 240, 0.9);
1371
- }
1372
-
1373
- .persona-panel-avatar {
1374
- width: 2.5rem;
1375
- height: 2.5rem;
1376
- border-radius: 50%;
1377
- background: var(--accent-gradient);
1378
- display: flex;
1379
- align-items: center;
1380
- justify-content: center;
1381
- color: white;
1382
- font-weight: 600;
1383
- font-size: 0.875rem;
1384
- }
1385
-
1386
- .persona-panel-info h3 {
1387
- font-size: 0.875rem;
1388
- font-weight: 600;
1389
- color: var(--text-primary);
1390
- margin-bottom: 0.125rem;
1391
- }
1392
-
1393
- .persona-panel-info p {
1394
- font-size: 0.75rem;
1395
- color: var(--text-secondary);
1396
- }
1397
-
1398
- .persona-panel-section {
1399
- padding-bottom: 0.75rem;
1400
- margin-bottom: 0.75rem;
1401
- border-bottom: 1px solid rgba(226, 232, 240, 0.8);
1402
- }
1403
-
1404
- .persona-panel-section:last-child {
1405
- margin-bottom: 0;
1406
- padding-bottom: 0;
1407
- border-bottom: none;
1408
- }
1409
-
1410
- .persona-panel-section h4 {
1411
- font-size: 0.75rem;
1412
- font-weight: 600;
1413
- color: var(--text-secondary);
1414
- text-transform: uppercase;
1415
- letter-spacing: 0.05em;
1416
- margin-bottom: 0.5rem;
1417
- }
1418
-
1419
- .persona-panel-controls {
1420
- display: flex;
1421
- flex-direction: column;
1422
- gap: 0.375rem;
1423
- }
1424
-
1425
- .persona-control-item {
1426
- display: flex;
1427
- align-items: center;
1428
- justify-content: space-between;
1429
- padding: 0.5rem 0.75rem;
1430
- border-radius: 0.5rem;
1431
- border: 1px solid transparent;
1432
- transition: all 0.3s ease;
1433
- cursor: pointer;
1434
- font-size: 0.8rem;
1435
- }
1436
-
1437
- .persona-control-item:hover {
1438
- background: var(--bg-secondary);
1439
- border-color: rgba(203, 213, 225, 0.7);
1440
- }
1441
-
1442
- .persona-control-item.action {
1443
- color: var(--text-primary);
1444
- }
1445
-
1446
- .persona-control-item.action:hover {
1447
- color: var(--accent-primary);
1448
- }
1449
-
1450
- .persona-control-item.danger:hover {
1451
- background: rgba(220, 38, 38, 0.1);
1452
- color: var(--danger);
1453
- }
1454
-
1455
- .persona-control-label {
1456
- display: flex;
1457
- align-items: center;
1458
- gap: 0.5rem;
1459
- }
1460
-
1461
- /* Notification Panel */
1462
- .notification-bell {
1463
- position: relative;
1464
- display: flex;
1465
- align-items: center;
1466
- justify-content: center;
1467
- width: 2.5rem;
1468
- height: 2.5rem;
1469
- border-radius: 50%;
1470
- cursor: pointer;
1471
- transition: all 0.3s ease;
1472
- background: transparent;
1473
- }
1474
-
1475
- .notification-bell:hover {
1476
- background: var(--bg-secondary);
1477
- }
1478
-
1479
- .notification-badge {
1480
- position: absolute;
1481
- top: 0.25rem;
1482
- right: 0.25rem;
1483
- background: var(--danger);
1484
- color: white;
1485
- font-size: 0.625rem;
1486
- font-weight: 600;
1487
- min-width: 1.125rem;
1488
- height: 1.125rem;
1489
- border-radius: 0.5625rem;
1490
- display: flex;
1491
- align-items: center;
1492
- justify-content: center;
1493
- padding: 0 0.25rem;
1494
- border: 2px solid var(--glass-bg);
1495
- }
1496
-
1497
- .notification-panel {
1498
- position: absolute;
1499
- top: 100%;
1500
- right: 0;
1501
- width: 380px;
1502
- max-height: 500px;
1503
- background: var(--glass-bg);
1504
- backdrop-filter: blur(15px);
1505
- border: 2px solid rgba(203, 213, 225, 0.8);
1506
- border-radius: 1rem;
1507
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
1508
- z-index: 1001;
1509
- margin-top: 0.5rem;
1510
- opacity: 0;
1511
- visibility: hidden;
1512
- transform: translateY(-10px);
1513
- transition: all 0.3s ease;
1514
- display: flex;
1515
- flex-direction: column;
1516
- }
1517
-
1518
- .notification-panel.open {
1519
- opacity: 1;
1520
- visibility: visible;
1521
- transform: translateY(0);
1522
- }
1523
-
1524
- .notification-panel-header {
1525
- display: flex;
1526
- align-items: center;
1527
- justify-content: space-between;
1528
- padding: 1rem 1.25rem;
1529
- border-bottom: 2px solid rgba(226, 232, 240, 0.9);
1530
- }
1531
-
1532
- .notification-panel-title {
1533
- font-size: 1rem;
1534
- font-weight: 600;
1535
- color: var(--text-primary);
1536
- }
1537
-
1538
- .notification-panel-actions {
1539
- display: flex;
1540
- gap: 0.5rem;
1541
- }
1542
-
1543
- .notification-action-btn {
1544
- font-size: 0.75rem;
1545
- color: var(--primary);
1546
- background: transparent;
1547
- border: none;
1548
- cursor: pointer;
1549
- padding: 0.25rem 0.5rem;
1550
- border-radius: 0.375rem;
1551
- transition: all 0.2s ease;
1552
- }
1553
-
1554
- .notification-action-btn:hover {
1555
- background: rgba(37, 99, 235, 0.1);
1556
- }
1557
-
1558
- .notification-panel-content {
1559
- flex: 1;
1560
- overflow-y: auto;
1561
- padding: 0.5rem;
1562
- }
1563
-
1564
- .notification-item {
1565
- display: flex;
1566
- gap: 0.75rem;
1567
- padding: 0.875rem;
1568
- margin-bottom: 0.5rem;
1569
- border-radius: 0.75rem;
1570
- cursor: pointer;
1571
- transition: all 0.2s ease;
1572
- border: 1px solid transparent;
1573
- }
1574
-
1575
- .notification-item:hover {
1576
- background: var(--bg-secondary);
1577
- border-color: rgba(203, 213, 225, 0.7);
1578
- }
1579
-
1580
- .notification-item.unread {
1581
- background: rgba(37, 99, 235, 0.05);
1582
- }
1583
-
1584
- .notification-icon {
1585
- flex-shrink: 0;
1586
- width: 2.5rem;
1587
- height: 2.5rem;
1588
- border-radius: 50%;
1589
- display: flex;
1590
- align-items: center;
1591
- justify-content: center;
1592
- font-size: 1.125rem;
1593
- }
1594
-
1595
- .notification-icon.success {
1596
- background: rgba(22, 163, 74, 0.1);
1597
- color: var(--success);
1598
- }
1599
-
1600
- .notification-icon.info {
1601
- background: rgba(37, 99, 235, 0.1);
1602
- color: var(--primary);
1603
- }
1604
-
1605
- .notification-icon.warning {
1606
- background: rgba(217, 119, 6, 0.1);
1607
- color: var(--warning);
1608
- }
1609
-
1610
- .notification-icon.error {
1611
- background: rgba(220, 38, 38, 0.1);
1612
- color: var(--danger);
1613
- }
1614
-
1615
- .notification-content {
1616
- flex: 1;
1617
- min-width: 0;
1618
- }
1619
-
1620
- .notification-title {
1621
- font-size: 0.875rem;
1622
- font-weight: 600;
1623
- color: var(--text-primary);
1624
- margin-bottom: 0.25rem;
1625
- }
1626
-
1627
- .notification-message {
1628
- font-size: 0.8rem;
1629
- color: var(--text-secondary);
1630
- margin-bottom: 0.375rem;
1631
- line-height: 1.4;
1632
- }
1633
-
1634
- .notification-time {
1635
- font-size: 0.7rem;
1636
- color: var(--text-muted);
1637
- }
1638
-
1639
- .notification-empty {
1640
- text-align: center;
1641
- padding: 3rem 2rem;
1642
- color: var(--text-muted);
1643
- }
1644
-
1645
- .notification-empty-icon {
1646
- font-size: 3rem;
1647
- margin-bottom: 1rem;
1648
- opacity: 0.3;
1649
- }
1650
-
1651
- .notification-filters {
1652
- display: flex;
1653
- align-items: center;
1654
- justify-content: space-between;
1655
- padding: 0.75rem 1rem;
1656
- border-bottom: 1px solid rgba(226, 232, 240, 0.8);
1657
- background: var(--bg-secondary);
1658
- }
1659
-
1660
- .notification-filter-tabs {
1661
- display: flex;
1662
- gap: 0.25rem;
1663
- background: white;
1664
- border-radius: 0.5rem;
1665
- padding: 0.25rem;
1666
- }
1667
-
1668
- .notification-filter-tab {
1669
- padding: 0.375rem 0.75rem;
1670
- font-size: 0.75rem;
1671
- font-weight: 500;
1672
- color: var(--text-secondary);
1673
- background: transparent;
1674
- border: none;
1675
- border-radius: 0.375rem;
1676
- cursor: pointer;
1677
- transition: all 0.2s ease;
1678
- }
1679
-
1680
- .notification-filter-tab:hover {
1681
- background: var(--bg-secondary);
1682
- }
1683
-
1684
- .notification-filter-tab.active {
1685
- background: var(--primary);
1686
- color: white;
1687
- }
1688
-
1689
- .notification-grouping-dropdown {
1690
- position: relative;
1691
- }
1692
-
1693
- .notification-grouping-btn {
1694
- display: flex;
1695
- align-items: center;
1696
- gap: 0.375rem;
1697
- padding: 0.375rem 0.625rem;
1698
- font-size: 0.75rem;
1699
- font-weight: 500;
1700
- color: var(--text-secondary);
1701
- background: white;
1702
- border: 1px solid var(--border-color);
1703
- border-radius: 0.375rem;
1704
- cursor: pointer;
1705
- transition: all 0.2s ease;
1706
- }
1707
-
1708
- .notification-grouping-btn:hover {
1709
- border-color: var(--primary);
1710
- color: var(--primary);
1711
- }
1712
-
1713
- .notification-group-header {
1714
- padding: 0.5rem 0.875rem;
1715
- font-size: 0.75rem;
1716
- font-weight: 600;
1717
- color: var(--text-secondary);
1718
- text-transform: uppercase;
1719
- letter-spacing: 0.05em;
1720
- background: var(--bg-secondary);
1721
- border-bottom: 1px solid rgba(226, 232, 240, 0.8);
1722
- margin-bottom: 0.25rem;
1723
- }
1724
-
1725
- .view-mode-toggle {
1726
- display: flex;
1727
- align-items: center;
1728
- background: var(--bg-secondary);
1729
- border: 1px solid var(--border-color);
1730
- border-radius: 0.5rem;
1731
- padding: 0.125rem;
1732
- gap: 0.125rem;
1733
- }
1734
-
1735
- .view-mode-btn {
1736
- display: flex;
1737
- align-items: center;
1738
- justify-content: center;
1739
- padding: 0.25rem 0.5rem;
1740
- border-radius: 0.375rem;
1741
- cursor: pointer;
1742
- transition: all 0.3s ease;
1743
- color: var(--text-secondary);
1744
- background: transparent;
1745
- border: none;
1746
- font-size: 0.75rem;
1747
- }
1748
-
1749
- .view-mode-btn.active {
1750
- background: var(--accent-gradient);
1751
- color: white;
1752
- }
1753
-
1754
- .theme-toggle {
1755
- display: flex;
1756
- align-items: center;
1757
- gap: 0.5rem;
1758
- }
1759
-
1760
- .theme-switch {
1761
- position: relative;
1762
- width: 2.5rem;
1763
- height: 1.25rem;
1764
- background: var(--bg-secondary);
1765
- border: 1px solid var(--border-color);
1766
- border-radius: 0.625rem;
1767
- cursor: pointer;
1768
- transition: all 0.3s ease;
1769
- }
1770
-
1771
- .theme-switch.active {
1772
- background: var(--accent-primary);
1773
- border-color: var(--accent-primary);
1774
- }
1775
-
1776
- .theme-switch-handle {
1777
- position: absolute;
1778
- top: 0.125rem;
1779
- left: 0.125rem;
1780
- width: 0.875rem;
1781
- height: 0.875rem;
1782
- background: white;
1783
- border-radius: 50%;
1784
- transition: all 0.3s ease;
1785
- }
1786
-
1787
- .theme-switch.active .theme-switch-handle {
1788
- transform: translateX(1.125rem);
1789
- }
1790
-
1791
- /* Compact Mode Styles */
1792
- .sidebar-collapsed .nav-section-title,
1793
- .sidebar-collapsed .nav-badge,
1794
- .sidebar-collapsed .persona-role {
1795
- display: none;
1796
- }
1797
-
1798
- .sidebar-collapsed .nav-link {
1799
- justify-content: center;
1800
- padding: 0.75rem;
1801
- margin: 0.25rem 0.5rem;
1802
- }
1803
-
1804
- .sidebar-collapsed .nav-section-header {
1805
- justify-content: center;
1806
- padding: 0.75rem;
1807
- margin: 0.25rem 0.5rem;
1808
- }
1809
-
1810
- .sidebar-collapsed .nav-chevron {
1811
- display: none;
1812
- }
1813
-
1814
- .sidebar-collapsed .nav-section-content {
1815
- display: none;
1816
- }
1817
-
1818
- /* Compact navigation specific styles */
1819
- .compact-navigation {
1820
- padding: 0.5rem 0;
1821
- width: 100%;
1822
- overflow: visible;
1823
- }
1824
-
1825
- .compact-nav-item {
1826
- margin: 0.25rem 0.5rem;
1827
- position: relative;
1828
- }
1829
-
1830
- .compact-nav-link {
1831
- display: flex;
1832
- align-items: center;
1833
- justify-content: center;
1834
- padding: 0.75rem;
1835
- color: var(--text-secondary);
1836
- text-decoration: none;
1837
- border-radius: 0.75rem;
1838
- transition: all 0.2s ease;
1839
- font-size: 0.8rem;
1840
- position: relative;
1841
- min-height: 3rem;
1842
- width: 100%;
1843
- box-sizing: border-box;
1844
- }
1845
-
1846
- .compact-nav-link:hover,
1847
- .compact-nav-link.active {
1848
- background: var(--accent-gradient);
1849
- color: white;
1850
- box-shadow: var(--shadow);
1851
- }
1852
-
1853
- .compact-nav-badge {
1854
- position: absolute;
1855
- top: 0.25rem;
1856
- right: 0.25rem;
1857
- background: var(--danger);
1858
- color: white;
1859
- font-size: 0.5rem;
1860
- padding: 0.125rem 0.25rem;
1861
- border-radius: 0.375rem;
1862
- font-weight: 600;
1863
- min-width: 1rem;
1864
- text-align: center;
1865
- line-height: 1;
1866
- }
1867
-
1868
- .section-tooltip {
1869
- position: relative;
1870
- }
1871
-
1872
- .section-tooltip::after {
1873
- content: attr(data-tooltip);
1874
- position: absolute;
1875
- left: calc(100% + 0.75rem);
1876
- top: 50%;
1877
- transform: translateY(-50%);
1878
- background: var(--glass-bg);
1879
- color: var(--text-primary);
1880
- padding: 0.5rem 0.75rem;
1881
- border-radius: 0.5rem;
1882
- font-size: 0.75rem;
1883
- white-space: nowrap;
1884
- z-index: 1000;
1885
- box-shadow: var(--shadow);
1886
- backdrop-filter: blur(15px);
1887
- border: 1px solid var(--border-color);
1888
- opacity: 0;
1889
- visibility: hidden;
1890
- transition: all 0.2s ease;
1891
- pointer-events: none;
1892
- }
1893
-
1894
- /* FIX: Only show tooltips after initialization */
1895
- .enterprise-layout.initialized .section-tooltip:hover::after {
1896
- opacity: 1;
1897
- visibility: visible;
1898
- }
1899
-
1900
- /* Tablet responsive styles */
1901
- @media (max-width: 1024px) and (min-width: 769px) {
1902
- /* Reduce header info card padding on tablets */
1903
- .header-info-card {
1904
- padding: 0.3rem 0.6rem;
1905
- gap: 0.4rem;
1906
- }
1907
-
1908
- .header-info-label {
1909
- font-size: 0.5rem;
1910
- }
1911
-
1912
- .header-info-value {
1913
- font-size: 0.75rem;
1914
- }
1915
-
1916
- .header-info-icon {
1917
- width: 1rem;
1918
- height: 1rem;
1919
- }
1920
-
1921
- .notification-bell {
1922
- width: 2.25rem;
1923
- height: 2.25rem;
1924
- }
1925
-
1926
- .logo-company {
1927
- font-size: 1.1rem;
1928
- }
1929
-
1930
- .logo-tagline {
1931
- font-size: 0.55rem;
1932
- }
1933
- }
1934
-
1935
- /* Mobile responsive styles */
1936
- @media (max-width: 768px) {
1937
- .mobile-overlay {
1938
- position: fixed;
1939
- top: var(--header-height);
1940
- left: 0;
1941
- right: 0;
1942
- bottom: 0;
1943
- background: rgba(0, 0, 0, 0.5);
1944
- z-index: 1000;
1945
- opacity: 0;
1946
- visibility: hidden;
1947
- transition: opacity 0.3s ease, visibility 0.3s ease;
1948
- }
1949
-
1950
- .mobile-overlay.visible {
1951
- opacity: 1;
1952
- visibility: visible;
1953
- }
1954
-
1955
- .layout-sidebar {
1956
- position: absolute;
1957
- top: var(--header-height);
1958
- left: 0;
1959
- height: calc(100% - var(--header-height));
1960
- width: 85vw;
1961
- max-width: var(--sidebar-width);
1962
- transform: translateX(-100%);
1963
- z-index: 1001;
1964
- }
1965
-
1966
- .layout-sidebar.mobile-open {
1967
- transform: translateX(0);
1968
- }
1969
-
1970
- .tab-bar {
1971
- padding: 0;
1972
- margin: 0;
1973
- width: 100%;
1974
- }
1975
-
1976
- /* Mobile tab overflow - show only 2 tabs + more button */
1977
- .tab-bar-visible .tab {
1978
- display: none;
1979
- }
1980
-
1981
- .tab-bar-visible .tab:nth-child(-n+2) {
1982
- display: flex;
1983
- }
1984
-
1985
- .tab-more-btn {
1986
- display: flex;
1987
- }
1988
-
1989
- .tab {
1990
- min-width: 80px;
1991
- max-width: 120px;
1992
- padding: 0.25rem 0.5rem;
1993
- margin: 0;
1994
- font-size: 0.7rem;
1995
- }
1996
-
1997
- .single-page-header {
1998
- padding: 0.375rem 0.75rem;
1999
- }
2000
-
2001
- .page-title {
2002
- font-size: 1rem;
2003
- }
2004
-
2005
- .module-header {
2006
- margin: 1rem;
2007
- padding: 1rem;
2008
- flex-direction: column;
2009
- align-items: flex-start;
2010
- gap: 0.75rem;
2011
- }
2012
-
2013
- .module-content {
2014
- padding: 1rem;
2015
- }
2016
-
2017
- .footer-left,
2018
- .footer-right {
2019
- gap: 0.5rem;
2020
- }
2021
-
2022
- .footer-environment {
2023
- font-size: 0.5rem;
2024
- }
2025
-
2026
- .breadcrumb-container {
2027
- display: none;
2028
- }
2029
-
2030
- .header-center {
2031
- display: none;
2032
- }
2033
-
2034
- /* Hide Entity & FY info cards on mobile to make room for persona */
2035
- .header-info-section {
2036
- display: none;
2037
- }
2038
-
2039
- /* Ensure header-right elements are properly spaced and visible */
2040
- .header-right {
2041
- gap: 0.5rem;
2042
- flex-wrap: nowrap;
2043
- flex-shrink: 0;
2044
- }
2045
-
2046
- /* Adjust notification bell size for mobile */
2047
- .notification-bell {
2048
- width: 2.25rem;
2049
- height: 2.25rem;
2050
- flex-shrink: 0;
2051
- }
2052
-
2053
- /* Ensure persona-control is always visible on mobile */
2054
- .persona-control {
2055
- display: flex !important;
2056
- flex-shrink: 0;
2057
- z-index: 1001;
2058
- }
2059
-
2060
- /* Make notification panel full width on mobile */
2061
- .notification-panel {
2062
- position: fixed;
2063
- left: 50%;
2064
- right: auto;
2065
- transform: translateX(-50%);
2066
- width: calc(100vw - 2rem);
2067
- max-width: 380px;
2068
- }
2069
-
2070
- .notification-panel.open {
2071
- transform: translateX(-50%) translateY(0);
2072
- }
2073
-
2074
- /* Adjust persona panel for mobile - fixed position for better visibility */
2075
- .persona-panel {
2076
- position: fixed;
2077
- top: var(--header-height);
2078
- right: 0.5rem;
2079
- left: auto;
2080
- width: calc(100vw - 1rem);
2081
- max-width: 300px;
2082
- margin-top: 0.25rem;
2083
- }
2084
-
2085
- /* Make logo smaller on mobile */
2086
- .logo-company {
2087
- font-size: 1rem;
2088
- }
2089
-
2090
- .logo-tagline {
2091
- font-size: 0.5rem;
2092
- }
2093
-
2094
- .persona-role {
2095
- display: none;
2096
- }
2097
- }
2098
-
2099
- /* Extra small mobile (phones) */
2100
- @media (max-width: 480px) {
2101
- .layout-header {
2102
- padding: 0 0.5rem;
2103
- height: 3rem;
2104
- }
2105
-
2106
- .header-left {
2107
- gap: 0.5rem;
2108
- }
2109
-
2110
- .menu-toggle {
2111
- width: 2rem;
2112
- height: 2rem;
2113
- padding: 0.25rem;
2114
- }
2115
-
2116
- .logo-company {
2117
- font-size: 0.875rem;
2118
- }
2119
-
2120
- .logo-tagline {
2121
- display: none;
2122
- }
2123
-
2124
- .notification-bell {
2125
- width: 2rem;
2126
- height: 2rem;
2127
- }
2128
-
2129
- .notification-panel {
2130
- width: calc(100vw - 1rem);
2131
- max-width: 100%;
2132
- right: -0.25rem;
2133
- }
2134
-
2135
- .notification-filter-tab {
2136
- padding: 0.25rem 0.5rem;
2137
- font-size: 0.65rem;
2138
- }
2139
-
2140
- .notification-grouping-btn {
2141
- font-size: 0.65rem;
2142
- padding: 0.25rem 0.5rem;
2143
- }
2144
-
2145
- .tab {
2146
- min-width: 60px;
2147
- max-width: 100px;
2148
- padding: 0.25rem 0.375rem;
2149
- font-size: 0.65rem;
2150
- }
2151
-
2152
- .module-header {
2153
- margin: 0.75rem;
2154
- padding: 0.75rem;
2155
- }
2156
-
2157
- .module-content {
2158
- padding: 0.75rem;
2159
- }
2160
-
2161
- .header-right {
2162
- gap: 0.375rem;
2163
- }
2164
-
2165
- /* Smaller persona avatar on extra small screens */
2166
- .persona-avatar {
2167
- width: 1.75rem;
2168
- height: 1.75rem;
2169
- font-size: 0.65rem;
2170
- }
2171
- }
214
+ return `
215
+ * {
216
+ margin: 0;
217
+ padding: 0;
218
+ box-sizing: border-box;
219
+ }
220
+
221
+ :root {
222
+ --primary: ${colors.primary};
223
+ --secondary: ${colors.secondary};
224
+ --success: ${colors.success};
225
+ --warning: ${colors.warning};
226
+ --danger: ${colors.danger};
227
+ --info: ${colors.info};
228
+
229
+ --bg-primary: #ffffff;
230
+ --bg-secondary: #f8fafc;
231
+ --bg-gradient: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
232
+ --text-primary: #1e293b;
233
+ --text-secondary: #64748b;
234
+ --text-muted: #94a3b8;
235
+ --border-color: rgba(226, 232, 240, 0.5);
236
+ --glass-bg: rgba(255, 255, 255, 0.95);
237
+ --shadow: 0 8px 12px -2px rgba(0, 0, 0, 0.1);
238
+ --accent-primary: ${colors.primary};
239
+ --accent-gradient: linear-gradient(135deg, ${colors.primary}, ${colors.info});
240
+
241
+ --header-height: ${config.layout.headerHeight};
242
+ --sidebar-width: ${config.layout.sidebarWidth};
243
+ --sidebar-collapsed-width: ${config.layout.sidebarCollapsedWidth};
244
+ --footer-height: ${footerHeight};
245
+ --tab-bar-height: ${config.layout.tabBarHeight};
246
+ }
247
+
248
+ [data-theme="dark"] {
249
+ --bg-primary: #0f172a;
250
+ --bg-secondary: #1e293b;
251
+ --bg-gradient: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
252
+ --text-primary: #f1f5f9;
253
+ --text-secondary: #cbd5e1;
254
+ --text-muted: #64748b;
255
+ --border-color: rgba(71, 85, 105, 0.5);
256
+ --glass-bg: rgba(15, 23, 42, 0.95);
257
+ --shadow: 0 8px 12px -2px rgba(0, 0, 0, 0.3);
258
+ }
259
+
260
+ html {
261
+ margin: 0;
262
+ padding: 0;
263
+ width: 100%;
264
+ overflow: hidden;
265
+ }
266
+
267
+ body {
268
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
269
+ background: var(--bg-gradient);
270
+ color: var(--text-primary);
271
+ line-height: 1.5;
272
+ height: 100vh;
273
+ width: 100%;
274
+ margin: 0;
275
+ padding: 0;
276
+ overflow: hidden;
277
+ transition: background 0.3s ease, color 0.3s ease;
278
+ }
279
+
280
+ .enterprise-layout {
281
+ width: 100%;
282
+ height: 100vh;
283
+ display: flex;
284
+ flex-direction: column;
285
+ overflow: hidden;
286
+ }
287
+
288
+ .layout-header {
289
+ position: fixed;
290
+ top: 0;
291
+ left: 0;
292
+ right: 0;
293
+ height: var(--header-height);
294
+ background: var(--glass-bg);
295
+ backdrop-filter: blur(15px);
296
+ border-bottom: 1px solid var(--border-color);
297
+ display: flex;
298
+ align-items: center;
299
+ justify-content: space-between;
300
+ padding: 0 1rem;
301
+ z-index: 1000;
302
+ box-shadow: var(--shadow);
303
+ }
304
+
305
+ .header-left {
306
+ display: flex;
307
+ align-items: center;
308
+ gap: 0.75rem;
309
+ flex: 0 0 auto;
310
+ min-width: 0;
311
+ }
312
+
313
+ .header-center {
314
+ display: flex;
315
+ align-items: center;
316
+ flex: 1;
317
+ justify-content: center;
318
+ min-width: 0;
319
+ }
320
+
321
+ .header-right {
322
+ display: flex;
323
+ align-items: center;
324
+ gap: 0.75rem;
325
+ flex-shrink: 0;
326
+ position: relative;
327
+ }
328
+
329
+ .header-info-section {
330
+ display: flex;
331
+ align-items: center;
332
+ gap: 0.5rem;
333
+ height: fit-content;
334
+ max-height: calc(var(--header-height) - 1rem);
335
+ }
336
+
337
+ .header-info-card {
338
+ display: flex;
339
+ align-items: center;
340
+ gap: 0.5rem;
341
+ padding: 0.375rem 0.875rem;
342
+ border-radius: 1.25rem;
343
+ backdrop-filter: blur(10px);
344
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
345
+ cursor: pointer;
346
+ position: relative;
347
+ overflow: visible;
348
+ height: fit-content;
349
+ max-height: 2.25rem;
350
+ }
351
+
352
+ .header-info-card-blue {
353
+ background: linear-gradient(135deg, rgba(37, 99, 235, 0.1) 0%, rgba(59, 130, 246, 0.06) 100%);
354
+ border: 1px solid rgba(37, 99, 235, 0.2);
355
+ box-shadow: 0 2px 6px rgba(37, 99, 235, 0.08),
356
+ 0 1px 2px rgba(0, 0, 0, 0.04);
357
+ }
358
+
359
+ .header-info-card-green {
360
+ background: linear-gradient(135deg, rgba(16, 185, 129, 0.1) 0%, rgba(34, 197, 94, 0.06) 100%);
361
+ border: 1px solid rgba(16, 185, 129, 0.2);
362
+ box-shadow: 0 2px 6px rgba(16, 185, 129, 0.08),
363
+ 0 1px 2px rgba(0, 0, 0, 0.04);
364
+ }
365
+
366
+ .header-info-card::before {
367
+ content: '';
368
+ position: absolute;
369
+ top: 50%;
370
+ left: 50%;
371
+ width: 100%;
372
+ height: 100%;
373
+ background: radial-gradient(circle, rgba(255, 255, 255, 0.12) 0%, transparent 70%);
374
+ transform: translate(-50%, -50%) scale(0);
375
+ transition: transform 0.5s ease-out;
376
+ pointer-events: none;
377
+ }
378
+
379
+ .header-info-card:hover::before {
380
+ transform: translate(-50%, -50%) scale(2);
381
+ }
382
+
383
+ .header-info-card-blue:hover {
384
+ transform: translateY(-2px);
385
+ box-shadow: 0 4px 12px rgba(37, 99, 235, 0.18),
386
+ 0 2px 4px rgba(0, 0, 0, 0.06);
387
+ border-color: rgba(37, 99, 235, 0.35);
388
+ background: linear-gradient(135deg, rgba(37, 99, 235, 0.14) 0%, rgba(59, 130, 246, 0.08) 100%);
389
+ }
390
+
391
+ .header-info-card-green:hover {
392
+ transform: translateY(-2px);
393
+ box-shadow: 0 4px 12px rgba(16, 185, 129, 0.18),
394
+ 0 2px 4px rgba(0, 0, 0, 0.06);
395
+ border-color: rgba(16, 185, 129, 0.35);
396
+ background: linear-gradient(135deg, rgba(16, 185, 129, 0.14) 0%, rgba(34, 197, 94, 0.08) 100%);
397
+ }
398
+
399
+ .header-info-card:active {
400
+ transform: translateY(0) scale(0.98);
401
+ transition: all 0.1s ease;
402
+ }
403
+
404
+ .header-info-icon {
405
+ display: flex;
406
+ align-items: center;
407
+ justify-content: center;
408
+ width: 1.25rem;
409
+ height: 1.25rem;
410
+ flex-shrink: 0;
411
+ }
412
+
413
+ .header-info-card-blue .header-info-icon {
414
+ color: #2563eb;
415
+ }
416
+
417
+ .header-info-card-green .header-info-icon {
418
+ color: #10b981;
419
+ }
420
+
421
+ .header-info-content {
422
+ display: flex;
423
+ flex-direction: column;
424
+ gap: 0.0625rem;
425
+ min-width: 0;
426
+ }
427
+
428
+ .header-info-label {
429
+ font-size: 0.5625rem;
430
+ text-transform: uppercase;
431
+ letter-spacing: 0.08em;
432
+ font-weight: 700;
433
+ line-height: 1;
434
+ white-space: nowrap;
435
+ }
436
+
437
+ .header-info-card-blue .header-info-label {
438
+ color: #1d4ed8;
439
+ opacity: 0.85;
440
+ }
441
+
442
+ .header-info-card-green .header-info-label {
443
+ color: #059669;
444
+ opacity: 0.85;
445
+ }
446
+
447
+ .header-info-value {
448
+ font-size: 0.8125rem;
449
+ font-weight: 700;
450
+ white-space: nowrap;
451
+ letter-spacing: -0.01em;
452
+ line-height: 1.2;
453
+ }
454
+
455
+ .header-info-card-blue .header-info-value {
456
+ color: #1e3a8a;
457
+ }
458
+
459
+ .header-info-card-green .header-info-value {
460
+ color: #065f46;
461
+ }
462
+
463
+ .header-info-card:hover .header-info-label,
464
+ .header-info-card:hover .header-info-value {
465
+ opacity: 1;
466
+ }
467
+
468
+ .header-info-card.selectable {
469
+ cursor: pointer;
470
+ padding-right: 0.625rem;
471
+ }
472
+
473
+ .header-info-chevron {
474
+ display: flex;
475
+ align-items: center;
476
+ justify-content: center;
477
+ margin-left: 0.25rem;
478
+ transition: transform 0.3s ease;
479
+ opacity: 0.7;
480
+ }
481
+
482
+ .header-info-card:hover .header-info-chevron {
483
+ opacity: 1;
484
+ }
485
+
486
+ .header-info-dropdown {
487
+ position: absolute;
488
+ top: calc(100% + 0.5rem);
489
+ left: 0;
490
+ right: 0;
491
+ background: var(--glass-bg);
492
+ border-radius: 0.75rem;
493
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15),
494
+ 0 4px 8px rgba(0, 0, 0, 0.1);
495
+ backdrop-filter: blur(12px);
496
+ z-index: 1000;
497
+ overflow: hidden;
498
+ animation: dropdownSlideIn 0.2s ease-out;
499
+ min-width: 180px;
500
+ }
501
+
502
+ @keyframes dropdownSlideIn {
503
+ from {
504
+ opacity: 0;
505
+ transform: translateY(-8px);
506
+ }
507
+ to {
508
+ opacity: 1;
509
+ transform: translateY(0);
510
+ }
511
+ }
512
+
513
+ .header-info-dropdown-blue {
514
+ border: 1px solid rgba(37, 99, 235, 0.3);
515
+ }
516
+
517
+ .header-info-dropdown-green {
518
+ border: 1px solid rgba(16, 185, 129, 0.3);
519
+ }
520
+
521
+ .header-info-dropdown-item {
522
+ display: flex;
523
+ align-items: center;
524
+ justify-content: space-between;
525
+ padding: 0.625rem 0.875rem;
526
+ font-size: 0.8125rem;
527
+ font-weight: 500;
528
+ color: var(--text-primary);
529
+ transition: all 0.2s ease;
530
+ cursor: pointer;
531
+ gap: 0.5rem;
532
+ }
533
+
534
+ .header-info-dropdown-item:hover {
535
+ background: rgba(37, 99, 235, 0.08);
536
+ }
537
+
538
+ .header-info-dropdown-blue .header-info-dropdown-item:hover {
539
+ background: rgba(37, 99, 235, 0.12);
540
+ color: #1e40af;
541
+ }
542
+
543
+ .header-info-dropdown-green .header-info-dropdown-item:hover {
544
+ background: rgba(16, 185, 129, 0.12);
545
+ color: #047857;
546
+ }
547
+
548
+ .header-info-dropdown-item.active {
549
+ font-weight: 700;
550
+ background: rgba(37, 99, 235, 0.1);
551
+ }
552
+
553
+ .header-info-dropdown-blue .header-info-dropdown-item.active {
554
+ background: rgba(37, 99, 235, 0.15);
555
+ color: #1e40af;
556
+ }
557
+
558
+ .header-info-dropdown-green .header-info-dropdown-item.active {
559
+ background: rgba(16, 185, 129, 0.15);
560
+ color: #047857;
561
+ }
562
+
563
+ .header-info-dropdown-item svg {
564
+ flex-shrink: 0;
565
+ }
566
+
567
+ .app-logo {
568
+ display: flex;
569
+ align-items: center;
570
+ gap: 0.5rem;
571
+ font-size: 1.125rem;
572
+ font-weight: 700;
573
+ background: var(--accent-gradient);
574
+ -webkit-background-clip: text;
575
+ -webkit-text-fill-color: transparent;
576
+ background-clip: text;
577
+ white-space: nowrap;
578
+ flex-shrink: 0;
579
+ }
580
+
581
+ .logo-image {
582
+ flex-shrink: 0;
583
+ border-radius: 0.375rem;
584
+ }
585
+
586
+ .breadcrumb-container {
587
+ display: flex;
588
+ align-items: center;
589
+ font-size: 0.75rem;
590
+ opacity: 0.8;
591
+ margin-left: 1rem;
592
+ }
593
+
594
+ .breadcrumb {
595
+ display: flex;
596
+ align-items: center;
597
+ gap: 0.375rem;
598
+ color: var(--text-secondary);
599
+ }
600
+
601
+ .breadcrumb-item {
602
+ display: flex;
603
+ align-items: center;
604
+ gap: 0.25rem;
605
+ }
606
+
607
+ .breadcrumb-link {
608
+ color: var(--text-secondary);
609
+ text-decoration: none;
610
+ transition: color 0.2s ease;
611
+ }
612
+
613
+ .breadcrumb-link:hover {
614
+ color: var(--accent-primary);
615
+ }
616
+
617
+ .breadcrumb-current {
618
+ color: var(--accent-primary);
619
+ font-weight: 500;
620
+ }
621
+
622
+ .breadcrumb-separator {
623
+ color: var(--text-muted);
624
+ opacity: 0.6;
625
+ }
626
+
627
+ .layout-body {
628
+ display: flex;
629
+ height: calc(100vh - var(--header-height) - var(--footer-height));
630
+ margin-top: var(--header-height);
631
+ overflow: hidden;
632
+ }
633
+
634
+ .layout-body.footer-hidden {
635
+ height: calc(100vh - var(--header-height));
636
+ }
637
+
638
+ .layout-sidebar {
639
+ width: var(--sidebar-width);
640
+ background: var(--glass-bg);
641
+ backdrop-filter: blur(15px);
642
+ border-right: 1px solid var(--border-color);
643
+ overflow-y: auto;
644
+ overflow-x: hidden;
645
+ transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1), transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
646
+ flex-shrink: 0;
647
+ will-change: width;
648
+ backface-visibility: hidden;
649
+ contain: layout style paint;
650
+ }
651
+
652
+ .layout-sidebar.collapsed {
653
+ width: var(--sidebar-collapsed-width);
654
+ overflow-y: hidden;
655
+ }
656
+
657
+ .layout-sidebar.mobile-hidden {
658
+ transform: translateX(-100%);
659
+ width: 0;
660
+ }
661
+
662
+ .layout-main {
663
+ flex: 1;
664
+ display: flex;
665
+ flex-direction: column;
666
+ background: var(--bg-gradient);
667
+ min-width: 0;
668
+ width: 100%;
669
+ height: 100%;
670
+ overflow: hidden;
671
+ box-sizing: border-box;
672
+ }
673
+
674
+ .layout-footer {
675
+ position: fixed;
676
+ bottom: 0;
677
+ left: 0;
678
+ right: 0;
679
+ height: var(--footer-height);
680
+ background: var(--glass-bg);
681
+ backdrop-filter: blur(15px);
682
+ border-top: 1px solid var(--border-color);
683
+ display: flex;
684
+ align-items: center;
685
+ justify-content: space-between;
686
+ padding: 0 1rem;
687
+ z-index: 1000;
688
+ box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.1);
689
+ font-size: 0.7rem;
690
+ color: var(--text-secondary);
691
+ transition: transform 0.3s ease;
692
+ }
693
+
694
+ .layout-footer.hidden {
695
+ transform: translateY(100%);
696
+ visibility: hidden;
697
+ opacity: 0;
698
+ }
699
+
700
+ .footer-left {
701
+ display: flex;
702
+ align-items: center;
703
+ gap: 0.75rem;
704
+ }
705
+
706
+ .footer-environment {
707
+ display: flex;
708
+ align-items: center;
709
+ gap: 0.25rem;
710
+ padding: 0.125rem 0.375rem;
711
+ border-radius: 0.375rem;
712
+ font-weight: 500;
713
+ font-size: 0.625rem;
714
+ }
715
+
716
+ .env-development {
717
+ background: var(--danger);
718
+ color: white;
719
+ }
720
+
721
+ .env-staging {
722
+ background: var(--warning);
723
+ color: white;
724
+ }
725
+
726
+ .env-production {
727
+ background: var(--success);
728
+ color: white;
729
+ }
730
+
731
+ .env-uat {
732
+ background: var(--info);
733
+ color: white;
734
+ }
735
+
736
+ .footer-right {
737
+ display: flex;
738
+ align-items: center;
739
+ gap: 0.75rem;
740
+ }
741
+
742
+ .footer-support {
743
+ color: var(--accent-primary);
744
+ text-decoration: none;
745
+ transition: opacity 0.2s ease;
746
+ }
747
+
748
+ .footer-support:hover {
749
+ opacity: 0.8;
750
+ }
751
+
752
+ .content-wrapper {
753
+ display: flex;
754
+ flex-direction: column;
755
+ height: 100%;
756
+ overflow: hidden;
757
+ width: 100%;
758
+ }
759
+
760
+ .tab-bar {
761
+ display: flex;
762
+ align-items: center;
763
+ background: var(--glass-bg);
764
+ border-bottom: 1px solid var(--border-color);
765
+ padding: 0;
766
+ margin: 0;
767
+ min-height: var(--tab-bar-height);
768
+ overflow-x: hidden;
769
+ flex-shrink: 0;
770
+ gap: 0.25rem;
771
+ transition: all 0.3s ease;
772
+ width: 100%;
773
+ box-sizing: border-box;
774
+ }
775
+
776
+ .tab-bar.hidden {
777
+ display: none;
778
+ }
779
+
780
+ .single-page-header {
781
+ display: flex;
782
+ align-items: center;
783
+ justify-content: space-between;
784
+ background: var(--glass-bg);
785
+ border-bottom: 1px solid var(--border-color);
786
+ padding: 0.5rem 1.25rem;
787
+ flex-shrink: 0;
788
+ }
789
+
790
+ .page-title {
791
+ font-size: 1.125rem;
792
+ font-weight: 600;
793
+ color: var(--text-primary);
794
+ }
795
+
796
+ .back-button {
797
+ display: flex;
798
+ align-items: center;
799
+ gap: 0.5rem;
800
+ padding: 0.375rem 0.75rem;
801
+ background: transparent;
802
+ border: 1px solid var(--border-color);
803
+ border-radius: 0.5rem;
804
+ color: var(--text-secondary);
805
+ text-decoration: none;
806
+ font-size: 0.8rem;
807
+ transition: all 0.3s ease;
808
+ cursor: pointer;
809
+ }
810
+
811
+ .back-button:hover {
812
+ background: var(--bg-secondary);
813
+ color: var(--text-primary);
814
+ border-color: var(--border-color);
815
+ }
816
+
817
+ .tab {
818
+ display: flex;
819
+ align-items: center;
820
+ gap: 0.5rem;
821
+ padding: 0.375rem 0.5rem;
822
+ margin: 0;
823
+ background: var(--bg-secondary);
824
+ border: 1px solid var(--border-color);
825
+ border-bottom: none;
826
+ border-radius: 0.75rem 0.75rem 0 0;
827
+ cursor: pointer;
828
+ transition: all 0.3s ease;
829
+ white-space: nowrap;
830
+ min-width: 100px;
831
+ max-width: 180px;
832
+ font-size: 0.8rem;
833
+ color: var(--text-secondary);
834
+ }
835
+
836
+ .tab:hover {
837
+ background: var(--bg-primary);
838
+ color: var(--text-primary);
839
+ }
840
+
841
+ .tab.active {
842
+ background: var(--bg-primary);
843
+ border-color: var(--accent-primary);
844
+ color: var(--accent-primary);
845
+ box-shadow: 0 -2px 4px rgba(37, 99, 235, 0.1);
846
+ }
847
+
848
+ .tab-title {
849
+ flex: 1;
850
+ overflow: hidden;
851
+ text-overflow: ellipsis;
852
+ white-space: nowrap;
853
+ min-width: 0;
854
+ }
855
+
856
+ .tab-close {
857
+ display: flex;
858
+ align-items: center;
859
+ justify-content: center;
860
+ width: 1rem;
861
+ height: 1rem;
862
+ border-radius: 50%;
863
+ background: none;
864
+ border: none;
865
+ cursor: pointer;
866
+ color: var(--text-muted);
867
+ transition: all 0.3s ease;
868
+ flex-shrink: 0;
869
+ }
870
+
871
+ .tab-close:hover {
872
+ background: var(--border-color);
873
+ color: var(--text-secondary);
874
+ }
875
+
876
+ .tab.active .tab-close:hover {
877
+ background: rgba(37, 99, 235, 0.1);
878
+ color: var(--accent-primary);
879
+ }
880
+
881
+ /* Tab overflow menu styles for mobile */
882
+ .tab-bar-wrapper {
883
+ display: flex;
884
+ align-items: center;
885
+ width: 100%;
886
+ background: var(--glass-bg);
887
+ border-bottom: 1px solid var(--border-color);
888
+ min-height: var(--tab-bar-height);
889
+ }
890
+
891
+ .tab-bar-visible {
892
+ display: flex;
893
+ align-items: center;
894
+ gap: 0.25rem;
895
+ flex: 1;
896
+ overflow: hidden;
897
+ min-height: var(--tab-bar-height);
898
+ }
899
+
900
+ .tab-more-container {
901
+ position: relative;
902
+ flex-shrink: 0;
903
+ }
904
+
905
+ .tab-more-btn {
906
+ display: none;
907
+ align-items: center;
908
+ gap: 0.25rem;
909
+ padding: 0.375rem 0.75rem;
910
+ background: var(--bg-secondary);
911
+ border: 1px solid var(--border-color);
912
+ border-radius: 0.5rem;
913
+ cursor: pointer;
914
+ font-size: 0.8rem;
915
+ color: var(--text-secondary);
916
+ transition: all 0.3s ease;
917
+ margin-right: 0.5rem;
918
+ white-space: nowrap;
919
+ }
920
+
921
+ .tab-more-btn:hover {
922
+ background: var(--bg-primary);
923
+ color: var(--accent-primary);
924
+ border-color: var(--accent-primary);
925
+ }
926
+
927
+ .tab-more-btn.active {
928
+ background: var(--accent-primary);
929
+ color: white;
930
+ border-color: var(--accent-primary);
931
+ }
932
+
933
+ .tab-overflow-menu {
934
+ position: absolute;
935
+ top: 100%;
936
+ right: 0;
937
+ min-width: 200px;
938
+ max-width: 280px;
939
+ background: var(--glass-bg);
940
+ backdrop-filter: blur(15px);
941
+ border: 1px solid var(--border-color);
942
+ border-radius: 0.75rem;
943
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
944
+ padding: 0.5rem;
945
+ z-index: 1002;
946
+ margin-top: 0.25rem;
947
+ opacity: 0;
948
+ visibility: hidden;
949
+ transform: translateY(-10px);
950
+ transition: all 0.3s ease;
951
+ }
952
+
953
+ .tab-overflow-menu.open {
954
+ opacity: 1;
955
+ visibility: visible;
956
+ transform: translateY(0);
957
+ }
958
+
959
+ .tab-overflow-item {
960
+ display: flex;
961
+ align-items: center;
962
+ justify-content: space-between;
963
+ padding: 0.5rem 0.75rem;
964
+ border-radius: 0.5rem;
965
+ cursor: pointer;
966
+ font-size: 0.8rem;
967
+ color: var(--text-secondary);
968
+ transition: all 0.3s ease;
969
+ gap: 0.5rem;
970
+ }
971
+
972
+ .tab-overflow-item:hover {
973
+ background: var(--bg-secondary);
974
+ color: var(--text-primary);
975
+ }
976
+
977
+ .tab-overflow-item.active {
978
+ background: rgba(37, 99, 235, 0.1);
979
+ color: var(--accent-primary);
980
+ }
981
+
982
+ .tab-overflow-item-title {
983
+ flex: 1;
984
+ overflow: hidden;
985
+ text-overflow: ellipsis;
986
+ white-space: nowrap;
987
+ }
988
+
989
+ .tab-overflow-item-close {
990
+ display: flex;
991
+ align-items: center;
992
+ justify-content: center;
993
+ width: 1.25rem;
994
+ height: 1.25rem;
995
+ border-radius: 50%;
996
+ background: none;
997
+ border: none;
998
+ cursor: pointer;
999
+ color: var(--text-muted);
1000
+ transition: all 0.3s ease;
1001
+ flex-shrink: 0;
1002
+ }
1003
+
1004
+ .tab-overflow-item-close:hover {
1005
+ background: var(--border-color);
1006
+ color: var(--danger);
1007
+ }
1008
+
1009
+ .tab-content-area {
1010
+ flex: 1;
1011
+ overflow: auto;
1012
+ width: 100%;
1013
+ height: 100%;
1014
+ min-height: 0;
1015
+ background: var(--bg-gradient);
1016
+ box-sizing: border-box;
1017
+ }
1018
+
1019
+ .enterprise-module {
1020
+ display: none;
1021
+ width: 100%;
1022
+ height: 100%;
1023
+ overflow: auto;
1024
+ box-sizing: border-box;
1025
+ }
1026
+
1027
+ .enterprise-module.active {
1028
+ display: block;
1029
+ }
1030
+
1031
+ .module-header {
1032
+ background: var(--glass-bg);
1033
+ backdrop-filter: blur(15px);
1034
+ border: 1px solid var(--border-color);
1035
+ border-radius: 1rem;
1036
+ padding: 0.75rem 1.25rem;
1037
+ margin: 0.75rem 1.25rem 0 1.25rem;
1038
+ box-shadow: var(--shadow);
1039
+ display: flex;
1040
+ align-items: flex-start;
1041
+ justify-content: space-between;
1042
+ gap: 1rem;
1043
+ flex-shrink: 0;
1044
+ }
1045
+
1046
+ .module-header-content {
1047
+ flex: 1;
1048
+ text-align: left;
1049
+ }
1050
+
1051
+ .module-title {
1052
+ font-size: 1.25rem;
1053
+ font-weight: 700;
1054
+ background: var(--accent-gradient);
1055
+ -webkit-background-clip: text;
1056
+ -webkit-text-fill-color: transparent;
1057
+ background-clip: text;
1058
+ margin-bottom: 0.375rem;
1059
+ line-height: 1.2;
1060
+ }
1061
+
1062
+ .module-description {
1063
+ font-size: 0.8rem;
1064
+ color: var(--text-secondary);
1065
+ margin-bottom: 0;
1066
+ line-height: 1.3;
1067
+ }
1068
+
1069
+ .module-actions {
1070
+ display: flex;
1071
+ align-items: flex-start;
1072
+ gap: 0.75rem;
1073
+ flex-wrap: wrap;
1074
+ flex-shrink: 0;
1075
+ }
1076
+
1077
+ .module-content {
1078
+ padding: 0 1.25rem 2rem 1.25rem;
1079
+ max-width: 100%;
1080
+ overflow: hidden;
1081
+ }
1082
+
1083
+ .layout-body.footer-hidden .module-content {
1084
+ padding-bottom: 0;
1085
+ }
1086
+
1087
+ .btn {
1088
+ display: inline-flex;
1089
+ align-items: center;
1090
+ justify-content: center;
1091
+ gap: 0.375rem;
1092
+ padding: 0.5rem 1rem;
1093
+ font-size: 0.8rem;
1094
+ font-weight: 500;
1095
+ border: none;
1096
+ border-radius: 0.75rem;
1097
+ cursor: pointer;
1098
+ text-decoration: none;
1099
+ transition: all 0.3s ease;
1100
+ white-space: nowrap;
1101
+ }
1102
+
1103
+ .btn-primary {
1104
+ background: var(--accent-gradient);
1105
+ color: white;
1106
+ box-shadow: 0 4px 15px rgba(37, 99, 235, 0.3);
1107
+ }
1108
+
1109
+ .btn-primary:hover {
1110
+ transform: translateY(-2px);
1111
+ box-shadow: 0 8px 25px rgba(37, 99, 235, 0.4);
1112
+ }
1113
+
1114
+ .btn-secondary {
1115
+ background: var(--glass-bg);
1116
+ color: var(--text-primary);
1117
+ border: 1px solid var(--border-color);
1118
+ }
1119
+
1120
+ .btn-secondary:hover {
1121
+ background: var(--bg-secondary);
1122
+ transform: translateY(-2px);
1123
+ }
1124
+
1125
+ .nav-section {
1126
+ padding: 0.75rem 0 0 0;
1127
+ border-bottom: 1px solid var(--border-color);
1128
+ }
1129
+
1130
+ .nav-section:last-child {
1131
+ border-bottom: none;
1132
+ }
1133
+
1134
+ .nav-section-header {
1135
+ display: flex;
1136
+ align-items: center;
1137
+ justify-content: space-between;
1138
+ padding: 0.5rem 1rem;
1139
+ cursor: pointer;
1140
+ transition: all 0.3s ease;
1141
+ border-radius: 0.75rem;
1142
+ margin: 0 0.75rem 0.375rem 0.75rem;
1143
+ position: relative;
1144
+ }
1145
+
1146
+ .nav-section-header:hover {
1147
+ background: var(--bg-secondary);
1148
+ }
1149
+
1150
+ .nav-section-title {
1151
+ font-size: 0.6875rem;
1152
+ font-weight: 600;
1153
+ color: var(--text-secondary);
1154
+ text-transform: uppercase;
1155
+ letter-spacing: 0.075em;
1156
+ margin: 0;
1157
+ flex: 1;
1158
+ }
1159
+
1160
+ .nav-chevron {
1161
+ color: var(--text-muted);
1162
+ transition: all 0.2s ease;
1163
+ display: flex;
1164
+ align-items: center;
1165
+ justify-content: center;
1166
+ }
1167
+
1168
+ .nav-section-header.expanded .nav-chevron {
1169
+ transform: rotate(0deg);
1170
+ }
1171
+
1172
+ .nav-section-header.collapsed .nav-chevron {
1173
+ transform: rotate(-90deg);
1174
+ }
1175
+
1176
+ .nav-section-content {
1177
+ overflow: hidden;
1178
+ transition: all 0.3s ease;
1179
+ padding-bottom: 0.75rem;
1180
+ }
1181
+
1182
+ .nav-section-content.expanded {
1183
+ max-height: 500px;
1184
+ opacity: 1;
1185
+ }
1186
+
1187
+ .nav-section-content.collapsed {
1188
+ max-height: 0;
1189
+ opacity: 0;
1190
+ padding-bottom: 0;
1191
+ }
1192
+
1193
+ .nav-menu {
1194
+ list-style: none;
1195
+ }
1196
+
1197
+ .nav-item {
1198
+ margin: 0 0.75rem;
1199
+ }
1200
+
1201
+ .nav-link {
1202
+ display: flex;
1203
+ align-items: center;
1204
+ gap: 0.75rem;
1205
+ padding: 0.5rem 0.75rem;
1206
+ color: var(--text-secondary);
1207
+ text-decoration: none;
1208
+ border-radius: 0.75rem;
1209
+ transition: all 0.3s ease;
1210
+ font-size: 0.8rem;
1211
+ position: relative;
1212
+ }
1213
+
1214
+ .nav-link:hover,
1215
+ .nav-link.active {
1216
+ background: var(--accent-gradient);
1217
+ color: white;
1218
+ transform: translateX(4px);
1219
+ box-shadow: var(--shadow);
1220
+ }
1221
+
1222
+ /* NEW: Multi-level menu styles */
1223
+ .nav-sub-menu {
1224
+ margin-left: 1.5rem;
1225
+ border-left: 1px solid var(--border-color);
1226
+ padding-left: 0.5rem;
1227
+ margin-top: 0.25rem;
1228
+ list-style: none;
1229
+ }
1230
+
1231
+ .nav-sub-item {
1232
+ margin: 0 0.5rem;
1233
+ }
1234
+
1235
+ .nav-sub-link {
1236
+ display: flex;
1237
+ align-items: center;
1238
+ gap: 0.5rem;
1239
+ padding: 0.375rem 0.5rem;
1240
+ color: var(--text-muted);
1241
+ text-decoration: none;
1242
+ border-radius: 0.5rem;
1243
+ transition: all 0.3s ease;
1244
+ font-size: 0.75rem;
1245
+ position: relative;
1246
+ }
1247
+
1248
+ .nav-sub-link:hover,
1249
+ .nav-sub-link.active {
1250
+ background: var(--accent-gradient);
1251
+ color: white;
1252
+ transform: translateX(2px);
1253
+ box-shadow: var(--shadow);
1254
+ }
1255
+
1256
+ .nav-item-with-children > .nav-link {
1257
+ position: relative;
1258
+ }
1259
+
1260
+ .nav-item-expand {
1261
+ position: absolute;
1262
+ right: 0.5rem;
1263
+ color: var(--text-muted);
1264
+ transition: all 0.2s ease;
1265
+ display: flex;
1266
+ align-items: center;
1267
+ justify-content: center;
1268
+ }
1269
+
1270
+ .nav-item-expand.expanded {
1271
+ transform: rotate(90deg);
1272
+ }
1273
+
1274
+ .nav-badge {
1275
+ background: var(--danger);
1276
+ color: white;
1277
+ font-size: 0.625rem;
1278
+ padding: 0.125rem 0.3rem;
1279
+ border-radius: 0.5rem;
1280
+ margin-left: auto;
1281
+ font-weight: 600;
1282
+ }
1283
+
1284
+ .menu-toggle {
1285
+ background: none;
1286
+ border: none;
1287
+ padding: 0.5rem;
1288
+ border-radius: 0.75rem;
1289
+ cursor: pointer;
1290
+ color: var(--text-secondary);
1291
+ transition: all 0.3s ease;
1292
+ }
1293
+
1294
+ .menu-toggle:hover {
1295
+ background: var(--bg-secondary);
1296
+ color: var(--text-primary);
1297
+ }
1298
+
1299
+ .persona-control {
1300
+ position: relative;
1301
+ display: flex;
1302
+ align-items: center;
1303
+ gap: 0.375rem;
1304
+ padding: 0.375rem;
1305
+ border-radius: 0.75rem;
1306
+ cursor: pointer;
1307
+ transition: all 0.3s ease;
1308
+ flex-shrink: 0;
1309
+ z-index: 10002;
1310
+ }
1311
+
1312
+ .persona-control:hover {
1313
+ background: var(--bg-secondary);
1314
+ }
1315
+
1316
+ .persona-avatar {
1317
+ width: 2rem;
1318
+ height: 2rem;
1319
+ border-radius: 50%;
1320
+ background: var(--accent-gradient);
1321
+ display: flex;
1322
+ align-items: center;
1323
+ justify-content: center;
1324
+ color: white;
1325
+ font-weight: 600;
1326
+ font-size: 0.75rem;
1327
+ flex-shrink: 0;
1328
+ }
1329
+
1330
+ .persona-role {
1331
+ font-size: 0.75rem;
1332
+ color: var(--text-secondary);
1333
+ white-space: nowrap;
1334
+ overflow: hidden;
1335
+ text-overflow: ellipsis;
1336
+ max-width: 100px;
1337
+ }
1338
+
1339
+ .persona-panel {
1340
+ position: absolute;
1341
+ top: 100%;
1342
+ right: 0;
1343
+ width: 300px;
1344
+ background: var(--glass-bg);
1345
+ backdrop-filter: blur(15px);
1346
+ border: 2px solid rgba(203, 213, 225, 0.8);
1347
+ border-radius: 1rem;
1348
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
1349
+ padding: 1rem;
1350
+ z-index: 10001;
1351
+ margin-top: 0.5rem;
1352
+ opacity: 0;
1353
+ visibility: hidden;
1354
+ transform: translateY(-10px);
1355
+ transition: all 0.3s ease;
1356
+ }
1357
+
1358
+ .persona-panel.open {
1359
+ opacity: 1;
1360
+ visibility: visible;
1361
+ transform: translateY(0);
1362
+ }
1363
+
1364
+ .persona-panel-header {
1365
+ display: flex;
1366
+ align-items: center;
1367
+ gap: 0.75rem;
1368
+ padding-bottom: 0.75rem;
1369
+ margin-bottom: 0.75rem;
1370
+ border-bottom: 2px solid rgba(226, 232, 240, 0.9);
1371
+ }
1372
+
1373
+ .persona-panel-avatar {
1374
+ width: 2.5rem;
1375
+ height: 2.5rem;
1376
+ border-radius: 50%;
1377
+ background: var(--accent-gradient);
1378
+ display: flex;
1379
+ align-items: center;
1380
+ justify-content: center;
1381
+ color: white;
1382
+ font-weight: 600;
1383
+ font-size: 0.875rem;
1384
+ }
1385
+
1386
+ .persona-panel-info h3 {
1387
+ font-size: 0.875rem;
1388
+ font-weight: 600;
1389
+ color: var(--text-primary);
1390
+ margin-bottom: 0.125rem;
1391
+ }
1392
+
1393
+ .persona-panel-info p {
1394
+ font-size: 0.75rem;
1395
+ color: var(--text-secondary);
1396
+ }
1397
+
1398
+ .persona-panel-section {
1399
+ padding-bottom: 0.75rem;
1400
+ margin-bottom: 0.75rem;
1401
+ border-bottom: 1px solid rgba(226, 232, 240, 0.8);
1402
+ }
1403
+
1404
+ .persona-panel-section:last-child {
1405
+ margin-bottom: 0;
1406
+ padding-bottom: 0;
1407
+ border-bottom: none;
1408
+ }
1409
+
1410
+ .persona-panel-section h4 {
1411
+ font-size: 0.75rem;
1412
+ font-weight: 600;
1413
+ color: var(--text-secondary);
1414
+ text-transform: uppercase;
1415
+ letter-spacing: 0.05em;
1416
+ margin-bottom: 0.5rem;
1417
+ }
1418
+
1419
+ .persona-panel-controls {
1420
+ display: flex;
1421
+ flex-direction: column;
1422
+ gap: 0.375rem;
1423
+ }
1424
+
1425
+ .persona-control-item {
1426
+ display: flex;
1427
+ align-items: center;
1428
+ justify-content: space-between;
1429
+ padding: 0.5rem 0.75rem;
1430
+ border-radius: 0.5rem;
1431
+ border: 1px solid transparent;
1432
+ transition: all 0.3s ease;
1433
+ cursor: pointer;
1434
+ font-size: 0.8rem;
1435
+ }
1436
+
1437
+ .persona-control-item:hover {
1438
+ background: var(--bg-secondary);
1439
+ border-color: rgba(203, 213, 225, 0.7);
1440
+ }
1441
+
1442
+ .persona-control-item.action {
1443
+ color: var(--text-primary);
1444
+ }
1445
+
1446
+ .persona-control-item.action:hover {
1447
+ color: var(--accent-primary);
1448
+ }
1449
+
1450
+ .persona-control-item.danger:hover {
1451
+ background: rgba(220, 38, 38, 0.1);
1452
+ color: var(--danger);
1453
+ }
1454
+
1455
+ .persona-control-label {
1456
+ display: flex;
1457
+ align-items: center;
1458
+ gap: 0.5rem;
1459
+ }
1460
+
1461
+ /* Notification Panel */
1462
+ .notification-bell {
1463
+ position: relative;
1464
+ display: flex;
1465
+ align-items: center;
1466
+ justify-content: center;
1467
+ width: 2.5rem;
1468
+ height: 2.5rem;
1469
+ border-radius: 50%;
1470
+ cursor: pointer;
1471
+ transition: all 0.3s ease;
1472
+ background: transparent;
1473
+ }
1474
+
1475
+ .notification-bell:hover {
1476
+ background: var(--bg-secondary);
1477
+ }
1478
+
1479
+ .notification-badge {
1480
+ position: absolute;
1481
+ top: 0.25rem;
1482
+ right: 0.25rem;
1483
+ background: var(--danger);
1484
+ color: white;
1485
+ font-size: 0.625rem;
1486
+ font-weight: 600;
1487
+ min-width: 1.125rem;
1488
+ height: 1.125rem;
1489
+ border-radius: 0.5625rem;
1490
+ display: flex;
1491
+ align-items: center;
1492
+ justify-content: center;
1493
+ padding: 0 0.25rem;
1494
+ border: 2px solid var(--glass-bg);
1495
+ }
1496
+
1497
+ .notification-panel {
1498
+ position: absolute;
1499
+ top: 100%;
1500
+ right: 0;
1501
+ width: 380px;
1502
+ max-height: 500px;
1503
+ background: var(--glass-bg);
1504
+ backdrop-filter: blur(15px);
1505
+ border: 2px solid rgba(203, 213, 225, 0.8);
1506
+ border-radius: 1rem;
1507
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
1508
+ z-index: 1001;
1509
+ margin-top: 0.5rem;
1510
+ opacity: 0;
1511
+ visibility: hidden;
1512
+ transform: translateY(-10px);
1513
+ transition: all 0.3s ease;
1514
+ display: flex;
1515
+ flex-direction: column;
1516
+ }
1517
+
1518
+ .notification-panel.open {
1519
+ opacity: 1;
1520
+ visibility: visible;
1521
+ transform: translateY(0);
1522
+ }
1523
+
1524
+ .notification-panel-header {
1525
+ display: flex;
1526
+ align-items: center;
1527
+ justify-content: space-between;
1528
+ padding: 1rem 1.25rem;
1529
+ border-bottom: 2px solid rgba(226, 232, 240, 0.9);
1530
+ }
1531
+
1532
+ .notification-panel-title {
1533
+ font-size: 1rem;
1534
+ font-weight: 600;
1535
+ color: var(--text-primary);
1536
+ }
1537
+
1538
+ .notification-panel-actions {
1539
+ display: flex;
1540
+ gap: 0.5rem;
1541
+ }
1542
+
1543
+ .notification-action-btn {
1544
+ font-size: 0.75rem;
1545
+ color: var(--primary);
1546
+ background: transparent;
1547
+ border: none;
1548
+ cursor: pointer;
1549
+ padding: 0.25rem 0.5rem;
1550
+ border-radius: 0.375rem;
1551
+ transition: all 0.2s ease;
1552
+ }
1553
+
1554
+ .notification-action-btn:hover {
1555
+ background: rgba(37, 99, 235, 0.1);
1556
+ }
1557
+
1558
+ .notification-panel-content {
1559
+ flex: 1;
1560
+ overflow-y: auto;
1561
+ padding: 0.5rem;
1562
+ }
1563
+
1564
+ .notification-item {
1565
+ display: flex;
1566
+ gap: 0.75rem;
1567
+ padding: 0.875rem;
1568
+ margin-bottom: 0.5rem;
1569
+ border-radius: 0.75rem;
1570
+ cursor: pointer;
1571
+ transition: all 0.2s ease;
1572
+ border: 1px solid transparent;
1573
+ }
1574
+
1575
+ .notification-item:hover {
1576
+ background: var(--bg-secondary);
1577
+ border-color: rgba(203, 213, 225, 0.7);
1578
+ }
1579
+
1580
+ .notification-item.unread {
1581
+ background: rgba(37, 99, 235, 0.05);
1582
+ }
1583
+
1584
+ .notification-icon {
1585
+ flex-shrink: 0;
1586
+ width: 2.5rem;
1587
+ height: 2.5rem;
1588
+ border-radius: 50%;
1589
+ display: flex;
1590
+ align-items: center;
1591
+ justify-content: center;
1592
+ font-size: 1.125rem;
1593
+ }
1594
+
1595
+ .notification-icon.success {
1596
+ background: rgba(22, 163, 74, 0.1);
1597
+ color: var(--success);
1598
+ }
1599
+
1600
+ .notification-icon.info {
1601
+ background: rgba(37, 99, 235, 0.1);
1602
+ color: var(--primary);
1603
+ }
1604
+
1605
+ .notification-icon.warning {
1606
+ background: rgba(217, 119, 6, 0.1);
1607
+ color: var(--warning);
1608
+ }
1609
+
1610
+ .notification-icon.error {
1611
+ background: rgba(220, 38, 38, 0.1);
1612
+ color: var(--danger);
1613
+ }
1614
+
1615
+ .notification-content {
1616
+ flex: 1;
1617
+ min-width: 0;
1618
+ }
1619
+
1620
+ .notification-title {
1621
+ font-size: 0.875rem;
1622
+ font-weight: 600;
1623
+ color: var(--text-primary);
1624
+ margin-bottom: 0.25rem;
1625
+ }
1626
+
1627
+ .notification-message {
1628
+ font-size: 0.8rem;
1629
+ color: var(--text-secondary);
1630
+ margin-bottom: 0.375rem;
1631
+ line-height: 1.4;
1632
+ }
1633
+
1634
+ .notification-time {
1635
+ font-size: 0.7rem;
1636
+ color: var(--text-muted);
1637
+ }
1638
+
1639
+ .notification-empty {
1640
+ text-align: center;
1641
+ padding: 3rem 2rem;
1642
+ color: var(--text-muted);
1643
+ }
1644
+
1645
+ .notification-empty-icon {
1646
+ font-size: 3rem;
1647
+ margin-bottom: 1rem;
1648
+ opacity: 0.3;
1649
+ }
1650
+
1651
+ .notification-filters {
1652
+ display: flex;
1653
+ align-items: center;
1654
+ justify-content: space-between;
1655
+ padding: 0.75rem 1rem;
1656
+ border-bottom: 1px solid rgba(226, 232, 240, 0.8);
1657
+ background: var(--bg-secondary);
1658
+ }
1659
+
1660
+ .notification-filter-tabs {
1661
+ display: flex;
1662
+ gap: 0.25rem;
1663
+ background: white;
1664
+ border-radius: 0.5rem;
1665
+ padding: 0.25rem;
1666
+ }
1667
+
1668
+ .notification-filter-tab {
1669
+ padding: 0.375rem 0.75rem;
1670
+ font-size: 0.75rem;
1671
+ font-weight: 500;
1672
+ color: var(--text-secondary);
1673
+ background: transparent;
1674
+ border: none;
1675
+ border-radius: 0.375rem;
1676
+ cursor: pointer;
1677
+ transition: all 0.2s ease;
1678
+ }
1679
+
1680
+ .notification-filter-tab:hover {
1681
+ background: var(--bg-secondary);
1682
+ }
1683
+
1684
+ .notification-filter-tab.active {
1685
+ background: var(--primary);
1686
+ color: white;
1687
+ }
1688
+
1689
+ .notification-grouping-dropdown {
1690
+ position: relative;
1691
+ }
1692
+
1693
+ .notification-grouping-btn {
1694
+ display: flex;
1695
+ align-items: center;
1696
+ gap: 0.375rem;
1697
+ padding: 0.375rem 0.625rem;
1698
+ font-size: 0.75rem;
1699
+ font-weight: 500;
1700
+ color: var(--text-secondary);
1701
+ background: white;
1702
+ border: 1px solid var(--border-color);
1703
+ border-radius: 0.375rem;
1704
+ cursor: pointer;
1705
+ transition: all 0.2s ease;
1706
+ }
1707
+
1708
+ .notification-grouping-btn:hover {
1709
+ border-color: var(--primary);
1710
+ color: var(--primary);
1711
+ }
1712
+
1713
+ .notification-group-header {
1714
+ padding: 0.5rem 0.875rem;
1715
+ font-size: 0.75rem;
1716
+ font-weight: 600;
1717
+ color: var(--text-secondary);
1718
+ text-transform: uppercase;
1719
+ letter-spacing: 0.05em;
1720
+ background: var(--bg-secondary);
1721
+ border-bottom: 1px solid rgba(226, 232, 240, 0.8);
1722
+ margin-bottom: 0.25rem;
1723
+ }
1724
+
1725
+ .view-mode-toggle {
1726
+ display: flex;
1727
+ align-items: center;
1728
+ background: var(--bg-secondary);
1729
+ border: 1px solid var(--border-color);
1730
+ border-radius: 0.5rem;
1731
+ padding: 0.125rem;
1732
+ gap: 0.125rem;
1733
+ }
1734
+
1735
+ .view-mode-btn {
1736
+ display: flex;
1737
+ align-items: center;
1738
+ justify-content: center;
1739
+ padding: 0.25rem 0.5rem;
1740
+ border-radius: 0.375rem;
1741
+ cursor: pointer;
1742
+ transition: all 0.3s ease;
1743
+ color: var(--text-secondary);
1744
+ background: transparent;
1745
+ border: none;
1746
+ font-size: 0.75rem;
1747
+ }
1748
+
1749
+ .view-mode-btn.active {
1750
+ background: var(--accent-gradient);
1751
+ color: white;
1752
+ }
1753
+
1754
+ .theme-toggle {
1755
+ display: flex;
1756
+ align-items: center;
1757
+ gap: 0.5rem;
1758
+ }
1759
+
1760
+ .theme-switch {
1761
+ position: relative;
1762
+ width: 2.5rem;
1763
+ height: 1.25rem;
1764
+ background: var(--bg-secondary);
1765
+ border: 1px solid var(--border-color);
1766
+ border-radius: 0.625rem;
1767
+ cursor: pointer;
1768
+ transition: all 0.3s ease;
1769
+ }
1770
+
1771
+ .theme-switch.active {
1772
+ background: var(--accent-primary);
1773
+ border-color: var(--accent-primary);
1774
+ }
1775
+
1776
+ .theme-switch-handle {
1777
+ position: absolute;
1778
+ top: 0.125rem;
1779
+ left: 0.125rem;
1780
+ width: 0.875rem;
1781
+ height: 0.875rem;
1782
+ background: white;
1783
+ border-radius: 50%;
1784
+ transition: all 0.3s ease;
1785
+ }
1786
+
1787
+ .theme-switch.active .theme-switch-handle {
1788
+ transform: translateX(1.125rem);
1789
+ }
1790
+
1791
+ /* Compact Mode Styles */
1792
+ .sidebar-collapsed .nav-section-title,
1793
+ .sidebar-collapsed .nav-badge,
1794
+ .sidebar-collapsed .persona-role {
1795
+ display: none;
1796
+ }
1797
+
1798
+ .sidebar-collapsed .nav-link {
1799
+ justify-content: center;
1800
+ padding: 0.75rem;
1801
+ margin: 0.25rem 0.5rem;
1802
+ }
1803
+
1804
+ .sidebar-collapsed .nav-section-header {
1805
+ justify-content: center;
1806
+ padding: 0.75rem;
1807
+ margin: 0.25rem 0.5rem;
1808
+ }
1809
+
1810
+ .sidebar-collapsed .nav-chevron {
1811
+ display: none;
1812
+ }
1813
+
1814
+ .sidebar-collapsed .nav-section-content {
1815
+ display: none;
1816
+ }
1817
+
1818
+ /* Compact navigation specific styles */
1819
+ .compact-navigation {
1820
+ padding: 0.5rem 0;
1821
+ width: 100%;
1822
+ overflow: visible;
1823
+ }
1824
+
1825
+ .compact-nav-item {
1826
+ margin: 0.25rem 0.5rem;
1827
+ position: relative;
1828
+ }
1829
+
1830
+ .compact-nav-link {
1831
+ display: flex;
1832
+ align-items: center;
1833
+ justify-content: center;
1834
+ padding: 0.75rem;
1835
+ color: var(--text-secondary);
1836
+ text-decoration: none;
1837
+ border-radius: 0.75rem;
1838
+ transition: all 0.2s ease;
1839
+ font-size: 0.8rem;
1840
+ position: relative;
1841
+ min-height: 3rem;
1842
+ width: 100%;
1843
+ box-sizing: border-box;
1844
+ }
1845
+
1846
+ .compact-nav-link:hover,
1847
+ .compact-nav-link.active {
1848
+ background: var(--accent-gradient);
1849
+ color: white;
1850
+ box-shadow: var(--shadow);
1851
+ }
1852
+
1853
+ .compact-nav-badge {
1854
+ position: absolute;
1855
+ top: 0.25rem;
1856
+ right: 0.25rem;
1857
+ background: var(--danger);
1858
+ color: white;
1859
+ font-size: 0.5rem;
1860
+ padding: 0.125rem 0.25rem;
1861
+ border-radius: 0.375rem;
1862
+ font-weight: 600;
1863
+ min-width: 1rem;
1864
+ text-align: center;
1865
+ line-height: 1;
1866
+ }
1867
+
1868
+ .section-tooltip {
1869
+ position: relative;
1870
+ }
1871
+
1872
+ .section-tooltip::after {
1873
+ content: attr(data-tooltip);
1874
+ position: absolute;
1875
+ left: calc(100% + 0.75rem);
1876
+ top: 50%;
1877
+ transform: translateY(-50%);
1878
+ background: var(--glass-bg);
1879
+ color: var(--text-primary);
1880
+ padding: 0.5rem 0.75rem;
1881
+ border-radius: 0.5rem;
1882
+ font-size: 0.75rem;
1883
+ white-space: nowrap;
1884
+ z-index: 1000;
1885
+ box-shadow: var(--shadow);
1886
+ backdrop-filter: blur(15px);
1887
+ border: 1px solid var(--border-color);
1888
+ opacity: 0;
1889
+ visibility: hidden;
1890
+ transition: all 0.2s ease;
1891
+ pointer-events: none;
1892
+ }
1893
+
1894
+ /* FIX: Only show tooltips after initialization */
1895
+ .enterprise-layout.initialized .section-tooltip:hover::after {
1896
+ opacity: 1;
1897
+ visibility: visible;
1898
+ }
1899
+
1900
+ /* Tablet responsive styles */
1901
+ @media (max-width: 1024px) and (min-width: 769px) {
1902
+ /* Reduce header info card padding on tablets */
1903
+ .header-info-card {
1904
+ padding: 0.3rem 0.6rem;
1905
+ gap: 0.4rem;
1906
+ }
1907
+
1908
+ .header-info-label {
1909
+ font-size: 0.5rem;
1910
+ }
1911
+
1912
+ .header-info-value {
1913
+ font-size: 0.75rem;
1914
+ }
1915
+
1916
+ .header-info-icon {
1917
+ width: 1rem;
1918
+ height: 1rem;
1919
+ }
1920
+
1921
+ .notification-bell {
1922
+ width: 2.25rem;
1923
+ height: 2.25rem;
1924
+ }
1925
+
1926
+ .logo-company {
1927
+ font-size: 1.1rem;
1928
+ }
1929
+
1930
+ .logo-tagline {
1931
+ font-size: 0.55rem;
1932
+ }
1933
+ }
1934
+
1935
+ /* Mobile responsive styles */
1936
+ @media (max-width: 768px) {
1937
+ .mobile-overlay {
1938
+ position: fixed;
1939
+ top: var(--header-height);
1940
+ left: 0;
1941
+ right: 0;
1942
+ bottom: 0;
1943
+ background: rgba(0, 0, 0, 0.5);
1944
+ z-index: 1000;
1945
+ opacity: 0;
1946
+ visibility: hidden;
1947
+ transition: opacity 0.3s ease, visibility 0.3s ease;
1948
+ }
1949
+
1950
+ .mobile-overlay.visible {
1951
+ opacity: 1;
1952
+ visibility: visible;
1953
+ }
1954
+
1955
+ .layout-sidebar {
1956
+ position: absolute;
1957
+ top: var(--header-height);
1958
+ left: 0;
1959
+ height: calc(100% - var(--header-height));
1960
+ width: 85vw;
1961
+ max-width: var(--sidebar-width);
1962
+ transform: translateX(-100%);
1963
+ z-index: 1001;
1964
+ }
1965
+
1966
+ .layout-sidebar.mobile-open {
1967
+ transform: translateX(0);
1968
+ }
1969
+
1970
+ .tab-bar {
1971
+ padding: 0;
1972
+ margin: 0;
1973
+ width: 100%;
1974
+ }
1975
+
1976
+ /* Mobile tab overflow - show only 2 tabs + more button */
1977
+ .tab-bar-visible .tab {
1978
+ display: none;
1979
+ }
1980
+
1981
+ .tab-bar-visible .tab:nth-child(-n+2) {
1982
+ display: flex;
1983
+ }
1984
+
1985
+ .tab-more-btn {
1986
+ display: flex;
1987
+ }
1988
+
1989
+ .tab {
1990
+ min-width: 80px;
1991
+ max-width: 120px;
1992
+ padding: 0.25rem 0.5rem;
1993
+ margin: 0;
1994
+ font-size: 0.7rem;
1995
+ }
1996
+
1997
+ .single-page-header {
1998
+ padding: 0.375rem 0.75rem;
1999
+ }
2000
+
2001
+ .page-title {
2002
+ font-size: 1rem;
2003
+ }
2004
+
2005
+ .module-header {
2006
+ margin: 1rem;
2007
+ padding: 1rem;
2008
+ flex-direction: column;
2009
+ align-items: flex-start;
2010
+ gap: 0.75rem;
2011
+ }
2012
+
2013
+ .module-content {
2014
+ padding: 1rem;
2015
+ }
2016
+
2017
+ .footer-left,
2018
+ .footer-right {
2019
+ gap: 0.5rem;
2020
+ }
2021
+
2022
+ .footer-environment {
2023
+ font-size: 0.5rem;
2024
+ }
2025
+
2026
+ .breadcrumb-container {
2027
+ display: none;
2028
+ }
2029
+
2030
+ .header-center {
2031
+ display: none;
2032
+ }
2033
+
2034
+ /* Hide Entity & FY info cards on mobile to make room for persona */
2035
+ .header-info-section {
2036
+ display: none;
2037
+ }
2038
+
2039
+ /* Ensure header-right elements are properly spaced and visible */
2040
+ .header-right {
2041
+ gap: 0.5rem;
2042
+ flex-wrap: nowrap;
2043
+ flex-shrink: 0;
2044
+ }
2045
+
2046
+ /* Adjust notification bell size for mobile */
2047
+ .notification-bell {
2048
+ width: 2.25rem;
2049
+ height: 2.25rem;
2050
+ flex-shrink: 0;
2051
+ }
2052
+
2053
+ /* Ensure persona-control is always visible on mobile */
2054
+ .persona-control {
2055
+ display: flex !important;
2056
+ flex-shrink: 0;
2057
+ z-index: 1001;
2058
+ }
2059
+
2060
+ /* Make notification panel full width on mobile */
2061
+ .notification-panel {
2062
+ position: fixed;
2063
+ left: 50%;
2064
+ right: auto;
2065
+ transform: translateX(-50%);
2066
+ width: calc(100vw - 2rem);
2067
+ max-width: 380px;
2068
+ }
2069
+
2070
+ .notification-panel.open {
2071
+ transform: translateX(-50%) translateY(0);
2072
+ }
2073
+
2074
+ /* Adjust persona panel for mobile - fixed position for better visibility */
2075
+ .persona-panel {
2076
+ position: fixed;
2077
+ top: var(--header-height);
2078
+ right: 0.5rem;
2079
+ left: auto;
2080
+ width: calc(100vw - 1rem);
2081
+ max-width: 300px;
2082
+ margin-top: 0.25rem;
2083
+ }
2084
+
2085
+ /* Make logo smaller on mobile */
2086
+ .logo-company {
2087
+ font-size: 1rem;
2088
+ }
2089
+
2090
+ .logo-tagline {
2091
+ font-size: 0.5rem;
2092
+ }
2093
+
2094
+ .persona-role {
2095
+ display: none;
2096
+ }
2097
+ }
2098
+
2099
+ /* Extra small mobile (phones) */
2100
+ @media (max-width: 480px) {
2101
+ .layout-header {
2102
+ padding: 0 0.5rem;
2103
+ height: 3rem;
2104
+ }
2105
+
2106
+ .header-left {
2107
+ gap: 0.5rem;
2108
+ }
2109
+
2110
+ .menu-toggle {
2111
+ width: 2rem;
2112
+ height: 2rem;
2113
+ padding: 0.25rem;
2114
+ }
2115
+
2116
+ .logo-company {
2117
+ font-size: 0.875rem;
2118
+ }
2119
+
2120
+ .logo-tagline {
2121
+ display: none;
2122
+ }
2123
+
2124
+ .notification-bell {
2125
+ width: 2rem;
2126
+ height: 2rem;
2127
+ }
2128
+
2129
+ .notification-panel {
2130
+ width: calc(100vw - 1rem);
2131
+ max-width: 100%;
2132
+ right: -0.25rem;
2133
+ }
2134
+
2135
+ .notification-filter-tab {
2136
+ padding: 0.25rem 0.5rem;
2137
+ font-size: 0.65rem;
2138
+ }
2139
+
2140
+ .notification-grouping-btn {
2141
+ font-size: 0.65rem;
2142
+ padding: 0.25rem 0.5rem;
2143
+ }
2144
+
2145
+ .tab {
2146
+ min-width: 60px;
2147
+ max-width: 100px;
2148
+ padding: 0.25rem 0.375rem;
2149
+ font-size: 0.65rem;
2150
+ }
2151
+
2152
+ .module-header {
2153
+ margin: 0.75rem;
2154
+ padding: 0.75rem;
2155
+ }
2156
+
2157
+ .module-content {
2158
+ padding: 0.75rem;
2159
+ }
2160
+
2161
+ .header-right {
2162
+ gap: 0.375rem;
2163
+ }
2164
+
2165
+ /* Smaller persona avatar on extra small screens */
2166
+ .persona-avatar {
2167
+ width: 1.75rem;
2168
+ height: 1.75rem;
2169
+ font-size: 0.65rem;
2170
+ }
2171
+ }
2172
2172
  `;
2173
2173
  }, [config.branding.colors, config.layout, footerVisible]);
2174
2174
  // Apply theme and styles