@tdk-landscape/tdk-cli-core 1.3.14 → 1.3.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. package/README.md +3 -3
  2. package/Tiltfile +144 -0
  3. package/discovery/AGENTS.md +362 -0
  4. package/discovery/TILT_DISCOVERY.star +424 -0
  5. package/discovery/Tiltfile +58 -0
  6. package/discovery/config.star +258 -0
  7. package/discovery/constants.star +127 -0
  8. package/discovery/deterministic.star +211 -0
  9. package/discovery/discovery_daemon.star +191 -0
  10. package/discovery/discovery_orchestrator.star +460 -0
  11. package/discovery/filtering.star +5 -0
  12. package/discovery/identity-management-backend/service.yaml +26 -0
  13. package/discovery/identity-management-frontend/service.yaml +29 -0
  14. package/discovery/identity-sdk/service.yaml +9 -0
  15. package/discovery/incremental_discovery.star +213 -0
  16. package/discovery/indexing.star +7 -0
  17. package/discovery/json_manifest_scanner.star +51 -0
  18. package/discovery/libraries.star +46 -0
  19. package/discovery/loading.star +23 -0
  20. package/discovery/manifest/constants.star +104 -0
  21. package/discovery/manifest/loading.star +386 -0
  22. package/discovery/manifest/normalize.star +281 -0
  23. package/discovery/manifest/validation.star +108 -0
  24. package/discovery/normalization.star +11 -0
  25. package/discovery/registry.star +544 -0
  26. package/discovery/resource_snapshot.py +382 -0
  27. package/discovery/resource_snapshot.star +143 -0
  28. package/discovery/schemas.star +1 -0
  29. package/discovery/services/platform/cdc/debezium/nats-connector/service.yaml +9 -0
  30. package/discovery/services/platform/cdc/nats-http-bridge/service.yaml +9 -0
  31. package/discovery/services/platform/orchestrator/orchestrator-glue-backend/service.yaml +26 -0
  32. package/discovery/services/platform/synthetic-monitor/service.yaml +9 -0
  33. package/discovery/test_resource_snapshot.py +251 -0
  34. package/discovery/validation.star +78 -0
  35. package/discovery/versioning.star +1 -0
  36. package/dist/commands/config.d.ts.map +1 -1
  37. package/dist/commands/config.js +11 -0
  38. package/dist/commands/config.js.map +1 -1
  39. package/dist/commands/doctor.d.ts.map +1 -1
  40. package/dist/commands/doctor.js +1 -2
  41. package/dist/commands/doctor.js.map +1 -1
  42. package/dist/commands/project.d.ts.map +1 -1
  43. package/dist/commands/project.js +36 -41
  44. package/dist/commands/project.js.map +1 -1
  45. package/dist/commands/resource.d.ts.map +1 -1
  46. package/dist/commands/resource.js +51 -55
  47. package/dist/commands/resource.js.map +1 -1
  48. package/dist/commands/stack.d.ts.map +1 -1
  49. package/dist/commands/stack.js +22 -24
  50. package/dist/commands/stack.js.map +1 -1
  51. package/dist/commands/ui.d.ts.map +1 -1
  52. package/dist/commands/ui.js +1 -2
  53. package/dist/commands/ui.js.map +1 -1
  54. package/dist/commands/up.d.ts.map +1 -1
  55. package/dist/commands/up.js +1 -2
  56. package/dist/commands/up.js.map +1 -1
  57. package/dist/commands/upgrade.d.ts +8 -0
  58. package/dist/commands/upgrade.d.ts.map +1 -1
  59. package/dist/commands/upgrade.js +62 -21
  60. package/dist/commands/upgrade.js.map +1 -1
  61. package/dist/generator/extension-fetch.d.ts +19 -0
  62. package/dist/generator/extension-fetch.d.ts.map +1 -1
  63. package/dist/generator/extension-fetch.js +71 -5
  64. package/dist/generator/extension-fetch.js.map +1 -1
  65. package/dist/generator/template-engine.d.ts +1 -0
  66. package/dist/generator/template-engine.d.ts.map +1 -1
  67. package/dist/generator/template-engine.js +50 -6
  68. package/dist/generator/template-engine.js.map +1 -1
  69. package/dist/utils/command-helpers.d.ts.map +1 -1
  70. package/dist/utils/command-helpers.js +7 -9
  71. package/dist/utils/command-helpers.js.map +1 -1
  72. package/dist/utils/constants.d.ts +1 -0
  73. package/dist/utils/constants.d.ts.map +1 -1
  74. package/dist/utils/constants.js +1 -0
  75. package/dist/utils/constants.js.map +1 -1
  76. package/dist/utils/errors.d.ts +2 -0
  77. package/dist/utils/errors.d.ts.map +1 -1
  78. package/dist/utils/errors.js +6 -1
  79. package/dist/utils/errors.js.map +1 -1
  80. package/dist/utils/paths.js +1 -1
  81. package/dist/utils/paths.js.map +1 -1
  82. package/dist/utils/project-features.d.ts.map +1 -1
  83. package/dist/utils/project-features.js +1 -1
  84. package/dist/utils/project-features.js.map +1 -1
  85. package/dist/utils/resource-features.d.ts.map +1 -1
  86. package/dist/utils/resource-features.js +2 -2
  87. package/dist/utils/resource-features.js.map +1 -1
  88. package/dist/utils/tar.js +4 -4
  89. package/dist/utils/tar.js.map +1 -1
  90. package/dist/utils/validation.d.ts +7 -0
  91. package/dist/utils/validation.d.ts.map +1 -1
  92. package/dist/utils/validation.js +9 -0
  93. package/dist/utils/validation.js.map +1 -1
  94. package/engine/AGENTS.md +705 -0
  95. package/engine/README.md +29 -0
  96. package/engine/REFACTORING_MANIFEST_SYSTEM.md +974 -0
  97. package/engine/Tiltfile +80 -0
  98. package/engine/assets/docker/golden-layers.Dockerfile +221 -0
  99. package/engine/assets/scripts/cleanup-completed-migrator-images.sh +37 -0
  100. package/engine/assets/scripts/cleanup-tilt-images.sh +120 -0
  101. package/engine/assets/scripts/mac-m1-resource-monitor.sh +121 -0
  102. package/engine/config.star +3 -0
  103. package/engine/docs/AUTODISCOVERY_TEST.md +182 -0
  104. package/engine/docs/C4-ARCHITECTURE-operations.md +396 -0
  105. package/engine/docs/C4-ARCHITECTURE-overview.md +284 -0
  106. package/engine/docs/C4-ARCHITECTURE.md +17 -0
  107. package/engine/docs/GOLDEN_IMAGE_INTEGRATION.md +349 -0
  108. package/engine/docs/MANIFEST_DRIVEN_ARCHITECTURE.md +357 -0
  109. package/engine/docs/README.md +284 -0
  110. package/engine/entrypoint.star +97 -0
  111. package/engine/lifecycle/orchestrator.star +260 -0
  112. package/engine/paths.star +717 -0
  113. package/engine/schemas/manifest-schema.json +301 -0
  114. package/engine/schemas/service-schema.json +301 -0
  115. package/engine/scripts/README.md +89 -0
  116. package/engine/scripts/build-and-publish-lib.sh +205 -0
  117. package/engine/scripts/check-lib-publish.sh +85 -0
  118. package/engine/scripts/debug-container.sh +258 -0
  119. package/engine/scripts/generate-manifest.sh +197 -0
  120. package/engine/spec.master +702 -0
  121. package/engine/spec.master.example +341 -0
  122. package/engine/topologies/README.md +34 -0
  123. package/engine/topologies/platform/docker/AGENTS.md +59 -0
  124. package/engine/topologies/platform/docker/auth/auth.star +167 -0
  125. package/engine/topologies/platform/docker/build/golden_image.star +37 -0
  126. package/engine/topologies/platform/docker/build/golden_image_build.star +82 -0
  127. package/engine/topologies/platform/docker/build/golden_image_constants.star +93 -0
  128. package/engine/topologies/platform/docker/build/golden_image_dockerfile.star +291 -0
  129. package/engine/topologies/platform/docker/compose/compose.star +636 -0
  130. package/engine/topologies/platform/docker/compose/compose_helpers.star +52 -0
  131. package/engine/topologies/platform/docker/compose/traefik_standalone.star +53 -0
  132. package/engine/topologies/platform/docker/config/bunignore.star +142 -0
  133. package/engine/topologies/platform/docker/config/dockerignore.star +150 -0
  134. package/engine/topologies/platform/docker/constants.star +170 -0
  135. package/engine/topologies/platform/docker/dockerfile/dockerfile.star +54 -0
  136. package/engine/topologies/platform/docker/generators/golden_docker_generator_v2.star +73 -0
  137. package/engine/topologies/platform/docker/index.star +27 -0
  138. package/engine/topologies/platform/docker/layers/bun_helpers.star +23 -0
  139. package/engine/topologies/platform/docker/layers/infisical/index.star +40 -0
  140. package/engine/topologies/platform/docker/layers/infisical/infisical_docker.star +262 -0
  141. package/engine/topologies/platform/docker/layers/l1_base_layers.star +87 -0
  142. package/engine/topologies/platform/docker/layers/l2_dependency_layers.star +125 -0
  143. package/engine/topologies/platform/docker/layers/l3_builder_layers.star +209 -0
  144. package/engine/topologies/platform/docker/layers/l4_runtime_layers.star +214 -0
  145. package/engine/topologies/platform/docker/layers/prisma/constants.star +135 -0
  146. package/engine/topologies/platform/docker/layers/prisma/db_readiness.star +96 -0
  147. package/engine/topologies/platform/docker/layers/prisma/filesystem_setup.star +109 -0
  148. package/engine/topologies/platform/docker/layers/prisma/migrate_script.star +98 -0
  149. package/engine/topologies/platform/docker/layers/prisma/prisma_build.star +126 -0
  150. package/engine/topologies/platform/docker/layers/prisma/prisma_runtime.star +161 -0
  151. package/engine/topologies/platform/docker/layers/prisma/secret_resolution.star +119 -0
  152. package/engine/topologies/platform/docker/networking/api_path_constants.star +230 -0
  153. package/engine/topologies/platform/docker/networking/sablier_container_cycle.star +27 -0
  154. package/engine/topologies/platform/docker/networking/traefik.star +232 -0
  155. package/engine/topologies/platform/docker/networking/traefik_constants.star +146 -0
  156. package/engine/topologies/platform/docker/networking/traefik_helpers.star +160 -0
  157. package/engine/topologies/platform/docker/secrets/infisical.star +135 -0
  158. package/engine/topologies/platform/net/proxy.star +4 -0
  159. package/engine/topologies/platform/registries/local.star +4 -0
  160. package/engine/topologies/platform/security/secrets.star +239 -0
  161. package/engine/topologies/platform/state/relational.star +4 -0
  162. package/engine/topologies/tilt/common/AGENTS.md +59 -0
  163. package/engine/topologies/tilt/common/utils.star +364 -0
  164. package/engine/topologies/tilt/common/utils_debug.star +69 -0
  165. package/engine/topologies/tilt/common/utils_deterministic.star +168 -0
  166. package/engine/topologies/tilt/common/utils_docker_networks.star +46 -0
  167. package/engine/topologies/tilt/common/utils_env.star +43 -0
  168. package/engine/topologies/tilt/common/utils_output.star +97 -0
  169. package/engine/topologies/tilt/config/AGENTS.md +68 -0
  170. package/engine/topologies/tilt/config/defaults.star +3 -0
  171. package/engine/topologies/tilt/config/feature_flags.star +10 -0
  172. package/engine/topologies/tilt/config/global.star +55 -0
  173. package/engine/topologies/tilt/config/profiles.star +382 -0
  174. package/engine/topologies/tilt/generators/agents_md.star +62 -0
  175. package/engine/topologies/tilt/generators/api_gateway.star +145 -0
  176. package/engine/topologies/tilt/generators/index.star +124 -0
  177. package/engine/topologies/tilt/generators/infisical/README.md +424 -0
  178. package/engine/topologies/tilt/generators/infisical/examples.star +312 -0
  179. package/engine/topologies/tilt/generators/infisical/index.star +57 -0
  180. package/engine/topologies/tilt/generators/infisical/machine_identity.star +420 -0
  181. package/engine/topologies/tilt/generators/infisical/organization.star +534 -0
  182. package/engine/topologies/tilt/generators/infisical/path_manager.star +476 -0
  183. package/engine/topologies/tilt/generators/infisical/secrets_generator.star +420 -0
  184. package/engine/topologies/tilt/generators/nginx_conf.star +143 -0
  185. package/engine/topologies/tilt/generators/npmrc.star +111 -0
  186. package/engine/topologies/tilt/generators/tsconfig.star +23 -0
  187. package/engine/topologies/tilt/generators/typescript/backend_library_tsconfig.star +71 -0
  188. package/engine/topologies/tilt/generators/typescript/backend_tsconfig.star +124 -0
  189. package/engine/topologies/tilt/generators/typescript/common.star +7 -0
  190. package/engine/topologies/tilt/generators/typescript/frontend_library_tsconfig.star +76 -0
  191. package/engine/topologies/tilt/generators/typescript/frontend_tsconfig.star +110 -0
  192. package/engine/topologies/tilt/generators/typescript/include.star +23 -0
  193. package/engine/topologies/tilt/generators/typescript/playwright_config.star +40 -0
  194. package/engine/topologies/tilt/generators/typescript/prisma_config.star +49 -0
  195. package/engine/topologies/tilt/generators/validators.star +853 -0
  196. package/engine/topologies/tilt/generators/vite/backend.star +78 -0
  197. package/engine/topologies/tilt/generators/vite/frontend.star +98 -0
  198. package/engine/topologies/tilt/generators/vite/generators.star +43 -0
  199. package/engine/topologies/tilt/generators/vite/helpers.star +244 -0
  200. package/engine/topologies/tilt/generators/vite/library.star +65 -0
  201. package/engine/topologies/tilt/generators/vite/sdk.star +73 -0
  202. package/engine/topologies/tilt/generators/vite/templates.star +737 -0
  203. package/engine/topologies/tilt/generators/vite_config.star +22 -0
  204. package/engine/topologies/tilt/manifest/AGENTS.md +61 -0
  205. package/engine/topologies/tilt/manifest/README.md +693 -0
  206. package/engine/topologies/tilt/manifest/__init__.star +218 -0
  207. package/engine/topologies/tilt/manifest/constants.star +252 -0
  208. package/engine/topologies/tilt/manifest/errors.star +266 -0
  209. package/engine/topologies/tilt/manifest/integration.star +339 -0
  210. package/engine/topologies/tilt/manifest/json_to_yaml.py +54 -0
  211. package/engine/topologies/tilt/manifest/loader.star +214 -0
  212. package/engine/topologies/tilt/manifest/mapper.star +227 -0
  213. package/engine/topologies/tilt/manifest/parser.star +400 -0
  214. package/engine/topologies/tilt/manifest/schema.star +462 -0
  215. package/engine/topologies/tilt/manifest/tests/test_integration.star +276 -0
  216. package/engine/topologies/tilt/manifest/tests/test_loader_parser.star +397 -0
  217. package/engine/topologies/tilt/manifest/tests/test_manifest.star +316 -0
  218. package/engine/topologies/tilt/manifest/tests/test_validator.star +470 -0
  219. package/engine/topologies/tilt/manifest/validator.star +717 -0
  220. package/engine/topologies/tilt/manifest/yaml_to_json.py +18 -0
  221. package/engine/topologies/tilt/resources/AGENTS.md +71 -0
  222. package/engine/topologies/tilt/resources/conditions.star +3 -0
  223. package/engine/topologies/tilt/resources/databases.star +244 -0
  224. package/engine/topologies/tilt/resources/declaration.star +3 -0
  225. package/engine/topologies/tilt/resources/deps.star +3 -0
  226. package/engine/topologies/tilt/resources/infra-loader.star +437 -0
  227. package/engine/topologies/tilt/resources/libs.star +30 -0
  228. package/engine/topologies/tilt/resources/libs_discovery.star +102 -0
  229. package/engine/topologies/tilt/resources/libs_paths.star +79 -0
  230. package/engine/topologies/tilt/resources/libs_resource_definition.star +151 -0
  231. package/engine/topologies/tilt/resources/libs_setup.star +164 -0
  232. package/engine/topologies/tilt/resources/libs_tsconfig.star +37 -0
  233. package/engine/topologies/tilt/resources/orchestrator/apply.star +77 -0
  234. package/engine/topologies/tilt/resources/orchestrator/apply_compose_resource_registration.star +431 -0
  235. package/engine/topologies/tilt/resources/orchestrator/apply_manifest_orchestration.star +81 -0
  236. package/engine/topologies/tilt/resources/orchestrator/apply_migrator_orchestration.star +148 -0
  237. package/engine/topologies/tilt/resources/orchestrator/apply_resource_validation.star +36 -0
  238. package/engine/topologies/tilt/resources/orchestrator/apply_runtime_flags.star +44 -0
  239. package/engine/topologies/tilt/resources/orchestrator/builders/typescript.star +164 -0
  240. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/AGENTS.md +75 -0
  241. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/index.star +21 -0
  242. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/resolver.star +134 -0
  243. package/engine/topologies/tilt/resources/orchestrator/generators/env.star +258 -0
  244. package/engine/topologies/tilt/resources/orchestrator/generators/frontend.star +169 -0
  245. package/engine/topologies/tilt/resources/orchestrator/generators/manifest_resource.star +524 -0
  246. package/engine/topologies/tilt/resources/orchestrator/helpers.star +33 -0
  247. package/engine/topologies/tilt/resources/orchestrator.star +54 -0
  248. package/engine/topologies/tilt/resources/ordering.star +3 -0
  249. package/engine/topologies/tilt/resources/triggers.star +3 -0
  250. package/engine/topologies/tilt/resources/watchers.star +299 -0
  251. package/engine/where-things-live.star +717 -0
  252. package/ext/Tiltfile +66 -0
  253. package/ext/ide-components/README.md +219 -0
  254. package/ext/ide-components/code_executor/server.py +268 -0
  255. package/ext/ide-components/code_viewer/server.py +206 -0
  256. package/ext/ide-components/config_inspector/server.py +1050 -0
  257. package/ext/ide-components/file_browser/server.py +285 -0
  258. package/ext/ide-components/shared/config_service.py +469 -0
  259. package/ext/ide-components/shared/file_utils.py +298 -0
  260. package/ext/ide-components/shared/http_utils.py +232 -0
  261. package/ext/ide-components/shared/static/styles.css +1334 -0
  262. package/ext/ide-components/shared/syntax_highlighter.py +140 -0
  263. package/ext/ide-components/shared/template_engine.py +123 -0
  264. package/ext/ide-components/shared/templates/base.html +121 -0
  265. package/ext/ide-components/shared/test_config_service.py +326 -0
  266. package/ext/ide-components/shared/tilt_integration.py +158 -0
  267. package/ext/ui-enhancements/cron-status-server.sh +49 -0
  268. package/ext/ui-enhancements/cron-status-tracker.sh +146 -0
  269. package/ext/ui-enhancements/extension.yaml +36 -0
  270. package/ext/ui-enhancements/tiltfile.py +99 -0
  271. package/ext/ui-enhancements/ui/cron-jobs-tab.css +396 -0
  272. package/ext/ui-enhancements/ui/help-panel.css +279 -0
  273. package/ext/ui-enhancements/ui/icons.css +125 -0
  274. package/ext/ui-enhancements/ui/tooltips.css +114 -0
  275. package/package.json +13 -9
  276. package/specs/specs/TILT_SERVICE_DEFAULTS.star +205 -0
  277. package/specs/specs/TILT_TECH_STACK.star +159 -0
@@ -0,0 +1,1334 @@
1
+ /* Tilt IDE Components - Shared Styles */
2
+
3
+ :root {
4
+ /* Dark theme (default) */
5
+ --bg-primary: #1a1a1a;
6
+ --bg-primary-rgb: 26, 26, 26;
7
+ --bg-secondary: #252525;
8
+ --bg-secondary-rgb: 37, 37, 37;
9
+ --bg-tertiary: #2d2d2d;
10
+ --bg-tertiary-rgb: 45, 45, 45;
11
+ --text-primary: #e0e0e0;
12
+ --text-secondary: #a0a0a0;
13
+ --text-muted: #707070;
14
+ --accent-primary: #4fc1ff;
15
+ --accent-secondary: #c586c0;
16
+ --border-color: #3e3e3e;
17
+ --success: #4ec9b0;
18
+ --warning: #dcdcaa;
19
+ --error: #f48771;
20
+ --font-mono: "JetBrains Mono", "Fira Code", "Consolas", monospace;
21
+ --font-sans:
22
+ -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
23
+ }
24
+
25
+ /* Light theme */
26
+ [data-theme="light"] {
27
+ --bg-primary: #fafafa;
28
+ --bg-primary-rgb: 250, 250, 250;
29
+ --bg-secondary: #f0f0f0;
30
+ --bg-secondary-rgb: 240, 240, 240;
31
+ --bg-tertiary: #e8e8e8;
32
+ --bg-tertiary-rgb: 232, 232, 232;
33
+ --text-primary: #1a1a1a;
34
+ --text-secondary: #555555;
35
+ --text-muted: #888888;
36
+ --accent-primary: #0066cc;
37
+ --accent-secondary: #993399;
38
+ --border-color: #d0d0d0;
39
+ --success: #228b22;
40
+ --warning: #b8860b;
41
+ --error: #dc143c;
42
+ }
43
+
44
+ /* Light theme */
45
+ [data-theme="light"] {
46
+ --bg-primary: #ffffff;
47
+ --bg-secondary: #f5f5f5;
48
+ --bg-tertiary: #e8e8e8;
49
+ --text-primary: #1a1a1a;
50
+ --text-secondary: #555555;
51
+ --text-muted: #888888;
52
+ --accent-primary: #0066cc;
53
+ --accent-secondary: #993399;
54
+ --border-color: #d0d0d0;
55
+ --success: #228b22;
56
+ --warning: #b8860b;
57
+ --error: #dc143c;
58
+ }
59
+
60
+ * {
61
+ box-sizing: border-box;
62
+ margin: 0;
63
+ padding: 0;
64
+ }
65
+
66
+ body {
67
+ font-family: var(--font-sans);
68
+ background: var(--bg-primary);
69
+ color: var(--text-primary);
70
+ line-height: 1.6;
71
+ min-height: 100vh;
72
+ transition:
73
+ background-color 0.3s ease,
74
+ color 0.3s ease;
75
+ }
76
+
77
+ /* Smooth theme transitions for all elements */
78
+ *,
79
+ *::before,
80
+ *::after {
81
+ transition:
82
+ background-color 0.2s ease,
83
+ border-color 0.2s ease,
84
+ color 0.2s ease;
85
+ }
86
+
87
+ /* Header with elevation */
88
+ .header {
89
+ background: linear-gradient(
90
+ 180deg,
91
+ var(--bg-secondary) 0%,
92
+ var(--bg-primary) 100%
93
+ );
94
+ border-bottom: 1px solid var(--border-color);
95
+ padding: 1rem 1.5rem;
96
+ display: flex;
97
+ align-items: center;
98
+ justify-content: space-between;
99
+ position: sticky;
100
+ top: 0;
101
+ z-index: 100;
102
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
103
+ }
104
+
105
+ .header h1 {
106
+ font-size: 1.25rem;
107
+ font-weight: 600;
108
+ display: flex;
109
+ align-items: center;
110
+ gap: 0.5rem;
111
+ }
112
+
113
+ .header-icon {
114
+ font-size: 1.5rem;
115
+ }
116
+
117
+ /* Mobile Menu Toggle */
118
+ .mobile-menu-toggle {
119
+ display: none;
120
+ background: var(--bg-tertiary);
121
+ border: 1px solid var(--border-color);
122
+ color: var(--text-primary);
123
+ padding: 0.5rem;
124
+ border-radius: 4px;
125
+ cursor: pointer;
126
+ font-size: 1.25rem;
127
+ margin-right: 0.75rem;
128
+ }
129
+
130
+ .mobile-menu-toggle:hover {
131
+ background: var(--bg-primary);
132
+ }
133
+
134
+ /* Theme Toggle Button */
135
+ .theme-toggle {
136
+ background: var(--bg-tertiary);
137
+ border: 1px solid var(--border-color);
138
+ color: var(--text-secondary);
139
+ padding: 0.5rem;
140
+ border-radius: 4px;
141
+ cursor: pointer;
142
+ font-size: 1rem;
143
+ margin-left: 1rem;
144
+ transition: all 0.2s;
145
+ }
146
+
147
+ .theme-toggle:hover {
148
+ background: var(--bg-primary);
149
+ color: var(--text-primary);
150
+ }
151
+
152
+ /* Navigation */
153
+ .nav {
154
+ display: flex;
155
+ gap: 1rem;
156
+ }
157
+
158
+ .nav a {
159
+ color: var(--text-secondary);
160
+ text-decoration: none;
161
+ padding: 0.5rem 1rem;
162
+ border-radius: 4px;
163
+ transition: all 0.2s;
164
+ font-size: 0.9rem;
165
+ font-weight: 500;
166
+ }
167
+
168
+ .nav a:hover {
169
+ color: var(--text-primary);
170
+ background: var(--bg-tertiary);
171
+ transform: translateY(-1px);
172
+ }
173
+
174
+ .nav a.active {
175
+ color: var(--accent-primary);
176
+ background: rgba(79, 193, 255, 0.1);
177
+ border: 1px solid var(--accent-primary);
178
+ font-weight: 600;
179
+ }
180
+
181
+ /* Main Layout */
182
+ .container {
183
+ display: flex;
184
+ height: calc(100vh - 60px);
185
+ }
186
+
187
+ .sidebar {
188
+ width: 300px;
189
+ background: linear-gradient(
190
+ 90deg,
191
+ var(--bg-secondary) 0%,
192
+ var(--bg-primary) 100%
193
+ );
194
+ border-right: 1px solid var(--border-color);
195
+ overflow-y: auto;
196
+ padding: 1rem;
197
+ box-shadow: 2px 0 8px rgba(0, 0, 0, 0.2);
198
+ }
199
+
200
+ .content {
201
+ flex: 1;
202
+ overflow: auto;
203
+ padding: 1.5rem;
204
+ }
205
+
206
+ /* File Browser Specific */
207
+ .file-list {
208
+ list-style: none;
209
+ }
210
+
211
+ .file-item {
212
+ display: flex;
213
+ align-items: center;
214
+ padding: 0.625rem 0.75rem;
215
+ border-radius: 6px;
216
+ cursor: pointer;
217
+ transition: all 0.15s ease;
218
+ gap: 0.875rem;
219
+ margin-bottom: 0.25rem;
220
+ }
221
+
222
+ .file-item:hover {
223
+ background: var(--bg-tertiary);
224
+ transform: translateX(4px);
225
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
226
+ }
227
+
228
+ .file-item:active {
229
+ transform: translateX(4px) scale(0.98);
230
+ }
231
+
232
+ .file-icon {
233
+ font-size: 1.25rem;
234
+ width: 28px;
235
+ text-align: center;
236
+ filter: saturate(1.2);
237
+ }
238
+
239
+ .file-name {
240
+ flex: 1;
241
+ font-family: var(--font-mono);
242
+ font-size: 0.875rem;
243
+ font-weight: 500;
244
+ color: var(--text-primary);
245
+ letter-spacing: 0.01em;
246
+ }
247
+
248
+ .file-meta {
249
+ color: var(--text-secondary);
250
+ font-size: 0.75rem;
251
+ font-weight: 400;
252
+ opacity: 0.8;
253
+ }
254
+
255
+ .dir-item {
256
+ font-weight: 500;
257
+ }
258
+
259
+ /* Breadcrumb */
260
+ .breadcrumb {
261
+ display: flex;
262
+ align-items: center;
263
+ gap: 0.5rem;
264
+ padding: 0.75rem 1rem;
265
+ background: var(--bg-secondary);
266
+ border-radius: 4px;
267
+ margin-bottom: 1rem;
268
+ font-family: var(--font-mono);
269
+ font-size: 0.9rem;
270
+ }
271
+
272
+ .breadcrumb a {
273
+ color: var(--accent-primary);
274
+ text-decoration: none;
275
+ }
276
+
277
+ .breadcrumb a:hover {
278
+ text-decoration: underline;
279
+ }
280
+
281
+ .breadcrumb-separator {
282
+ color: var(--text-muted);
283
+ }
284
+
285
+ /* Search */
286
+ .search-box {
287
+ width: 100%;
288
+ padding: 0.75rem 1rem;
289
+ background: var(--bg-tertiary);
290
+ border: 1px solid var(--border-color);
291
+ border-radius: 4px;
292
+ color: var(--text-primary);
293
+ font-size: 0.9rem;
294
+ margin-bottom: 1rem;
295
+ }
296
+
297
+ .search-box:focus {
298
+ outline: none;
299
+ border-color: var(--accent-primary);
300
+ }
301
+
302
+ /* Code Viewer */
303
+ .code-container {
304
+ background: var(--bg-secondary);
305
+ border-radius: 4px;
306
+ overflow: hidden;
307
+ }
308
+
309
+ .code-header {
310
+ display: flex;
311
+ align-items: center;
312
+ justify-content: space-between;
313
+ padding: 0.75rem 1rem;
314
+ background: var(--bg-tertiary);
315
+ border-bottom: 1px solid var(--border-color);
316
+ }
317
+
318
+ .code-header-left {
319
+ display: flex;
320
+ align-items: center;
321
+ gap: 0.75rem;
322
+ }
323
+
324
+ .file-path {
325
+ font-family: var(--font-mono);
326
+ font-size: 0.9rem;
327
+ color: var(--text-primary);
328
+ }
329
+
330
+ .read-only-badge {
331
+ background: var(--warning);
332
+ color: var(--bg-primary);
333
+ padding: 0.25rem 0.5rem;
334
+ border-radius: 3px;
335
+ font-size: 0.75rem;
336
+ font-weight: 600;
337
+ }
338
+
339
+ .code-content {
340
+ padding: 1rem;
341
+ overflow-x: auto;
342
+ }
343
+
344
+ .code-content pre {
345
+ margin: 0;
346
+ font-family: var(--font-mono);
347
+ font-size: 0.85rem;
348
+ line-height: 1.5;
349
+ }
350
+
351
+ .line-numbers {
352
+ color: var(--text-muted);
353
+ text-align: right;
354
+ padding-right: 1rem;
355
+ user-select: none;
356
+ }
357
+
358
+ /* Syntax Highlighting */
359
+ .syntax-keyword {
360
+ color: #569cd6;
361
+ }
362
+ .syntax-string {
363
+ color: #ce9178;
364
+ }
365
+ .syntax-comment {
366
+ color: #6a9955;
367
+ }
368
+ .syntax-function {
369
+ color: #dcdcaa;
370
+ }
371
+ .syntax-number {
372
+ color: #b5cea8;
373
+ }
374
+ .syntax-operator {
375
+ color: #d4d4d4;
376
+ }
377
+ .syntax-type {
378
+ color: #4ec9b0;
379
+ }
380
+ .syntax-variable {
381
+ color: #9cdcfe;
382
+ }
383
+
384
+ /* Config Inspector */
385
+ .split-view {
386
+ display: grid;
387
+ grid-template-columns: 1fr 1fr;
388
+ gap: 1rem;
389
+ height: 100%;
390
+ }
391
+
392
+ .panel {
393
+ background: var(--bg-secondary);
394
+ border-radius: 4px;
395
+ overflow: hidden;
396
+ display: flex;
397
+ flex-direction: column;
398
+ }
399
+
400
+ .panel-header {
401
+ display: flex;
402
+ align-items: center;
403
+ justify-content: space-between;
404
+ padding: 0.75rem 1rem;
405
+ background: var(--bg-tertiary);
406
+ border-bottom: 1px solid var(--border-color);
407
+ }
408
+
409
+ .panel-title {
410
+ font-weight: 600;
411
+ font-size: 0.9rem;
412
+ }
413
+
414
+ .panel-content {
415
+ flex: 1;
416
+ overflow: auto;
417
+ padding: 1rem;
418
+ }
419
+
420
+ .config-tree {
421
+ list-style: none;
422
+ }
423
+
424
+ .tree-item {
425
+ padding: 0.5rem;
426
+ cursor: pointer;
427
+ border-radius: 4px;
428
+ display: flex;
429
+ align-items: center;
430
+ gap: 0.5rem;
431
+ }
432
+
433
+ .tree-item:hover {
434
+ background: var(--bg-tertiary);
435
+ }
436
+
437
+ .tree-item.active {
438
+ background: var(--accent-primary);
439
+ color: var(--bg-primary);
440
+ }
441
+
442
+ .regenerate-btn {
443
+ background: var(--success);
444
+ color: var(--bg-primary);
445
+ border: none;
446
+ padding: 0.5rem 1rem;
447
+ border-radius: 4px;
448
+ cursor: pointer;
449
+ font-weight: 600;
450
+ font-size: 0.85rem;
451
+ }
452
+
453
+ .regenerate-btn:hover {
454
+ opacity: 0.9;
455
+ }
456
+
457
+ .status-indicator {
458
+ display: inline-flex;
459
+ align-items: center;
460
+ gap: 0.5rem;
461
+ padding: 0.25rem 0.75rem;
462
+ border-radius: 3px;
463
+ font-size: 0.8rem;
464
+ }
465
+
466
+ .status-success {
467
+ background: var(--success);
468
+ color: var(--bg-primary);
469
+ }
470
+ .status-error {
471
+ background: var(--error);
472
+ color: var(--bg-primary);
473
+ }
474
+ .status-pending {
475
+ background: var(--warning);
476
+ color: var(--bg-primary);
477
+ }
478
+
479
+ /* Terminal */
480
+ .terminal {
481
+ background: var(--bg-primary);
482
+ border-radius: 4px;
483
+ overflow: hidden;
484
+ display: flex;
485
+ flex-direction: column;
486
+ height: 100%;
487
+ }
488
+
489
+ .terminal-header {
490
+ display: flex;
491
+ align-items: center;
492
+ justify-content: space-between;
493
+ padding: 0.75rem 1rem;
494
+ background: var(--bg-tertiary);
495
+ border-bottom: 1px solid var(--border-color);
496
+ }
497
+
498
+ .terminal-content {
499
+ flex: 1;
500
+ overflow: auto;
501
+ padding: 1rem;
502
+ font-family: var(--font-mono);
503
+ font-size: 0.85rem;
504
+ line-height: 1.4;
505
+ }
506
+
507
+ .terminal-input-line {
508
+ display: flex;
509
+ align-items: center;
510
+ gap: 0.5rem;
511
+ padding: 0.5rem 1rem;
512
+ background: var(--bg-secondary);
513
+ border-top: 1px solid var(--border-color);
514
+ }
515
+
516
+ .terminal-prompt {
517
+ color: var(--success);
518
+ font-weight: 600;
519
+ }
520
+
521
+ .terminal-input {
522
+ flex: 1;
523
+ background: transparent;
524
+ border: none;
525
+ color: var(--text-primary);
526
+ font-family: var(--font-mono);
527
+ font-size: 0.9rem;
528
+ outline: none;
529
+ }
530
+
531
+ .terminal-output .stdout {
532
+ color: var(--text-primary);
533
+ }
534
+ .terminal-output .stderr {
535
+ color: var(--error);
536
+ }
537
+ .terminal-output .command {
538
+ color: var(--accent-primary);
539
+ }
540
+
541
+ /* Scrollbar */
542
+ ::-webkit-scrollbar {
543
+ width: 10px;
544
+ height: 10px;
545
+ }
546
+
547
+ ::-webkit-scrollbar-track {
548
+ background: var(--bg-primary);
549
+ }
550
+
551
+ ::-webkit-scrollbar-thumb {
552
+ background: var(--border-color);
553
+ border-radius: 5px;
554
+ }
555
+
556
+ ::-webkit-scrollbar-thumb:hover {
557
+ background: var(--text-muted);
558
+ }
559
+
560
+ /* Responsive */
561
+ @media (max-width: 1024px) {
562
+ .sidebar {
563
+ width: 250px;
564
+ }
565
+
566
+ .split-view {
567
+ grid-template-columns: 1fr;
568
+ }
569
+ }
570
+
571
+ @media (max-width: 768px) {
572
+ .container {
573
+ flex-direction: column;
574
+ }
575
+
576
+ .sidebar {
577
+ width: 100%;
578
+ height: 200px;
579
+ border-right: none;
580
+ border-bottom: 1px solid var(--border-color);
581
+ }
582
+
583
+ .header {
584
+ flex-wrap: wrap;
585
+ gap: 0.5rem;
586
+ }
587
+
588
+ .nav {
589
+ width: 100%;
590
+ justify-content: center;
591
+ }
592
+ }
593
+
594
+ /* File Count Display */
595
+ .file-count {
596
+ padding: 0.5rem 1rem;
597
+ background: var(--bg-tertiary);
598
+ border-radius: 4px;
599
+ margin-bottom: 0.5rem;
600
+ font-size: 0.85rem;
601
+ color: var(--text-muted);
602
+ }
603
+
604
+ /* Pagination */
605
+ .pagination {
606
+ display: flex;
607
+ justify-content: space-between;
608
+ align-items: center;
609
+ padding: 1rem;
610
+ margin-top: 1rem;
611
+ background: var(--bg-tertiary);
612
+ border-radius: 4px;
613
+ }
614
+
615
+ .pagination-btn {
616
+ padding: 0.5rem 1rem;
617
+ background: var(--bg-primary);
618
+ border: 1px solid var(--border-color);
619
+ border-radius: 4px;
620
+ color: var(--text-primary);
621
+ text-decoration: none;
622
+ font-size: 0.85rem;
623
+ transition: all 0.2s;
624
+ }
625
+
626
+ .pagination-btn:hover:not(.disabled) {
627
+ background: var(--accent-primary);
628
+ color: var(--bg-primary);
629
+ border-color: var(--accent-primary);
630
+ }
631
+
632
+ .pagination-btn.disabled {
633
+ opacity: 0.5;
634
+ cursor: not-allowed;
635
+ }
636
+
637
+ .pagination-info {
638
+ font-size: 0.85rem;
639
+ color: var(--text-secondary);
640
+ }
641
+ .hidden {
642
+ display: none !important;
643
+ }
644
+ .text-muted {
645
+ color: var(--text-muted);
646
+ }
647
+ .text-success {
648
+ color: var(--success);
649
+ }
650
+ .text-error {
651
+ color: var(--error);
652
+ }
653
+ .text-warning {
654
+ color: var(--warning);
655
+ }
656
+ .loading {
657
+ opacity: 0.6;
658
+ pointer-events: none;
659
+ }
660
+
661
+ /* Loading Spinner */
662
+ .loading-spinner {
663
+ display: inline-block;
664
+ width: 20px;
665
+ height: 20px;
666
+ border: 2px solid var(--border-color);
667
+ border-top-color: var(--accent-primary);
668
+ border-radius: 50%;
669
+ animation: spin 1s linear infinite;
670
+ }
671
+
672
+ @keyframes spin {
673
+ to {
674
+ transform: rotate(360deg);
675
+ }
676
+ }
677
+
678
+ /* Loading Overlay */
679
+ .loading-overlay {
680
+ position: absolute;
681
+ top: 0;
682
+ left: 0;
683
+ right: 0;
684
+ bottom: 0;
685
+ background: rgba(var(--bg-primary-rgb, 26, 26, 26), 0.9);
686
+ backdrop-filter: blur(4px);
687
+ display: flex;
688
+ align-items: center;
689
+ justify-content: center;
690
+ z-index: 100;
691
+ border-radius: 8px;
692
+ }
693
+
694
+ .loading-overlay .loading-content {
695
+ display: flex;
696
+ flex-direction: column;
697
+ align-items: center;
698
+ gap: 1rem;
699
+ }
700
+
701
+ .loading-overlay .loading-message {
702
+ color: var(--text-secondary);
703
+ font-size: 0.95rem;
704
+ font-weight: 500;
705
+ }
706
+
707
+ /* Skeleton Loading Screens */
708
+ .skeleton {
709
+ background: linear-gradient(
710
+ 90deg,
711
+ var(--bg-tertiary) 25%,
712
+ var(--bg-secondary) 50%,
713
+ var(--bg-tertiary) 75%
714
+ );
715
+ background-size: 200% 100%;
716
+ animation: shimmer 1.5s infinite;
717
+ border-radius: 4px;
718
+ }
719
+
720
+ @keyframes shimmer {
721
+ 0% {
722
+ background-position: 200% 0;
723
+ }
724
+ 100% {
725
+ background-position: -200% 0;
726
+ }
727
+ }
728
+
729
+ .skeleton-text {
730
+ height: 1rem;
731
+ margin-bottom: 0.5rem;
732
+ }
733
+
734
+ .skeleton-text.short {
735
+ width: 60%;
736
+ }
737
+
738
+ .skeleton-text.long {
739
+ width: 90%;
740
+ }
741
+
742
+ .skeleton-avatar {
743
+ width: 40px;
744
+ height: 40px;
745
+ border-radius: 50%;
746
+ }
747
+
748
+ /* Staggered fade-in animation for lists */
749
+ @keyframes fadeInUp {
750
+ from {
751
+ opacity: 0;
752
+ transform: translateY(10px);
753
+ }
754
+ to {
755
+ opacity: 1;
756
+ transform: translateY(0);
757
+ }
758
+ }
759
+
760
+ .file-item,
761
+ .tree-item {
762
+ animation: fadeInUp 0.3s ease forwards;
763
+ }
764
+
765
+ .file-item:nth-child(1) {
766
+ animation-delay: 0.05s;
767
+ }
768
+ .file-item:nth-child(2) {
769
+ animation-delay: 0.1s;
770
+ }
771
+ .file-item:nth-child(3) {
772
+ animation-delay: 0.15s;
773
+ }
774
+ .file-item:nth-child(4) {
775
+ animation-delay: 0.2s;
776
+ }
777
+ .file-item:nth-child(5) {
778
+ animation-delay: 0.25s;
779
+ }
780
+ .file-item:nth-child(6) {
781
+ animation-delay: 0.3s;
782
+ }
783
+ .file-item:nth-child(7) {
784
+ animation-delay: 0.35s;
785
+ }
786
+ .file-item:nth-child(8) {
787
+ animation-delay: 0.4s;
788
+ }
789
+ .file-item:nth-child(9) {
790
+ animation-delay: 0.45s;
791
+ }
792
+ .file-item:nth-child(10) {
793
+ animation-delay: 0.5s;
794
+ }
795
+
796
+ /* Save Success Animation */
797
+ @keyframes saveSuccess {
798
+ 0% {
799
+ background: rgba(78, 201, 176, 0);
800
+ border-color: var(--border-color);
801
+ }
802
+ 50% {
803
+ background: rgba(78, 201, 176, 0.2);
804
+ border-color: var(--success);
805
+ }
806
+ 100% {
807
+ background: rgba(78, 201, 176, 0);
808
+ border-color: var(--border-color);
809
+ }
810
+ }
811
+
812
+ .save-success {
813
+ animation: saveSuccess 1s ease-out;
814
+ border: 1px solid transparent;
815
+ border-radius: 4px;
816
+ }
817
+
818
+ /* Config Inspector Panel Enhancements */
819
+ .panel {
820
+ background: var(--bg-secondary);
821
+ border-radius: 8px;
822
+ overflow: hidden;
823
+ display: flex;
824
+ flex-direction: column;
825
+ border: 1px solid var(--border-color);
826
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
827
+ transition:
828
+ box-shadow 0.3s ease,
829
+ transform 0.2s ease;
830
+ }
831
+
832
+ .panel:hover {
833
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
834
+ }
835
+
836
+ .panel-header {
837
+ display: flex;
838
+ align-items: center;
839
+ justify-content: space-between;
840
+ padding: 0.75rem 1rem;
841
+ background: linear-gradient(
842
+ 180deg,
843
+ var(--bg-tertiary) 0%,
844
+ var(--bg-secondary) 100%
845
+ );
846
+ border-bottom: 1px solid var(--border-color);
847
+ min-height: 48px;
848
+ }
849
+ .error-boundary {
850
+ padding: 2rem;
851
+ background: var(--bg-secondary);
852
+ border: 1px solid var(--error);
853
+ border-radius: 4px;
854
+ margin: 1rem;
855
+ }
856
+
857
+ .error-boundary-icon {
858
+ font-size: 2.5rem;
859
+ margin-bottom: 1rem;
860
+ text-align: center;
861
+ }
862
+
863
+ .error-boundary-title {
864
+ color: var(--error);
865
+ font-size: 1.1rem;
866
+ font-weight: 600;
867
+ margin-bottom: 0.75rem;
868
+ text-align: center;
869
+ }
870
+
871
+ .error-boundary-message {
872
+ color: var(--text-secondary);
873
+ font-size: 0.9rem;
874
+ margin-bottom: 1rem;
875
+ text-align: center;
876
+ }
877
+
878
+ .error-boundary-actions {
879
+ display: flex;
880
+ justify-content: center;
881
+ gap: 1rem;
882
+ margin-top: 1.5rem;
883
+ }
884
+
885
+ .error-boundary-btn {
886
+ background: var(--bg-tertiary);
887
+ border: 1px solid var(--border-color);
888
+ color: var(--text-primary);
889
+ padding: 0.5rem 1rem;
890
+ border-radius: 4px;
891
+ cursor: pointer;
892
+ font-size: 0.85rem;
893
+ text-decoration: none;
894
+ transition: all 0.2s;
895
+ }
896
+
897
+ .error-boundary-btn:hover {
898
+ background: var(--bg-primary);
899
+ }
900
+
901
+ .error-boundary-btn.primary {
902
+ background: var(--accent-primary);
903
+ color: var(--bg-primary);
904
+ border-color: var(--accent-primary);
905
+ }
906
+
907
+ .error-boundary-details {
908
+ margin-top: 1rem;
909
+ padding: 1rem;
910
+ background: var(--bg-primary);
911
+ border-radius: 4px;
912
+ font-family: var(--font-mono);
913
+ font-size: 0.8rem;
914
+ color: var(--text-muted);
915
+ overflow-x: auto;
916
+ display: none;
917
+ }
918
+
919
+ .error-boundary-details.visible {
920
+ display: block;
921
+ }
922
+
923
+ .empty-state {
924
+ text-align: center;
925
+ padding: 4rem 3rem;
926
+ color: var(--text-secondary);
927
+ background: linear-gradient(
928
+ 135deg,
929
+ var(--bg-secondary) 0%,
930
+ var(--bg-primary) 100%
931
+ );
932
+ border-radius: 8px;
933
+ margin: 2rem;
934
+ border: 1px dashed var(--border-color);
935
+ }
936
+
937
+ .empty-state-icon {
938
+ font-size: 4rem;
939
+ margin-bottom: 1.5rem;
940
+ opacity: 0.7;
941
+ filter: saturate(1.5);
942
+ animation: float 3s ease-in-out infinite;
943
+ }
944
+
945
+ @keyframes float {
946
+ 0%,
947
+ 100% {
948
+ transform: translateY(0px);
949
+ }
950
+ 50% {
951
+ transform: translateY(-10px);
952
+ }
953
+ }
954
+
955
+ .empty-state-title {
956
+ font-size: 1.25rem;
957
+ font-weight: 600;
958
+ color: var(--text-primary);
959
+ margin-bottom: 0.5rem;
960
+ }
961
+
962
+ .empty-state-description {
963
+ font-size: 0.9rem;
964
+ color: var(--text-muted);
965
+ max-width: 400px;
966
+ margin: 0 auto;
967
+ line-height: 1.5;
968
+ }
969
+
970
+ /* ==================== MULTI-PANE CONFIG INSPECTOR ==================== */
971
+
972
+ /* Header Controls */
973
+ .header-controls {
974
+ display: flex;
975
+ align-items: center;
976
+ gap: 1rem;
977
+ }
978
+
979
+ .sync-scroll-label {
980
+ display: flex;
981
+ align-items: center;
982
+ gap: 0.5rem;
983
+ color: var(--text-secondary);
984
+ font-size: 0.85rem;
985
+ cursor: pointer;
986
+ user-select: none;
987
+ }
988
+
989
+ .sync-scroll-label input[type="checkbox"] {
990
+ cursor: pointer;
991
+ }
992
+
993
+ .edit-mode-btn,
994
+ .save-all-btn,
995
+ .clear-selection-btn {
996
+ background: var(--bg-tertiary);
997
+ border: 1px solid var(--border-color);
998
+ color: var(--text-secondary);
999
+ padding: 0.5rem 1rem;
1000
+ border-radius: 4px;
1001
+ cursor: pointer;
1002
+ font-size: 0.85rem;
1003
+ font-weight: 500;
1004
+ transition: all 0.2s;
1005
+ }
1006
+
1007
+ .edit-mode-btn:hover,
1008
+ .save-all-btn:hover,
1009
+ .clear-selection-btn:hover {
1010
+ background: var(--bg-primary);
1011
+ color: var(--text-primary);
1012
+ }
1013
+
1014
+ .edit-mode-btn.active {
1015
+ background: var(--accent-secondary);
1016
+ color: var(--bg-primary);
1017
+ border-color: var(--accent-secondary);
1018
+ }
1019
+
1020
+ .save-all-btn {
1021
+ background: var(--success);
1022
+ color: var(--bg-primary);
1023
+ border-color: var(--success);
1024
+ }
1025
+
1026
+ .save-all-btn:hover {
1027
+ opacity: 0.9;
1028
+ }
1029
+
1030
+ .clear-selection-btn {
1031
+ background: var(--error);
1032
+ color: var(--bg-primary);
1033
+ border-color: var(--error);
1034
+ }
1035
+
1036
+ /* Multi-Pane Grid Layouts */
1037
+ .multi-pane-view {
1038
+ display: grid;
1039
+ gap: 1rem;
1040
+ height: calc(100vh - 140px);
1041
+ min-height: 500px;
1042
+ }
1043
+
1044
+ .multi-pane-view.single-pane {
1045
+ grid-template-columns: 1fr;
1046
+ }
1047
+
1048
+ .multi-pane-view.dual-pane {
1049
+ grid-template-columns: 1fr 1fr;
1050
+ }
1051
+
1052
+ .multi-pane-view.triple-pane {
1053
+ grid-template-columns: 1fr 1fr 1fr;
1054
+ }
1055
+
1056
+ /* Panel Styles */
1057
+ .panel {
1058
+ background: var(--bg-secondary);
1059
+ border-radius: 4px;
1060
+ overflow: hidden;
1061
+ display: flex;
1062
+ flex-direction: column;
1063
+ border: 1px solid var(--border-color);
1064
+ }
1065
+
1066
+ .panel-header {
1067
+ display: flex;
1068
+ align-items: center;
1069
+ justify-content: space-between;
1070
+ padding: 0.75rem 1rem;
1071
+ background: var(--bg-tertiary);
1072
+ border-bottom: 1px solid var(--border-color);
1073
+ min-height: 48px;
1074
+ }
1075
+
1076
+ .panel-header-left {
1077
+ display: flex;
1078
+ align-items: center;
1079
+ gap: 0.75rem;
1080
+ flex: 1;
1081
+ min-width: 0;
1082
+ }
1083
+
1084
+ .panel-title {
1085
+ font-weight: 600;
1086
+ font-size: 0.85rem;
1087
+ white-space: nowrap;
1088
+ }
1089
+
1090
+ .panel-path {
1091
+ font-size: 0.75rem;
1092
+ overflow: hidden;
1093
+ text-overflow: ellipsis;
1094
+ white-space: nowrap;
1095
+ flex: 1;
1096
+ }
1097
+
1098
+ .panel-content {
1099
+ flex: 1;
1100
+ overflow: auto;
1101
+ padding: 0;
1102
+ }
1103
+
1104
+ /* Unsaved Indicator */
1105
+ .unsaved-indicator {
1106
+ color: var(--warning);
1107
+ font-size: 0.75rem;
1108
+ }
1109
+
1110
+ /* Save Pane Button */
1111
+ .save-pane-btn {
1112
+ background: var(--success);
1113
+ color: var(--bg-primary);
1114
+ border: none;
1115
+ padding: 0.4rem 0.75rem;
1116
+ border-radius: 3px;
1117
+ cursor: pointer;
1118
+ font-size: 0.8rem;
1119
+ font-weight: 500;
1120
+ margin-left: 0.5rem;
1121
+ }
1122
+
1123
+ .save-pane-btn:hover {
1124
+ opacity: 0.9;
1125
+ }
1126
+
1127
+ /* Config Editor Textarea */
1128
+ .config-editor {
1129
+ width: 100%;
1130
+ height: 100%;
1131
+ min-height: 400px;
1132
+ background: var(--bg-primary);
1133
+ color: var(--text-primary);
1134
+ border: none;
1135
+ padding: 1rem;
1136
+ font-family: var(--font-mono);
1137
+ font-size: 0.85rem;
1138
+ line-height: 1.6;
1139
+ resize: none;
1140
+ outline: none;
1141
+ tab-size: 2;
1142
+ }
1143
+
1144
+ .config-editor:focus {
1145
+ background: var(--bg-primary);
1146
+ }
1147
+
1148
+ /* Config Viewer (Read-only) */
1149
+ .config-viewer {
1150
+ margin: 0;
1151
+ padding: 1rem;
1152
+ font-family: var(--font-mono);
1153
+ font-size: 0.85rem;
1154
+ line-height: 1.6;
1155
+ white-space: pre;
1156
+ overflow-x: auto;
1157
+ }
1158
+
1159
+ .config-viewer code {
1160
+ background: transparent;
1161
+ padding: 0;
1162
+ }
1163
+
1164
+ /* Tree Item Selection */
1165
+ .tree-item {
1166
+ position: relative;
1167
+ }
1168
+
1169
+ .selection-order {
1170
+ position: absolute;
1171
+ right: 0.5rem;
1172
+ background: var(--accent-primary);
1173
+ color: var(--bg-primary);
1174
+ font-size: 0.7rem;
1175
+ font-weight: 600;
1176
+ width: 18px;
1177
+ height: 18px;
1178
+ display: flex;
1179
+ align-items: center;
1180
+ justify-content: center;
1181
+ border-radius: 50%;
1182
+ }
1183
+
1184
+ /* Project Root Category Styling */
1185
+ .config-tree li strong {
1186
+ display: block;
1187
+ margin-bottom: 0.25rem;
1188
+ }
1189
+
1190
+ /* Notification Toast */
1191
+ .notification-toast {
1192
+ position: fixed;
1193
+ bottom: 2rem;
1194
+ right: 2rem;
1195
+ padding: 1rem 1.5rem;
1196
+ border-radius: 4px;
1197
+ color: var(--bg-primary);
1198
+ font-weight: 500;
1199
+ font-size: 0.9rem;
1200
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
1201
+ z-index: 1000;
1202
+ opacity: 0;
1203
+ transform: translateY(20px);
1204
+ transition: all 0.3s ease;
1205
+ max-width: 400px;
1206
+ word-wrap: break-word;
1207
+ }
1208
+
1209
+ .notification-toast.show {
1210
+ opacity: 1;
1211
+ transform: translateY(0);
1212
+ }
1213
+
1214
+ .notification-toast.success {
1215
+ background: var(--success);
1216
+ }
1217
+
1218
+ .notification-toast.error {
1219
+ background: var(--error);
1220
+ }
1221
+
1222
+ .notification-toast.warning {
1223
+ background: var(--warning);
1224
+ color: var(--bg-primary);
1225
+ }
1226
+
1227
+ .notification-toast.info {
1228
+ background: var(--accent-primary);
1229
+ color: var(--bg-primary);
1230
+ }
1231
+
1232
+ /* Responsive Multi-Pane */
1233
+ @media (max-width: 1400px) {
1234
+ .multi-pane-view.triple-pane {
1235
+ grid-template-columns: 1fr 1fr;
1236
+ grid-template-rows: 1fr 1fr;
1237
+ }
1238
+
1239
+ .multi-pane-view.triple-pane .pane-3 {
1240
+ grid-column: 1 / -1;
1241
+ }
1242
+ }
1243
+
1244
+ @media (max-width: 1024px) {
1245
+ .multi-pane-view.dual-pane,
1246
+ .multi-pane-view.triple-pane {
1247
+ grid-template-columns: 1fr;
1248
+ grid-template-rows: auto;
1249
+ }
1250
+
1251
+ .multi-pane-view {
1252
+ height: auto;
1253
+ min-height: calc(100vh - 200px);
1254
+ }
1255
+
1256
+ .panel {
1257
+ min-height: 300px;
1258
+ }
1259
+ }
1260
+
1261
+ @media (max-width: 768px) {
1262
+ .header-controls {
1263
+ flex-wrap: wrap;
1264
+ justify-content: center;
1265
+ width: 100%;
1266
+ }
1267
+
1268
+ .edit-mode-btn,
1269
+ .save-all-btn,
1270
+ .clear-selection-btn {
1271
+ font-size: 0.75rem;
1272
+ padding: 0.4rem 0.75rem;
1273
+ }
1274
+
1275
+ /* Mobile touch improvements */
1276
+ .tree-item,
1277
+ .file-item {
1278
+ padding: 0.75rem 0.5rem;
1279
+ min-height: 44px;
1280
+ }
1281
+
1282
+ .nav a {
1283
+ padding: 0.75rem 0.5rem;
1284
+ min-height: 44px;
1285
+ display: flex;
1286
+ align-items: center;
1287
+ }
1288
+
1289
+ /* Prevent zoom on input focus (iOS) */
1290
+ input[type="text"],
1291
+ textarea {
1292
+ font-size: 16px;
1293
+ }
1294
+
1295
+ /* Mobile sidebar as collapsible overlay */
1296
+ .mobile-menu-toggle {
1297
+ display: block;
1298
+ }
1299
+
1300
+ .container {
1301
+ flex-direction: column;
1302
+ position: relative;
1303
+ }
1304
+
1305
+ .sidebar {
1306
+ width: 100%;
1307
+ max-height: 0;
1308
+ overflow: hidden;
1309
+ border-right: none;
1310
+ border-bottom: none;
1311
+ box-shadow: none;
1312
+ transition: max-height 0.3s ease;
1313
+ position: absolute;
1314
+ top: 0;
1315
+ left: 0;
1316
+ right: 0;
1317
+ z-index: 99;
1318
+ background: var(--bg-secondary);
1319
+ }
1320
+
1321
+ .container.sidebar-open .sidebar {
1322
+ max-height: 60vh;
1323
+ border-bottom: 1px solid var(--border-color);
1324
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
1325
+ }
1326
+
1327
+ .container.sidebar-open .content {
1328
+ margin-top: 60vh;
1329
+ }
1330
+
1331
+ .content {
1332
+ transition: margin-top 0.3s ease;
1333
+ }
1334
+ }