web-mojo 2.2.77 → 2.2.79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/admin.cjs.js +1 -1
  3. package/dist/admin.cjs.js.map +1 -1
  4. package/dist/admin.css +880 -0
  5. package/dist/admin.es.js +1 -1
  6. package/dist/admin.es.js.map +1 -1
  7. package/dist/auth.cjs.js +1 -1
  8. package/dist/auth.es.js +1 -1
  9. package/dist/charts.cjs.js +1 -1
  10. package/dist/charts.es.js +1 -1
  11. package/dist/chunks/ChatView-CJAGPu_V.js +2 -0
  12. package/dist/chunks/{ChatView-DqOcQ7X3.js.map → ChatView-CJAGPu_V.js.map} +1 -1
  13. package/dist/chunks/ChatView-DeYslqq6.js +2 -0
  14. package/dist/chunks/{ChatView-CAiYnmUh.js.map → ChatView-DeYslqq6.js.map} +1 -1
  15. package/dist/chunks/Dialog-Blz5pT9W.js +3 -0
  16. package/dist/chunks/Dialog-Blz5pT9W.js.map +1 -0
  17. package/dist/chunks/Dialog-_LaV3jy1.js +3 -0
  18. package/dist/chunks/Dialog-_LaV3jy1.js.map +1 -0
  19. package/dist/chunks/FormView-8YcQbicn.js +3 -0
  20. package/dist/chunks/FormView-8YcQbicn.js.map +1 -0
  21. package/dist/chunks/FormView-BJO7sGAG.js +3 -0
  22. package/dist/chunks/FormView-BJO7sGAG.js.map +1 -0
  23. package/dist/chunks/{MetricsMiniChartWidget-CAw34pnw.js → MetricsMiniChartWidget-BuoPd6Ri.js} +2 -2
  24. package/dist/chunks/{MetricsMiniChartWidget-CAw34pnw.js.map → MetricsMiniChartWidget-BuoPd6Ri.js.map} +1 -1
  25. package/dist/chunks/{MetricsMiniChartWidget-DzIavZX8.js → MetricsMiniChartWidget-C0MaUMxB.js} +2 -2
  26. package/dist/chunks/{MetricsMiniChartWidget-DzIavZX8.js.map → MetricsMiniChartWidget-C0MaUMxB.js.map} +1 -1
  27. package/dist/chunks/MiniPieChart-BP1bYCGv.js +2 -0
  28. package/dist/chunks/MiniPieChart-BP1bYCGv.js.map +1 -0
  29. package/dist/chunks/MiniPieChart-yRGFM7Yn.js +2 -0
  30. package/dist/chunks/MiniPieChart-yRGFM7Yn.js.map +1 -0
  31. package/dist/chunks/MiniSeriesChart-CNNEnNnK.js +2 -0
  32. package/dist/chunks/MiniSeriesChart-CNNEnNnK.js.map +1 -0
  33. package/dist/chunks/MiniSeriesChart-DTlUluHV.js +2 -0
  34. package/dist/chunks/MiniSeriesChart-DTlUluHV.js.map +1 -0
  35. package/dist/chunks/Modal-BHRX_nwz.js +2 -0
  36. package/dist/chunks/{Modal-DrNQaqOa.js.map → Modal-BHRX_nwz.js.map} +1 -1
  37. package/dist/chunks/{Modal--Ob_H2iO.js → Modal-f18CuodE.js} +2 -2
  38. package/dist/chunks/{Modal--Ob_H2iO.js.map → Modal-f18CuodE.js.map} +1 -1
  39. package/dist/chunks/{PDFViewer-DIBj2O8e.js → PDFViewer-BYOuiYWu.js} +2 -2
  40. package/dist/chunks/{PDFViewer-DIBj2O8e.js.map → PDFViewer-BYOuiYWu.js.map} +1 -1
  41. package/dist/chunks/{PDFViewer-DA6kz3_E.js → PDFViewer-CQGLxxe6.js} +2 -2
  42. package/dist/chunks/{PDFViewer-DA6kz3_E.js.map → PDFViewer-CQGLxxe6.js.map} +1 -1
  43. package/dist/chunks/{Passkeys-B2cgwp7Z.js → Passkeys-BKj8hXj5.js} +2 -2
  44. package/dist/chunks/{Passkeys-B2cgwp7Z.js.map → Passkeys-BKj8hXj5.js.map} +1 -1
  45. package/dist/chunks/Passkeys-GXFL6xrU.js +2 -0
  46. package/dist/chunks/{Passkeys-BjdXmjlu.js.map → Passkeys-GXFL6xrU.js.map} +1 -1
  47. package/dist/chunks/{TokenManager-3sHXNyGO.js → TokenManager-DI79oM25.js} +2 -2
  48. package/dist/chunks/{TokenManager-3sHXNyGO.js.map → TokenManager-DI79oM25.js.map} +1 -1
  49. package/dist/chunks/{TokenManager-B98Y3D44.js → TokenManager-fjSO1cdB.js} +2 -2
  50. package/dist/chunks/{TokenManager-B98Y3D44.js.map → TokenManager-fjSO1cdB.js.map} +1 -1
  51. package/dist/chunks/{UserProfileView-CObNuOj-.js → UserProfileView-CkDqEHlF.js} +2 -2
  52. package/dist/chunks/{UserProfileView-CObNuOj-.js.map → UserProfileView-CkDqEHlF.js.map} +1 -1
  53. package/dist/chunks/{UserProfileView-D7hSFgr-.js → UserProfileView-vBbWK7yp.js} +2 -2
  54. package/dist/chunks/{UserProfileView-D7hSFgr-.js.map → UserProfileView-vBbWK7yp.js.map} +1 -1
  55. package/dist/chunks/WebApp-Bu01LHe3.js +2 -0
  56. package/dist/chunks/{WebApp-D6rnlV2T.js.map → WebApp-Bu01LHe3.js.map} +1 -1
  57. package/dist/chunks/WebApp-Do6JjXuj.js +2 -0
  58. package/dist/chunks/{WebApp-BCWzyUqi.js.map → WebApp-Do6JjXuj.js.map} +1 -1
  59. package/dist/chunks/{index-DnD4XyK9.js → index-D6-NC5vF.js} +2 -2
  60. package/dist/chunks/{index-DnD4XyK9.js.map → index-D6-NC5vF.js.map} +1 -1
  61. package/dist/chunks/{index-DKAZI8Tr.js → index-DrRY_Ggo.js} +2 -2
  62. package/dist/chunks/{index-DKAZI8Tr.js.map → index-DrRY_Ggo.js.map} +1 -1
  63. package/dist/chunks/{version-Di_mTsi1.js → version-C0bPZQNt.js} +2 -2
  64. package/dist/chunks/{version-Di_mTsi1.js.map → version-C0bPZQNt.js.map} +1 -1
  65. package/dist/chunks/{version-DcHmzGeU.js → version-yeiLhs1d.js} +2 -2
  66. package/dist/chunks/{version-DcHmzGeU.js.map → version-yeiLhs1d.js.map} +1 -1
  67. package/dist/css/web-mojo.css +1 -1
  68. package/dist/docit.cjs.js +1 -1
  69. package/dist/docit.es.js +1 -1
  70. package/dist/index.cjs.js +1 -1
  71. package/dist/index.cjs.js.map +1 -1
  72. package/dist/index.es.js +1 -1
  73. package/dist/index.es.js.map +1 -1
  74. package/dist/lightbox.cjs.js +1 -1
  75. package/dist/lightbox.es.js +1 -1
  76. package/dist/map.cjs.js +1 -1
  77. package/dist/map.es.js +1 -1
  78. package/dist/user-profile.cjs.js +1 -1
  79. package/dist/user-profile.es.js +1 -1
  80. package/dist/web-mojo.lite.iife.js +120 -1
  81. package/dist/web-mojo.lite.iife.js.map +1 -1
  82. package/dist/web-mojo.lite.iife.min.js +5 -5
  83. package/dist/web-mojo.lite.iife.min.js.map +1 -1
  84. package/package.json +1 -1
  85. package/dist/chunks/ChatView-CAiYnmUh.js +0 -2
  86. package/dist/chunks/ChatView-DqOcQ7X3.js +0 -2
  87. package/dist/chunks/Dialog-BzvvJnK1.js +0 -3
  88. package/dist/chunks/Dialog-BzvvJnK1.js.map +0 -1
  89. package/dist/chunks/Dialog-Fu9AEl7W.js +0 -3
  90. package/dist/chunks/Dialog-Fu9AEl7W.js.map +0 -1
  91. package/dist/chunks/FormView-BdYPU1Px.js +0 -3
  92. package/dist/chunks/FormView-BdYPU1Px.js.map +0 -1
  93. package/dist/chunks/FormView-DP-iCm9r.js +0 -3
  94. package/dist/chunks/FormView-DP-iCm9r.js.map +0 -1
  95. package/dist/chunks/Modal-DrNQaqOa.js +0 -2
  96. package/dist/chunks/Passkeys-BjdXmjlu.js +0 -2
  97. package/dist/chunks/WebApp-BCWzyUqi.js +0 -2
  98. package/dist/chunks/WebApp-D6rnlV2T.js +0 -2
package/dist/admin.css CHANGED
@@ -619,3 +619,883 @@
619
619
  overflow: visible;
620
620
  }
621
621
  }
622
+
623
+ /* ─── Admin Assistant ─────────────────────────────────── */
624
+
625
+ /* ═══════════════════════════════════════════════════════════════
626
+ Assistant Chat Interface
627
+ Clean, modern AI chat UI inspired by Claude/ChatGPT
628
+ ═══════════════════════════════════════════════════════════════ */
629
+
630
+ /* Make modal header a minimal floating close button */
631
+ .assistant-view {
632
+ height: 100%;
633
+ min-height: 0;
634
+ }
635
+
636
+ .modal-fullscreen:has(.assistant-view) .modal-header {
637
+ position: absolute;
638
+ top: 8px;
639
+ right: 12px;
640
+ z-index: 10;
641
+ border: none;
642
+ background: transparent;
643
+ padding: 0;
644
+ }
645
+
646
+ .modal-fullscreen:has(.assistant-view) .modal-header .modal-title {
647
+ display: none;
648
+ }
649
+
650
+ .modal-fullscreen:has(.assistant-view) .modal-header .btn-close {
651
+ opacity: 0.5;
652
+ margin: 0;
653
+ padding: 8px;
654
+ }
655
+
656
+ .modal-fullscreen:has(.assistant-view) .modal-header .btn-close:hover {
657
+ opacity: 1;
658
+ }
659
+
660
+ .modal-fullscreen:has(.assistant-view) .modal-body {
661
+ padding: 0;
662
+ }
663
+
664
+ .modal-fullscreen:has(.assistant-view) .modal-footer {
665
+ display: none;
666
+ }
667
+
668
+ .assistant-layout {
669
+ display: flex;
670
+ height: 100vh;
671
+ min-height: 0;
672
+ }
673
+
674
+ /* ── Sidebar ──────────────────────────────────────────────── */
675
+
676
+ .assistant-sidebar {
677
+ width: 260px;
678
+ min-width: 260px;
679
+ border-right: 1px solid var(--bs-border-color);
680
+ display: flex;
681
+ flex-direction: column;
682
+ overflow: hidden;
683
+ background: #f7f7f8;
684
+ }
685
+
686
+ .assistant-conversation-list {
687
+ display: flex;
688
+ flex-direction: column;
689
+ height: 100%;
690
+ overflow: hidden;
691
+ }
692
+
693
+ .conversation-list-header {
694
+ padding: 12px !important;
695
+ }
696
+
697
+ .conversation-list-header .btn {
698
+ border-radius: 8px;
699
+ font-size: 0.85rem;
700
+ font-weight: 500;
701
+ padding: 8px 16px;
702
+ }
703
+
704
+ .conversation-list-items {
705
+ flex: 1;
706
+ overflow-y: auto;
707
+ padding: 4px 8px;
708
+ }
709
+
710
+ .conversation-date-header {
711
+ font-size: 0.65rem;
712
+ letter-spacing: 0.08em;
713
+ color: var(--bs-secondary);
714
+ padding: 12px 8px 4px !important;
715
+ margin: 0;
716
+ }
717
+
718
+ .conversation-date-header:first-child {
719
+ padding-top: 4px !important;
720
+ }
721
+
722
+ .conversation-item {
723
+ cursor: pointer;
724
+ transition: background-color 0.15s;
725
+ border-radius: 8px;
726
+ padding: 8px 10px;
727
+ margin-bottom: 2px;
728
+ border: none;
729
+ }
730
+
731
+ .conversation-item:hover {
732
+ background-color: rgba(0, 0, 0, 0.06);
733
+ }
734
+
735
+ .conversation-item.active {
736
+ background-color: rgba(0, 0, 0, 0.1);
737
+ }
738
+
739
+ .conversation-title {
740
+ font-size: 0.84rem;
741
+ color: var(--bs-body-color);
742
+ }
743
+
744
+ .conversation-time {
745
+ font-size: 0.72rem;
746
+ line-height: 1.2;
747
+ margin-top: 1px;
748
+ }
749
+
750
+ .conversation-delete {
751
+ opacity: 0;
752
+ transition: opacity 0.15s;
753
+ }
754
+
755
+ .conversation-item:hover .conversation-delete {
756
+ opacity: 0.5;
757
+ }
758
+
759
+ .conversation-delete:hover {
760
+ opacity: 1 !important;
761
+ }
762
+
763
+ /* ── Main Area ────────────────────────────────────────────── */
764
+
765
+ .assistant-main {
766
+ flex: 1;
767
+ display: flex;
768
+ flex-direction: column;
769
+ min-width: 0;
770
+ overflow: hidden;
771
+ background: #fff;
772
+ }
773
+
774
+ /* ── Welcome State ────────────────────────────────────────── */
775
+
776
+ .assistant-welcome {
777
+ flex: 1;
778
+ display: flex;
779
+ align-items: center;
780
+ justify-content: center;
781
+ min-height: 0;
782
+ }
783
+
784
+ .assistant-welcome-content {
785
+ text-align: center;
786
+ max-width: 480px;
787
+ padding: 32px 24px;
788
+ }
789
+
790
+ .assistant-welcome-icon {
791
+ font-size: 2.5rem;
792
+ color: var(--bs-primary);
793
+ margin-bottom: 16px;
794
+ opacity: 0.8;
795
+ }
796
+
797
+ .assistant-welcome-title {
798
+ font-size: 1.5rem;
799
+ font-weight: 600;
800
+ color: var(--bs-body-color);
801
+ margin-bottom: 6px;
802
+ }
803
+
804
+ .assistant-welcome-subtitle {
805
+ font-size: 1rem;
806
+ color: var(--bs-secondary-color);
807
+ margin-bottom: 28px;
808
+ }
809
+
810
+ .assistant-suggestions {
811
+ display: flex;
812
+ flex-direction: column;
813
+ gap: 8px;
814
+ max-width: 320px;
815
+ margin: 0 auto;
816
+ }
817
+
818
+ .assistant-suggestion {
819
+ display: flex;
820
+ align-items: center;
821
+ gap: 10px;
822
+ padding: 12px 16px;
823
+ border: 1px solid var(--bs-border-color);
824
+ border-radius: 12px;
825
+ background: #fff;
826
+ color: var(--bs-body-color);
827
+ font-size: 0.875rem;
828
+ cursor: pointer;
829
+ transition: all 0.15s ease;
830
+ text-align: left;
831
+ }
832
+
833
+ .assistant-suggestion:hover {
834
+ background: #f7f7f8;
835
+ border-color: var(--bs-primary);
836
+ color: var(--bs-primary);
837
+ }
838
+
839
+ .assistant-suggestion i {
840
+ font-size: 1rem;
841
+ opacity: 0.7;
842
+ flex-shrink: 0;
843
+ }
844
+
845
+ /* ── Chat Area ────────────────────────────────────────────── */
846
+
847
+ .assistant-chat-area {
848
+ flex: 1;
849
+ min-height: 0;
850
+ display: flex;
851
+ flex-direction: column;
852
+ overflow: hidden;
853
+ }
854
+
855
+ .assistant-chat-area .chat-view {
856
+ height: 100%;
857
+ }
858
+
859
+ .assistant-chat-area .chat-container {
860
+ height: 100%;
861
+ display: flex;
862
+ flex-direction: column;
863
+ border: none;
864
+ border-radius: 0;
865
+ }
866
+
867
+ .assistant-chat-area .chat-messages {
868
+ flex: 1;
869
+ overflow-y: auto;
870
+ padding: 24px;
871
+ max-width: 800px;
872
+ width: 100%;
873
+ margin: 0 auto;
874
+ }
875
+
876
+ /* Clean up message styling inside assistant */
877
+ .assistant-chat-area .chat-theme-compact .message-item {
878
+ border-bottom: none;
879
+ padding: 12px 0;
880
+ }
881
+
882
+ .assistant-chat-area .chat-theme-compact .message-item:hover {
883
+ background: transparent;
884
+ }
885
+
886
+ .assistant-chat-area .message-avatar {
887
+ width: 28px;
888
+ height: 28px;
889
+ font-size: 0.7rem;
890
+ }
891
+
892
+ .assistant-chat-area .chat-message.message-assistant .message-avatar {
893
+ background: var(--bs-primary) !important;
894
+ color: #fff;
895
+ }
896
+
897
+ .assistant-chat-area .message-text {
898
+ font-size: 0.9rem;
899
+ line-height: 1.65;
900
+ }
901
+
902
+ /* ── Custom Input Area ────────────────────────────────────── */
903
+
904
+ .assistant-input-wrapper {
905
+ flex-shrink: 0;
906
+ padding: 0 24px 20px;
907
+ max-width: 800px;
908
+ width: 100%;
909
+ margin: 0 auto;
910
+ }
911
+
912
+ .assistant-input-box {
913
+ display: flex;
914
+ align-items: flex-end;
915
+ border: 1px solid var(--bs-border-color);
916
+ border-radius: 16px;
917
+ padding: 8px 8px 8px 18px;
918
+ background: #fff;
919
+ box-shadow: 0 1px 6px rgba(0, 0, 0, 0.06);
920
+ transition: border-color 0.2s, box-shadow 0.2s;
921
+ }
922
+
923
+ .assistant-input-box:focus-within {
924
+ border-color: var(--bs-primary);
925
+ box-shadow: 0 1px 8px rgba(var(--bs-primary-rgb), 0.12);
926
+ }
927
+
928
+ .assistant-input {
929
+ flex: 1;
930
+ border: none;
931
+ outline: none;
932
+ resize: none;
933
+ font-size: 0.9rem;
934
+ line-height: 1.5;
935
+ max-height: 200px;
936
+ padding: 6px 0;
937
+ background: transparent;
938
+ color: var(--bs-body-color);
939
+ }
940
+
941
+ .assistant-input::placeholder {
942
+ color: var(--bs-secondary-color);
943
+ opacity: 0.7;
944
+ }
945
+
946
+ .assistant-send-btn {
947
+ width: 34px;
948
+ height: 34px;
949
+ border-radius: 10px;
950
+ border: none;
951
+ background: var(--bs-primary);
952
+ color: #fff;
953
+ display: flex;
954
+ align-items: center;
955
+ justify-content: center;
956
+ cursor: pointer;
957
+ flex-shrink: 0;
958
+ transition: background-color 0.15s, opacity 0.15s;
959
+ font-size: 1rem;
960
+ }
961
+
962
+ .assistant-send-btn:hover {
963
+ background: var(--bs-primary);
964
+ opacity: 0.85;
965
+ }
966
+
967
+ .assistant-send-btn:disabled {
968
+ opacity: 0.4;
969
+ cursor: not-allowed;
970
+ }
971
+
972
+ .assistant-stop-btn {
973
+ width: 34px;
974
+ height: 34px;
975
+ border-radius: 10px;
976
+ border: 2px solid var(--bs-secondary-color);
977
+ background: transparent;
978
+ color: var(--bs-secondary-color);
979
+ display: flex;
980
+ align-items: center;
981
+ justify-content: center;
982
+ cursor: pointer;
983
+ flex-shrink: 0;
984
+ transition: border-color 0.15s, color 0.15s;
985
+ font-size: 0.9rem;
986
+ }
987
+
988
+ .assistant-stop-btn:hover {
989
+ border-color: var(--bs-danger);
990
+ color: var(--bs-danger);
991
+ }
992
+
993
+ .assistant-input-footer {
994
+ display: flex;
995
+ align-items: center;
996
+ gap: 8px;
997
+ padding: 6px 4px 0;
998
+ font-size: 0.72rem;
999
+ color: var(--bs-secondary-color);
1000
+ }
1001
+
1002
+ /* ── Connection Status Dot ────────────────────────────────── */
1003
+
1004
+ .status-dot {
1005
+ width: 7px;
1006
+ height: 7px;
1007
+ border-radius: 50%;
1008
+ display: inline-block;
1009
+ background: var(--bs-secondary);
1010
+ flex-shrink: 0;
1011
+ }
1012
+
1013
+ .status-dot.connected {
1014
+ background: var(--bs-success);
1015
+ }
1016
+
1017
+ .status-dot.reconnecting {
1018
+ background: var(--bs-warning);
1019
+ animation: pulse-dot 1.2s infinite;
1020
+ }
1021
+
1022
+ .status-dot.disconnected {
1023
+ background: var(--bs-danger);
1024
+ }
1025
+
1026
+ @keyframes pulse-dot {
1027
+ 0%, 100% { opacity: 1; }
1028
+ 50% { opacity: 0.4; }
1029
+ }
1030
+
1031
+ /* ── Thinking Indicator ───────────────────────────────────── */
1032
+
1033
+ .chat-thinking {
1034
+ padding: 12px 0;
1035
+ max-width: 800px;
1036
+ margin: 0 auto;
1037
+ width: 100%;
1038
+ }
1039
+
1040
+ .chat-thinking-content {
1041
+ display: inline-flex;
1042
+ align-items: center;
1043
+ gap: 10px;
1044
+ padding: 10px 16px;
1045
+ background: #f7f7f8;
1046
+ border-radius: 16px;
1047
+ font-size: 0.84rem;
1048
+ color: var(--bs-secondary-color);
1049
+ }
1050
+
1051
+ .chat-thinking-dots {
1052
+ display: inline-flex;
1053
+ gap: 3px;
1054
+ }
1055
+
1056
+ .chat-thinking-dots span {
1057
+ width: 5px;
1058
+ height: 5px;
1059
+ border-radius: 50%;
1060
+ background: var(--bs-secondary);
1061
+ animation: thinking-bounce 1.4s infinite ease-in-out both;
1062
+ }
1063
+
1064
+ .chat-thinking-dots span:nth-child(1) { animation-delay: -0.32s; }
1065
+ .chat-thinking-dots span:nth-child(2) { animation-delay: -0.16s; }
1066
+ .chat-thinking-dots span:nth-child(3) { animation-delay: 0s; }
1067
+
1068
+ @keyframes thinking-bounce {
1069
+ 0%, 80%, 100% { transform: scale(0); }
1070
+ 40% { transform: scale(1); }
1071
+ }
1072
+
1073
+ /* ── Assistant Message Styling ────────────────────────────── */
1074
+
1075
+ .chat-message.message-assistant .message-text {
1076
+ color: var(--bs-body-color);
1077
+ }
1078
+
1079
+ .message-tool-calls a {
1080
+ text-decoration: none;
1081
+ color: var(--bs-secondary-color);
1082
+ font-size: 0.8rem;
1083
+ }
1084
+
1085
+ .message-tool-calls a:hover {
1086
+ text-decoration: underline;
1087
+ }
1088
+
1089
+ /* ── Data Blocks (tables, charts, stats) ──────────────────── */
1090
+
1091
+ .assistant-block {
1092
+ margin-top: 12px;
1093
+ }
1094
+
1095
+ /* ── Stat blocks (always inline) ── */
1096
+
1097
+ .assistant-block .d-flex.flex-wrap {
1098
+ gap: 8px !important;
1099
+ }
1100
+
1101
+ .assistant-stat-card {
1102
+ min-width: 100px;
1103
+ flex: 1 1 100px;
1104
+ border-color: var(--bs-border-color);
1105
+ border-radius: 8px;
1106
+ }
1107
+
1108
+ .assistant-stat-card .card-body {
1109
+ padding: 8px 12px !important;
1110
+ }
1111
+
1112
+ .assistant-stat-card .fw-bold {
1113
+ font-size: 1.1rem !important;
1114
+ }
1115
+
1116
+ .assistant-stat-card .text-muted {
1117
+ font-size: 0.75rem !important;
1118
+ }
1119
+
1120
+ /* ── Collapsible block toggle ── */
1121
+
1122
+ .assistant-collapsible-block {
1123
+ border: 1px solid var(--bs-border-color);
1124
+ border-radius: 10px;
1125
+ background: var(--bs-body-bg);
1126
+ }
1127
+
1128
+ .assistant-block-toggle {
1129
+ display: flex;
1130
+ align-items: center;
1131
+ gap: 10px;
1132
+ padding: 10px 14px;
1133
+ text-decoration: none !important;
1134
+ color: var(--bs-body-color) !important;
1135
+ cursor: pointer;
1136
+ transition: background 0.15s;
1137
+ }
1138
+
1139
+ .assistant-block-toggle:hover {
1140
+ background: var(--bs-tertiary-bg);
1141
+ }
1142
+
1143
+ .assistant-block-toggle-icon {
1144
+ width: 30px;
1145
+ height: 30px;
1146
+ border-radius: 8px;
1147
+ background: var(--bs-tertiary-bg);
1148
+ display: flex;
1149
+ align-items: center;
1150
+ justify-content: center;
1151
+ flex-shrink: 0;
1152
+ font-size: 0.85rem;
1153
+ color: var(--bs-primary);
1154
+ }
1155
+
1156
+ .assistant-block-toggle-text {
1157
+ flex: 1;
1158
+ min-width: 0;
1159
+ }
1160
+
1161
+ .assistant-block-toggle-title {
1162
+ display: block;
1163
+ font-weight: 600;
1164
+ font-size: 0.85rem;
1165
+ line-height: 1.2;
1166
+ }
1167
+
1168
+ .assistant-block-toggle-subtitle {
1169
+ display: block;
1170
+ font-size: 0.75rem;
1171
+ color: var(--bs-secondary-color);
1172
+ line-height: 1.2;
1173
+ margin-top: 1px;
1174
+ }
1175
+
1176
+ .assistant-block-chevron {
1177
+ flex-shrink: 0;
1178
+ font-size: 0.75rem;
1179
+ color: var(--bs-secondary-color);
1180
+ transition: transform 0.2s;
1181
+ }
1182
+
1183
+ .assistant-block-toggle:not(.collapsed) .assistant-block-chevron {
1184
+ transform: rotate(180deg);
1185
+ }
1186
+
1187
+ /* ── Collapsible block body ── */
1188
+
1189
+ .assistant-block-body {
1190
+ border-top: 1px solid var(--bs-border-color);
1191
+ padding: 12px;
1192
+ }
1193
+
1194
+ /* ── Chart blocks inside collapsible — strip dashboard chrome ── */
1195
+
1196
+ .assistant-chart-body {
1197
+ width: 100%;
1198
+ position: relative;
1199
+ }
1200
+
1201
+ /* ── MiniPieChart inside assistant blocks ── */
1202
+
1203
+ .mini-pie-segment {
1204
+ cursor: pointer;
1205
+ transition: filter 0.15s, stroke-width 0.15s;
1206
+ }
1207
+
1208
+ .mini-pie-segment:hover {
1209
+ filter: brightness(1.12) drop-shadow(0 0 4px rgba(0,0,0,0.2));
1210
+ stroke-width: 2.5;
1211
+ }
1212
+
1213
+ .mini-pie-wrapper {
1214
+ display: flex;
1215
+ align-items: center;
1216
+ gap: 12px;
1217
+ }
1218
+
1219
+ .mini-pie-layout-bottom {
1220
+ flex-direction: column;
1221
+ align-items: flex-start;
1222
+ }
1223
+
1224
+ .mini-pie-layout-right {
1225
+ flex-direction: row;
1226
+ }
1227
+
1228
+ .mini-pie-svg-area {
1229
+ position: relative;
1230
+ flex-shrink: 0;
1231
+ }
1232
+
1233
+ .mini-pie-tooltip {
1234
+ position: absolute;
1235
+ pointer-events: none;
1236
+ background: var(--bs-body-bg, #fff);
1237
+ border: 1px solid var(--bs-border-color, #dee2e6);
1238
+ border-radius: 4px;
1239
+ padding: 4px 8px;
1240
+ font-size: 0.78rem;
1241
+ line-height: 1.3;
1242
+ white-space: nowrap;
1243
+ box-shadow: 0 2px 6px rgba(0,0,0,0.12);
1244
+ z-index: 10;
1245
+ }
1246
+
1247
+ .mini-pie-legend {
1248
+ display: flex;
1249
+ flex-direction: column;
1250
+ gap: 4px;
1251
+ font-size: 0.8rem;
1252
+ }
1253
+
1254
+ .mini-pie-legend-item {
1255
+ display: flex;
1256
+ align-items: center;
1257
+ gap: 6px;
1258
+ }
1259
+
1260
+ .mini-pie-legend-swatch {
1261
+ display: inline-block;
1262
+ width: 10px;
1263
+ height: 10px;
1264
+ border-radius: 2px;
1265
+ flex-shrink: 0;
1266
+ }
1267
+
1268
+ .mini-pie-legend-label {
1269
+ overflow: hidden;
1270
+ text-overflow: ellipsis;
1271
+ }
1272
+
1273
+ .mini-pie-legend-value {
1274
+ color: var(--bs-secondary-color, #6c757d);
1275
+ margin-left: auto;
1276
+ flex-shrink: 0;
1277
+ }
1278
+
1279
+ /* ── MiniSeriesChart inside assistant blocks ── */
1280
+
1281
+ .mini-series-wrapper {
1282
+ display: flex;
1283
+ flex-direction: column;
1284
+ width: 100%;
1285
+ }
1286
+
1287
+ .mini-series-svg-area {
1288
+ position: relative;
1289
+ width: 100%;
1290
+ }
1291
+
1292
+ .mini-series-tooltip {
1293
+ position: absolute;
1294
+ pointer-events: none;
1295
+ background: var(--bs-body-bg, #fff);
1296
+ border: 1px solid var(--bs-border-color, #dee2e6);
1297
+ border-radius: 4px;
1298
+ padding: 6px 10px;
1299
+ font-size: 0.78rem;
1300
+ line-height: 1.4;
1301
+ white-space: nowrap;
1302
+ box-shadow: 0 2px 6px rgba(0,0,0,0.12);
1303
+ z-index: 10;
1304
+ }
1305
+
1306
+ .mini-series-tooltip-label {
1307
+ font-weight: 600;
1308
+ margin-bottom: 2px;
1309
+ border-bottom: 1px solid var(--bs-border-color, #dee2e6);
1310
+ padding-bottom: 2px;
1311
+ }
1312
+
1313
+ .mini-series-tooltip-row {
1314
+ display: flex;
1315
+ align-items: center;
1316
+ gap: 4px;
1317
+ }
1318
+
1319
+ .mini-series-tooltip-swatch {
1320
+ display: inline-block;
1321
+ width: 8px;
1322
+ height: 8px;
1323
+ border-radius: 50%;
1324
+ flex-shrink: 0;
1325
+ }
1326
+
1327
+ .mini-series-legend {
1328
+ display: flex;
1329
+ flex-wrap: wrap;
1330
+ gap: 8px 14px;
1331
+ justify-content: center;
1332
+ padding: 4px 0 8px;
1333
+ font-size: 0.8rem;
1334
+ }
1335
+
1336
+ .mini-series-legend-item {
1337
+ display: inline-flex;
1338
+ align-items: center;
1339
+ gap: 4px;
1340
+ white-space: nowrap;
1341
+ }
1342
+
1343
+ .mini-series-legend-swatch {
1344
+ display: inline-block;
1345
+ width: 10px;
1346
+ height: 10px;
1347
+ border-radius: 2px;
1348
+ flex-shrink: 0;
1349
+ }
1350
+
1351
+ .mini-series-legend-label {
1352
+ color: var(--bs-body-color, #212529);
1353
+ }
1354
+
1355
+ /* MiniSeriesChart hover states */
1356
+
1357
+ .mini-series-bar {
1358
+ cursor: pointer;
1359
+ transition: filter 0.15s;
1360
+ }
1361
+
1362
+ .mini-series-bar:hover {
1363
+ filter: brightness(1.15) drop-shadow(0 0 3px rgba(0,0,0,0.2));
1364
+ }
1365
+
1366
+ .mini-series-dot {
1367
+ cursor: pointer;
1368
+ transition: filter 0.15s;
1369
+ stroke: transparent;
1370
+ stroke-width: 8;
1371
+ paint-order: stroke;
1372
+ }
1373
+
1374
+ .mini-series-dot:hover {
1375
+ filter: brightness(1.12) drop-shadow(0 0 4px rgba(0,0,0,0.25));
1376
+ r: 5;
1377
+ }
1378
+
1379
+ /* ── Table blocks inside collapsible ── */
1380
+
1381
+ .assistant-block-body .table-view-component {
1382
+ margin-bottom: 0;
1383
+ }
1384
+
1385
+ .assistant-block-body .mojo-table-wrapper {
1386
+ margin: 0;
1387
+ }
1388
+
1389
+ .assistant-block-body .table {
1390
+ margin-bottom: 0;
1391
+ font-size: 0.85rem;
1392
+ }
1393
+
1394
+ .assistant-block-body .table th {
1395
+ background: var(--bs-tertiary-bg);
1396
+ font-weight: 600;
1397
+ font-size: 0.8rem;
1398
+ text-transform: uppercase;
1399
+ letter-spacing: 0.03em;
1400
+ padding: 8px 12px;
1401
+ }
1402
+
1403
+ .assistant-block-body .table td {
1404
+ padding: 6px 12px;
1405
+ }
1406
+
1407
+ /* ── Markdown content in assistant messages ───────────────── */
1408
+
1409
+ .message-assistant .message-text h1,
1410
+ .message-assistant .message-text h2,
1411
+ .message-assistant .message-text h3,
1412
+ .message-assistant .message-text h4,
1413
+ .message-assistant .message-text h5,
1414
+ .message-assistant .message-text h6 {
1415
+ font-weight: 600;
1416
+ margin-top: 16px;
1417
+ margin-bottom: 6px;
1418
+ line-height: 1.3;
1419
+ }
1420
+
1421
+ .message-assistant .message-text h3 { font-size: 1rem; }
1422
+ .message-assistant .message-text h4 { font-size: 0.95rem; }
1423
+ .message-assistant .message-text h5,
1424
+ .message-assistant .message-text h6 { font-size: 0.9rem; }
1425
+
1426
+ .message-assistant .message-text hr {
1427
+ margin: 12px 0;
1428
+ opacity: 0.15;
1429
+ }
1430
+
1431
+ .message-assistant .message-text ul,
1432
+ .message-assistant .message-text ol {
1433
+ padding-left: 20px;
1434
+ margin-bottom: 8px;
1435
+ }
1436
+
1437
+ .message-assistant .message-text li {
1438
+ margin-bottom: 4px;
1439
+ }
1440
+
1441
+ .message-assistant .message-text pre {
1442
+ background: var(--bs-tertiary-bg);
1443
+ border-radius: 8px;
1444
+ padding: 12px 16px;
1445
+ margin: 10px 0;
1446
+ font-size: 0.82rem;
1447
+ overflow-x: auto;
1448
+ }
1449
+
1450
+ .message-assistant .message-text code {
1451
+ font-size: 0.85em;
1452
+ padding: 1px 5px;
1453
+ background: var(--bs-tertiary-bg);
1454
+ border-radius: 4px;
1455
+ }
1456
+
1457
+ .message-assistant .message-text pre code {
1458
+ padding: 0;
1459
+ background: none;
1460
+ }
1461
+
1462
+ .message-assistant .message-text p {
1463
+ margin-bottom: 8px;
1464
+ }
1465
+
1466
+ .message-assistant .message-text p:last-child {
1467
+ margin-bottom: 0;
1468
+ }
1469
+
1470
+ .message-assistant .message-text table {
1471
+ width: 100%;
1472
+ margin: 10px 0;
1473
+ border-collapse: collapse;
1474
+ font-size: 0.85rem;
1475
+ }
1476
+
1477
+ .message-assistant .message-text th,
1478
+ .message-assistant .message-text td {
1479
+ padding: 6px 10px;
1480
+ border: 1px solid var(--bs-border-color);
1481
+ text-align: left;
1482
+ }
1483
+
1484
+ .message-assistant .message-text th {
1485
+ background: var(--bs-tertiary-bg);
1486
+ font-weight: 600;
1487
+ }
1488
+
1489
+ /* ── Responsive ───────────────────────────────────────────── */
1490
+
1491
+ @media (max-width: 768px) {
1492
+ .assistant-sidebar {
1493
+ display: none;
1494
+ }
1495
+
1496
+ .assistant-input-wrapper,
1497
+ .assistant-chat-area .chat-messages {
1498
+ padding-left: 16px;
1499
+ padding-right: 16px;
1500
+ }
1501
+ }