x-ipe 1.0.23__py3-none-any.whl → 1.0.25__py3-none-any.whl

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 (146) hide show
  1. x_ipe/app.py +32 -1
  2. x_ipe/handlers/terminal_handlers.py +6 -0
  3. x_ipe/handlers/voice_handlers.py +5 -0
  4. x_ipe/resources/copilot-instructions.md +19 -6
  5. x_ipe/resources/skills/lesson-learned/SKILL.md +208 -0
  6. x_ipe/resources/skills/lesson-learned/references/examples.md +238 -0
  7. x_ipe/resources/skills/project-quality-board-management/SKILL.md +135 -298
  8. x_ipe/resources/skills/project-quality-board-management/references/evaluation-principles.md +213 -0
  9. x_ipe/resources/skills/project-quality-board-management/references/evaluation-procedures.md +214 -0
  10. x_ipe/resources/skills/project-quality-board-management/templates/quality-report.md +70 -18
  11. x_ipe/resources/skills/task-execution-guideline/SKILL.md +2 -2
  12. x_ipe/resources/skills/task-execution-guideline/templates/task-record.yaml +1 -1
  13. x_ipe/resources/skills/task-type-code-implementation/SKILL.md +72 -270
  14. x_ipe/resources/skills/task-type-code-implementation/references/implementation-guidelines.md +432 -0
  15. x_ipe/resources/skills/task-type-code-refactor-v2/SKILL.md +127 -353
  16. x_ipe/resources/skills/task-type-code-refactor-v2/references/refactoring-techniques.md +373 -0
  17. x_ipe/resources/skills/task-type-feature-breakdown/SKILL.md +31 -243
  18. x_ipe/resources/skills/task-type-feature-breakdown/references/breakdown-guidelines.md +330 -0
  19. x_ipe/resources/skills/task-type-feature-refinement/SKILL.md +27 -180
  20. x_ipe/resources/skills/task-type-feature-refinement/references/specification-writing-guide.md +267 -0
  21. x_ipe/resources/skills/task-type-idea-mockup/SKILL.md +38 -276
  22. x_ipe/resources/skills/task-type-idea-mockup/references/mockup-guidelines.md +299 -0
  23. x_ipe/resources/skills/task-type-idea-to-architecture/SKILL.md +20 -218
  24. x_ipe/resources/skills/task-type-idea-to-architecture/references/architecture-patterns.md +342 -0
  25. x_ipe/resources/skills/task-type-ideation/SKILL.md +10 -266
  26. x_ipe/resources/skills/task-type-ideation/references/folder-naming-guide.md +55 -0
  27. x_ipe/resources/skills/task-type-ideation/references/tool-usage-guide.md +236 -0
  28. x_ipe/resources/skills/task-type-ideation-v2/SKILL.md +488 -0
  29. x_ipe/resources/skills/task-type-ideation-v2/references/examples.md +377 -0
  30. x_ipe/resources/skills/task-type-ideation-v2/references/folder-naming-guide.md +74 -0
  31. x_ipe/resources/skills/task-type-ideation-v2/references/tool-usage-guide.md +145 -0
  32. x_ipe/resources/skills/task-type-ideation-v2/references/visualization-guide.md +160 -0
  33. x_ipe/resources/skills/task-type-ideation-v2/templates/idea-summary.md +86 -0
  34. x_ipe/resources/skills/task-type-refactoring-analysis/SKILL.md +83 -145
  35. x_ipe/resources/skills/task-type-refactoring-analysis/references/output-schema.md +172 -0
  36. x_ipe/resources/skills/task-type-technical-design/SKILL.md +28 -214
  37. x_ipe/resources/skills/task-type-technical-design/references/design-templates.md +422 -0
  38. x_ipe/resources/skills/task-type-test-generation/SKILL.md +47 -332
  39. x_ipe/resources/skills/task-type-test-generation/references/test-patterns.md +368 -0
  40. x_ipe/resources/skills/tool-tracing-creator/SKILL.md +312 -0
  41. x_ipe/resources/skills/tool-tracing-creator/references/examples.md +324 -0
  42. x_ipe/resources/skills/tool-tracing-instrumentation/SKILL.md +373 -0
  43. x_ipe/resources/skills/tool-tracing-instrumentation/references/examples.md +264 -0
  44. x_ipe/resources/skills/x-ipe-skill-creator-v3/SKILL.md +486 -0
  45. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/10. example-gate-conditions.md +73 -0
  46. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/11. reference-quality-standards.md +127 -0
  47. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/2. reference-section-order.md +127 -0
  48. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/3. example-step-based-code-review.md +84 -0
  49. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/4. example-step-based-feature-implementation.md +113 -0
  50. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/5. example-function-based-validation.md +73 -0
  51. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/6. example-function-based-analysis.md +94 -0
  52. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/7. example-task-io-code-implementation.md +36 -0
  53. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/8. example-structured-summary.md +43 -0
  54. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/9. example-dor-dod.md +77 -0
  55. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/examples.md +429 -0
  56. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/skill-general-guidelines-v2.md +611 -0
  57. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/skill-meta-x-ipe-meta.md +153 -0
  58. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/skill-meta-x-ipe-task-based.md +324 -0
  59. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/skill-meta-x-ipe-task-category.md +109 -0
  60. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/skill-meta-x-ipe-tool.md +205 -0
  61. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/x-ipe-meta.md +334 -0
  62. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/x-ipe-task-based.md +279 -0
  63. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/x-ipe-tool.md +175 -0
  64. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/x-ipe-workflow-orchestration.md +329 -0
  65. x_ipe/resources/skills/x-ipe-task-based-ideation/SKILL.md +487 -0
  66. x_ipe/resources/skills/x-ipe-task-based-ideation/references/examples.md +377 -0
  67. x_ipe/resources/skills/x-ipe-task-based-ideation/references/folder-naming-guide.md +74 -0
  68. x_ipe/resources/skills/x-ipe-task-based-ideation/references/tool-usage-guide.md +145 -0
  69. x_ipe/resources/skills/x-ipe-task-based-ideation/references/visualization-guide.md +160 -0
  70. x_ipe/resources/skills/x-ipe-task-based-ideation/templates/idea-summary.md +86 -0
  71. x_ipe/routes/__init__.py +2 -0
  72. x_ipe/routes/ideas_routes.py +289 -0
  73. x_ipe/routes/kb_routes.py +80 -0
  74. x_ipe/routes/main_routes.py +18 -0
  75. x_ipe/routes/project_routes.py +7 -0
  76. x_ipe/routes/proxy_routes.py +10 -2
  77. x_ipe/routes/quality_evaluation_routes.py +193 -0
  78. x_ipe/routes/settings_routes.py +6 -0
  79. x_ipe/routes/tools_routes.py +6 -0
  80. x_ipe/routes/tracing_routes.py +232 -0
  81. x_ipe/routes/uiux_feedback_routes.py +50 -0
  82. x_ipe/services/__init__.py +5 -0
  83. x_ipe/services/config_service.py +6 -0
  84. x_ipe/services/file_service.py +20 -0
  85. x_ipe/services/homepage_service.py +160 -0
  86. x_ipe/services/ideas_service.py +535 -2
  87. x_ipe/services/kb_service.py +378 -0
  88. x_ipe/services/proxy_service.py +37 -7
  89. x_ipe/services/settings_service.py +13 -0
  90. x_ipe/services/skills_service.py +4 -0
  91. x_ipe/services/terminal_service.py +24 -0
  92. x_ipe/services/themes_service.py +4 -0
  93. x_ipe/services/tools_config_service.py +4 -0
  94. x_ipe/services/tracing_service.py +333 -0
  95. x_ipe/services/uiux_feedback_service.py +148 -1
  96. x_ipe/services/voice_input_service_v2.py +11 -0
  97. x_ipe/static/css/base.css +7 -0
  98. x_ipe/static/css/homepage-infinity.css +330 -0
  99. x_ipe/static/css/kb-core.css +301 -0
  100. x_ipe/static/css/quality-evaluation.css +345 -0
  101. x_ipe/static/css/sidebar.css +14 -4
  102. x_ipe/static/css/terminal.css +23 -0
  103. x_ipe/static/css/tracing-dashboard.css +796 -0
  104. x_ipe/static/css/uiux-feedback.css +7 -1
  105. x_ipe/static/css/workplace.css +636 -0
  106. x_ipe/static/img/homepage-infinity-loop.png +0 -0
  107. x_ipe/static/js/features/confirm-dialog.js +169 -0
  108. x_ipe/static/js/features/folder-view.js +742 -0
  109. x_ipe/static/js/features/homepage-infinity.js +314 -0
  110. x_ipe/static/js/features/kb-core.js +371 -0
  111. x_ipe/static/js/features/quality-evaluation.js +387 -0
  112. x_ipe/static/js/features/sidebar.js +255 -12
  113. x_ipe/static/js/features/tracing-dashboard.js +855 -0
  114. x_ipe/static/js/features/tracing-graph.js +1031 -0
  115. x_ipe/static/js/features/tree-drag.js +227 -0
  116. x_ipe/static/js/features/tree-search.js +228 -0
  117. x_ipe/static/js/features/workplace.js +661 -33
  118. x_ipe/static/js/init.js +76 -0
  119. x_ipe/static/js/terminal-v2.js +45 -14
  120. x_ipe/static/js/terminal.js +50 -49
  121. x_ipe/static/js/uiux-feedback.js +75 -16
  122. x_ipe/templates/base.html +24 -0
  123. x_ipe/templates/index.html +10 -1
  124. x_ipe/templates/knowledge-base.html +110 -0
  125. x_ipe/templates/workplace.html +4 -0
  126. x_ipe/tracing/__init__.py +37 -0
  127. x_ipe/tracing/buffer.py +135 -0
  128. x_ipe/tracing/context.py +125 -0
  129. x_ipe/tracing/decorator.py +288 -0
  130. x_ipe/tracing/middleware.py +197 -0
  131. x_ipe/tracing/parser.py +235 -0
  132. x_ipe/tracing/redactor.py +111 -0
  133. x_ipe/tracing/writer.py +122 -0
  134. {x_ipe-1.0.23.dist-info → x_ipe-1.0.25.dist-info}/METADATA +2 -2
  135. {x_ipe-1.0.23.dist-info → x_ipe-1.0.25.dist-info}/RECORD +138 -65
  136. x_ipe/app.py.bak +0 -1333
  137. x_ipe/resources/skills/x-ipe-skill-creator/SKILL.md +0 -329
  138. x_ipe/resources/skills/x-ipe-skill-creator/references/output-patterns.md +0 -169
  139. x_ipe/resources/skills/x-ipe-skill-creator/references/skill-structure.md +0 -162
  140. x_ipe/resources/skills/x-ipe-skill-creator/references/workflows.md +0 -110
  141. x_ipe/resources/skills/x-ipe-skill-creator/templates/references/examples.md +0 -113
  142. x_ipe/resources/skills/x-ipe-skill-creator/templates/skill-category-skill.md +0 -296
  143. x_ipe/resources/skills/x-ipe-skill-creator/templates/task-type-skill.md +0 -269
  144. {x_ipe-1.0.23.dist-info → x_ipe-1.0.25.dist-info}/WHEEL +0 -0
  145. {x_ipe-1.0.23.dist-info → x_ipe-1.0.25.dist-info}/entry_points.txt +0 -0
  146. {x_ipe-1.0.23.dist-info → x_ipe-1.0.25.dist-info}/licenses/LICENSE +0 -0
@@ -876,6 +876,7 @@
876
876
  .entry-actions-footer {
877
877
  display: flex;
878
878
  justify-content: flex-end;
879
+ gap: 8px;
879
880
  padding-top: 12px;
880
881
  margin-top: 12px;
881
882
  border-top: 1px solid var(--uiux-slate-100);
@@ -922,10 +923,15 @@
922
923
  transition: background 0.2s;
923
924
  }
924
925
 
925
- .btn-copilot:hover {
926
+ .btn-copilot:hover:not(:disabled) {
926
927
  background: #553098;
927
928
  }
928
929
 
930
+ .btn-copilot:disabled {
931
+ background: var(--uiux-slate-300);
932
+ cursor: not-allowed;
933
+ }
934
+
929
935
  .btn-copilot i {
930
936
  font-size: 14px;
931
937
  }
@@ -104,6 +104,14 @@
104
104
  color: #495057;
105
105
  }
106
106
 
107
+ .workplace-sidebar-header-actions {
108
+ display: flex;
109
+ align-items: center;
110
+ gap: 4px;
111
+ }
112
+
113
+ .workplace-create-folder-btn,
114
+ .workplace-collapse-all-btn,
107
115
  .workplace-pin-btn {
108
116
  width: 28px;
109
117
  height: 28px;
@@ -118,6 +126,8 @@
118
126
  transition: all 0.15s;
119
127
  }
120
128
 
129
+ .workplace-create-folder-btn:hover,
130
+ .workplace-collapse-all-btn:hover,
121
131
  .workplace-pin-btn:hover {
122
132
  background-color: #e9ecef;
123
133
  color: #0d6efd;
@@ -198,6 +208,15 @@
198
208
  flex: 1;
199
209
  }
200
210
 
211
+ /* Highlighted parent folder when file is being previewed */
212
+ .workplace-tree-item.folder-highlighted > .workplace-tree-item-content {
213
+ background-color: rgba(255, 193, 7, 0.15);
214
+ }
215
+
216
+ .workplace-tree-item.folder-highlighted > .workplace-tree-item-content > i.bi-folder-fill {
217
+ color: #ffc107 !important;
218
+ }
219
+
201
220
  /* =================================================================
202
221
  * WORKPLACE TREE ACTIONS
203
222
  * ================================================================= */
@@ -413,6 +432,15 @@
413
432
  padding: 16px;
414
433
  }
415
434
 
435
+ /* When content body contains HTML/image preview, make it flex and remove padding */
436
+ .workplace-content-body:has(.workplace-preview),
437
+ .workplace-content-body:has(.workplace-image-preview) {
438
+ display: flex;
439
+ flex-direction: column;
440
+ padding: 0;
441
+ overflow: hidden;
442
+ }
443
+
416
444
  .workplace-markdown-content {
417
445
  max-width: 900px;
418
446
  }
@@ -910,3 +938,611 @@
910
938
  font-size: 12px;
911
939
  margin-left: 8px;
912
940
  }
941
+
942
+
943
+ /* =================================================================
944
+ * CR-006: FOLDER TREE UX ENHANCEMENT STYLES
945
+ * ================================================================= */
946
+
947
+ /* Design system variables for CR-006 */
948
+ :root {
949
+ --cr006-color-primary: #0f172a;
950
+ --cr006-color-secondary: #475569;
951
+ --cr006-color-accent: #10b981;
952
+ --cr006-color-accent-light: #d1fae5;
953
+ --cr006-color-border: #e2e8f0;
954
+ --cr006-color-bg: #f8fafc;
955
+ --cr006-color-error: #ef4444;
956
+ --cr006-color-error-light: #fee2e2;
957
+ --cr006-radius-sm: 4px;
958
+ --cr006-radius-md: 8px;
959
+ --cr006-radius-lg: 12px;
960
+ }
961
+
962
+ /* =================================================================
963
+ * TREE SEARCH BAR
964
+ * ================================================================= */
965
+ .tree-search-container {
966
+ padding: 8px 12px;
967
+ border-bottom: 1px solid var(--cr006-color-border);
968
+ }
969
+
970
+ .tree-search-wrapper {
971
+ position: relative;
972
+ display: flex;
973
+ align-items: center;
974
+ }
975
+
976
+ .tree-search-icon {
977
+ position: absolute;
978
+ left: 10px;
979
+ color: var(--cr006-color-secondary);
980
+ font-size: 14px;
981
+ pointer-events: none;
982
+ }
983
+
984
+ .tree-search-input {
985
+ width: 100%;
986
+ padding: 6px 32px 6px 32px;
987
+ border: 1px solid var(--cr006-color-border);
988
+ border-radius: var(--cr006-radius-md);
989
+ font-size: 13px;
990
+ background: white;
991
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
992
+ }
993
+
994
+ .tree-search-input:focus {
995
+ outline: none;
996
+ border-color: var(--cr006-color-accent);
997
+ box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1);
998
+ }
999
+
1000
+ .tree-search-input::placeholder {
1001
+ color: #94a3b8;
1002
+ }
1003
+
1004
+ .tree-search-clear {
1005
+ position: absolute;
1006
+ right: 6px;
1007
+ width: 20px;
1008
+ height: 20px;
1009
+ display: flex;
1010
+ align-items: center;
1011
+ justify-content: center;
1012
+ border: none;
1013
+ background: transparent;
1014
+ color: var(--cr006-color-secondary);
1015
+ border-radius: 50%;
1016
+ cursor: pointer;
1017
+ transition: background 0.15s ease;
1018
+ }
1019
+
1020
+ .tree-search-clear:hover {
1021
+ background: var(--cr006-color-border);
1022
+ color: var(--cr006-color-primary);
1023
+ }
1024
+
1025
+ /* Search result highlighting */
1026
+ .tree-item.search-match .tree-label {
1027
+ background: linear-gradient(transparent 60%, #fef08a 60%);
1028
+ }
1029
+
1030
+ .tree-item.search-parent {
1031
+ opacity: 0.7;
1032
+ }
1033
+
1034
+ /* =================================================================
1035
+ * DRAG-DROP STATES
1036
+ * ================================================================= */
1037
+ .tree-item.dragging {
1038
+ opacity: 0.5;
1039
+ }
1040
+
1041
+ .tree-item.drag-over {
1042
+ background: var(--cr006-color-accent-light) !important;
1043
+ border: 2px dashed var(--cr006-color-accent) !important;
1044
+ border-radius: var(--cr006-radius-md);
1045
+ }
1046
+
1047
+ .tree-item.drag-invalid {
1048
+ background: var(--cr006-color-error-light) !important;
1049
+ border: 2px solid var(--cr006-color-error) !important;
1050
+ border-radius: var(--cr006-radius-md);
1051
+ }
1052
+
1053
+ .tree-item.moving {
1054
+ opacity: 0.6;
1055
+ pointer-events: none;
1056
+ }
1057
+
1058
+ @keyframes shake {
1059
+ 0%, 100% { transform: translateX(0); }
1060
+ 20%, 60% { transform: translateX(-4px); }
1061
+ 40%, 80% { transform: translateX(4px); }
1062
+ }
1063
+
1064
+ /* =================================================================
1065
+ * FOLDER VIEW BUTTON ON TREE ITEMS
1066
+ * ================================================================= */
1067
+ .tree-folder-view-btn {
1068
+ width: 22px;
1069
+ height: 22px;
1070
+ display: flex;
1071
+ align-items: center;
1072
+ justify-content: center;
1073
+ border: none;
1074
+ background: transparent;
1075
+ color: var(--cr006-color-secondary);
1076
+ border-radius: var(--cr006-radius-sm);
1077
+ cursor: pointer;
1078
+ opacity: 0;
1079
+ transition: opacity 0.15s ease, background 0.15s ease, color 0.15s ease;
1080
+ margin-left: auto;
1081
+ flex-shrink: 0;
1082
+ }
1083
+
1084
+ .tree-item:hover .tree-folder-view-btn {
1085
+ opacity: 1;
1086
+ }
1087
+
1088
+ .tree-folder-view-btn:hover {
1089
+ background: var(--cr006-color-accent);
1090
+ color: white;
1091
+ }
1092
+
1093
+ /* =================================================================
1094
+ * FOLDER VIEW PANEL
1095
+ * ================================================================= */
1096
+ .folder-view {
1097
+ display: flex;
1098
+ flex-direction: column;
1099
+ height: 100%;
1100
+ background: white;
1101
+ }
1102
+
1103
+ .folder-view-header {
1104
+ padding: 16px 20px;
1105
+ border-bottom: 1px solid var(--cr006-color-border);
1106
+ background: var(--cr006-color-bg);
1107
+ }
1108
+
1109
+ .folder-view-header-row {
1110
+ display: flex;
1111
+ align-items: center;
1112
+ justify-content: space-between;
1113
+ margin-bottom: 12px;
1114
+ }
1115
+
1116
+ .folder-view-close {
1117
+ width: 28px;
1118
+ height: 28px;
1119
+ display: flex;
1120
+ align-items: center;
1121
+ justify-content: center;
1122
+ border: none;
1123
+ background: transparent;
1124
+ color: var(--cr006-color-secondary);
1125
+ border-radius: var(--cr006-radius-sm);
1126
+ cursor: pointer;
1127
+ transition: background 0.15s ease;
1128
+ }
1129
+
1130
+ .folder-view-close:hover {
1131
+ background: var(--cr006-color-border);
1132
+ }
1133
+
1134
+ /* Breadcrumb */
1135
+ .folder-view-breadcrumb {
1136
+ display: flex;
1137
+ align-items: center;
1138
+ flex-wrap: wrap;
1139
+ gap: 4px;
1140
+ font-size: 14px;
1141
+ }
1142
+
1143
+ .breadcrumb-item {
1144
+ color: var(--cr006-color-secondary);
1145
+ padding: 2px 4px;
1146
+ border-radius: var(--cr006-radius-sm);
1147
+ }
1148
+
1149
+ .breadcrumb-item.clickable {
1150
+ cursor: pointer;
1151
+ transition: color 0.15s ease, background 0.15s ease;
1152
+ }
1153
+
1154
+ .breadcrumb-item.clickable:hover {
1155
+ color: var(--cr006-color-accent);
1156
+ background: var(--cr006-color-accent-light);
1157
+ }
1158
+
1159
+ .breadcrumb-item.current {
1160
+ color: var(--cr006-color-primary);
1161
+ font-weight: 500;
1162
+ }
1163
+
1164
+ .breadcrumb-sep {
1165
+ color: #cbd5e1;
1166
+ font-size: 12px;
1167
+ }
1168
+
1169
+ /* Action bar */
1170
+ .folder-view-actions {
1171
+ display: flex;
1172
+ gap: 8px;
1173
+ flex-wrap: wrap;
1174
+ }
1175
+
1176
+ .folder-view-action-btn {
1177
+ display: flex;
1178
+ align-items: center;
1179
+ gap: 6px;
1180
+ padding: 6px 12px;
1181
+ border: 1px solid var(--cr006-color-border);
1182
+ background: white;
1183
+ color: var(--cr006-color-primary);
1184
+ border-radius: var(--cr006-radius-md);
1185
+ font-size: 13px;
1186
+ cursor: pointer;
1187
+ transition: all 0.15s ease;
1188
+ }
1189
+
1190
+ .folder-view-action-btn:hover {
1191
+ border-color: var(--cr006-color-accent);
1192
+ color: var(--cr006-color-accent);
1193
+ }
1194
+
1195
+ .folder-view-action-btn.danger:hover {
1196
+ border-color: var(--cr006-color-error);
1197
+ color: var(--cr006-color-error);
1198
+ }
1199
+
1200
+ .folder-view-action-btn i {
1201
+ font-size: 14px;
1202
+ }
1203
+
1204
+ /* Content area */
1205
+ .folder-view-content {
1206
+ flex: 1;
1207
+ overflow-y: auto;
1208
+ padding: 16px 20px;
1209
+ }
1210
+
1211
+ .folder-view-empty {
1212
+ display: flex;
1213
+ flex-direction: column;
1214
+ align-items: center;
1215
+ justify-content: center;
1216
+ padding: 48px 20px;
1217
+ color: var(--cr006-color-secondary);
1218
+ text-align: center;
1219
+ }
1220
+
1221
+ .folder-view-empty i {
1222
+ font-size: 48px;
1223
+ margin-bottom: 16px;
1224
+ color: #cbd5e1;
1225
+ }
1226
+
1227
+ .folder-view-empty p {
1228
+ margin: 0 0 8px 0;
1229
+ }
1230
+
1231
+ /* Item list */
1232
+ .folder-view-list {
1233
+ display: flex;
1234
+ flex-direction: column;
1235
+ gap: 4px;
1236
+ }
1237
+
1238
+ .folder-view-item {
1239
+ border-radius: var(--cr006-radius-md);
1240
+ transition: background 0.15s ease;
1241
+ }
1242
+
1243
+ .folder-view-item-main {
1244
+ display: flex;
1245
+ align-items: center;
1246
+ padding: 10px 12px;
1247
+ gap: 10px;
1248
+ cursor: pointer;
1249
+ border-radius: var(--cr006-radius-md);
1250
+ }
1251
+
1252
+ .folder-view-item-main:hover {
1253
+ background: var(--cr006-color-bg);
1254
+ }
1255
+
1256
+ .folder-view-item-toggle {
1257
+ width: 20px;
1258
+ height: 20px;
1259
+ display: flex;
1260
+ align-items: center;
1261
+ justify-content: center;
1262
+ border: none;
1263
+ background: transparent;
1264
+ color: var(--cr006-color-secondary);
1265
+ border-radius: var(--cr006-radius-sm);
1266
+ cursor: pointer;
1267
+ transition: transform 0.15s ease;
1268
+ }
1269
+
1270
+ .folder-view-item.expanded .folder-view-item-toggle {
1271
+ transform: rotate(90deg);
1272
+ }
1273
+
1274
+ .folder-view-item-spacer {
1275
+ width: 20px;
1276
+ }
1277
+
1278
+ .folder-view-item-icon {
1279
+ font-size: 18px;
1280
+ color: var(--cr006-color-secondary);
1281
+ flex-shrink: 0;
1282
+ }
1283
+
1284
+ .folder-view-item-icon.folder-icon {
1285
+ color: #f59e0b;
1286
+ }
1287
+
1288
+ .folder-view-item-name {
1289
+ flex: 1;
1290
+ font-size: 14px;
1291
+ color: var(--cr006-color-primary);
1292
+ overflow: hidden;
1293
+ text-overflow: ellipsis;
1294
+ white-space: nowrap;
1295
+ }
1296
+
1297
+ .folder-view-item-actions {
1298
+ display: flex;
1299
+ gap: 4px;
1300
+ opacity: 0;
1301
+ transition: opacity 0.15s ease;
1302
+ }
1303
+
1304
+ .folder-view-item-main:hover .folder-view-item-actions {
1305
+ opacity: 1;
1306
+ }
1307
+
1308
+ .folder-view-item-action {
1309
+ width: 26px;
1310
+ height: 26px;
1311
+ display: flex;
1312
+ align-items: center;
1313
+ justify-content: center;
1314
+ border: none;
1315
+ background: transparent;
1316
+ color: var(--cr006-color-secondary);
1317
+ border-radius: var(--cr006-radius-sm);
1318
+ cursor: pointer;
1319
+ transition: background 0.15s ease, color 0.15s ease;
1320
+ }
1321
+
1322
+ .folder-view-item-action:hover {
1323
+ background: var(--cr006-color-border);
1324
+ color: var(--cr006-color-primary);
1325
+ }
1326
+
1327
+ .folder-view-item-action.danger:hover {
1328
+ background: var(--cr006-color-error-light);
1329
+ color: var(--cr006-color-error);
1330
+ }
1331
+
1332
+ /* TASK-240: Into folder button - always visible with primary color */
1333
+ .folder-view-item-action.into-btn {
1334
+ color: var(--cr006-color-accent);
1335
+ }
1336
+
1337
+ .folder-view-item-action.into-btn:hover {
1338
+ background: var(--cr006-color-accent);
1339
+ color: white;
1340
+ }
1341
+
1342
+ /* Nested children */
1343
+ .folder-view-item-children {
1344
+ display: none;
1345
+ padding-left: 24px;
1346
+ }
1347
+
1348
+ .folder-view-item.expanded > .folder-view-item-children {
1349
+ display: block;
1350
+ }
1351
+
1352
+ /* TASK-241: Drag and drop styles */
1353
+ .folder-view-item.dragging {
1354
+ opacity: 0.5;
1355
+ }
1356
+
1357
+ .folder-view-item.drop-target > .folder-view-item-main {
1358
+ background: var(--cr006-color-accent-light, rgba(59, 130, 246, 0.1));
1359
+ border: 2px dashed var(--cr006-color-accent);
1360
+ border-radius: var(--cr006-radius-sm);
1361
+ }
1362
+
1363
+ .folder-view-content.drop-target-zone {
1364
+ background: var(--cr006-color-accent-light, rgba(59, 130, 246, 0.05));
1365
+ border: 2px dashed var(--cr006-color-accent);
1366
+ border-radius: var(--cr006-radius-sm);
1367
+ }
1368
+
1369
+ /* Error state */
1370
+ .folder-view-error {
1371
+ display: flex;
1372
+ flex-direction: column;
1373
+ align-items: center;
1374
+ justify-content: center;
1375
+ height: 100%;
1376
+ color: var(--cr006-color-error);
1377
+ text-align: center;
1378
+ }
1379
+
1380
+ .folder-view-error i {
1381
+ font-size: 48px;
1382
+ margin-bottom: 16px;
1383
+ }
1384
+
1385
+ /* TASK-241: Drag and drop styles for folder view */
1386
+ .folder-view-item.dragging {
1387
+ opacity: 0.5;
1388
+ background-color: #e3f2fd;
1389
+ }
1390
+
1391
+ .folder-view-item.drop-target {
1392
+ background-color: #e8f5e9;
1393
+ border: 2px dashed #4caf50;
1394
+ border-radius: 6px;
1395
+ }
1396
+
1397
+ .folder-view-item.drop-target > .folder-view-item-main {
1398
+ background-color: transparent;
1399
+ }
1400
+
1401
+ .folder-view-content.drop-target-zone {
1402
+ background-color: #e8f5e9;
1403
+ border: 2px dashed #4caf50;
1404
+ border-radius: 6px;
1405
+ }
1406
+
1407
+ /* TASK-240: "Into" button styling */
1408
+ .folder-view-item-action.into-btn {
1409
+ color: #0d6efd;
1410
+ }
1411
+
1412
+ .folder-view-item-action.into-btn:hover {
1413
+ background-color: #e7f1ff;
1414
+ color: #0a58ca;
1415
+ }
1416
+
1417
+ /* =================================================================
1418
+ * CONFIRM DIALOG
1419
+ * ================================================================= */
1420
+ .confirm-dialog-overlay {
1421
+ position: fixed;
1422
+ inset: 0;
1423
+ background: rgba(0, 0, 0, 0.5);
1424
+ display: flex;
1425
+ align-items: center;
1426
+ justify-content: center;
1427
+ z-index: 9999;
1428
+ opacity: 0;
1429
+ visibility: hidden;
1430
+ transition: opacity 0.2s ease, visibility 0.2s ease;
1431
+ }
1432
+
1433
+ .confirm-dialog-overlay.visible {
1434
+ opacity: 1;
1435
+ visibility: visible;
1436
+ }
1437
+
1438
+ .confirm-dialog {
1439
+ background: white;
1440
+ border-radius: var(--cr006-radius-lg);
1441
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
1442
+ max-width: 400px;
1443
+ width: 90%;
1444
+ transform: scale(0.95);
1445
+ transition: transform 0.2s ease;
1446
+ }
1447
+
1448
+ .confirm-dialog-overlay.visible .confirm-dialog {
1449
+ transform: scale(1);
1450
+ }
1451
+
1452
+ .confirm-dialog-header {
1453
+ padding: 16px 20px;
1454
+ border-bottom: 1px solid var(--cr006-color-border);
1455
+ }
1456
+
1457
+ .confirm-dialog-title {
1458
+ margin: 0;
1459
+ font-size: 16px;
1460
+ font-weight: 600;
1461
+ color: var(--cr006-color-primary);
1462
+ }
1463
+
1464
+ .confirm-dialog-body {
1465
+ padding: 20px;
1466
+ }
1467
+
1468
+ .confirm-dialog-message {
1469
+ margin: 0;
1470
+ font-size: 14px;
1471
+ color: var(--cr006-color-secondary);
1472
+ line-height: 1.5;
1473
+ }
1474
+
1475
+ .confirm-dialog-details {
1476
+ margin-top: 12px;
1477
+ }
1478
+
1479
+ .confirm-dialog-warning {
1480
+ display: flex;
1481
+ align-items: flex-start;
1482
+ gap: 8px;
1483
+ padding: 10px 12px;
1484
+ background: #fef3c7;
1485
+ border-radius: var(--cr006-radius-md);
1486
+ color: #92400e;
1487
+ font-size: 13px;
1488
+ margin: 0;
1489
+ }
1490
+
1491
+ .confirm-dialog-warning i {
1492
+ font-size: 16px;
1493
+ flex-shrink: 0;
1494
+ margin-top: 1px;
1495
+ }
1496
+
1497
+ .confirm-dialog-footer {
1498
+ display: flex;
1499
+ justify-content: flex-end;
1500
+ gap: 8px;
1501
+ padding: 16px 20px;
1502
+ border-top: 1px solid var(--cr006-color-border);
1503
+ }
1504
+
1505
+ .confirm-dialog-btn {
1506
+ padding: 8px 16px;
1507
+ border-radius: var(--cr006-radius-md);
1508
+ font-size: 14px;
1509
+ font-weight: 500;
1510
+ cursor: pointer;
1511
+ transition: all 0.15s ease;
1512
+ }
1513
+
1514
+ .confirm-dialog-btn.cancel-btn {
1515
+ border: 1px solid var(--cr006-color-border);
1516
+ background: white;
1517
+ color: var(--cr006-color-secondary);
1518
+ }
1519
+
1520
+ .confirm-dialog-btn.cancel-btn:hover {
1521
+ background: var(--cr006-color-bg);
1522
+ }
1523
+
1524
+ .confirm-dialog-btn.confirm-btn {
1525
+ border: none;
1526
+ background: var(--cr006-color-accent);
1527
+ color: white;
1528
+ }
1529
+
1530
+ .confirm-dialog-btn.confirm-btn:hover {
1531
+ background: #059669;
1532
+ }
1533
+
1534
+ .confirm-dialog-btn.confirm-btn.danger {
1535
+ background: var(--cr006-color-error);
1536
+ }
1537
+
1538
+ .confirm-dialog-btn.confirm-btn.danger:hover {
1539
+ background: #dc2626;
1540
+ }
1541
+
1542
+ .confirm-dialog-btn.confirm-btn.primary {
1543
+ background: #3b82f6;
1544
+ }
1545
+
1546
+ .confirm-dialog-btn.confirm-btn.primary:hover {
1547
+ background: #2563eb;
1548
+ }