slicejs-web-framework 3.2.2 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/.opencode/opencode.json +14 -0
  2. package/README.md +57 -134
  3. package/Slice/Components/Structural/ContextManager/ContextManagerDebugger.js +233 -110
  4. package/Slice/Components/Structural/Controller/Controller.js +9 -0
  5. package/Slice/Components/Structural/Controller/allowedValuesValidation.js +52 -0
  6. package/Slice/Components/Structural/Debugger/Debugger.js +392 -442
  7. package/Slice/Components/Structural/EventManager/EventManagerDebugger.js +264 -149
  8. package/Slice/Components/Structural/Router/Router.js +45 -14
  9. package/Slice/tests/props-allowed-values-validation.test.js +119 -0
  10. package/package.json +11 -9
  11. package/src/App/index.html +2 -8
  12. package/src/App/index.js +18 -21
  13. package/src/App/style.css +8 -37
  14. package/src/Components/AppComponents/AboutSection/AboutSection.css +9 -0
  15. package/src/Components/AppComponents/AboutSection/AboutSection.html +8 -0
  16. package/src/Components/AppComponents/AboutSection/AboutSection.js +12 -0
  17. package/src/Components/AppComponents/AppShell/AppShell.css +10 -0
  18. package/src/Components/AppComponents/AppShell/AppShell.html +4 -0
  19. package/src/Components/AppComponents/AppShell/AppShell.js +36 -0
  20. package/src/Components/AppComponents/HomeSection/HomeSection.css +20 -0
  21. package/src/Components/AppComponents/HomeSection/HomeSection.html +10 -0
  22. package/src/Components/AppComponents/HomeSection/HomeSection.js +19 -0
  23. package/src/Components/Visual/MultiRoute/MultiRoute.js +13 -6
  24. package/src/Components/components.js +4 -16
  25. package/src/routes.js +6 -12
  26. package/src/sliceConfig.json +2 -1
  27. package/Slice/Components/Structural/Debugger/Debugger.css +0 -620
  28. package/src/Components/AppComponents/HomePage/HomePage.css +0 -201
  29. package/src/Components/AppComponents/HomePage/HomePage.html +0 -37
  30. package/src/Components/AppComponents/HomePage/HomePage.js +0 -210
  31. package/src/Components/AppComponents/Playground/Playground.css +0 -12
  32. package/src/Components/AppComponents/Playground/Playground.html +0 -0
  33. package/src/Components/AppComponents/Playground/Playground.js +0 -111
  34. package/src/images/Slice.js-logo.png +0 -0
  35. package/src/images/im2/Slice.js-logo.png +0 -0
  36. package/src/testing.js +0 -888
@@ -799,675 +799,625 @@ customElements.define('slice-debugger', Debugger);
799
799
 
800
800
  function productionOnlyCSS(){
801
801
  return `
802
- #debugger-container {
803
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
804
- display: none;
805
- position: fixed;
806
- top: 20px;
807
- right: 20px;
808
- width: min(420px, calc(100vw - 40px));
809
- height: 85vh;
810
- max-height: 85vh;
811
- background: var(--primary-background-color);
812
- border: 1px solid var(--medium-color);
813
- border-radius: 12px;
814
- box-shadow: 0 20px 40px rgba(var(--primary-color-rgb), 0.15), 0 4px 12px rgba(0, 0, 0, 0.1);
815
- z-index: 10000;
816
- overflow: hidden;
817
- backdrop-filter: blur(10px);
818
- box-sizing: border-box;
819
- }
820
-
821
- #debugger-container.active {
802
+ /* ============================================================
803
+ Slice Instruments Component Inspector
804
+ All selectors are scoped under the <slice-debugger> tag so the
805
+ panel never clashes with (or leaks into) app styles. Tokens live
806
+ on the tag so both #debugger-container and the sibling
807
+ #editor-modal inherit them. Chrome colors are static; only the
808
+ accent reads the theme (--primary-color) with a static fallback.
809
+ ============================================================ */
810
+ slice-debugger {
811
+ --si-accent: var(--primary-color, #6ee7ff);
812
+ --si-accent-rgb: var(--primary-color-rgb, 110, 231, 255);
813
+ --si-surface: rgba(17, 19, 28, 0.88);
814
+ --si-raised: rgba(255, 255, 255, 0.035);
815
+ --si-raised-2: rgba(255, 255, 255, 0.06);
816
+ --si-inset: rgba(0, 0, 0, 0.28);
817
+ --si-border: rgba(255, 255, 255, 0.09);
818
+ --si-text: #e8eaf2;
819
+ --si-dim: #888fa6;
820
+ --si-danger: #ff6b6b;
821
+ --si-success: #46d39a;
822
+ --si-mono: ui-monospace, 'SF Mono', 'JetBrains Mono', 'Cascadia Code', Menlo, Consolas, monospace;
823
+ --si-sans: system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
824
+ }
825
+
826
+ slice-debugger *,
827
+ slice-debugger *::before,
828
+ slice-debugger *::after { box-sizing: border-box; }
829
+
830
+ slice-debugger #debugger-container {
831
+ font-family: var(--si-sans);
832
+ display: none;
833
+ position: fixed;
834
+ top: 20px;
835
+ right: 20px;
836
+ width: 430px;
837
+ height: 85vh;
838
+ max-height: 85vh;
839
+ background: var(--si-surface);
840
+ border: 1px solid var(--si-border);
841
+ border-radius: 16px;
842
+ box-shadow:
843
+ 0 30px 70px -16px rgba(0, 0, 0, 0.6),
844
+ 0 0 0 1px rgba(0, 0, 0, 0.2),
845
+ 0 0 46px -20px rgba(var(--si-accent-rgb), 0.6);
846
+ color: var(--si-text);
847
+ z-index: 10000;
848
+ overflow: hidden;
849
+ -webkit-backdrop-filter: blur(24px) saturate(1.3);
850
+ backdrop-filter: blur(24px) saturate(1.3);
851
+ }
852
+
853
+ slice-debugger #debugger-container.active {
822
854
  display: flex;
823
855
  flex-direction: column;
856
+ animation: si-inspector-in 0.28s cubic-bezier(0.16, 1, 0.3, 1);
824
857
  }
825
858
 
826
- .debugger-header {
827
- background: linear-gradient(135deg, var(--primary-color), var(--primary-color-shade));
828
- color: var(--primary-color-contrast);
829
- padding: 12px 16px;
830
- border-radius: 12px 12px 0 0;
831
- user-select: none;
832
- cursor: grab;
859
+ @keyframes si-inspector-in {
860
+ from { opacity: 0; transform: translateY(12px) scale(0.985); }
861
+ to { opacity: 1; transform: translateY(0) scale(1); }
833
862
  }
834
863
 
835
- .debugger-header:active {
836
- cursor: grabbing;
864
+ slice-debugger #debugger-container::before {
865
+ content: '';
866
+ position: absolute;
867
+ left: 0; top: 0; bottom: 0;
868
+ width: 2px;
869
+ background: linear-gradient(180deg, var(--si-accent), transparent 60%);
870
+ opacity: 0.9;
871
+ pointer-events: none;
872
+ z-index: 2;
873
+ }
874
+
875
+ slice-debugger .debugger-header {
876
+ background:
877
+ radial-gradient(140% 160% at 0% 0%, rgba(var(--si-accent-rgb), 0.14), transparent 55%),
878
+ var(--si-raised);
879
+ color: var(--si-text);
880
+ padding: 13px 15px;
881
+ border-bottom: 1px solid var(--si-border);
882
+ user-select: none;
883
+ cursor: grab;
837
884
  }
885
+ slice-debugger .debugger-header:active { cursor: grabbing; }
838
886
 
839
- .header-content {
887
+ slice-debugger .header-content {
840
888
  display: flex;
841
889
  justify-content: space-between;
842
890
  align-items: center;
843
891
  }
844
892
 
845
- .component-info {
893
+ slice-debugger .component-info {
846
894
  display: flex;
847
895
  align-items: center;
848
- gap: 10px;
896
+ gap: 11px;
897
+ min-width: 0;
849
898
  }
850
899
 
851
- .component-icon {
852
- font-size: 20px;
853
- opacity: 0.9;
900
+ slice-debugger .component-icon {
901
+ font-size: 17px;
902
+ width: 30px; height: 30px;
903
+ display: flex; align-items: center; justify-content: center;
904
+ border-radius: 9px;
905
+ background: rgba(var(--si-accent-rgb), 0.12);
906
+ border: 1px solid rgba(var(--si-accent-rgb), 0.28);
907
+ color: var(--si-accent);
908
+ flex-shrink: 0;
854
909
  }
855
910
 
856
- .component-name {
857
- font-size: 14px;
911
+ slice-debugger .component-name {
912
+ font-size: 13px;
858
913
  font-weight: 600;
914
+ font-family: var(--si-mono);
915
+ color: var(--si-text);
859
916
  margin-bottom: 2px;
917
+ overflow: hidden;
918
+ text-overflow: ellipsis;
919
+ white-space: nowrap;
860
920
  }
861
921
 
862
- .component-id {
863
- font-size: 11px;
864
- opacity: 0.8;
922
+ slice-debugger .component-id {
923
+ font-size: 10.5px;
924
+ font-family: var(--si-mono);
925
+ color: var(--si-dim);
926
+ letter-spacing: 0.02em;
865
927
  }
866
928
 
867
- .header-actions {
868
- display: flex;
869
- gap: 8px;
870
- }
929
+ slice-debugger .header-actions { display: flex; gap: 6px; }
871
930
 
872
- .minimize-btn, #close-debugger {
873
- background: rgba(255, 255, 255, 0.2);
874
- border: none;
875
- color: var(--primary-color-contrast);
931
+ slice-debugger .minimize-btn,
932
+ slice-debugger #close-debugger {
933
+ background: var(--si-raised);
934
+ border: 1px solid var(--si-border);
935
+ color: var(--si-dim);
876
936
  width: 28px;
877
937
  height: 28px;
878
- border-radius: 6px;
938
+ border-radius: 8px;
879
939
  cursor: pointer;
880
940
  display: flex;
881
941
  align-items: center;
882
942
  justify-content: center;
883
- font-size: 16px;
884
- font-weight: bold;
885
- transition: background 0.2s ease;
943
+ font-size: 15px;
944
+ font-weight: 500;
945
+ line-height: 1;
946
+ transition: color 0.15s ease, background 0.15s ease, border-color 0.15s ease, transform 0.15s ease;
886
947
  }
887
-
888
- .minimize-btn:hover, #close-debugger:hover {
889
- background: rgba(255, 255, 255, 0.3);
948
+ slice-debugger .minimize-btn:hover,
949
+ slice-debugger #close-debugger:hover {
950
+ color: var(--si-text);
951
+ background: var(--si-raised-2);
952
+ border-color: rgba(var(--si-accent-rgb), 0.5);
890
953
  }
954
+ slice-debugger #close-debugger:hover { color: var(--si-danger); border-color: rgba(255, 107, 107, 0.5); }
955
+ slice-debugger .minimize-btn:active,
956
+ slice-debugger #close-debugger:active { transform: scale(0.92); }
891
957
 
892
- .debugger-content {
958
+ slice-debugger .debugger-content {
893
959
  flex: 1;
894
960
  display: flex;
895
961
  flex-direction: column;
896
962
  overflow: hidden;
897
963
  }
898
964
 
899
- .tabs-container {
900
- border-bottom: 1px solid var(--medium-color);
901
- }
965
+ slice-debugger .tabs-container { border-bottom: 1px solid var(--si-border); }
902
966
 
903
- .tab-nav {
967
+ slice-debugger .tab-nav {
904
968
  display: flex;
905
- background: var(--tertiary-background-color);
969
+ background: var(--si-inset);
970
+ padding: 0 6px;
971
+ gap: 2px;
906
972
  }
907
973
 
908
- .tab-btn {
974
+ slice-debugger .tab-btn {
909
975
  flex: 1;
910
- padding: 10px 14px;
976
+ padding: 11px 14px;
911
977
  border: none;
912
978
  background: transparent;
913
- color: var(--font-secondary-color);
914
- font-size: 12px;
915
- font-weight: 500;
979
+ color: var(--si-dim);
980
+ font-family: var(--si-mono);
981
+ font-size: 11px;
982
+ letter-spacing: 0.08em;
983
+ text-transform: uppercase;
916
984
  cursor: pointer;
917
- transition: all 0.2s ease;
985
+ transition: color 0.18s ease, border-color 0.18s ease;
918
986
  border-bottom: 2px solid transparent;
919
987
  }
920
-
921
- .tab-btn:hover {
922
- background: var(--secondary-background-color);
923
- color: var(--font-primary-color);
924
- }
925
-
926
- .tab-btn.active {
927
- background: var(--primary-background-color);
928
- color: var(--primary-color);
929
- border-bottom-color: var(--primary-color);
930
- font-weight: 600;
988
+ slice-debugger .tab-btn:hover { color: var(--si-text); }
989
+ slice-debugger .tab-btn.active {
990
+ color: var(--si-accent);
991
+ border-bottom-color: var(--si-accent);
931
992
  }
932
993
 
933
- .tab-content {
994
+ slice-debugger .tab-content {
934
995
  flex: 1;
935
996
  overflow: hidden;
936
- min-height: 0;
997
+ height: calc(85vh - 104px);
937
998
  }
938
999
 
939
- .tab-pane {
1000
+ slice-debugger .tab-pane {
940
1001
  display: none;
941
1002
  height: 100%;
942
1003
  overflow-y: auto;
943
1004
  overflow-x: hidden;
944
1005
  padding: 16px;
945
- box-sizing: border-box;
946
- }
947
-
948
- .tab-pane.active {
949
- display: block;
950
- }
951
-
952
- .tab-pane::-webkit-scrollbar {
953
- width: 4px;
954
- }
955
-
956
- .tab-pane::-webkit-scrollbar-track {
957
- background: var(--tertiary-background-color);
958
- border-radius: 2px;
959
- }
960
-
961
- .tab-pane::-webkit-scrollbar-thumb {
962
- background: var(--medium-color);
963
- border-radius: 2px;
964
1006
  }
1007
+ slice-debugger .tab-pane.active { display: block; }
965
1008
 
966
- .tab-pane::-webkit-scrollbar-thumb:hover {
967
- background: var(--primary-color);
1009
+ slice-debugger .tab-pane::-webkit-scrollbar { width: 8px; }
1010
+ slice-debugger .tab-pane::-webkit-scrollbar-track { background: transparent; }
1011
+ slice-debugger .tab-pane::-webkit-scrollbar-thumb {
1012
+ background: var(--si-raised-2);
1013
+ border-radius: 8px;
1014
+ border: 2px solid transparent;
1015
+ background-clip: padding-box;
968
1016
  }
1017
+ slice-debugger .tab-pane::-webkit-scrollbar-thumb:hover { background: rgba(var(--si-accent-rgb), 0.4); background-clip: padding-box; }
969
1018
 
970
- .props-container {
1019
+ slice-debugger .props-container {
971
1020
  display: flex;
972
1021
  flex-direction: column;
973
1022
  gap: 12px;
974
1023
  margin-bottom: 16px;
975
- min-width: 0;
976
- overflow-x: hidden;
977
1024
  }
978
1025
 
979
- #debugger-container *,
980
- #debugger-container *::before,
981
- #debugger-container *::after {
982
- box-sizing: border-box;
983
- }
984
-
985
- .props-actions {
986
- border-top: 1px solid var(--medium-color);
1026
+ slice-debugger .props-actions {
1027
+ border-top: 1px solid var(--si-border);
987
1028
  padding-top: 16px;
988
1029
  margin-top: 8px;
989
1030
  }
990
1031
 
991
- .actions-note {
1032
+ slice-debugger .actions-note {
992
1033
  margin-top: 12px;
993
- padding: 8px 12px;
994
- background: var(--tertiary-background-color);
995
- border-radius: 6px;
996
- border: 1px solid var(--medium-color);
1034
+ padding: 9px 12px;
1035
+ background: var(--si-raised);
1036
+ border-radius: 8px;
1037
+ border: 1px solid var(--si-border);
997
1038
  }
998
-
999
- .actions-note small {
1000
- color: var(--font-secondary-color);
1039
+ slice-debugger .actions-note small {
1040
+ color: var(--si-dim);
1001
1041
  font-size: 11px;
1002
1042
  display: flex;
1003
1043
  align-items: center;
1004
1044
  gap: 6px;
1005
1045
  }
1006
1046
 
1007
- .props-section {
1008
- background: var(--tertiary-background-color);
1009
- border: 1px solid var(--medium-color);
1010
- border-radius: 8px;
1011
- padding: 12px;
1047
+ slice-debugger .props-section {
1048
+ background: var(--si-raised);
1049
+ border: 1px solid var(--si-border);
1050
+ border-radius: 12px;
1051
+ padding: 13px;
1012
1052
  }
1013
1053
 
1014
- .section-title {
1015
- font-size: 12px;
1054
+ slice-debugger .section-title {
1055
+ font-size: 10.5px;
1016
1056
  font-weight: 600;
1017
- color: var(--font-primary-color);
1057
+ letter-spacing: 0.1em;
1058
+ text-transform: uppercase;
1059
+ color: var(--si-dim);
1018
1060
  margin-bottom: 12px;
1019
1061
  display: flex;
1020
1062
  align-items: center;
1021
1063
  gap: 6px;
1022
1064
  }
1023
1065
 
1024
- .prop-item {
1066
+ slice-debugger .prop-item {
1025
1067
  display: flex;
1026
1068
  flex-direction: column;
1027
1069
  gap: 6px;
1028
1070
  padding: 12px;
1029
- background: var(--primary-background-color);
1030
- border: 1px solid var(--medium-color);
1031
- border-radius: 6px;
1071
+ background: var(--si-inset);
1072
+ border: 1px solid var(--si-border);
1073
+ border-left: 2px solid transparent;
1074
+ border-radius: 10px;
1032
1075
  margin-bottom: 8px;
1033
- transition: border-color 0.2s ease;
1034
- min-width: 0;
1035
- overflow: hidden;
1076
+ transition: border-color 0.18s ease, background 0.18s ease;
1036
1077
  }
1037
-
1038
- .prop-item:hover {
1039
- border-color: var(--primary-color);
1078
+ slice-debugger .prop-item:hover {
1079
+ border-left-color: var(--si-accent);
1080
+ background: rgba(0, 0, 0, 0.34);
1040
1081
  }
1041
1082
 
1042
- .prop-header {
1083
+ slice-debugger .prop-header {
1043
1084
  display: flex;
1044
1085
  justify-content: space-between;
1045
1086
  align-items: center;
1046
1087
  gap: 8px;
1047
- min-width: 0;
1048
- }
1049
-
1050
- .prop-title {
1051
- display: flex;
1052
- align-items: center;
1053
- gap: 6px;
1054
- min-width: 0;
1055
- flex: 1;
1056
1088
  }
1057
1089
 
1058
- .prop-title strong {
1059
- min-width: 0;
1060
- overflow: hidden;
1061
- text-overflow: ellipsis;
1062
- white-space: nowrap;
1063
- }
1064
-
1065
- .prop-name {
1066
- font-size: 13px;
1090
+ slice-debugger .prop-name {
1091
+ font-size: 12.5px;
1067
1092
  font-weight: 600;
1068
- color: var(--font-primary-color);
1093
+ font-family: var(--si-mono);
1094
+ color: var(--si-text);
1069
1095
  }
1070
-
1071
- .prop-name.required::after {
1096
+ slice-debugger .prop-name.required::after {
1072
1097
  content: " *";
1073
- color: var(--danger-color);
1098
+ color: var(--si-danger);
1074
1099
  }
1075
1100
 
1076
- .prop-meta {
1101
+ slice-debugger .prop-meta {
1077
1102
  display: flex;
1078
1103
  align-items: center;
1079
1104
  gap: 8px;
1080
1105
  }
1081
1106
 
1082
- .prop-type {
1083
- font-size: 11px;
1084
- padding: 2px 6px;
1085
- background: var(--secondary-color);
1086
- color: var(--secondary-color-contrast);
1087
- border-radius: 4px;
1088
- font-family: monospace;
1107
+ slice-debugger .prop-type {
1108
+ font-size: 10px;
1109
+ padding: 2px 7px;
1110
+ background: rgba(var(--si-accent-rgb), 0.12);
1111
+ color: var(--si-accent);
1112
+ border: 1px solid rgba(var(--si-accent-rgb), 0.28);
1113
+ border-radius: 999px;
1114
+ font-family: var(--si-mono);
1089
1115
  font-weight: 500;
1090
- flex-shrink: 0;
1091
- }
1092
-
1093
- .prop-status {
1094
- font-size: 12px;
1095
- font-weight: 500;
1096
- flex-shrink: 0;
1097
- }
1098
-
1099
- .status-used {
1100
- color: var(--success-color);
1101
- }
1102
-
1103
- .status-missing {
1104
- color: var(--danger-color);
1105
- }
1106
-
1107
- .status-optional {
1108
- color: var(--medium-color);
1116
+ letter-spacing: 0.02em;
1109
1117
  }
1110
1118
 
1111
- .prop-input {
1112
- margin-top: 8px;
1113
- min-width: 0;
1114
- overflow: hidden;
1115
- }
1119
+ slice-debugger .prop-status { font-size: 14px; line-height: 1; }
1120
+ slice-debugger .status-used { color: var(--si-success); }
1121
+ slice-debugger .status-missing { color: var(--si-danger); }
1122
+ slice-debugger .status-optional { color: var(--si-dim); }
1116
1123
 
1117
- .input-group {
1118
- position: relative;
1119
- max-width: 100%;
1120
- min-width: 0;
1121
- overflow: hidden;
1122
- }
1124
+ slice-debugger .prop-input { margin-top: 6px; }
1125
+ slice-debugger .input-group { position: relative; }
1123
1126
 
1124
- .prop-control {
1127
+ slice-debugger .prop-control {
1125
1128
  width: 100%;
1126
- max-width: 100%;
1127
- min-width: 0;
1128
- padding: 8px 32px 8px 10px;
1129
- border: 1px solid var(--medium-color);
1130
- border-radius: 6px;
1131
- background: var(--primary-background-color);
1132
- color: var(--font-primary-color);
1133
- font-size: 13px;
1134
- transition: border-color 0.2s ease, box-shadow 0.2s ease;
1135
- font-family: monospace;
1136
- box-sizing: border-box;
1137
- display: block;
1138
- }
1139
-
1140
- .prop-control:focus {
1129
+ padding: 9px 34px 9px 11px;
1130
+ border: 1px solid var(--si-border);
1131
+ border-radius: 8px;
1132
+ background: rgba(0, 0, 0, 0.35);
1133
+ color: var(--si-text);
1134
+ font-size: 12.5px;
1135
+ font-family: var(--si-mono);
1136
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
1137
+ }
1138
+ slice-debugger .prop-control::placeholder { color: var(--si-dim); }
1139
+ slice-debugger .prop-control:focus {
1141
1140
  outline: none;
1142
- border-color: var(--primary-color);
1143
- box-shadow: 0 0 0 3px rgba(var(--primary-color-rgb), 0.1);
1144
- }
1145
-
1146
- .prop-control:disabled {
1147
- background: var(--disabled-color);
1148
- color: var(--font-secondary-color);
1149
- cursor: not-allowed;
1150
- }
1151
-
1152
- .prop-control[readonly] {
1153
- background: var(--tertiary-background-color);
1154
- cursor: pointer;
1155
- text-overflow: ellipsis;
1156
- overflow: hidden;
1157
- white-space: nowrap;
1158
- max-width: 100%;
1159
- }
1160
-
1161
- .prop-control[readonly]:focus {
1162
- border-color: var(--accent-color);
1163
- box-shadow: 0 0 0 3px rgba(var(--accent-color), 0.1);
1164
- }
1165
-
1166
- /* Estilos específicos para checkboxes */
1167
- .prop-control[type="checkbox"] {
1168
- width: auto;
1141
+ border-color: rgba(var(--si-accent-rgb), 0.6);
1142
+ box-shadow: 0 0 0 3px rgba(var(--si-accent-rgb), 0.13);
1143
+ }
1144
+ slice-debugger .prop-control:disabled { opacity: 0.5; cursor: not-allowed; }
1145
+ slice-debugger .prop-control[readonly] { background: var(--si-raised); cursor: pointer; }
1146
+ slice-debugger .prop-control[readonly]:focus { border-color: rgba(var(--si-accent-rgb), 0.6); }
1147
+ slice-debugger .prop-control[type="checkbox"] {
1148
+ width: 18px;
1149
+ height: 18px;
1169
1150
  padding: 0;
1170
1151
  margin: 0;
1171
1152
  cursor: pointer;
1153
+ accent-color: var(--si-accent);
1172
1154
  }
1173
1155
 
1174
- .edit-btn {
1156
+ slice-debugger .edit-btn {
1175
1157
  position: absolute;
1176
- right: 4px;
1158
+ right: 5px;
1177
1159
  top: 50%;
1178
1160
  transform: translateY(-50%);
1179
- background: var(--accent-color);
1180
- border: none;
1181
- color: white;
1182
- width: 24px;
1183
- height: 24px;
1184
- border-radius: 4px;
1161
+ background: rgba(var(--si-accent-rgb), 0.14);
1162
+ border: 1px solid rgba(var(--si-accent-rgb), 0.3);
1163
+ color: var(--si-accent);
1164
+ width: 25px;
1165
+ height: 25px;
1166
+ border-radius: 6px;
1185
1167
  cursor: pointer;
1186
1168
  font-size: 12px;
1187
1169
  display: flex;
1188
1170
  align-items: center;
1189
1171
  justify-content: center;
1190
- transition: background 0.2s ease;
1172
+ transition: background 0.15s ease, transform 0.15s ease;
1191
1173
  }
1174
+ slice-debugger .edit-btn:hover { background: rgba(var(--si-accent-rgb), 0.26); }
1175
+ slice-debugger .edit-btn:active { transform: translateY(-50%) scale(0.9); }
1192
1176
 
1193
- .edit-btn:hover {
1194
- background: var(--primary-color);
1177
+ slice-debugger .default-value {
1178
+ font-size: 10.5px;
1179
+ color: var(--si-dim);
1180
+ font-family: var(--si-mono);
1181
+ margin-top: 2px;
1195
1182
  }
1196
1183
 
1197
- .default-value {
1198
- font-size: 11px;
1199
- color: var(--font-secondary-color);
1200
- font-style: italic;
1201
- margin-top: 4px;
1202
- }
1184
+ slice-debugger .info-list { display: flex; flex-direction: column; gap: 8px; }
1203
1185
 
1204
- .info-list {
1205
- display: flex;
1206
- flex-direction: column;
1207
- gap: 12px;
1208
- }
1209
-
1210
- .info-item {
1186
+ slice-debugger .info-item {
1211
1187
  display: flex;
1212
1188
  justify-content: space-between;
1213
- padding: 12px;
1214
- background: var(--tertiary-background-color);
1215
- border-radius: 6px;
1216
- border: 1px solid var(--medium-color);
1189
+ align-items: center;
1190
+ gap: 12px;
1191
+ padding: 12px 13px;
1192
+ background: var(--si-raised);
1193
+ border-radius: 10px;
1194
+ border: 1px solid var(--si-border);
1217
1195
  }
1218
1196
 
1219
- .info-label {
1220
- font-weight: 600;
1221
- color: var(--font-primary-color);
1222
- font-size: 13px;
1197
+ slice-debugger .info-label {
1198
+ font-weight: 500;
1199
+ color: var(--si-dim);
1200
+ font-size: 11px;
1201
+ letter-spacing: 0.04em;
1202
+ text-transform: uppercase;
1223
1203
  }
1224
1204
 
1225
- .info-value {
1226
- color: var(--font-secondary-color);
1227
- font-family: monospace;
1205
+ slice-debugger .info-value {
1206
+ color: var(--si-text);
1207
+ font-family: var(--si-mono);
1228
1208
  font-size: 12px;
1209
+ text-align: right;
1210
+ overflow: hidden;
1211
+ text-overflow: ellipsis;
1212
+ white-space: nowrap;
1229
1213
  }
1230
1214
 
1231
- .actions-container {
1232
- display: flex;
1233
- flex-direction: column;
1234
- gap: 16px;
1235
- }
1236
-
1237
- .action-buttons {
1238
- display: flex;
1239
- flex-direction: column;
1240
- gap: 8px;
1241
- }
1215
+ slice-debugger .actions-container { display: flex; flex-direction: column; gap: 16px; }
1216
+ slice-debugger .action-buttons { display: flex; flex-direction: column; gap: 8px; }
1242
1217
 
1243
- .action-btn {
1218
+ slice-debugger .action-btn {
1244
1219
  padding: 12px 16px;
1245
- border: none;
1246
- border-radius: 6px;
1247
- font-size: 13px;
1248
- font-weight: 500;
1220
+ border: 1px solid transparent;
1221
+ border-radius: 9px;
1222
+ font-size: 12.5px;
1223
+ font-weight: 600;
1249
1224
  cursor: pointer;
1250
- transition: all 0.2s ease;
1225
+ transition: background 0.15s ease, border-color 0.15s ease, transform 0.1s ease;
1251
1226
  display: flex;
1252
1227
  align-items: center;
1253
1228
  justify-content: center;
1254
1229
  gap: 8px;
1255
1230
  }
1256
-
1257
- .action-btn.primary {
1258
- background: var(--primary-color);
1259
- color: var(--primary-color-contrast);
1260
- }
1261
-
1262
- .action-btn.primary:hover {
1263
- background: var(--primary-color-shade);
1264
- }
1265
-
1266
- .action-btn.secondary {
1267
- background: var(--secondary-color);
1268
- color: var(--secondary-color-contrast);
1269
- }
1270
-
1271
- .action-btn.secondary:hover {
1272
- opacity: 0.9;
1231
+ slice-debugger .action-btn:active { transform: scale(0.99); }
1232
+ slice-debugger .action-btn.primary { background: var(--si-accent); color: #0b1020; }
1233
+ slice-debugger .action-btn.primary:hover { filter: brightness(1.08); }
1234
+ slice-debugger .action-btn.secondary {
1235
+ background: rgba(var(--si-accent-rgb), 0.12);
1236
+ color: var(--si-accent);
1237
+ border-color: rgba(var(--si-accent-rgb), 0.3);
1273
1238
  }
1274
-
1275
- .action-btn.tertiary {
1276
- background: var(--tertiary-background-color);
1277
- color: var(--font-primary-color);
1278
- border: 1px solid var(--medium-color);
1239
+ slice-debugger .action-btn.secondary:hover { background: rgba(var(--si-accent-rgb), 0.2); }
1240
+ slice-debugger .action-btn.tertiary {
1241
+ background: var(--si-raised);
1242
+ color: var(--si-text);
1243
+ border-color: var(--si-border);
1279
1244
  }
1245
+ slice-debugger .action-btn.tertiary:hover { background: var(--si-raised-2); }
1280
1246
 
1281
- .action-btn.tertiary:hover {
1282
- background: var(--secondary-background-color);
1283
- }
1284
-
1285
- /* Modal Styles */
1286
- .editor-modal {
1247
+ slice-debugger .editor-modal {
1287
1248
  display: none;
1288
1249
  position: fixed;
1289
1250
  top: 0;
1290
1251
  left: 0;
1291
1252
  width: 100%;
1292
1253
  height: 100%;
1293
- background: rgba(0, 0, 0, 0.6);
1254
+ background: rgba(6, 8, 14, 0.62);
1294
1255
  z-index: 20000;
1295
- backdrop-filter: blur(4px);
1256
+ -webkit-backdrop-filter: blur(6px);
1257
+ backdrop-filter: blur(6px);
1296
1258
  }
1297
-
1298
- .editor-modal.active {
1259
+ slice-debugger .editor-modal.active {
1299
1260
  display: flex;
1300
1261
  align-items: center;
1301
1262
  justify-content: center;
1263
+ animation: si-inspector-in 0.2s ease;
1302
1264
  }
1303
1265
 
1304
- .modal-content {
1305
- background: var(--primary-background-color);
1306
- border-radius: 12px;
1307
- width: min(600px, 92vw);
1308
- max-width: 600px;
1309
- max-height: 80%;
1310
- display: flex;
1311
- flex-direction: column;
1312
- box-shadow: 0 25px 50px rgba(0, 0, 0, 0.25);
1313
- border: 1px solid var(--medium-color);
1314
- box-sizing: border-box;
1315
- }
1316
-
1317
- .modal-header {
1318
- padding: 16px 20px;
1319
- background: var(--tertiary-background-color);
1320
- border-radius: 12px 12px 0 0;
1321
- border-bottom: 1px solid var(--medium-color);
1266
+ slice-debugger .modal-content {
1267
+ background: var(--si-surface);
1268
+ border-radius: 16px;
1269
+ width: 90%;
1270
+ max-width: 620px;
1271
+ max-height: 80%;
1272
+ display: flex;
1273
+ flex-direction: column;
1274
+ box-shadow: 0 30px 70px -16px rgba(0, 0, 0, 0.7);
1275
+ border: 1px solid var(--si-border);
1276
+ -webkit-backdrop-filter: blur(24px);
1277
+ backdrop-filter: blur(24px);
1278
+ }
1279
+
1280
+ slice-debugger .modal-header {
1281
+ padding: 15px 20px;
1282
+ background: var(--si-raised);
1283
+ border-radius: 16px 16px 0 0;
1284
+ border-bottom: 1px solid var(--si-border);
1322
1285
  display: flex;
1323
1286
  justify-content: space-between;
1324
1287
  align-items: center;
1325
1288
  }
1326
-
1327
- .modal-header h3 {
1289
+ slice-debugger .modal-header h3 {
1328
1290
  margin: 0;
1329
- font-size: 16px;
1291
+ font-size: 13px;
1330
1292
  font-weight: 600;
1331
- color: var(--font-primary-color);
1293
+ font-family: var(--si-mono);
1294
+ letter-spacing: 0.04em;
1295
+ color: var(--si-text);
1332
1296
  }
1333
1297
 
1334
- .modal-close {
1335
- background: none;
1336
- border: none;
1337
- font-size: 20px;
1338
- color: var(--font-secondary-color);
1298
+ slice-debugger .modal-close {
1299
+ background: var(--si-raised);
1300
+ border: 1px solid var(--si-border);
1301
+ font-size: 16px;
1302
+ color: var(--si-dim);
1339
1303
  cursor: pointer;
1340
- width: 32px;
1341
- height: 32px;
1342
- border-radius: 6px;
1304
+ width: 30px;
1305
+ height: 30px;
1306
+ border-radius: 8px;
1343
1307
  display: flex;
1344
1308
  align-items: center;
1345
1309
  justify-content: center;
1346
- transition: background 0.2s ease;
1347
- }
1348
-
1349
- .modal-close:hover {
1350
- background: var(--secondary-background-color);
1310
+ transition: color 0.15s ease, background 0.15s ease;
1351
1311
  }
1312
+ slice-debugger .modal-close:hover { color: var(--si-danger); background: var(--si-raised-2); }
1352
1313
 
1353
- .modal-body {
1354
- flex: 1;
1355
- padding: 20px;
1356
- display: flex;
1357
- flex-direction: column;
1358
- gap: 16px;
1359
- overflow: hidden;
1360
- min-height: 0;
1314
+ slice-debugger .modal-body {
1315
+ flex: 1;
1316
+ padding: 20px;
1317
+ display: flex;
1318
+ flex-direction: column;
1319
+ gap: 16px;
1320
+ overflow: hidden;
1361
1321
  }
1362
1322
 
1363
- .editor-type-selector {
1323
+ slice-debugger .editor-type-selector {
1364
1324
  display: flex;
1365
1325
  gap: 4px;
1366
- background: var(--tertiary-background-color);
1326
+ background: var(--si-inset);
1367
1327
  padding: 4px;
1368
- border-radius: 6px;
1328
+ border-radius: 9px;
1329
+ border: 1px solid var(--si-border);
1369
1330
  }
1370
1331
 
1371
- .type-btn {
1332
+ slice-debugger .type-btn {
1372
1333
  flex: 1;
1373
1334
  padding: 8px 12px;
1374
1335
  border: none;
1375
1336
  background: transparent;
1376
- color: var(--font-secondary-color);
1377
- font-size: 12px;
1337
+ color: var(--si-dim);
1338
+ font-size: 11px;
1339
+ font-family: var(--si-mono);
1378
1340
  font-weight: 500;
1379
1341
  cursor: pointer;
1380
- border-radius: 4px;
1381
- transition: all 0.2s ease;
1342
+ border-radius: 6px;
1343
+ transition: color 0.15s ease, background 0.15s ease;
1382
1344
  }
1383
-
1384
- .type-btn.active {
1385
- background: var(--primary-color);
1386
- color: var(--primary-color-contrast);
1345
+ slice-debugger .type-btn.active {
1346
+ background: rgba(var(--si-accent-rgb), 0.16);
1347
+ color: var(--si-accent);
1387
1348
  }
1388
1349
 
1389
- .editor-container {
1390
- flex: 1;
1391
- position: relative;
1392
- min-height: 200px;
1393
- min-width: 0;
1350
+ slice-debugger .editor-container {
1351
+ flex: 1;
1352
+ position: relative;
1353
+ min-height: 200px;
1394
1354
  }
1395
1355
 
1396
- #property-editor {
1397
- width: 100%;
1398
- height: 100%;
1399
- border: 1px solid var(--medium-color);
1400
- border-radius: 6px;
1401
- padding: 12px;
1402
- background: var(--primary-background-color);
1403
- color: var(--font-primary-color);
1404
- font-family: 'Monaco', 'Consolas', monospace;
1405
- font-size: 13px;
1406
- line-height: 1.5;
1407
- resize: none;
1408
- outline: none;
1409
- min-height: 200px;
1410
- box-sizing: border-box;
1356
+ slice-debugger #property-editor {
1357
+ width: 100%;
1358
+ height: 100%;
1359
+ border: 1px solid var(--si-border);
1360
+ border-radius: 10px;
1361
+ padding: 14px;
1362
+ background: rgba(0, 0, 0, 0.4);
1363
+ color: var(--si-text);
1364
+ font-family: var(--si-mono);
1365
+ font-size: 12.5px;
1366
+ line-height: 1.6;
1367
+ resize: none;
1368
+ outline: none;
1369
+ min-height: 200px;
1370
+ tab-size: 2;
1411
1371
  }
1412
-
1413
- #property-editor:focus {
1414
- border-color: var(--primary-color);
1415
- box-shadow: 0 0 0 3px rgba(var(--primary-color-rgb), 0.1);
1372
+ slice-debugger #property-editor:focus {
1373
+ border-color: rgba(var(--si-accent-rgb), 0.6);
1374
+ box-shadow: 0 0 0 3px rgba(var(--si-accent-rgb), 0.13);
1416
1375
  }
1417
1376
 
1418
- .validation-message {
1419
- font-size: 12px;
1420
- color: var(--danger-color);
1377
+ slice-debugger .validation-message {
1378
+ font-size: 11.5px;
1379
+ color: var(--si-danger);
1421
1380
  min-height: 18px;
1422
1381
  display: flex;
1423
1382
  align-items: center;
1424
1383
  gap: 6px;
1384
+ font-family: var(--si-mono);
1425
1385
  }
1426
1386
 
1427
- .modal-actions {
1428
- padding: 16px 20px;
1429
- background: var(--tertiary-background-color);
1430
- border-radius: 0 0 12px 12px;
1431
- border-top: 1px solid var(--medium-color);
1387
+ slice-debugger .modal-actions {
1388
+ padding: 15px 20px;
1389
+ background: var(--si-raised);
1390
+ border-radius: 0 0 16px 16px;
1391
+ border-top: 1px solid var(--si-border);
1432
1392
  display: flex;
1433
1393
  gap: 12px;
1434
1394
  justify-content: flex-end;
1435
1395
  }
1436
1396
 
1437
- .modal-btn {
1397
+ slice-debugger .modal-btn {
1438
1398
  padding: 10px 20px;
1439
- border: none;
1440
- border-radius: 6px;
1441
- font-size: 13px;
1442
- font-weight: 500;
1399
+ border: 1px solid transparent;
1400
+ border-radius: 8px;
1401
+ font-size: 12.5px;
1402
+ font-weight: 600;
1443
1403
  cursor: pointer;
1444
- transition: all 0.2s ease;
1445
- }
1446
-
1447
- .modal-btn.cancel {
1448
- background: var(--tertiary-background-color);
1449
- color: var(--font-primary-color);
1450
- border: 1px solid var(--medium-color);
1404
+ transition: background 0.15s ease, border-color 0.15s ease;
1451
1405
  }
1452
-
1453
- .modal-btn.cancel:hover {
1454
- background: var(--secondary-background-color);
1455
- }
1456
-
1457
- .modal-btn.save {
1458
- background: var(--success-color);
1459
- color: var(--success-contrast);
1460
- }
1461
-
1462
- .modal-btn.save:hover {
1463
- opacity: 0.9;
1406
+ slice-debugger .modal-btn.cancel {
1407
+ background: var(--si-raised);
1408
+ color: var(--si-text);
1409
+ border-color: var(--si-border);
1464
1410
  }
1411
+ slice-debugger .modal-btn.cancel:hover { background: var(--si-raised-2); }
1412
+ slice-debugger .modal-btn.save { background: var(--si-success); color: #06231a; }
1413
+ slice-debugger .modal-btn.save:hover { filter: brightness(1.08); }
1414
+ slice-debugger .modal-btn.save:disabled { opacity: 0.45; cursor: not-allowed; filter: none; }
1465
1415
 
1466
- .modal-btn.save:disabled {
1467
- background: var(--disabled-color);
1468
- cursor: not-allowed;
1416
+ @media (prefers-reduced-motion: reduce) {
1417
+ slice-debugger #debugger-container.active,
1418
+ slice-debugger .editor-modal.active { animation: none; }
1469
1419
  }
1470
- `
1420
+ `
1471
1421
  }
1472
1422
 
1473
1423
  function productionOnlyHtml(){