dsh-contextos-devops 0.0.0-stage → 1.48.32

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 (80) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +207 -2
  3. package/assets/avatar.jpg +0 -0
  4. package/assets/client.css +3316 -0
  5. package/assets/icon-180.png +0 -0
  6. package/build/client.mjs +64 -0
  7. package/client.js +7622 -0
  8. package/cordis.patch.yml +3 -0
  9. package/icon.svg +15 -0
  10. package/index.js +345 -0
  11. package/lib/base/env.js +22 -0
  12. package/lib/base/field.js +25 -0
  13. package/lib/base/http.js +140 -0
  14. package/lib/base/platform.js +33 -0
  15. package/lib/base/registry.js +186 -0
  16. package/lib/base/state.js +66 -0
  17. package/lib/base/table.js +47 -0
  18. package/lib/base/texttable.js +26 -0
  19. package/lib/base/url.js +178 -0
  20. package/lib/core/README.md +17 -0
  21. package/lib/core/apps.js +675 -0
  22. package/lib/core/auth.js +110 -0
  23. package/lib/core/avatar.js +289 -0
  24. package/lib/core/backup.js +105 -0
  25. package/lib/core/codegen.js +401 -0
  26. package/lib/core/copilot.js +419 -0
  27. package/lib/core/data.js +157 -0
  28. package/lib/core/device.js +148 -0
  29. package/lib/core/files.js +152 -0
  30. package/lib/core/gobuild.js +63 -0
  31. package/lib/core/iam.js +122 -0
  32. package/lib/core/identity.js +22 -0
  33. package/lib/core/nodes.js +627 -0
  34. package/lib/core/ops.js +306 -0
  35. package/lib/core/project.js +393 -0
  36. package/lib/core/spaces.js +406 -0
  37. package/lib/core/terminal.js +137 -0
  38. package/lib/core/terminal2.js +141 -0
  39. package/lib/core/users.js +51 -0
  40. package/lib/core/vocab.js +158 -0
  41. package/lib/misc/async.js +15 -0
  42. package/lib/misc/shell.js +27 -0
  43. package/lib/misc/static.js +33 -0
  44. package/locale/en.json +10 -0
  45. package/locale/zh.json +10 -0
  46. package/package.json +92 -4
  47. package/src/client/README.md +37 -0
  48. package/src/client/parts/00-prelude.js +315 -0
  49. package/src/client/parts/05-bootstrap.js +61 -0
  50. package/src/client/parts/08-store.js +85 -0
  51. package/src/client/parts/10-ui.js +188 -0
  52. package/src/client/parts/12-debug.js +361 -0
  53. package/src/client/parts/15-layout.js +86 -0
  54. package/src/client/parts/20-devworkspace.js +789 -0
  55. package/src/client/parts/25-editor-ui.js +28 -0
  56. package/src/client/parts/30-modals.js +85 -0
  57. package/src/client/parts/32-cards.js +176 -0
  58. package/src/client/parts/34-forms.js +176 -0
  59. package/src/client/parts/36-data.js +267 -0
  60. package/src/client/parts/40-project.js +430 -0
  61. package/src/client/parts/45-map.js +109 -0
  62. package/src/client/parts/46-pm.js +158 -0
  63. package/src/client/parts/47-three.js +324 -0
  64. package/src/client/parts/49-msg.js +167 -0
  65. package/src/client/parts/50-chat.js +1422 -0
  66. package/src/client/parts/51-pmselection.js +31 -0
  67. package/src/client/parts/52-pmdata.js +29 -0
  68. package/src/client/parts/55-pm.js +146 -0
  69. package/src/client/parts/58-config.js +381 -0
  70. package/src/client/parts/59-monitor.js +262 -0
  71. package/src/client/parts/60-page.js +1518 -0
  72. package/src/client/styles/kit.css +20 -0
  73. package/src/client/styles/main.css +3294 -0
  74. package/src/client/styles/tokens.css +2 -0
  75. package/vendor/leaflet/leaflet.css +661 -0
  76. package/vendor/leaflet/leaflet.js +6 -0
  77. package/vendor/three/three.module.js +53044 -0
  78. package/vendor/xterm/addon-fit.js +2 -0
  79. package/vendor/xterm/xterm.css +218 -0
  80. package/vendor/xterm/xterm.js +2 -0
@@ -0,0 +1,3316 @@
1
+ /* canonical design tokens: colors, typography, spacing, radii */
2
+ :root{--cx-bg:#050a12;--cx-panel:#08131f;--cx-panel2:#0b1b2b;--cx-line:#16384d;--cx-line2:#1d4d66;--cx-cyan:#3ee7ff;--cx-icon-12:18px;--cx-icon-10:14px;--cx-icon-14:18px;--cx-bar-h:38px;--cx-bar-px:10px;--cx-bar-gap:8px;--cx-bar-item-h:30px;--cx-hue-rgb:62,231,255;--cx-green-rgb:66,245,167;--cx-cyan2:#18b6d8;--cx-green:#42f5a7;--cx-orange:#ffb454;--cx-red:#ff5c7a;--cx-text:#d9f4ff;--cx-muted:#6f9bb3;--cx-font:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;--cx-control-h:36px;--cx-line-h:20px;--cx-meta-h:14px;--cx-icon-stroke:1.4;--cx-gap:6px;--cx-pad:10px}
3
+ .cx-shell{position:relative;height:100%;min-height:0;display:flex;flex-direction:column;background:radial-gradient(1100px 500px at 15% -10%,rgba(var(--cx-hue-rgb),.12),transparent 55%),radial-gradient(900px 400px at 95% 0%,rgba(var(--cx-green-rgb),.07),transparent 50%),var(--cx-bg);color:var(--cx-text);font-family:var(--cx-font);overflow:hidden}
4
+
5
+ .cx-shell{overflow-x:hidden}
6
+ .cx-chat-b,.cx-pm-side,.cx-dev-b,.cx-sel-menu,.cx-console-main,.cx-webmask{overflow-x:hidden}
7
+ .cx-chat,.cx-chat-body,.cx-chat-center,.cx-chat-b{overflow-x:hidden!important;min-width:0}
8
+ .cx-chat-b{overflow-y:auto;overscroll-behavior-x:none}
9
+ .cx-hint{overflow:hidden}
10
+ .cx-compose{overflow:visible}
11
+ .cx-msg-body,.cx-msg-main{min-width:0;overflow-wrap:anywhere}
12
+ .cx-msg pre{max-width:100%;overflow-x:auto}
13
+ .cx-chat-hin,.cx-compose{min-width:0}
14
+ .cx-shell,.cx-shell *{scrollbar-width:thin;scrollbar-color:rgba(var(--cx-hue-rgb),.22) transparent}
15
+ .cx-shell::-webkit-scrollbar,.cx-shell ::-webkit-scrollbar{width:8px;height:8px}
16
+ .cx-shell::-webkit-scrollbar-track,.cx-shell ::-webkit-scrollbar-track{background:transparent}
17
+ .cx-shell::-webkit-scrollbar-thumb,.cx-shell ::-webkit-scrollbar-thumb{background:rgba(var(--cx-hue-rgb),.22);border-radius:8px;border:2px solid transparent;background-clip:content-box}
18
+ .cx-shell::-webkit-scrollbar-thumb:hover,.cx-shell ::-webkit-scrollbar-thumb:hover{background:rgba(var(--cx-hue-rgb),.42);background-clip:content-box}
19
+ .cx-shell ::-webkit-scrollbar-corner{background:transparent}
20
+ .cx-shell[data-theme="light"]{scrollbar-color:rgba(11,127,159,.28) transparent}
21
+ .cx-shell[data-theme="light"] ::-webkit-scrollbar-thumb{background:rgba(11,127,159,.28);background-clip:content-box}
22
+ .cx-shell[data-theme="light"] ::-webkit-scrollbar-thumb:hover{background:rgba(11,127,159,.45);background-clip:content-box}
23
+
24
+ .cx-shell *{box-sizing:border-box}
25
+ .cx-header{display:flex;align-items:center;gap:16px;padding:12px 16px;border-bottom:1px solid var(--cx-line);background:linear-gradient(180deg,rgba(9,24,38,.96),rgba(5,10,18,.9));position:relative}
26
+ .cx-header:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:linear-gradient(90deg,transparent,var(--cx-cyan),transparent);opacity:.55}
27
+ .cx-brand{display:flex;align-items:center;gap:10px;min-width:250px}
28
+ .cx-mark{width:28px;height:28px;border:1px solid var(--cx-cyan);transform:rotate(45deg);display:grid;place-items:center;box-shadow:0 0 18px rgba(var(--cx-hue-rgb),.3),inset 0 0 12px rgba(var(--cx-hue-rgb),.12)}
29
+ .cx-mark i{width:8px;height:8px;background:var(--cx-cyan);box-shadow:0 0 10px var(--cx-cyan)}
30
+ .cx-title{font-size:var(--cx-fs-title);font-weight:800;letter-spacing:.18em;color:#eaffff}
31
+ .cx-sub{font-size:var(--cx-fs-body);color:var(--cx-muted);letter-spacing:.16em;margin-top:2px}
32
+ .cx-chips{display:flex;gap:8px;flex:1;min-width:0;flex-wrap:wrap}
33
+ .cx-chip{display:flex;align-items:center;gap:7px;padding:5px 9px;border:1px solid var(--cx-line);background:rgba(7,20,32,.75);font-size:var(--cx-fs-body);letter-spacing:.08em;color:var(--cx-muted);white-space:nowrap}
34
+ .cx-chip b{color:var(--cx-text);font-size:var(--cx-fs);font-weight:700}
35
+ .cx-chip .dot{width:6px;height:6px;border-radius:50%;background:var(--cx-muted)}
36
+ .cx-chip .dot.on{background:var(--cx-green);box-shadow:0 0 8px var(--cx-green)}
37
+ .cx-actions{display:flex;align-items:center;gap:7px;flex:none;white-space:nowrap}
38
+ .cx-btn{appearance:none;border:1px solid var(--cx-line2);background:rgba(8,25,40,.9);color:var(--cx-text);font:600 var(--cx-fs)/1 var(--cx-font);padding:7px 10px;cursor:pointer;letter-spacing:.04em}
39
+ .cx-btn:hover{border-color:var(--cx-cyan);color:var(--cx-cyan);box-shadow:0 0 14px rgba(var(--cx-hue-rgb),.12)}
40
+ .cx-btn.pri{border-color:var(--cx-cyan);background:linear-gradient(135deg,rgba(var(--cx-hue-rgb),.18),rgba(24,182,216,.08));color:#dffcff}
41
+ .cx-btn.warn{border-color:rgba(255,180,84,.55);color:var(--cx-orange)}
42
+ .cx-btn.danger{border-color:rgba(255,92,122,.5);color:var(--cx-red)}
43
+ .cx-btn:disabled{opacity:.35;cursor:not-allowed;box-shadow:none}
44
+ .cx-btn.xs{height:26px;padding:0 8px;font-size:var(--cx-fs-body);display:inline-flex;align-items:center;justify-content:center;line-height:1}
45
+ .cx-pipe{display:flex;align-items:center;gap:0;padding:9px 16px;border-bottom:1px solid var(--cx-line);background:rgba(5,14,24,.78);overflow:auto}
46
+ .cx-stage{display:flex;align-items:center;gap:8px;padding:4px 10px;border:1px solid transparent;color:var(--cx-muted);font-size:var(--cx-fs-body);letter-spacing:.12em;white-space:nowrap}
47
+ .cx-stage .n{width:18px;height:18px;border:1px solid var(--cx-line2);display:grid;place-items:center;font-size:var(--cx-fs-body);color:var(--cx-muted)}
48
+ .cx-stage.on{color:var(--cx-cyan);border-color:rgba(var(--cx-hue-rgb),.35);background:rgba(var(--cx-hue-rgb),.06)}
49
+ .cx-stage.on .n{border-color:var(--cx-cyan);color:var(--cx-cyan);box-shadow:0 0 10px rgba(var(--cx-hue-rgb),.2)}
50
+ .cx-stage.done{color:var(--cx-green)}
51
+ .cx-stage.done .n{border-color:var(--cx-green);color:var(--cx-green)}
52
+ .cx-arrow{color:var(--cx-line2);padding:0 6px;font-size:var(--cx-fs)}
53
+ .cx-body{flex:1;min-height:0;display:grid;grid-template-columns:minmax(200px,.72fr) minmax(220px,.82fr) minmax(250px,.92fr) minmax(380px,2fr);gap:10px;padding:10px 12px 0;overflow:hidden}
54
+ .cx-panel{min-width:0;min-height:0;display:flex;flex-direction:column;border:1px solid var(--cx-line);background:linear-gradient(180deg,rgba(8,22,36,.92),rgba(6,15,25,.94));position:relative}
55
+ .cx-panel:before{content:"";position:absolute;left:-1px;top:-1px;width:18px;height:18px;border-left:1px solid var(--cx-cyan);border-top:1px solid var(--cx-cyan);opacity:.7}
56
+ .cx-ph{display:flex;align-items:center;gap:8px;padding:9px 10px;border-bottom:1px solid var(--cx-line);background:rgba(9,27,43,.55)}
57
+ .cx-ph .idx{font-size:var(--cx-fs-body);color:var(--cx-cyan);border:1px solid rgba(var(--cx-hue-rgb),.35);padding:2px 4px}
58
+ .cx-ph .ttl{font-size:var(--cx-fs);font-weight:800;letter-spacing:.12em;color:#c9f7ff;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
59
+ .cx-ph .cnt{font-size:var(--cx-fs-body);color:var(--cx-muted)}
60
+ .cx-tools{display:flex;align-items:center;gap:5px;padding:7px 8px;border-bottom:1px solid rgba(22,56,77,.6);flex-wrap:wrap}
61
+ .cx-tools-spacer{flex:1;min-width:4px}
62
+ .cx-tools .cx-btn{flex:none}
63
+ .cx-tools .cx-filter{flex:none}
64
+ .cx-list{flex:1;min-height:0;overflow:auto;padding:6px}
65
+ .cx-empty{padding:18px 14px;color:var(--cx-muted);font-size:var(--cx-fs);line-height:1.8;border:1px dashed var(--cx-line);margin:8px}
66
+ .cx-node{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px;border:1px solid transparent;border-left:2px solid var(--cx-line2);background:rgba(7,19,31,.7);margin-bottom:5px;cursor:pointer;position:relative}
67
+ .cx-node:hover{background:rgba(11,35,53,.8);border-color:var(--cx-line)}
68
+ .cx-node.on{border-color:var(--cx-cyan);border-left-color:var(--cx-cyan);background:rgba(12,42,60,.75);box-shadow:inset 0 0 18px rgba(var(--cx-hue-rgb),.06)}
69
+ .cx-led{width:7px;height:7px;border-radius:50%;background:#31536a;flex:none}
70
+ .cx-led.on{background:var(--cx-green);box-shadow:0 0 9px var(--cx-green)}
71
+ .cx-led.warn{background:var(--cx-orange);box-shadow:0 0 8px var(--cx-orange)}
72
+ .cx-main{flex:1;min-width:0}
73
+ .cx-name{font-size:var(--cx-fs);font-weight:700;color:#e9fbff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
74
+ .cx-meta{font-size:var(--cx-fs-body);color:var(--cx-muted);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
75
+ .cx-tag{font-size:var(--cx-fs-body);padding:1px 4px;border:1px solid var(--cx-line2);color:var(--cx-muted);letter-spacing:.06em}
76
+ .cx-tag.cy{color:var(--cx-cyan);border-color:rgba(var(--cx-hue-rgb),.4)}
77
+ .cx-tag.gr{color:var(--cx-green);border-color:rgba(var(--cx-green-rgb),.35)}
78
+ .cx-node-actions{display:flex;gap:5px;align-items:center;justify-content:flex-end;width:100%;margin-left:0;flex:none;margin-top:2px}
79
+ .cx-space-icon{width:22px;height:22px;border-radius:4px;object-fit:cover;flex:none;border:1px solid var(--cx-border);background:var(--cx-surface-2)}
80
+ .cx-space{padding:8px;border:1px solid rgba(22,56,77,.7);background:rgba(7,19,31,.65);margin-bottom:5px;cursor:pointer}
81
+ .cx-space:hover,.cx-space.on{border-color:var(--cx-cyan);background:rgba(11,35,53,.8)}
82
+ .cx-space .row{display:flex;align-items:center;gap:7px;min-width:0}
83
+ .cx-space .nm{flex:1;min-width:0;font-size:var(--cx-fs);font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
84
+ .cx-space .sub{display:flex;gap:6px;align-items:center;margin-top:2px;font-size:var(--cx-fs-body);color:var(--cx-muted);flex-wrap:wrap}
85
+ .cx-app{display:grid;grid-template-columns:minmax(0,1fr);gap:6px;padding:8px;border-bottom:1px solid rgba(22,56,77,.55);cursor:pointer}
86
+ .cx-app:hover{background:rgba(11,35,53,.55)}
87
+ .cx-app.on{background:rgba(13,45,64,.65);outline:1px solid var(--cx-accent);outline-offset:-1px;box-shadow:none}
88
+ .cx-app-top{display:flex;align-items:center;gap:8px;min-width:0}
89
+ .cx-ai{display:inline-flex;align-items:center;justify-content:center;flex:none;border-radius:6px;overflow:hidden;color:#eafcff;font:700 var(--cx-fs) var(--cx-font);border:1px solid rgba(255,255,255,.08)}
90
+ .cx-ai img{width:100%;height:100%;object-fit:cover;display:block}
91
+ .cx-app .an{font-size:var(--cx-fs);font-weight:700;color:#e9fbff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
92
+ .cx-app .ac{font-size:var(--cx-fs-body);color:var(--cx-muted);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
93
+ .cx-app .aa{display:flex;gap:3px;align-items:center;justify-content:flex-end;grid-column:1/-1;margin-left:auto}
94
+ .cx-detail{border-top:1px solid var(--cx-line);padding:8px 9px;background:rgba(5,15,25,.85)}
95
+ .cx-detail .dt{font-size:var(--cx-fs-body);color:var(--cx-cyan);letter-spacing:.1em;margin-bottom:4px}
96
+ .cx-detail .dc{font-size:var(--cx-fs-body);color:var(--cx-muted);line-height:1.7;word-break:break-all}
97
+ .cx-preview{height:100%;min-height:320px;position:relative;background:#02060c}
98
+ .cx-preview iframe{position:absolute;inset:0;width:100%;height:100%;border:0;background:#fff}
99
+ .cx-preview-bar{position:absolute;left:0;right:0;top:0;z-index:2;display:flex;gap:5px;padding:5px 7px;background:linear-gradient(180deg,rgba(2,8,14,.92),transparent);pointer-events:none}
100
+ .cx-preview-bar .cx-btn{pointer-events:auto}
101
+ .cx-log{flex:0 0 220px;border-top:1px solid var(--cx-line);background:rgba(4,11,19,.92);display:flex;flex-direction:column;min-height:0}
102
+ .cx-log-h{display:flex;align-items:center;gap:8px;padding:5px 12px;border-bottom:1px solid rgba(22,56,77,.6);font-size:var(--cx-fs-body);letter-spacing:.12em;color:var(--cx-muted)}
103
+ .cx-log-h b{color:var(--cx-cyan);font-weight:700}
104
+ .cx-log-b{flex:1;overflow:auto;padding:5px 12px;font-size:var(--cx-fs-body);line-height:1.65}
105
+ .cx-line{display:flex;gap:8px;white-space:pre-wrap;word-break:break-all}
106
+ .cx-line .t{color:#436a80;flex:none}
107
+ .cx-line .m{color:#9fc4d6}
108
+ .cx-line.ok .m{color:var(--cx-green)}
109
+ .cx-line.err .m{color:var(--cx-red)}
110
+ .cx-line.run .m{color:var(--cx-orange)}
111
+ .cx-debug .cx-line .m{color:#7fb8d0;font-size:var(--cx-fs-body)}
112
+ .cx-debug .cx-line{padding:1px 0;border-bottom:1px solid rgba(22,56,77,.2)}
113
+ .cx-err{margin:8px 12px 0;padding:7px 9px;border:1px solid rgba(255,92,122,.5);background:rgba(255,92,122,.08);color:#ff9caf;font-size:var(--cx-fs-body);white-space:pre-wrap}
114
+ .cx-modal{position:fixed;inset:0;background:rgba(1,5,10,.72);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:200}
115
+ .cx-card{width:min(620px,calc(100vw - 36px));max-height:calc(100vh - 60px);overflow:auto;border:1px solid var(--cx-cyan);background:linear-gradient(180deg,#081826,#050d16);box-shadow:0 0 50px rgba(var(--cx-hue-rgb),.15);padding:16px}
116
+ .cx-card h2{margin:0;font-size:var(--cx-fs);letter-spacing:.14em;color:var(--cx-cyan);font-weight:800}
117
+ .cx-card .desc{font-size:var(--cx-fs-body);color:var(--cx-muted);line-height:1.7;margin:6px 0 12px}
118
+ .cx-form{display:grid;grid-template-columns:1fr 1fr;gap:8px}
119
+ .cx-field{display:flex;flex-direction:column;gap:4px;font-size:var(--cx-fs-body);color:var(--cx-muted);letter-spacing:.06em}
120
+ .cx-field.full{grid-column:1/-1}
121
+ .cx-input,.cx-select,.cx-area{font:var(--cx-fs)/1.5 var(--cx-font);color:var(--cx-text);background:#04101a;border:1px solid var(--cx-line2);padding:7px 8px;outline:none;width:100%}
122
+ .cx-input:focus,.cx-select:focus,.cx-area:focus{border-color:var(--cx-cyan);box-shadow:0 0 0 1px rgba(var(--cx-hue-rgb),.15)}
123
+ .cx-area{min-height:90px;resize:vertical}
124
+ .cx-row{display:flex;gap:6px;align-items:center}
125
+ .cx-table{width:100%;border-collapse:collapse;font-size:var(--cx-fs-body)}
126
+ .cx-table th,.cx-table td{border-bottom:1px solid rgba(22,56,77,.6);padding:4px 5px;text-align:left;color:var(--cx-muted)}
127
+ .cx-table th{color:var(--cx-cyan);font-weight:700}
128
+ .cx-foot{display:flex;gap:7px;justify-content:flex-end;margin-top:14px}
129
+ .cx-spin{display:inline-block;width:8px;height:8px;border:1px solid var(--cx-cyan);border-top-color:transparent;border-radius:50%;animation:cxspin .7s linear infinite}
130
+ @keyframes cxspin{to{transform:rotate(360deg)}}
131
+ .cx-chat-fab{position:fixed;right:18px;bottom:88px;z-index:260;width:52px;height:52px;border-radius:50%;border:1px solid var(--cx-cyan);background:radial-gradient(circle at 30% 20%,rgba(var(--cx-hue-rgb),.35),rgba(5,15,25,.96));color:#eaffff;font:800 var(--cx-fs-body)/1 var(--cx-font);letter-spacing:.08em;cursor:pointer;box-shadow:0 0 24px rgba(var(--cx-hue-rgb),.28),inset 0 0 18px rgba(var(--cx-hue-rgb),.12)}
132
+ .cx-chat-fab:hover{box-shadow:0 0 34px rgba(var(--cx-hue-rgb),.5)}
133
+ .cx-chat{position:fixed;right:18px;bottom:18px;z-index:270;width:min(560px,calc(100vw - 18px));height:min(640px,calc(100vh - 30px));display:flex;flex-direction:column;border:1px solid var(--cx-cyan);background:linear-gradient(180deg,rgba(7,24,38,.97),rgba(4,11,19,.98));box-shadow:0 0 50px rgba(0,0,0,.55),0 0 30px rgba(var(--cx-hue-rgb),.12)}
134
+ .cx-chat.full{position:absolute;left:0;right:0;top:0;bottom:0;width:100%;height:100%;border:0;z-index:500}
135
+ .cx-chat.full .cx-chat-b{max-width:900px;width:calc(100% - 36px);margin:0 auto;padding:18px 0}
136
+ .cx-chat.full .cx-chat-i,.cx-chat.full .cx-chat-q,.cx-chat.full .cx-chat-ctx,.cx-chat.full .cx-chat-modes{width:100%;max-width:900px;margin:0 auto}
137
+ .cx-chat.full .cx-msg{max-width:78%;font-size:var(--cx-fs);padding:10px 12px}
138
+ .cx-chat.full .cx-chat-b{gap:10px}
139
+ .cx-chat-h{display:flex;align-items:center;gap:8px;padding:9px 11px;border-bottom:1px solid var(--cx-line);background:rgba(9,30,46,.9)}
140
+ .cx-chat-h .t{font-size:var(--cx-fs-body);font-weight:800;letter-spacing:.14em;color:var(--cx-cyan);flex:1}
141
+ .cx-chat-h .x{border:0;background:transparent;color:var(--cx-muted);cursor:pointer;font-size:var(--cx-fs-title)}
142
+ .cx-chat-modes{display:flex;gap:3px;padding:6px 8px;border-bottom:1px solid rgba(22,56,77,.6);background:rgba(5,16,26,.8)}
143
+ .cx-chat-mode{flex:1;font:700 var(--cx-fs-body)/1 var(--cx-font);padding:6px 4px;border:1px solid var(--cx-line);background:transparent;color:var(--cx-muted);cursor:pointer;letter-spacing:.06em}
144
+ .cx-chat-mode.on{color:var(--cx-cyan);border-color:var(--cx-cyan);background:rgba(var(--cx-hue-rgb),.08)}
145
+ .cx-chat-selectors{display:flex;gap:6px;padding:8px 18px;border-bottom:1px solid rgba(22,56,77,.55);background:rgba(5,15,25,.7);position:relative;z-index:3;flex-wrap:wrap}
146
+ .cx-chat-selectors.bottom{border-top:1px solid rgba(22,56,77,.55);border-bottom:0;padding:7px 10px;background:rgba(4,12,21,.88);flex:none}
147
+ .cx-chat.full .cx-chat-selectors.bottom{width:100%;max-width:900px;margin:0 auto}
148
+ .cx-sel{position:relative;flex:1;min-width:125px}
149
+ .cx-sel-btn{width:100%;display:grid;grid-template-columns:34px minmax(0,1fr) 10px;align-items:center;gap:5px;padding:7px 8px;border:1px solid var(--cx-line);background:rgba(7,20,32,.8);color:var(--cx-text);font:var(--cx-fs-body)/1.3 var(--cx-font);cursor:pointer;text-align:left}
150
+ .cx-sel-btn:hover,.cx-sel-btn.on{border-color:var(--cx-cyan);box-shadow:0 0 14px rgba(var(--cx-hue-rgb),.1)}
151
+ .cx-sel-btn .k{font-size:var(--cx-fs-body);color:var(--cx-cyan);letter-spacing:.08em;overflow:hidden;text-overflow:ellipsis}
152
+ .cx-sel-btn .v{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#e9fbff;font-size:var(--cx-fs-body)}
153
+ .cx-sel-btn .a{color:var(--cx-muted);font-size:var(--cx-fs-body)}
154
+ .cx-sel-menu{position:absolute;left:0;right:0;top:100%;z-index:500;margin-top:4px;max-height:260px;overflow:auto;border:1px solid var(--cx-cyan);background:#071522;box-shadow:0 12px 36px rgba(0,0,0,.55)}
155
+ .cx-sel-item{display:block;width:100%;text-align:left;border:0;border-bottom:1px solid rgba(22,56,77,.5);background:transparent;color:var(--cx-text);padding:7px 9px;cursor:pointer;font:var(--cx-fs-body)/1.4 var(--cx-font)}
156
+ .cx-sel-item:hover{background:rgba(var(--cx-hue-rgb),.1)}
157
+ .cx-sel-item.on{background:rgba(var(--cx-hue-rgb),.12);color:var(--cx-cyan)}
158
+ .cx-sel-item .s{font-size:var(--cx-fs-body);color:var(--cx-muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
159
+ .cx-chat-ctx{padding:5px 10px;border-bottom:1px solid rgba(22,56,77,.6);font-size:var(--cx-fs-body);color:var(--cx-muted);letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:rgba(4,14,24,.7)}
160
+ .cx-chat-b{flex:1;min-height:0;overflow:auto;padding:10px;display:flex;flex-direction:column;gap:7px}
161
+ .cx-msg{max-width:92%;padding:7px 9px;font-size:var(--cx-fs);line-height:1.65;border:1px solid var(--cx-line);background:rgba(9,27,42,.8);color:#c7edf8;white-space:pre-wrap}
162
+ .cx-msg.ai{border-left:2px solid var(--cx-cyan);align-self:flex-start}
163
+ .cx-msg.user{align-self:flex-end;border-color:rgba(var(--cx-green-rgb),.4);background:rgba(8,35,31,.75);color:#c9ffe9}
164
+ .cx-msg.sys{align-self:center;font-size:var(--cx-fs-body);color:var(--cx-muted);border-color:transparent;background:transparent;padding:2px}
165
+ .cx-chat-q{display:flex;gap:5px;flex-wrap:wrap;padding:7px 9px;border-top:1px solid rgba(22,56,77,.6)}
166
+ .cx-chat-q button{font-size:var(--cx-fs-body)}
167
+ .cx-chat-i{display:flex;gap:5px;padding:8px;border-top:1px solid var(--cx-line);background:rgba(4,12,20,.9)}
168
+ .cx-chat-i input{flex:1;min-width:0}
169
+ .cx-chat-i button{flex:none}
170
+ .cx-official{border-top:1px solid var(--cx-line);padding:9px 10px;background:rgba(4,14,24,.75)}
171
+ .cx-official .oh{font-size:var(--cx-fs-body);letter-spacing:.12em;color:var(--cx-cyan);margin-bottom:6px}
172
+ .cx-official label{display:flex;align-items:center;gap:6px;font-size:var(--cx-fs-body);color:var(--cx-muted);padding:3px 0;cursor:pointer}
173
+ .cx-official input{accent-color:var(--cx-cyan)}
174
+ .cx-avatar-list{display:flex;flex-direction:column;gap:5px;max-height:240px;overflow:auto;margin-bottom:10px}
175
+ .cx-avatar{display:flex;align-items:center;gap:8px;padding:7px 8px;border:1px solid var(--cx-line);background:rgba(7,19,31,.65);cursor:pointer}
176
+ .cx-avatar.on{border-color:var(--cx-cyan);box-shadow:inset 0 0 14px rgba(var(--cx-hue-rgb),.08)}
177
+ .cx-avatar .an{flex:1;min-width:0;font-size:var(--cx-fs);font-weight:700;color:#e9fbff}
178
+ .cx-avatar .ad{font-size:var(--cx-fs-body);color:var(--cx-muted);margin-top:2px}
179
+ .cx-init{position:fixed;inset:0;z-index:600;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:26px 16px;overflow:hidden;background:radial-gradient(900px 520px at 50% 16%,rgba(var(--cx-hue-rgb),.20),transparent 62%),radial-gradient(700px 420px at 82% 92%,rgba(var(--cx-green-rgb),.14),transparent 62%),linear-gradient(180deg,#03070d,#04101a 58%,#02060b)}
180
+ .cx-init-grid{position:absolute;left:-20%;right:-20%;top:-10%;bottom:-25%;background-image:linear-gradient(rgba(var(--cx-hue-rgb),.28) 1px,transparent 1px),linear-gradient(90deg,rgba(var(--cx-hue-rgb),.28) 1px,transparent 1px);background-size:48px 48px;transform:perspective(600px) rotateX(58deg) scale(1.35);transform-origin:50% 100%;animation:cx-init-grid 12s linear infinite;-webkit-mask-image:radial-gradient(ellipse at 50% 78%,#000 0%,rgba(0,0,0,.55) 45%,transparent 72%);mask-image:radial-gradient(ellipse at 50% 78%,#000 0%,rgba(0,0,0,.55) 45%,transparent 72%)}
181
+ @keyframes cx-init-grid{from{background-position:0 0}to{background-position:0 44px}}
182
+ .cx-init-ring{position:absolute;width:820px;height:820px;border-radius:50%;background:conic-gradient(from 0deg,rgba(var(--cx-hue-rgb),0),rgba(var(--cx-hue-rgb),.5),rgba(var(--cx-green-rgb),.35),rgba(var(--cx-hue-rgb),0));filter:blur(42px);opacity:.8;animation:cx-init-spin 18s linear infinite}
183
+ .cx-init:before{content:"";position:absolute;left:0;right:0;top:72%;height:1px;background:linear-gradient(90deg,transparent,rgba(var(--cx-hue-rgb),.85),transparent);box-shadow:0 0 34px rgba(var(--cx-hue-rgb),.6);opacity:.55}
184
+ .cx-init:after{content:"";position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(0deg,rgba(255,255,255,.035) 0 1px,transparent 1px 3px);mix-blend-mode:overlay}
185
+ @keyframes cx-init-spin{to{transform:rotate(360deg)}}
186
+ .cx-init-scan{position:absolute;left:0;right:0;height:160px;background:linear-gradient(180deg,transparent,rgba(var(--cx-hue-rgb),.09),transparent);animation:cx-init-scan 6.5s ease-in-out infinite}
187
+ @keyframes cx-init-scan{0%{top:-25%}50%{top:85%}100%{top:-25%}}
188
+ .cx-init-world{margin:0 auto;flex:none;animation:cxWorldIn .9s ease both}
189
+ .cx-init .cx-init-card{max-height:calc(100vh - 300px);flex:none}
190
+ @media(max-height:880px){.cx-init-world .cx-world-name{font-size:clamp(20px,3.2vw,34px)}.cx-init .cx-init-card{max-height:calc(100vh - 240px)}}
191
+ .cx-init-card{position:relative;width:min(620px,calc(100vw - 40px));max-height:calc(100vh - 60px);overflow:auto;padding:22px 24px 18px;border:1px solid rgba(var(--cx-hue-rgb),.55);background:linear-gradient(180deg,rgba(6,20,32,.93),rgba(3,10,18,.97));box-shadow:inset 0 0 0 1px rgba(var(--cx-hue-rgb),.12),0 0 60px rgba(var(--cx-hue-rgb),.25),0 30px 80px rgba(0,0,0,.6);clip-path:polygon(0 14px,14px 0,calc(100% - 14px) 0,100% 14px,100% calc(100% - 14px),calc(100% - 14px) 100%,14px 100%,0 calc(100% - 14px))}
192
+ .cx-init-card:before{content:"";position:absolute;left:0;right:0;top:0;height:1px;background:linear-gradient(90deg,transparent,var(--cx-cyan),transparent);animation:cx-init-sweep 3.2s linear infinite}
193
+ @keyframes cx-init-sweep{0%{opacity:.15;transform:translateX(-45%)}50%{opacity:1}100%{opacity:.15;transform:translateX(45%)}}
194
+ .cx-init-head{display:flex;gap:12px;align-items:center;margin-bottom:12px}
195
+ .cx-init-badge{width:40px;height:40px;flex:none;display:grid;place-items:center;border:1px solid var(--cx-cyan);color:var(--cx-cyan);font:800 var(--cx-fs-body) var(--cx-mono);letter-spacing:.08em;box-shadow:0 0 18px rgba(var(--cx-hue-rgb),.45),inset 0 0 14px rgba(var(--cx-hue-rgb),.2);animation:cx-init-pulse 2.4s ease-in-out infinite}
196
+ @keyframes cx-init-pulse{0%,100%{box-shadow:0 0 14px rgba(var(--cx-hue-rgb),.35),inset 0 0 12px rgba(var(--cx-hue-rgb),.15)}50%{box-shadow:0 0 28px rgba(var(--cx-hue-rgb),.75),inset 0 0 18px rgba(var(--cx-hue-rgb),.3)}}
197
+ .cx-init-card h2{margin:0;font-size:var(--cx-fs-title);letter-spacing:.2em;color:#eaffff;text-shadow:0 0 12px rgba(var(--cx-hue-rgb),.65)}
198
+ .cx-init-card .desc{font-size:var(--cx-fs-body);color:#8fb8c9;margin-top:4px;line-height:1.5}
199
+ .cx-init-progress{display:flex;align-items:center;gap:8px;margin:10px 0 4px;font:var(--cx-fs-body) var(--cx-mono);color:#8fb8c9}
200
+ .cx-init-progress .track{flex:1;height:4px;background:rgba(var(--cx-hue-rgb),.12);border-radius:2px;overflow:hidden}
201
+ .cx-init-progress .bar{height:100%;background:linear-gradient(90deg,var(--cx-cyan),var(--cx-green));box-shadow:0 0 10px rgba(var(--cx-hue-rgb),.7);transition:width .4s ease}
202
+ .cx-init-step{display:flex;gap:10px;align-items:flex-start;padding:9px 2px;border-bottom:1px dashed rgba(22,56,77,.55);font-size:var(--cx-fs);color:#8fb8c9;font-family:var(--cx-mono)}
203
+ .cx-init-step .idx{color:rgba(var(--cx-hue-rgb),.5);margin-right:6px;font-size:var(--cx-fs-body)}
204
+ .cx-init-step .st{width:16px;flex:none;text-align:center}
205
+ .cx-init-step.done{color:var(--cx-green);text-shadow:0 0 8px rgba(var(--cx-green-rgb),.35)}
206
+ .cx-init-step.run{color:var(--cx-orange);text-shadow:0 0 8px rgba(255,180,84,.4)}
207
+ .cx-init-step.run .st{animation:cx-init-blink 1s steps(2) infinite}
208
+ @keyframes cx-init-blink{50%{opacity:.25}}
209
+ .cx-init-step.err{color:var(--cx-red)}
210
+ .cx-init-step .sd{font-size:var(--cx-fs-body);color:#7fa6b8;margin-top:2px;white-space:pre-wrap}
211
+ .cx-init .cx-form label{color:#8fb8c9}
212
+ .cx-init .cx-err{color:#ff8fa3}
213
+ .cx-init .cx-btn{background:rgba(8,26,40,.92);border:1px solid rgba(var(--cx-hue-rgb),.35);color:#cfeff9}
214
+ .cx-init .cx-btn:hover{border-color:var(--cx-cyan);color:#eaffff;box-shadow:0 0 14px rgba(var(--cx-hue-rgb),.3)}
215
+ .cx-init .cx-btn.pri{background:linear-gradient(90deg,rgba(10,108,134,.95),rgba(10,143,106,.95));border-color:var(--cx-cyan);color:#eaffff;box-shadow:0 0 18px rgba(var(--cx-hue-rgb),.35)}
216
+ .cx-init .cx-btn.pri:hover{box-shadow:0 0 26px rgba(var(--cx-hue-rgb),.6)}
217
+ .cx-init .cx-form .cx-input{background:rgba(4,16,26,.9);border-color:rgba(var(--cx-hue-rgb),.28);color:#e6fbff}
218
+ .cx-init .cx-form .cx-input:focus{border-color:var(--cx-cyan);box-shadow:0 0 0 2px rgba(var(--cx-hue-rgb),.15)}
219
+ .cx-init .cx-foot{display:flex;justify-content:flex-end;gap:8px;margin-top:14px}
220
+ .cx-menu-wrap{position:relative;display:inline-flex;flex:none}
221
+ .cx-menu{position:absolute;right:0;top:100%;z-index:400;min-width:145px;padding:4px;background:#081826;border:1px solid var(--cx-line2);box-shadow:0 8px 24px rgba(0,0,0,.45)}
222
+ .cx-menu-item{display:flex;align-items:center;gap:8px;width:100%;text-align:left;border:0;background:transparent;color:var(--cx-text);font:var(--cx-fs-body)/1.5 var(--cx-font);padding:5px 8px;cursor:pointer;white-space:nowrap}
223
+ .cx-menu-item .mi{width:14px;display:inline-flex;align-items:center;justify-content:center;flex:none;opacity:.85}
224
+ .cx-menu-item:hover{background:rgba(var(--cx-hue-rgb),.12);color:var(--cx-cyan)}
225
+ .cx-devices{display:flex;flex-direction:column;gap:6px}
226
+ .cx-adapter{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:6px}
227
+ .cx-device{display:flex;align-items:center;gap:8px;padding:7px 8px;border:1px solid var(--cx-line);background:rgba(7,19,31,.65)}
228
+ .cx-device .dn{flex:1;min-width:0;font-size:var(--cx-fs);font-weight:700;color:#e9fbff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
229
+ .cx-device .dd{font-size:var(--cx-fs-body);color:var(--cx-muted);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
230
+ .cx-store{display:flex;align-items:center;gap:8px;padding:7px 8px;border-bottom:1px solid rgba(22,56,77,.55);cursor:pointer}
231
+ .cx-store:hover{background:rgba(11,35,53,.55)}
232
+ .cx-store .si{width:24px;height:24px;border:1px solid var(--cx-line2);display:grid;place-items:center;font-size:var(--cx-fs-body);color:var(--cx-cyan);flex:none}
233
+ .cx-store .sn{font-size:var(--cx-fs);font-weight:700;color:#e9fbff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
234
+ .cx-store .ss{font-size:var(--cx-fs-body);color:var(--cx-muted);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
235
+ .cx-web{height:100%;min-height:320px;display:flex;flex-direction:column}
236
+ .cx-webtabs{display:flex;align-items:stretch;gap:3px;flex-wrap:nowrap;overflow:visible;border-bottom:1px solid var(--cx-line);flex:none;padding:4px 4px 0;min-height:34px}
237
+ .cx-webtab{position:relative;display:inline-flex;align-items:center;gap:4px;flex:0 1 auto;height:28px;min-width:84px;max-width:220px;padding:0 8px;border:1px solid var(--cx-line);border-radius:5px 5px 0 0;background:rgba(7,19,31,.85);color:var(--cx-muted);font-size:var(--cx-fs-body);cursor:pointer;white-space:nowrap;box-sizing:border-box}
238
+ .cx-webtab>span:first-child{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}
239
+ .cx-webtab .cx-menu-wrap{position:relative;margin-left:auto;flex:none}
240
+ .cx-webtab .cx-menu-wrap button{width:20px;height:20px;padding:0;font-size:var(--cx-fs);display:grid;place-items:center}
241
+ .cx-webtab .cx-menu{top:100%;right:0;left:auto;z-index:900}
242
+ .cx-webtab .x{width:18px;height:18px;display:grid;place-items:center}
243
+ .cx-webtab.on{color:var(--cx-cyan);border-color:var(--cx-cyan);background:rgba(10,32,48,.95)}
244
+ .cx-webtab .x{border:0;background:transparent;color:var(--cx-muted);cursor:pointer;padding:0 2px;font-size:var(--cx-fs)}
245
+ .cx-webtab .x:hover{color:var(--cx-red)}
246
+ .cx-webframe{flex:1;min-height:0;position:relative;background:#02060c}
247
+ .cx-webframe iframe{position:absolute;inset:0;width:100%;height:100%;border:0;background:transparent;opacity:0;pointer-events:none;transition:opacity .12s ease}
248
+ .cx-webframe iframe.on{opacity:1;pointer-events:auto}
249
+ .cx-webmask{position:absolute;inset:0;z-index:3;display:flex;align-items:center;justify-content:center;background:var(--cx-surface-1);color:var(--cx-text-faint);font:var(--cx-fs)/1 var(--cx-font);letter-spacing:.14em}
250
+ .cx-webframe .cx-empty{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}
251
+ .cx-chat.full{background:radial-gradient(1200px 600px at 20% -10%,rgba(var(--cx-hue-rgb),.16),transparent 60%),radial-gradient(900px 500px at 90% 0%,rgba(var(--cx-green-rgb),.08),transparent 55%),#040a12}
252
+ .cx-chat.full:before{content:"";position:absolute;inset:0;pointer-events:none;background-image:linear-gradient(rgba(var(--cx-hue-rgb),.045) 1px,transparent 1px),linear-gradient(90deg,rgba(var(--cx-hue-rgb),.045) 1px,transparent 1px);background-size:48px 48px;mask-image:linear-gradient(180deg,rgba(0,0,0,.9),transparent 70%)}
253
+ .cx-chat-h{position:relative;z-index:2;padding:12px 18px;background:rgba(5,14,24,.72);backdrop-filter:blur(12px)}
254
+ .cx-chat-hin{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;max-width:1080px;margin:0 auto;min-width:0}
255
+ .cx-chat-copy{min-width:0;flex:1}
256
+ .cx-chat-brand{display:flex;align-items:center;gap:10px;flex:1;min-width:0}
257
+ .cx-chat-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
258
+ .cx-chat-sub{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
259
+ .cx-chat-orb{width:26px;height:26px;border-radius:50%;background:conic-gradient(from 0deg,var(--cx-cyan),var(--cx-green),var(--cx-cyan));box-shadow:0 0 18px rgba(var(--cx-hue-rgb),.5);position:relative;flex:none}
260
+ .cx-chat-orb:after{content:"";position:absolute;inset:5px;border-radius:50%;background:#06121e}
261
+ .cx-chat-title{font-size:var(--cx-fs);font-weight:800;letter-spacing:.16em;color:#eaffff}
262
+ .cx-chat-sub{font-size:var(--cx-fs-body);color:var(--cx-muted);margin-top:2px;letter-spacing:.08em}
263
+ .cx-chat-actions{display:flex;gap:6px;align-items:center}
264
+ .cx-city3d{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none;background:radial-gradient(circle at 50% 30%,#03111d,#01050a 70%)}
265
+ .cx-city-labels{position:absolute;left:18px;bottom:18px;display:flex;gap:6px;flex-wrap:wrap;z-index:2;pointer-events:none}
266
+ .cx-city-labels span{font-size:var(--cx-fs-body);letter-spacing:.12em;color:rgba(143,232,255,.72);border:1px solid rgba(var(--cx-hue-rgb),.25);background:rgba(3,14,24,.55);padding:3px 6px;border-radius:3px}
267
+ .cx-city3d canvas{position:absolute;inset:0;width:100%!important;height:100%!important;display:block;opacity:.92}
268
+ .cx-tech-bg{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden;opacity:.62}
269
+ .cx-tech-bg svg{width:100%;height:100%}
270
+ .cx-chat-body{position:relative;z-index:1}
271
+ .cx-world{max-width:900px;margin:14px auto 0;text-align:center;position:relative;z-index:1;pointer-events:none;animation:cxWorldIn .9s ease both}
272
+ .cx-world:before{content:"";position:absolute;left:50%;top:-30px;width:min(940px,94vw);height:280px;transform:translateX(-50%);background:radial-gradient(ellipse at center,rgba(var(--cx-hue-rgb),.20),rgba(var(--cx-green-rgb),.08) 45%,transparent 72%);z-index:-1;pointer-events:none}
273
+ .cx-world.gone{display:none}
274
+ .cx-world-kicker{font:var(--cx-fs-body) var(--cx-mono);letter-spacing:.55em;color:var(--cx-cyan);opacity:.75}
275
+ .cx-world-name{margin:6px 0 8px;font-size:clamp(26px,4.6vw,52px);font-weight:800;letter-spacing:.1em;line-height:1.1;background:linear-gradient(90deg,#8ff5ff,var(--cx-cyan) 32%,var(--cx-green) 68%,#b7ffe6);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 22px rgba(var(--cx-hue-rgb),.45));animation:cxWorldGlow 4.5s ease-in-out infinite}
276
+ @keyframes cxWorldGlow{0%,100%{filter:drop-shadow(0 0 16px rgba(var(--cx-hue-rgb),.32))}50%{filter:drop-shadow(0 0 34px rgba(var(--cx-hue-rgb),.7))}}
277
+ @keyframes cxWorldIn{from{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:none}}
278
+ .cx-world-sub{font-size:var(--cx-fs);letter-spacing:.34em;color:var(--cx-text-dim)}
279
+ .cx-world-line{width:min(540px,82%);height:1px;margin:14px auto 0;background:linear-gradient(90deg,transparent,var(--cx-cyan),transparent);box-shadow:0 0 20px rgba(var(--cx-hue-rgb),.65)}
280
+ .cx-shell[data-theme="light"] .cx-world-name{background:linear-gradient(90deg,#0a6d8f,#0b7f9f 32%,#0a7a4a 68%,#0a5f7d);-webkit-background-clip:text;background-clip:text;filter:drop-shadow(0 0 12px rgba(10,109,143,.25))}
281
+ .cx-shell[data-theme="light"] .cx-world-sub{color:#3d6678}
282
+ .cx-shell[data-theme="light"] .cx-world-line{background:linear-gradient(90deg,transparent,#0b7f9f,transparent);box-shadow:0 0 14px rgba(11,127,159,.35)}
283
+ .cx-hero{display:flex;align-items:center;justify-content:center;gap:22px;text-align:left;padding:26px 12px 18px;max-width:900px;margin:0 auto;position:relative;z-index:1}
284
+ .cx-portrait-stage{position:relative;width:100%;perspective:900px;transform-style:preserve-3d}
285
+ .cx-portrait-depth{position:absolute;inset:4% 3% 2%;transform:translateZ(-26px) scale(1.06);filter:blur(12px);opacity:.55;border-radius:48% 48% 42% 42% / 32% 32% 18% 18%;overflow:hidden}
286
+ .cx-portrait-depth img{width:100%;height:100%;object-fit:cover;object-position:50% 18%;filter:saturate(1.3) brightness(.7)}
287
+ .cx-portrait-floor{position:absolute;left:8%;right:8%;bottom:-4%;height:18%;border-radius:50%;background:radial-gradient(ellipse,rgba(var(--cx-hue-rgb),.35),transparent 70%);filter:blur(8px);transform:rotateX(70deg)}
288
+ .cx-portrait-ring{position:absolute;left:50%;bottom:-2%;width:88%;height:16%;transform:translateX(-50%) rotateX(72deg);border:1px solid rgba(var(--cx-hue-rgb),.55);border-radius:50%;box-shadow:0 0 22px rgba(var(--cx-hue-rgb),.35),inset 0 0 18px rgba(var(--cx-hue-rgb),.2);animation:cxRing 5s ease-in-out infinite}
289
+ .cx-avatar3d{position:relative;width:100%;aspect-ratio:1/1.08;cursor:grab;overflow:hidden;border-radius:14px;background:radial-gradient(circle at 50% 35%,rgba(var(--cx-hue-rgb),.1),transparent 65%)}
290
+ .cx-avatar3d:active{cursor:grabbing}
291
+ .cx-avatar3d canvas{position:absolute;inset:0;width:100%!important;height:100%!important;display:block}
292
+ .cx-avatar-ghost{position:absolute;inset:2%;overflow:hidden;border-radius:48% 48% 42% 42% / 32% 32% 18% 18%;opacity:.22;filter:blur(3px) hue-rotate(35deg) saturate(1.6);transform:translateZ(-34px) scale(1.07)}
293
+ .cx-avatar-ghost img{width:100%;height:100%;object-fit:cover;object-position:50% 18%}
294
+ .cx-avatar-ring{position:absolute;left:50%;top:50%;border:1px solid rgba(var(--cx-hue-rgb),.35);border-radius:50%;pointer-events:none;transform:translate(-50%,-50%) rotateX(72deg)}
295
+ .cx-avatar-ring.r1{width:88%;height:88%;animation:cxRingSpin 14s linear infinite}
296
+ .cx-avatar-ring.r2{width:74%;height:74%;border-color:rgba(var(--cx-green-rgb),.28);animation:cxRingSpin 9s linear infinite reverse}
297
+ .cx-avatar-ring.r3{width:100%;height:100%;border-style:dashed;opacity:.35;animation:cxRingSpin 22s linear infinite}
298
+ .cx-avatar-hud{position:absolute;left:7px;right:7px;top:7px;display:flex;justify-content:space-between;font-size:var(--cx-fs-body);letter-spacing:.1em;color:rgba(173,252,255,.8);text-shadow:0 0 8px rgba(var(--cx-hue-rgb),.6);pointer-events:none}
299
+ .cx-avatar-coords{position:absolute;left:8px;bottom:38px;font-size:var(--cx-fs-body);color:rgba(143,232,255,.65);letter-spacing:.08em;pointer-events:none}
300
+ .cx-avatar-wave{position:absolute;left:8px;bottom:10px;display:flex;gap:2px;align-items:flex-end;height:18px;pointer-events:none}
301
+ .cx-avatar-wave i{display:block;width:2px;height:4px;background:linear-gradient(180deg,#6ff7ff,var(--cx-green));animation:cxWave 1.1s ease-in-out infinite alternate;border-radius:1px}
302
+ .cx-avatar-particles{position:absolute;inset:0;pointer-events:none}
303
+ .cx-avatar-particles i{position:absolute;width:2px;height:2px;border-radius:50%;background:#7ff7ff;box-shadow:0 0 7px var(--cx-cyan);animation:cxParticle 4s ease-in-out infinite}
304
+ .cx-avatar-pulse{position:absolute;inset:18%;border:2px solid rgba(111,247,255,.8);border-radius:50%;pointer-events:none;animation:cxPulseRing .8s ease-out forwards}
305
+ @keyframes cxRingSpin{to{transform:translate(-50%,-50%) rotateX(72deg) rotateZ(360deg)}}
306
+ @keyframes cxWave{0%{height:3px;opacity:.45}100%{height:17px;opacity:1}}
307
+ @keyframes cxParticle{0%,100%{opacity:.15;transform:translateY(0)}50%{opacity:.9;transform:translateY(-8px)}}
308
+ @keyframes cxPulseRing{0%{transform:scale(.7);opacity:.9}100%{transform:scale(1.35);opacity:0}}
309
+ .cx-avatar3d-inner{position:absolute;inset:0;transform-style:preserve-3d;transition:transform .08s linear;border-radius:48% 48% 42% 42% / 32% 32% 18% 18%;overflow:hidden;box-shadow:0 18px 40px rgba(0,0,0,.55),0 0 30px rgba(var(--cx-hue-rgb),.18);border:1px solid rgba(var(--cx-hue-rgb),.35)}
310
+ .cx-avatar3d-inner img{width:100%;height:100%;object-fit:cover;object-position:50% 18%;display:block;filter:saturate(1.05) contrast(1.04)}
311
+ .cx-avatar-halo{position:absolute;inset:-6% -12% 12%;border:5px solid rgba(181,255,255,.75);border-radius:50%;filter:blur(1px) drop-shadow(0 0 16px rgba(var(--cx-hue-rgb),.6));opacity:.8;pointer-events:none}
312
+ .cx-avatar-base{position:absolute;left:10%;right:10%;bottom:-3%;height:14%;border-radius:50%;background:radial-gradient(ellipse,rgba(var(--cx-hue-rgb),.4),transparent 70%);filter:blur(5px);pointer-events:none}
313
+ .cx-avatar-scan{position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,transparent 0%,rgba(var(--cx-hue-rgb),.14) 48%,transparent 55%);animation:cxScan 6s linear infinite}
314
+ .cx-tech-portrait{position:relative;width:100%;aspect-ratio:152/194;border-radius:48% 48% 42% 42% / 32% 32% 18% 18%;overflow:hidden;border:1px solid rgba(var(--cx-hue-rgb),.35);box-shadow:0 0 34px rgba(var(--cx-hue-rgb),.28),inset 0 0 30px rgba(0,0,0,.35);background:#04121d}
315
+ .cx-tech-portrait{transform:rotateY(-7deg) rotateX(2deg) translateZ(18px);transform-style:preserve-3d;animation:cx3dFloat 6s ease-in-out infinite;box-shadow:-12px 14px 32px rgba(0,0,0,.55),0 0 34px rgba(var(--cx-hue-rgb),.28)}
316
+ .cx-tech-portrait img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 18%;filter:saturate(1.12) contrast(1.06) brightness(1.04);-webkit-mask-image:linear-gradient(180deg,#000 78%,transparent 100%);mask-image:linear-gradient(180deg,#000 78%,transparent 100%)}
317
+ .cx-portrait-halo{position:absolute;inset:-12% -22% 8%;border:6px solid rgba(181,255,255,.8);border-radius:50%;filter:blur(1px) drop-shadow(0 0 16px rgba(var(--cx-hue-rgb),.65));opacity:.85;pointer-events:none}
318
+ .cx-portrait-veil{position:absolute;inset:0;pointer-events:none;background:linear-gradient(115deg,rgba(3,14,24,.96) 0 6%,transparent 16%),linear-gradient(270deg,rgba(3,14,24,.95) 0 4%,transparent 14%),linear-gradient(0deg,rgba(3,12,20,.92) 0 5%,transparent 24%)}
319
+ .cx-portrait-scan{position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,transparent 0%,rgba(var(--cx-hue-rgb),.12) 48%,transparent 55%);animation:cxScan 6s linear infinite}
320
+ @keyframes cxScan{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}
321
+ @keyframes cx3dFloat{0%,100%{transform:rotateY(-7deg) rotateX(2deg) translateZ(18px) translateY(0)}50%{transform:rotateY(5deg) rotateX(-1deg) translateZ(24px) translateY(-7px)}}
322
+ @keyframes cxRing{0%,100%{opacity:.5;transform:translateX(-50%) rotateX(72deg) scale(.96)}50%{opacity:1;transform:translateX(-50%) rotateX(72deg) scale(1.05)}}
323
+ .cx-hero-avatar{width:clamp(120px,16vw,190px);flex:none;filter:drop-shadow(0 0 24px rgba(var(--cx-hue-rgb),.32));animation:cxFloat 5s ease-in-out infinite}
324
+ .cx-hero-avatar svg{display:block;width:100%;height:auto}
325
+ .cx-hero-copy{min-width:0;flex:1}
326
+ .cx-hero-title{text-align:left}
327
+ .cx-hero-sub{text-align:left;max-width:600px}
328
+ .cx-empty-hint{margin-top:12px;padding:7px 10px;border:1px dashed rgba(var(--cx-hue-rgb),.3);background:rgba(5,18,30,.55);color:#7fa8bb;font-size:var(--cx-fs-body);letter-spacing:.04em;border-radius:6px;display:inline-block}
329
+ .cx-anime-eyes{transform-box:fill-box;transform-origin:center;animation:cxBlink 5.5s infinite}
330
+ @keyframes cxBlink{0%,92%,100%{transform:scaleY(1)}95%{transform:scaleY(.08)}}
331
+ .cx-dash{animation:cxDash 12s linear infinite}
332
+ .cx-pulse{animation:cxPulse 3s ease-in-out infinite}
333
+ @keyframes cxDash{to{stroke-dashoffset:-120}}
334
+ @keyframes cxPulse{0%,100%{opacity:.3}50%{opacity:1}}
335
+ @keyframes cxFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}
336
+ @media(max-width:760px){.cx-hero{flex-direction:column;text-align:center;gap:8px}.cx-hero-copy{text-align:center}.cx-hero-title,.cx-hero-sub{text-align:center}.cx-hero-avatar{width:120px}.cx-tech-bg{opacity:.4}}
337
+
338
+ .cx-hero-kicker{font-size:var(--cx-fs-body);letter-spacing:.22em;color:var(--cx-cyan);margin-bottom:10px}
339
+ .cx-hero-title{font-size:clamp(22px,3.2vw,38px);line-height:1.2;font-weight:900;letter-spacing:.02em;background:linear-gradient(135deg,#eaffff,var(--cx-cyan) 55%,var(--cx-green));-webkit-background-clip:text;background-clip:text;color:transparent;text-shadow:0 0 40px rgba(var(--cx-hue-rgb),.12)}
340
+ .cx-hero-sub{font-size:var(--cx-fs);line-height:1.8;color:#8db5c8;margin-top:10px}
341
+ .cx-msg{display:flex;gap:8px;align-items:flex-start;max-width:94%;padding:9px 11px;border-radius:14px;border:1px solid rgba(30,70,92,.75);background:linear-gradient(135deg,rgba(9,28,44,.92),rgba(6,17,28,.92));box-shadow:0 8px 26px rgba(0,0,0,.18);white-space:normal}
342
+ .cx-msg.ai{border-left:2px solid var(--cx-cyan)}
343
+ .cx-msg.user{align-self:flex-end;flex-direction:row-reverse;border-color:rgba(var(--cx-green-rgb),.35);background:linear-gradient(135deg,rgba(8,38,33,.9),rgba(6,20,20,.92))}
344
+ .cx-msg-avatar{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font-size:var(--cx-fs-body);font-weight:800;flex:none;color:#041018;background:linear-gradient(135deg,var(--cx-cyan),var(--cx-green))}
345
+ .cx-msg.user .cx-msg-avatar{background:linear-gradient(135deg,var(--cx-green),#9bffd0);color:#042015}
346
+ .cx-msg-body{flex:1;min-width:0;white-space:normal;line-height:1.7}
347
+ .cx-msg.sys{max-width:none;align-self:center;border:0;background:transparent;box-shadow:none;color:var(--cx-muted);font-size:var(--cx-fs-body);padding:3px}
348
+ .cx-chat.full .cx-msg{max-width:82%}
349
+ .cx-suggest{display:grid;grid-template-columns:1fr 1fr;gap:7px;max-width:1080px;width:100%;margin:8px auto 0;padding:0 10px}
350
+ .cx-suggest button{text-align:left;padding:10px 11px;border:1px solid rgba(30,70,92,.8);background:linear-gradient(135deg,rgba(10,32,49,.8),rgba(7,19,31,.8));color:#c9edf8;font:var(--cx-fs)/1.5 var(--cx-font);cursor:pointer;border-radius:10px;transition:.15s}
351
+ .cx-suggest button:hover{border-color:var(--cx-cyan);color:var(--cx-cyan);transform:translateY(-1px);box-shadow:0 8px 22px rgba(var(--cx-hue-rgb),.1)}
352
+ .cx-chat.full .cx-chat-i{background:rgba(5,15,25,.9);border:1px solid rgba(var(--cx-hue-rgb),.28);border-radius:14px;padding:7px;margin-top:8px;box-shadow:0 0 30px rgba(var(--cx-hue-rgb),.08)}
353
+ .cx-chat.full .cx-chat-i .cx-input{height:38px;font-size:var(--cx-fs);border:0;background:transparent}
354
+ .cx-chat.full .cx-chat-i .cx-btn{padding:9px 16px}
355
+ .cx-compose{width:calc(100% - 36px);max-width:1080px;margin:8px auto 18px;border:1px solid rgba(var(--cx-hue-rgb),.28);border-radius:16px;background:rgba(5,15,25,.92);box-shadow:0 0 32px rgba(var(--cx-hue-rgb),.08),inset 0 0 20px rgba(var(--cx-hue-rgb),.03);flex:none;position:relative}
356
+ .cx-compose-input{display:block;width:100%;min-height:84px;box-sizing:border-box;resize:none;border:0;outline:none;background:transparent;color:#dff8ff;font:13px/1.65 var(--cx-font);padding:12px 14px 4px}
357
+ .cx-compose-input::placeholder{color:#557a8d}
358
+ .cx-compose-tools{display:flex;align-items:center;gap:5px;padding:6px 8px;min-height:44px;overflow:visible}
359
+ .cx-compose-plus{width:32px;height:32px;border-radius:50%;border:1px solid var(--cx-line2);background:rgba(8,25,40,.9);color:var(--cx-cyan);font:var(--cx-fs-title)/30px var(--cx-font);cursor:pointer;flex:none;padding:0}
360
+ .cx-compose-plus:hover{border-color:var(--cx-cyan);box-shadow:0 0 12px rgba(var(--cx-hue-rgb),.2)}
361
+ .cx-compose .cx-sel{flex:0 1 auto;width:auto;min-width:0;max-width:220px}
362
+ .cx-compose .cx-sel-btn{height:32px;box-sizing:border-box;width:auto;min-width:62px;max-width:220px;padding:0 8px;border-color:rgba(30,70,92,.7);background:rgba(7,20,32,.55);display:flex;align-items:center;justify-content:space-between;gap:7px}
363
+
364
+ .cx-compose .cx-sel-btn .v{font-size:var(--cx-fs-body);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
365
+ .cx-compose .cx-sel-btn .v.ph{color:var(--cx-cyan);letter-spacing:.1em;font-weight:700}
366
+ .cx-compose .cx-sel-btn .a{font-size:var(--cx-fs-body);text-align:right}
367
+ .cx-compose .cx-sel-menu{bottom:100%;top:auto;margin-top:0;margin-bottom:6px;max-height:230px;left:0;right:auto;min-width:180px}
368
+ .cx-compose-right{display:flex;align-items:center;gap:5px;margin-left:auto;min-width:0}
369
+ .cx-compose-send{width:32px;height:32px;border-radius:50%;border:0;background:linear-gradient(135deg,var(--cx-cyan),var(--cx-green));color:#041018;font:800 var(--cx-fs-title)/30px var(--cx-font);cursor:pointer;flex:none;box-shadow:0 0 14px rgba(var(--cx-hue-rgb),.25)}
370
+ .cx-compose-send:disabled{opacity:.4;box-shadow:none}
371
+ .cx-compose-files{display:flex;gap:4px;flex-wrap:wrap;padding:8px 10px 0}
372
+ .cx-tag-x{border:0;background:transparent;color:var(--cx-muted);cursor:pointer;padding:0 0 0 3px;font-size:var(--cx-fs-body)}
373
+ .cx-tag-x:hover{color:var(--cx-red)}
374
+ .cx-chat.full .cx-compose{max-width:1080px;margin-top:10px}
375
+ .cx-hint{display:flex;align-items:center;gap:8px;max-width:1080px;width:100%;margin:8px auto 0;padding:0 4px;box-sizing:border-box}
376
+ .cx-hint-text{flex:1;min-width:0;font-size:var(--cx-fs-body);line-height:1.5;color:#7fa8bb;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
377
+ .cx-hint-more{border:0;background:transparent;color:var(--cx-cyan);font:var(--cx-fs-body)/1 var(--cx-font);cursor:pointer;padding:4px 2px;flex:none}
378
+ .cx-hint-more:hover{text-decoration:underline}
379
+ .cx-hint-panel{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;max-width:1080px;width:100%;margin:6px auto 0;padding:0 4px;box-sizing:border-box}
380
+ .cx-hint-card{text-align:left;border:1px solid rgba(30,70,92,.8);background:rgba(7,20,32,.75);padding:9px 10px;cursor:pointer;color:var(--cx-text);font-family:var(--cx-font);border-radius:8px}
381
+ .cx-hint-card:hover,.cx-hint-card.on{border-color:var(--cx-cyan);background:rgba(10,35,52,.9)}
382
+ .cx-hint-card .ht{font-size:var(--cx-fs-body);letter-spacing:.1em;color:var(--cx-cyan);font-weight:700;margin-bottom:4px}
383
+ .cx-hint-card .hd{font-size:var(--cx-fs-body);line-height:1.6;color:#8fb3c4}
384
+ @media(max-width:760px){.cx-hint-panel{grid-template-columns:1fr}.cx-hint-text{white-space:normal}}
385
+ .cx-chat.full .cx-chat-h{width:100%;max-width:none;margin:0;padding:12px 18px}
386
+ .cx-taskmap{position:relative;margin-top:8px;border:1px solid rgba(30,70,92,.7);background:rgba(4,13,22,.94);padding:6px;border-radius:6px;z-index:2}
387
+ .cx-taskmap-actions{display:flex;gap:3px;margin-left:auto}
388
+ .cx-taskmap-actions button{border:1px solid var(--cx-border);background:var(--cx-surface-2);color:var(--cx-text);font:var(--cx-fs)/1 var(--cx-font);width:22px;height:22px;padding:0;cursor:pointer;border-radius:3px}
389
+ .cx-taskmap-actions button:hover{color:var(--cx-accent);border-color:var(--cx-accent)}
390
+ .cx-taskmap-loading{position:absolute;inset:0;display:grid;place-items:center;background:var(--cx-surface-2);color:var(--cx-text-dim);font-size:var(--cx-fs-body);z-index:500;pointer-events:none}
391
+ .cx-taskmap-leaflet{position:relative}
392
+ .cx-taskmap-h{display:flex;justify-content:space-between;font-size:var(--cx-fs-body);color:var(--cx-cyan);letter-spacing:.08em;padding:2px 2px 5px}
393
+ .cx-taskmap-leaflet{display:block;width:100%;height:180px;border:1px solid rgba(var(--cx-hue-rgb),.2);border-radius:3px;overflow:hidden;background:#04121d}
394
+ .cx-taskmap-leaflet .leaflet-container{width:100%;height:100%;background:#04121d;font-family:var(--cx-font)}
395
+ .cx-taskmap-leaflet .leaflet-tile{filter:invert(1) hue-rotate(180deg) brightness(.72) contrast(1.18) saturate(.65)}
396
+ .cx-taskmap-leaflet .leaflet-control-attribution{font-size:var(--cx-fs-body)!important;background:rgba(2,8,14,.55)!important;color:#6f97a9!important}
397
+ .cx-taskmap-leaflet .leaflet-control-attribution a{color:#6f97a9!important}
398
+ .cx-mapsec{position:relative;z-index:2;margin-top:8px;background:var(--cx-surface-2);border:1px solid var(--cx-border);border-radius:6px;padding:0 2px 2px}
399
+ .cx-mapsec .cx-taskmap{position:relative;bottom:auto;margin-top:0;border:0;background:transparent;padding:6px}
400
+ .cx-mapsec.folded{margin-top:auto;background:var(--cx-surface-1);border-color:var(--cx-border);padding:0 2px;box-shadow:0 -6px 18px rgba(0,0,0,.25)}
401
+ .cx-mapsec.folded .cx-pm-h{padding:6px 4px}
402
+ .cx-mapsec .cx-taskmap-h>span:first-child{display:none}
403
+ .cx-ico{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:6px;flex:none;background:rgba(255,255,255,.05)}
404
+ .cx-ico svg{width:15px;height:15px}
405
+ .cx-ico-target{color:#ffb454;background:rgba(255,180,84,.14)}
406
+ .cx-ico-plan{color:#7be0ff;background:rgba(123,224,255,.14)}
407
+ .cx-ico-task{color:#b49cff;background:rgba(180,156,255,.14)}
408
+ .cx-ico-report{color:#ff9f6e;background:rgba(255,159,110,.14)}
409
+ .cx-ico-feedback{color:#6ef7b0;background:rgba(110,247,176,.14)}
410
+ .cx-ico-clock{color:#7be0ff;background:rgba(123,224,255,.14)}
411
+ .cx-ico-map{color:var(--cx-green);background:rgba(var(--cx-green-rgb),.14)}
412
+ .cx-shell[data-theme="light"] .cx-ico-target{color:#8a5200;background:#fbe7c6}
413
+ .cx-shell[data-theme="light"] .cx-ico-plan{color:#0a5f7d;background:#d8f0fa}
414
+ .cx-shell[data-theme="light"] .cx-ico-task{color:#4f3596;background:#e6dcfb}
415
+ .cx-shell[data-theme="light"] .cx-ico-report{color:#94400e;background:#fbdfd0}
416
+ .cx-shell[data-theme="light"] .cx-ico-feedback{color:#086b40;background:#d5f5e4}
417
+ .cx-shell[data-theme="light"] .cx-ico-clock{color:#0a5f7d;background:#d8f0fa}
418
+ .cx-shell[data-theme="light"] .cx-ico-map{color:#086b40;background:#d5f5e4}
419
+
420
+ .cx-shell[data-theme="light"] .cx-mapsec{background:#fff;border-color:#c9dde8}
421
+
422
+ .cx-map-popup .leaflet-popup-content-wrapper{background:#071522;color:#dff8ff;border:1px solid var(--cx-cyan);border-radius:3px;font-size:var(--cx-fs-body)}
423
+ .cx-map-popup .leaflet-popup-tip{background:#071522}
424
+ .cx-map-label{font-size:var(--cx-fs-body);fill:rgba(98,180,205,.7);letter-spacing:.14em}
425
+ .cx-map-dot{fill:#6b8a9c;stroke:#04121d;stroke-width:1;cursor:pointer}
426
+ .cx-map-dot.process{fill:#ffd166}.cx-map-dot.finished{fill:var(--cx-green)}.cx-map-dot.canceled{fill:#ff5c7a}.cx-map-dot.on{stroke:#fff;stroke-width:1.5;filter:drop-shadow(0 0 5px var(--cx-cyan))}
427
+ .cx-taskmap-legend{display:flex;gap:8px;padding:5px 2px 1px;font-size:var(--cx-fs-body);color:var(--cx-muted)}
428
+ .cx-taskmap-legend .lc:before{content:"";display:inline-block;width:5px;height:5px;border-radius:50%;margin-right:3px;background:#6b8a9c}
429
+ .cx-taskmap-legend .lc.process:before{background:#ffd166}.cx-taskmap-legend .lc.finished:before{background:var(--cx-green)}
430
+ .cx-cal{border:1px solid rgba(30,70,92,.65);background:rgba(5,15,25,.75);padding:7px;margin-bottom:8px}
431
+ .cx-cal-h{display:flex;align-items:center;justify-content:space-between;font-size:var(--cx-fs-body);color:var(--cx-cyan);padding:2px 2px 5px}
432
+ .cx-cal-h button{border:0;background:transparent;color:var(--cx-muted);font:var(--cx-fs) var(--cx-font);cursor:pointer;padding:0 4px}
433
+ .cx-cal-w,.cx-cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
434
+ .cx-cal-w span{text-align:center;font-size:var(--cx-fs-body);color:var(--cx-muted);padding:2px 0}
435
+ .cx-cal-grid>span{height:42px}
436
+ .cx-cal-day{position:relative;height:42px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;border:1px solid transparent;background:transparent;color:#a9cad8;font:var(--cx-fs-body) var(--cx-font);cursor:pointer;border-radius:3px;padding:0}
437
+ .cx-cal-day:hover{border-color:rgba(var(--cx-hue-rgb),.35)}
438
+ .cx-cal-day.on{background:rgba(var(--cx-hue-rgb),.18);border-color:var(--cx-cyan);color:#eaffff}
439
+ .cx-cal-day .n{position:absolute;top:1px;right:2px;font-size:calc(var(--cx-fs-body) - 1px);color:var(--cx-green)}
440
+ .cx-cal-day .d{position:static;line-height:1.1}
441
+ .cx-cal-day .l{display:block;margin-top:2px;font-size:calc(var(--cx-fs-body) - 1.5px);line-height:1.1;color:var(--cx-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
442
+ .cx-cal-day .l.accent{color:var(--cx-cyan)}
443
+ .cx-cal-lunar{text-align:center;font-size:var(--cx-fs-body);color:var(--cx-muted);padding:5px 0 2px;letter-spacing:.04em}
444
+ .cx-cal-f{display:flex;justify-content:space-between;align-items:center;font-size:var(--cx-fs-body);color:var(--cx-muted);padding-top:5px}
445
+ .cx-cal-f button{border:0;background:transparent;color:var(--cx-cyan);font:var(--cx-fs-body) var(--cx-font);cursor:pointer}
446
+ .cx-chat-body{display:flex;flex:1;min-height:0;width:100%;overflow:hidden}
447
+ .cx-chat-center{display:flex;flex-direction:column;flex:1;min-width:0;min-height:0}
448
+ .cx-chat-center{position:relative}
449
+ .cx-webstatus{display:flex;align-items:center;gap:8px;margin:0 12px 6px;padding:6px 10px;border:1px solid var(--cx-border);border-radius:6px;background:var(--cx-surface-2);color:var(--cx-text-dim);font:var(--cx-fs-body) var(--cx-mono);cursor:pointer;flex:none}
450
+ .cx-webstatus:hover{border-color:var(--cx-accent);color:var(--cx-accent)}
451
+ .cx-webstatus .dot{width:6px;height:6px;border-radius:50%;background:var(--cx-green);flex:none}
452
+ .cx-webstatus .dot.busy{background:var(--cx-orange);animation:cx-blink 1s steps(2) infinite}
453
+ .cx-webstatus .arr{margin-left:auto;opacity:.7}.cx-webstatus-body{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
454
+ .cx-webstatus .meta{display:flex;gap:10px;color:var(--cx-text-dim);font-size:var(--cx-fs-body);flex-wrap:wrap}
455
+ .cx-webstatus .sum{font-size:var(--cx-fs-body);color:var(--cx-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
456
+ .cx-webpop{position:absolute;right:14px;bottom:132px;width:min(580px,88%);max-height:46%;display:flex;flex-direction:column;border:1px solid var(--cx-border-strong);border-radius:8px;background:var(--cx-surface-1);box-shadow:0 18px 50px rgba(0,0,0,.45);z-index:40;overflow:hidden}
457
+ .cx-webpop .h{display:flex;justify-content:space-between;align-items:center;padding:8px 10px;border-bottom:1px solid var(--cx-border);font:var(--cx-fs-body) var(--cx-mono);letter-spacing:.08em;color:var(--cx-accent);flex:none}
458
+ .cx-webpop .h button{border:0;background:transparent;color:var(--cx-text-dim);cursor:pointer;font-size:var(--cx-fs)}
459
+ .cx-webpop .b{padding:10px 12px;overflow:auto;font-size:var(--cx-fs);line-height:1.7;color:var(--cx-text)}
460
+ .cx-chat-tabs{display:flex;align-items:center;gap:4px;padding:6px 18px;border-bottom:1px solid var(--cx-border);background:var(--cx-surface-2);overflow-x:auto;flex:none}
461
+ .cx-chat-tab{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border:1px solid transparent;border-radius:4px;background:transparent;color:var(--cx-text-dim);font:var(--cx-fs-body) var(--cx-mono);cursor:pointer;white-space:nowrap}
462
+ .cx-chat-tab.on{color:var(--cx-accent);border-color:var(--cx-border-strong);background:var(--cx-accent-soft)}
463
+ .cx-chat-tab .nm{max-width:160px;overflow:hidden;text-overflow:ellipsis}
464
+ .cx-chat-tab .x{border:0;background:transparent;color:inherit;cursor:pointer;font-size:var(--cx-fs-body);margin-left:2px;padding:0}
465
+ .cx-addrbar{display:flex;align-items:center;gap:6px;padding:6px 18px;border-bottom:1px solid var(--cx-border);background:var(--cx-surface-1);flex:none}
466
+ .cx-addrbar .nav{width:24px;height:24px;border:1px solid var(--cx-border);border-radius:5px;background:var(--cx-surface-2);color:var(--cx-text-dim);cursor:pointer;font-size:var(--cx-fs);line-height:1;padding:0}
467
+ .cx-addrbar .nav:hover:not(:disabled){color:var(--cx-accent);border-color:var(--cx-accent)}
468
+ .cx-addrbar .nav:disabled{opacity:.35;cursor:default}
469
+ .cx-addr-input{flex:1;min-width:0;height:26px;padding:0 10px;border:1px solid var(--cx-border);border-radius:6px;background:var(--cx-surface-2);color:var(--cx-text);font:var(--cx-fs) var(--cx-mono)}
470
+ .cx-addr-input:focus{outline:none;border-color:var(--cx-accent)}
471
+ .cx-chat.webmax .cx-pm-side,.cx-chat.webmax .cx-compose,.cx-chat.webmax .cx-hint{display:none}
472
+
473
+ .cx-chat-webframes{flex:1;min-height:0;position:relative;display:flex}
474
+ .cx-chat-webframes iframe{flex:1;width:100%;height:100%;border:0;background:var(--cx-surface-1)}
475
+
476
+ .cx-pm-side{width:280px;flex:none;overflow:auto;border-right:1px solid rgba(30,70,92,.65);background:rgba(4,13,22,.86);padding:9px;display:flex;flex-direction:column}
477
+ .cx-pm-side>*{flex:none}
478
+ .cx-pm-side.right{border-right:0;border-left:1px solid rgba(30,70,92,.65);width:300px}
479
+ .cx-pm-titleline{display:flex;align-items:center;gap:5px;min-width:0;flex:1;flex-wrap:wrap}
480
+ .cx-pm-count{display:inline-grid;place-items:center;min-width:0;height:auto;padding:0;border:0;border-radius:0;color:var(--cx-cyan);font-size:var(--cx-fs-body);background:transparent}
481
+ .cx-filter{position:relative;flex:none}
482
+ .cx-filter-btn{height:26px;border:1px solid var(--cx-border);background:var(--cx-surface-2);color:var(--cx-text-dim);font:var(--cx-fs-body)/1 var(--cx-font);padding:0 7px;cursor:pointer;border-radius:4px;display:inline-flex;align-items:center;gap:4px}
483
+ .cx-filter-btn.on{color:var(--cx-cyan);border-color:var(--cx-cyan)}
484
+ .cx-filter-menu{position:absolute;left:0;right:auto;top:100%;z-index:450;margin-top:4px;min-width:190px;white-space:nowrap;padding:4px;border:1px solid var(--cx-cyan);background:#071522;box-shadow:0 10px 26px rgba(0,0,0,.5)}
485
+ .cx-filter-item{display:flex;gap:5px;align-items:center;width:100%;border:0;background:transparent;color:var(--cx-text);font:var(--cx-fs-body)/1.6 var(--cx-font);padding:4px 6px;cursor:pointer;text-align:left;white-space:nowrap}
486
+ .cx-filter-menu.right{left:auto;right:0}
487
+ .cx-filter-item:hover,.cx-filter-item.on{background:rgba(var(--cx-hue-rgb),.1);color:var(--cx-cyan)}
488
+ .cx-filter-clear{width:100%;border:0;border-top:1px solid rgba(30,70,92,.6);background:transparent;color:var(--cx-muted);font:var(--cx-fs-body) var(--cx-font);padding:5px;cursor:pointer}
489
+ .cx-filter-clear:hover{color:var(--cx-red)}
490
+ .cx-filter.inline{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
491
+ .cx-filter-label{font-size:var(--cx-fs-body);letter-spacing:.08em;color:var(--cx-text-faint);flex:none}
492
+ .cx-filter-chip{font:var(--cx-fs-body)/1 var(--cx-font);padding:4px 8px;border:1px solid var(--cx-border);border-radius:999px;background:transparent;color:var(--cx-text-dim);cursor:pointer;white-space:nowrap}
493
+ .cx-filter-chip:hover{border-color:var(--cx-accent);color:var(--cx-accent)}
494
+ .cx-filter-chip.on{background:color-mix(in srgb,var(--cx-accent) 14%,transparent);border-color:var(--cx-accent);color:var(--cx-accent)}
495
+
496
+ .cx-pm-h{display:flex;align-items:center;justify-content:space-between;gap:4px;padding:6px 8px;min-height:28px;font-size:var(--cx-fs);flex-wrap:wrap;letter-spacing:.12em;color:var(--cx-cyan);text-transform:uppercase;background:linear-gradient(90deg,color-mix(in srgb,var(--cx-cyan) 13%,transparent),color-mix(in srgb,var(--cx-cyan) 4%,transparent) 72%,transparent);border-left:2px solid color-mix(in srgb,var(--cx-cyan) 55%,transparent);border-radius:5px}
497
+ .cx-pm-h{border-radius:4px;cursor:pointer;transition:background .12s ease}
498
+ .cx-pm-h:hover{background:color-mix(in srgb,var(--cx-accent) 20%,transparent)}
499
+ .cx-shell[data-theme="light"] .cx-pm-h{background:linear-gradient(90deg,#e2f3fa,#f2fafd 70%,transparent);border-left-color:#7cc7de}
500
+ .cx-shell[data-theme="light"] .cx-pm-h:hover{background:#cfeaf5}
501
+ .cx-pm-ops{display:flex;align-items:center;gap:2px;margin-left:auto;flex:none}
502
+ .cx-pm-tools{display:flex;align-items:center;gap:4px;padding:0 3px 6px;flex-wrap:wrap}
503
+
504
+ .cx-pm-op{display:inline-grid;place-items:center;width:22px;height:22px;padding:0;border:1px solid transparent;background:transparent;color:var(--cx-cyan);font:var(--cx-fs-title)/1 var(--cx-font);cursor:pointer;border-radius:3px}
505
+ .cx-pm-op:hover{color:var(--cx-cyan);border-color:rgba(var(--cx-hue-rgb),.35);background:rgba(var(--cx-hue-rgb),.08)}
506
+ .cx-pm-refresh:hover{color:var(--cx-cyan);border-color:rgba(var(--cx-hue-rgb),.35);background:rgba(var(--cx-hue-rgb),.08)}
507
+ .cx-pm-op.danger:hover{color:var(--cx-red);border-color:rgba(255,92,122,.4);background:rgba(255,92,122,.08)}
508
+ .cx-pm-refresh{display:inline-grid;place-items:center;width:22px;height:22px;padding:0;border:1px solid transparent;background:transparent;color:var(--cx-muted);font:var(--cx-fs-title)/1 var(--cx-font);cursor:pointer;border-radius:3px}
509
+ .cx-pm-count{color:var(--cx-muted);font-size:var(--cx-fs-body);border:0;background:transparent}
510
+ .cx-pm-item{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;text-align:left;border:1px solid transparent;border-left:2px solid transparent;background:transparent;color:#b9dbe8;padding:6px 6px;cursor:pointer;border-radius:5px}
511
+ .cx-pm-item:hover{background:rgba(var(--cx-hue-rgb),.06)}
512
+ .cx-pm-item.on{background:rgba(var(--cx-hue-rgb),.1);border-left-color:var(--cx-cyan);color:#eaffff}
513
+ .cx-pm-item .t{font-size:var(--cx-fs-body);line-height:1.35;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
514
+ .cx-pm-item .s{font-size:var(--cx-fs-body);color:var(--cx-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
515
+ .cx-pm-topright{display:flex;align-items:center;gap:4px;flex:none}
516
+ .cx-pm-type{padding:2px 5px;border:1px solid currentColor;border-radius:3px;font-size:var(--cx-fs-body);font-weight:800;letter-spacing:.08em;line-height:1.3}
517
+ .cx-pm-type.type-target{color:#ffd166}
518
+ .cx-pm-type.type-plan{color:#7be0ff}
519
+ .cx-pm-type.type-task{color:#b49cff}
520
+ .cx-pm-type.type-report{color:#ff9f6e}
521
+ .cx-pm-type.type-feedback{color:#6ef7b0}
522
+ .cx-pm-status{padding:2px 5px;border:1px solid transparent;border-radius:3px;font-size:var(--cx-fs-body);line-height:1.3;letter-spacing:.04em}
523
+ .cx-pm-status.status-created{color:#8fa8b8;border-color:#355064;background:rgba(80,110,130,.12)}
524
+ .cx-pm-status.status-submited{color:#c39cff;border-color:#6d4a9b;background:rgba(120,80,180,.15)}
525
+ .cx-pm-status.status-approved{color:#7bd4ff;border-color:#2b6f92;background:rgba(50,140,180,.15)}
526
+ .cx-pm-status.status-process{color:#ffd166;border-color:#8a6a2a;background:rgba(180,130,40,.15)}
527
+ .cx-pm-status.status-finished,.cx-pm-status.status-canFinish{color:#6ef7b0;border-color:#2f8060;background:rgba(40,160,110,.15)}
528
+ .cx-pm-status.status-canceled,.cx-pm-status.status-rejected,.cx-pm-status.status-shouldImprove{color:#ff8fa3;border-color:#8a3d4d;background:rgba(180,60,80,.15)}
529
+ .cx-pm-status.status-target,.cx-pm-status.status-report{color:#7be0ff;border-color:#2b6f92;background:rgba(50,140,180,.12)}
530
+ .cx-fold{width:16px;height:16px;line-height:1;padding:0;border:0;background:transparent;color:var(--cx-text-faint);cursor:pointer;flex:none;font-size:var(--cx-fs-body)}
531
+ .cx-fold:hover{color:var(--cx-accent)}
532
+ .cx-shell[data-theme="light"] .cx-pm-type.type-target{color:#8a5200}
533
+ .cx-shell[data-theme="light"] .cx-pm-type.type-plan{color:#0a5f7d}
534
+ .cx-shell[data-theme="light"] .cx-pm-type.type-task{color:#4f3596}
535
+ .cx-shell[data-theme="light"] .cx-pm-type.type-report{color:#94400e}
536
+ .cx-shell[data-theme="light"] .cx-pm-type.type-feedback{color:#086b40}
537
+ .cx-shell[data-theme="light"] .cx-pm-status{font-weight:700}
538
+ .cx-shell[data-theme="light"] .cx-pm-status.status-created{color:#3a5160;border-color:#8aa9b8;background:#eef5f9}
539
+ .cx-shell[data-theme="light"] .cx-pm-status.status-submited{color:#523496;border-color:#9b7fd0;background:#f3eefc}
540
+ .cx-shell[data-theme="light"] .cx-pm-status.status-approved{color:#0a5f7d;border-color:#5aa6c4;background:#eaf6fb}
541
+ .cx-shell[data-theme="light"] .cx-pm-status.status-process{color:#7a5000;border-color:#c49a3a;background:#fdf5e3}
542
+ .cx-shell[data-theme="light"] .cx-pm-status.status-finished,.cx-shell[data-theme="light"] .cx-pm-status.status-canFinish{color:#08663f;border-color:#4fae85;background:#e9f8f0}
543
+ .cx-shell[data-theme="light"] .cx-pm-status.status-canceled,.cx-shell[data-theme="light"] .cx-pm-status.status-rejected,.cx-shell[data-theme="light"] .cx-pm-status.status-shouldImprove{color:#a02034;border-color:#cf7f8e;background:#fdeef1}
544
+ .cx-shell[data-theme="light"] .cx-pm-status.status-target,.cx-shell[data-theme="light"] .cx-pm-status.status-report{color:#0a5f7d;border-color:#5aa6c4;background:#eaf6fb}
545
+ .cx-pm-card .cx-menu-wrap .cx-btn.xs{width:22px;height:22px;padding:0;font-size:var(--cx-fs);line-height:1}
546
+ .cx-menu-item.danger{color:#ff8fa3}
547
+ .cx-menu-item.danger:hover{background:rgba(255,92,122,.15);color:#ff5c7a}
548
+ .cx-pm-card{position:relative;display:flex;flex-direction:column;gap:4px;width:100%;text-align:left;border:1px solid rgba(30,70,92,.55);border-left:2px solid transparent;background:rgba(7,20,32,.55);color:#b9dbe8;padding:8px 9px;margin-bottom:5px;cursor:pointer;border-radius:6px}
549
+ .cx-pm-card:hover{background:rgba(var(--cx-hue-rgb),.06);border-color:rgba(var(--cx-hue-rgb),.35)}
550
+ .cx-pm-card.on{background:rgba(var(--cx-hue-rgb),.1);border-left-color:var(--cx-cyan);border-color:rgba(var(--cx-hue-rgb),.45)}
551
+ .cx-pm-card-top{display:flex;align-items:center;justify-content:space-between;gap:6px}
552
+ .cx-pm-type{font-size:var(--cx-fs-body);font-weight:800;letter-spacing:.08em;color:var(--cx-cyan)}
553
+ .cx-pm-status{font-size:var(--cx-fs-body);color:var(--cx-green);text-transform:uppercase;letter-spacing:.06em}
554
+ .cx-pm-title{font-size:var(--cx-fs);line-height:1.4;font-weight:700;color:#eaffff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
555
+ .cx-pm-meta{font-size:var(--cx-fs-body);line-height:1.45;color:#6f97a9;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
556
+ .cx-pm-card-actions{display:flex;align-items:center;justify-content:flex-end;gap:4px;flex-wrap:wrap;margin-top:2px}
557
+ .cx-pm-card-actions .cx-menu-wrap{margin-left:auto}
558
+ .cx-pm-act{border:1px solid rgba(30,70,92,.75);background:rgba(5,16,26,.75);color:#8fb3c4;font:var(--cx-fs-body)/1.2 var(--cx-font);padding:3px 5px;border-radius:3px;cursor:pointer}
559
+ .cx-pm-act:hover{border-color:var(--cx-cyan);color:var(--cx-cyan)}
560
+ .cx-pm-act.danger:hover{border-color:var(--cx-red);color:var(--cx-red)}
561
+ .cx-pm-empty{font-size:var(--cx-fs-body);color:#4f7a8c;padding:5px 4px;line-height:1.5}
562
+ .cx-gate{margin:20px auto;max-width:520px;padding:16px;border:1px solid rgba(var(--cx-hue-rgb),.3);background:rgba(7,24,38,.85);text-align:center;border-radius:10px}
563
+ .cx-gate-t{font-size:var(--cx-fs);font-weight:800;color:#eaffff;margin-bottom:6px}
564
+ .cx-gate-d{font-size:var(--cx-fs-body);line-height:1.7;color:#8fb3c4;margin-bottom:12px}
565
+ .cx-gate-actions{display:flex;gap:6px;justify-content:center;flex-wrap:wrap}
566
+ @media(max-width:760px){.cx-pm-side{display:none}}
567
+
568
+ .cx-msg-main{flex:1;min-width:0;width:100%;display:flex;flex-direction:column;align-items:stretch;gap:2px}
569
+ /* 宿主/旧样式可能把消息主体变成横向 flex;列向是唯一合法布局,必须压住。 */
570
+ .cx-shell .cx-msg .cx-msg-main{display:flex!important;flex-direction:column!important;align-items:stretch!important;width:100%!important}
571
+ .cx-shell .cx-msg .cx-msg-body{width:100%!important;min-width:0}
572
+ .cx-msg-meta{display:flex;align-items:center;gap:8px;width:100%;font-size:var(--cx-fs-body);letter-spacing:.1em;color:var(--cx-muted);margin-bottom:4px}
573
+ .cx-msg-copy{margin-left:auto;border:0;background:transparent;color:var(--cx-muted);font:var(--cx-fs-body)/1 var(--cx-font);cursor:pointer;letter-spacing:.08em}
574
+ .cx-msg-copy:hover{color:var(--cx-cyan)}
575
+ .cx-msg-metrics{color:var(--cx-text-faint);font-size:var(--cx-fs-body);letter-spacing:.04em}
576
+ .cx-msg-body{width:100%;min-width:0;font-size:var(--cx-fs);line-height:1.75;color:#d9f4ff;overflow-wrap:anywhere}
577
+ .cx-msg.user .cx-msg-body{color:#e9fff8}
578
+ .cx-md-p{margin:2px 0}
579
+ .cx-md-h{font-weight:800;color:#eaffff;margin:8px 0 3px;font-size:var(--cx-fs)}
580
+ .cx-md-h.h1{font-size:var(--cx-fs-title)}.cx-md-h.h2{font-size:var(--cx-fs-title)}.cx-md-h.h3{font-size:var(--cx-fs)}
581
+ .cx-md-list{margin:4px 0 4px 16px;padding:0}
582
+ .cx-md-list li{margin:2px 0}
583
+ .cx-md-quote{margin:5px 0;padding:4px 8px;border-left:2px solid var(--cx-cyan);background:rgba(var(--cx-hue-rgb),.06);color:#9fc8d8}
584
+ .cx-md-inline{font-family:var(--cx-mono);font-size:var(--cx-fs-body);color:var(--cx-green);background:rgba(var(--cx-green-rgb),.08);padding:1px 4px;border-radius:3px}
585
+ .cx-md-a{color:var(--cx-cyan);text-decoration:underline}
586
+ .cx-md-codebox{margin:6px 0;border:1px solid rgba(30,70,92,.8);border-radius:6px;overflow:hidden;background:#030b12}
587
+ .cx-md-codebar{display:flex;align-items:center;justify-content:space-between;padding:4px 7px;border-bottom:1px solid rgba(30,70,92,.7);font-size:var(--cx-fs-body);color:var(--cx-muted);letter-spacing:.08em}
588
+ .cx-md-codebar button{border:0;background:transparent;color:var(--cx-muted);cursor:pointer;font:var(--cx-fs-body) var(--cx-font)}
589
+ .cx-md-codebar button:hover{color:var(--cx-cyan)}
590
+ .cx-md-code{margin:0;padding:8px 10px;overflow:auto;font:var(--cx-fs-body)/1.65 var(--cx-mono);color:#bfe9f8}
591
+ .cx-sysline{display:flex;align-items:center;justify-content:center;gap:6px;font-size:var(--cx-fs-body);letter-spacing:.12em;color:#4f7a8c;text-transform:uppercase}
592
+ .cx-sysdot{width:4px;height:4px;border-radius:50%;background:var(--cx-cyan);box-shadow:0 0 8px var(--cx-cyan)}
593
+ .cx-chat-typing{width:calc(100% - 36px);max-width:1080px;box-sizing:border-box;margin:0 auto;font-size:var(--cx-fs-body);color:var(--cx-cyan);letter-spacing:.1em;padding:4px 14px 2px}
594
+ @media(max-width:1250px){.cx-body{grid-template-columns:1fr 1fr;overflow:auto}.cx-panel{min-height:260px}.cx-shell{overflow:auto}}
595
+ @media(max-width:1000px){.cx-chat{width:calc(100vw - 12px);right:6px;bottom:6px;height:calc(100vh - 20px)}.cx-compose{max-width:none}.cx-compose-tools{display:flex;flex-wrap:wrap}.cx-compose .cx-sel{flex:0 1 auto;max-width:calc(50% - 18px)}.cx-compose .cx-sel-btn{max-width:100%}.cx-compose-right{margin-left:auto;flex-wrap:wrap;justify-content:flex-end}.cx-body{grid-template-columns:1fr;overflow:auto}.cx-panel{min-height:240px}.cx-shell{overflow:auto}.cx-log{min-height:110px}}
596
+ @media(max-width:760px){.cx-compose-tools{gap:4px}.cx-compose .cx-sel{flex:1 1 calc(33% - 14px);max-width:none}.cx-compose-right{flex:1 1 100%;margin-left:0;justify-content:flex-end;order:5}.cx-compose .cx-sel-btn{max-width:100%}}
597
+
598
+ /* light theme, follows system via data-theme */
599
+ .cx-shell[data-theme="light"]{--cx-bg:#eef6fb;--cx-panel:#ffffff;--cx-panel2:#f3f9fd;--cx-line:#c7dbe7;--cx-line2:#a8c9da;--cx-cyan:#0b7f9f;--cx-cyan2:#09677f;--cx-green:#07845a;--cx-orange:#a96700;--cx-red:#c73550;--cx-text:#183440;--cx-muted:#5e7d8e;color-scheme:light;background:radial-gradient(1000px 500px at 10% -10%,rgba(62,181,210,.14),transparent 55%),linear-gradient(180deg,#f4fbfe,#e9f3f9)}
600
+ .cx-shell[data-theme="light"] .cx-header{background:linear-gradient(180deg,rgba(255,255,255,.98),rgba(242,249,253,.96));border-bottom-color:var(--cx-line)}
601
+ .cx-shell[data-theme="light"] .cx-title,.cx-shell[data-theme="light"] .cx-name{color:#102f3d}
602
+ .cx-shell[data-theme="light"] .cx-panel{background:#fff;box-shadow:0 4px 18px rgba(31,73,94,.06)}
603
+ .cx-shell[data-theme="light"] .cx-ph,.cx-shell[data-theme="light"] .cx-tools{background:#f3f9fc;border-color:var(--cx-line)}
604
+ .cx-shell[data-theme="light"] .cx-ph .ttl{color:#123846}
605
+ .cx-shell[data-theme="light"] .cx-node,.cx-shell[data-theme="light"] .cx-space,.cx-shell[data-theme="light"] .cx-app{background:#f8fcfd;border-color:#d5e6ee}
606
+ .cx-shell[data-theme="light"] .cx-node:hover,.cx-shell[data-theme="light"] .cx-space:hover,.cx-shell[data-theme="light"] .cx-app:hover{background:#eef8fc}
607
+ .cx-shell[data-theme="light"] .cx-node.on,.cx-shell[data-theme="light"] .cx-space.on,.cx-shell[data-theme="light"] .cx-app.on{background:#e5f6fb;border-color:var(--cx-cyan)}
608
+ .cx-shell[data-theme="light"] .cx-chip{background:#fff;border-color:var(--cx-line);color:var(--cx-muted)}
609
+ .cx-shell[data-theme="light"] .cx-chip b{color:#173846}
610
+ .cx-shell[data-theme="light"] .cx-btn{background:#fff;border-color:#bcd4e1;color:#224a5b}
611
+ .cx-shell[data-theme="light"] .cx-btn.pri{background:#e6f7fb;border-color:var(--cx-cyan);color:#075a70}
612
+ .cx-shell[data-theme="light"] .cx-btn:hover{border-color:var(--cx-cyan);color:var(--cx-cyan)}
613
+ .cx-shell[data-theme="light"] .cx-log{background:#f5fbfd;border-color:var(--cx-line)}
614
+ .cx-shell[data-theme="light"] .cx-log-b{background:#f5fbfd}
615
+ .cx-shell[data-theme="light"] .cx-line .t{color:#a2bdc9}
616
+ .cx-shell[data-theme="light"] .cx-line .m{color:#43697a}
617
+ .cx-shell[data-theme="light"] .cx-line.ok .m{color:#07845a}.cx-shell[data-theme="light"] .cx-line.err .m{color:#c73550}.cx-shell[data-theme="light"] .cx-line.run .m{color:#a96700}
618
+ .cx-shell[data-theme="light"] .cx-preview{background:#f2f7fa}
619
+ .cx-shell[data-theme="light"] .cx-detail{background:#f7fbfd}
620
+ .cx-shell[data-theme="light"] .cx-detail .dc{color:#5c7b8c}
621
+ .cx-shell[data-theme="light"] .cx-chat{background:linear-gradient(180deg,#ffffff,#f5fafd);border-color:#b9d8e5;box-shadow:0 20px 50px rgba(25,64,82,.18)}
622
+ .cx-shell[data-theme="light"] .cx-chat.full{background:radial-gradient(900px 500px at 15% 0%,rgba(96,205,230,.18),transparent 60%),linear-gradient(180deg,#f7fcfe,#eaf4f9)}
623
+ .cx-shell[data-theme="light"] .cx-chat.full:before{background-image:linear-gradient(rgba(11,127,159,.06) 1px,transparent 1px),linear-gradient(90deg,rgba(11,127,159,.06) 1px,transparent 1px)}
624
+ .cx-shell[data-theme="light"] .cx-city3d,.cx-shell[data-theme="light"] .cx-tech-bg{opacity:.13}
625
+ .cx-shell[data-theme="light"] .cx-chat-h{background:rgba(255,255,255,.9);border-color:var(--cx-line)}
626
+ .cx-shell[data-theme="light"] .cx-chat-title{color:#0d3545}
627
+ .cx-shell[data-theme="light"] .cx-hero-title{background:linear-gradient(135deg,#0b4458,#0b7f9f 55%,#07845a);-webkit-background-clip:text;background-clip:text;color:transparent}
628
+ .cx-shell[data-theme="light"] .cx-hero-sub{color:#54798a}
629
+ .cx-shell[data-theme="light"] .cx-empty-hint{background:#fff;border-color:#b6d8e4;color:#55798a}
630
+ .cx-shell[data-theme="light"] .cx-msg{border-color:#c9e0ea;background:#fff;color:#173846;box-shadow:0 5px 16px rgba(32,80,102,.08)}
631
+ .cx-shell[data-theme="light"] .cx-msg.ai{border-left-color:var(--cx-cyan)}
632
+ .cx-shell[data-theme="light"] .cx-msg.user{background:#e9faf4;border-color:#a9dfc9}
633
+ .cx-shell[data-theme="light"] .cx-msg-body{color:#193845}
634
+ .cx-shell[data-theme="light"] .cx-msg.user .cx-msg-body{color:#123d30}
635
+ .cx-shell[data-theme="light"] .cx-msg-meta{color:#6d8a98}
636
+ .cx-shell[data-theme="light"] .cx-msg-copy{color:#6d8a98}
637
+ .cx-shell[data-theme="light"] .cx-sysline{color:#6a8b99}
638
+ .cx-shell[data-theme="light"] .cx-md-p,.cx-shell[data-theme="light"] .cx-md-list li{color:#193845}
639
+ .cx-shell[data-theme="light"] .cx-md-h{color:#123846}
640
+ .cx-shell[data-theme="light"] .cx-md-quote{background:#eef8fb;color:#446b7b}
641
+ .cx-shell[data-theme="light"] .cx-md-codebox{background:#f7fbfd;border-color:#c7dde8}
642
+ .cx-shell[data-theme="light"] .cx-md-code{color:#285366;background:#f2f8fb}
643
+ .cx-shell[data-theme="light"] .cx-md-inline{color:#076e55;background:#e6f7f0}
644
+ .cx-shell[data-theme="light"] .cx-compose{background:#fff;border-color:#b9d8e5;box-shadow:0 8px 28px rgba(24,66,84,.1)}
645
+ .cx-shell[data-theme="light"] .cx-compose-input{color:#173846}
646
+ .cx-shell[data-theme="light"] .cx-compose-input::placeholder{color:#8aa7b4}
647
+ .cx-shell[data-theme="light"] .cx-sel-btn,.cx-shell[data-theme="light"] .cx-compose .cx-sel-btn{background:#f4fafc;border-color:#c6dce7;color:#244a5a}
648
+ .cx-shell[data-theme="light"] .cx-sel-btn .v,.cx-shell[data-theme="light"] .cx-sel-btn .a{color:#244a5a}
649
+ .cx-shell[data-theme="light"] .cx-sel-btn .v.ph{color:#0b7f9f}
650
+ .cx-shell[data-theme="light"] .cx-sel-menu{background:#fff;border-color:#b9d8e5;box-shadow:0 12px 30px rgba(20,60,80,.18)}
651
+ .cx-shell[data-theme="light"] .cx-sel-item{color:#244a5a;border-color:#e1edf3}
652
+ .cx-shell[data-theme="light"] .cx-sel-item:hover,.cx-shell[data-theme="light"] .cx-sel-item.on{background:#eaf7fb;color:#0b7f9f}
653
+ .cx-shell[data-theme="light"] .cx-hint-text{color:#587b8b}
654
+ .cx-shell[data-theme="light"] .cx-hint-card{background:#fff;border-color:#c7dde8}
655
+ .cx-shell[data-theme="light"] .cx-hint-card .hd{color:#5d7f8f}
656
+ .cx-shell[data-theme="light"] .cx-suggest button{background:#fff;border-color:#c7dde8;color:#245164}
657
+ .cx-shell[data-theme="light"] .cx-pm-side{background:#f8fcfd;border-color:#c7dde8}
658
+ .cx-shell[data-theme="light"] .cx-pm-side.right{border-color:#c7dde8}
659
+ .cx-shell[data-theme="light"] .cx-pm-card{background:#fff;border-color:#d3e5ed}
660
+ .cx-shell[data-theme="light"] .cx-pm-card:hover,.cx-shell[data-theme="light"] .cx-pm-card.on{background:#eaf7fb;border-color:#8bcadd}
661
+ .cx-shell[data-theme="light"] .cx-pm-title{color:#173846}
662
+ .cx-shell[data-theme="light"] .cx-pm-meta{color:#698694}
663
+ .cx-shell[data-theme="light"] .cx-pm-empty{color:#708f9d}
664
+ .cx-shell[data-theme="light"] .cx-pm-act{background:#f7fbfd;border-color:#c7dde8;color:#4e7282}
665
+ .cx-shell[data-theme="light"] .cx-menu{background:#fff;border-color:#b9d8e5;box-shadow:0 10px 26px rgba(20,60,80,.18)}
666
+ .cx-shell[data-theme="light"] .cx-menu-item{color:#244a5a}
667
+ .cx-shell[data-theme="light"] .cx-cal,.cx-shell[data-theme="light"] .cx-taskmap{background:#fff;border-color:#c7dde8}
668
+ .cx-shell[data-theme="light"] .cx-cal-day{color:#41697a}
669
+ .cx-shell[data-theme="light"] .cx-cal-day:hover{border-color:#7ac6db}
670
+ .cx-shell[data-theme="light"] .cx-cal-day.on{background:#dff4fa;border-color:#0b7f9f;color:#084d60}
671
+ .cx-shell[data-theme="light"] .cx-taskmap-leaflet{background:#eaf4f8}
672
+ .cx-shell[data-theme="light"] .cx-taskmap-leaflet .leaflet-tile{filter:none}
673
+ .cx-shell[data-theme="light"] .cx-taskmap-leaflet .leaflet-container{background:#eaf4f8}
674
+ .cx-shell[data-theme="light"] .cx-gate{background:#fff;border-color:#b9d8e5}
675
+ .cx-shell[data-theme="light"] .cx-gate-t{color:#123846}
676
+ .cx-shell[data-theme="light"] .cx-gate-d{color:#5d7f8f}
677
+ .cx-shell[data-theme="light"] .cx-modal{background:rgba(226,240,247,.72)}
678
+ .cx-shell[data-theme="light"] .cx-card{background:#fff;border-color:#b9d8e5;box-shadow:0 20px 50px rgba(20,60,80,.2)}
679
+ .cx-shell[data-theme="light"] .cx-card h2{color:#0b7f9f}
680
+ .cx-shell[data-theme="light"] .cx-card .desc{color:#5d7f8f}
681
+ .cx-shell[data-theme="light"] .cx-input,.cx-shell[data-theme="light"] .cx-form .cx-input{background:#f7fbfd;border-color:#c7dde8;color:#173846}
682
+ .cx-shell[data-theme="light"] .cx-empty{color:#688795;border-color:#c7dde8}
683
+ .cx-shell[data-theme="light"] .cx-menu-item.danger{color:#c73550}
684
+
685
+
686
+
687
+ /* unified design tokens: typography + surfaces */
688
+ :root{--cx-font:-apple-system,BlinkMacSystemFont,"SF Pro Text","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;--cx-mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;--cx-radius-sm:5px;--cx-radius-md:8px;--cx-radius-lg:14px}
689
+ .cx-shell{font-family:var(--cx-font);font-size:var(--cx-fs);line-height:1.55;letter-spacing:.01em;color:var(--cx-text);background:var(--cx-bg)}
690
+ .cx-shell button,.cx-shell input,.cx-shell textarea,.cx-shell select{font-family:var(--cx-font);font-size:var(--cx-fs)}
691
+ .cx-shell .cx-mono,.cx-shell .cx-md-code,.cx-shell .cx-md-inline{font-family:var(--cx-mono)}
692
+ .cx-shell .cx-title{font-size:var(--cx-fs-title);line-height:1.2;letter-spacing:.08em}
693
+ .cx-shell .cx-sub{font-size:var(--cx-fs-body);letter-spacing:.1em}
694
+ .cx-shell .cx-ph .ttl{font-size:var(--cx-fs);letter-spacing:.06em;font-weight:700}
695
+ .cx-shell .cx-name,.cx-shell .cx-space .nm,.cx-shell .cx-app .an{font-size:var(--cx-fs);letter-spacing:.01em}
696
+ .cx-shell .cx-meta,.cx-shell .cx-app .ac,.cx-shell .cx-space .sub{font-size:var(--cx-fs-body)}
697
+ .cx-shell .cx-chat-title{font-size:var(--cx-fs-title);letter-spacing:.1em}
698
+ .cx-shell .cx-chat-sub{font-size:var(--cx-fs-body)}
699
+ .cx-shell .cx-btn{font-size:var(--cx-fs);font-weight:600;letter-spacing:.02em;border-radius:var(--cx-radius-sm)}
700
+ .cx-shell .cx-btn.xs{font-size:var(--cx-fs-body)}
701
+ .cx-shell .cx-msg-body{font-size:var(--cx-fs);line-height:1.7}
702
+ .cx-shell .cx-pm-title{font-size:var(--cx-fs);font-weight:650}
703
+ .cx-shell .cx-pm-meta{font-size:var(--cx-fs-body)}
704
+ .cx-shell .cx-pm-h{font-size:var(--cx-fs)}
705
+ .cx-shell .cx-md-p,.cx-shell .cx-md-list li{font-size:var(--cx-fs)}
706
+ .cx-shell .cx-hint-text{font-size:var(--cx-fs)}
707
+ .cx-shell .cx-compose-input{font-size:13px}
708
+ .cx-shell .cx-sel-btn .v{font-size:var(--cx-fs)}
709
+
710
+ .cx-shell[data-theme="dark"]{--cx-bg:#050b12;--cx-surface-0:#03080e;--cx-surface-1:#08141f;--cx-surface-2:#0b1c2a;--cx-surface-3:#102738;--cx-glass:rgba(6,18,29,.9);--cx-text-strong:#effcff;--cx-text:#c6e5f1;--cx-text-dim:#7fa5b6;--cx-text-faint:#54788a;--cx-border:rgba(42,92,116,.55);--cx-border-strong:rgba(var(--cx-hue-rgb),.38);--cx-accent:var(--cx-cyan);--cx-accent-soft:rgba(var(--cx-hue-rgb),.09);--cx-shadow:0 18px 48px rgba(0,0,0,.45)}
711
+ .cx-shell[data-theme="light"]{--cx-bg:#edf5fa;--cx-surface-0:#e5f0f6;--cx-surface-1:#ffffff;--cx-surface-2:#f4fafd;--cx-surface-3:#e8f3f9;--cx-glass:rgba(255,255,255,.92);--cx-text-strong:#102f3e;--cx-text:#294c5d;--cx-text-dim:#5e7f8f;--cx-text-faint:#8ba5b1;--cx-border:#c9dde8;--cx-border-strong:#8fc5d9;--cx-accent:#0b7f9f;--cx-accent-soft:rgba(11,127,159,.08);--cx-shadow:0 16px 38px rgba(31,73,94,.12)}
712
+
713
+ .cx-shell{background:var(--cx-bg);color:var(--cx-text)}
714
+ .cx-shell .cx-header{background:var(--cx-surface-1);border-color:var(--cx-border);color:var(--cx-text)}
715
+ .cx-shell .cx-pipe{background:var(--cx-surface-2);border-color:var(--cx-border);color:var(--cx-text-dim)}
716
+ .cx-shell .cx-panel{background:var(--cx-surface-1);border-color:var(--cx-border);color:var(--cx-text);box-shadow:var(--cx-shadow)}
717
+ .cx-shell .cx-ph,.cx-shell .cx-tools{background:var(--cx-surface-2);border-color:var(--cx-border)}
718
+ .cx-shell .cx-ph .ttl{color:var(--cx-text-strong)}
719
+ .cx-shell .cx-list{background:var(--cx-surface-1)}
720
+ .cx-shell .cx-node,.cx-shell .cx-space,.cx-shell .cx-app{background:var(--cx-surface-2);border-color:var(--cx-border);color:var(--cx-text)}
721
+ .cx-shell .cx-node:hover,.cx-shell .cx-space:hover,.cx-shell .cx-app:hover{background:var(--cx-surface-3);border-color:var(--cx-border-strong)}
722
+ .cx-shell .cx-node.on,.cx-shell .cx-space.on,.cx-shell .cx-app.on{background:var(--cx-accent-soft);border-color:var(--cx-accent)}
723
+ .cx-shell .cx-name,.cx-shell .cx-space .nm,.cx-shell .cx-app .an{color:var(--cx-text-strong)}
724
+ .cx-shell .cx-meta,.cx-shell .cx-app .ac,.cx-shell .cx-space .sub,.cx-shell .cx-sub{color:var(--cx-text-dim)}
725
+ .cx-shell .cx-log{background:var(--cx-surface-0);border-color:var(--cx-border)}
726
+ .cx-shell .cx-log-b{color:var(--cx-text-dim)}
727
+ .cx-shell .cx-line .m{color:var(--cx-text)}
728
+ .cx-shell .cx-line .t{color:var(--cx-text-faint)}
729
+ .cx-shell .cx-chat{background:var(--cx-surface-1);border-color:var(--cx-border-strong);color:var(--cx-text);box-shadow:var(--cx-shadow)}
730
+ .cx-shell .cx-chat.full{background:radial-gradient(1000px 540px at 15% 0%,var(--cx-accent-soft),transparent 60%),var(--cx-surface-1)}
731
+ .cx-shell .cx-chat-h{background:var(--cx-glass);border-color:var(--cx-border);color:var(--cx-text)}
732
+ .cx-shell .cx-chat-title{color:var(--cx-text-strong)}
733
+ .cx-shell .cx-chat-sub{color:var(--cx-text-dim)}
734
+ .cx-shell .cx-compose{background:var(--cx-surface-1);border-color:var(--cx-border-strong);box-shadow:var(--cx-shadow)}
735
+ .cx-shell .cx-compose-input{color:var(--cx-text)}
736
+ .cx-shell .cx-compose-input::placeholder{color:var(--cx-text-faint)}
737
+ .cx-shell .cx-sel-btn,.cx-shell .cx-compose .cx-sel-btn{background:var(--cx-surface-2);border-color:var(--cx-border);color:var(--cx-text)}
738
+ .cx-shell .cx-sel-btn .v,.cx-shell .cx-sel-btn .a{color:var(--cx-text)}
739
+ .cx-shell .cx-sel-btn .v.ph{color:var(--cx-accent)}
740
+ .cx-shell .cx-pm-side{background:var(--cx-surface-2);border-color:var(--cx-border)}
741
+ .cx-shell .cx-pm-card{background:var(--cx-surface-1);border-color:var(--cx-border);color:var(--cx-text)}
742
+ .cx-shell .cx-pm-card:hover,.cx-shell .cx-pm-card.on{background:var(--cx-accent-soft);border-color:var(--cx-border-strong)}
743
+ .cx-shell .cx-pm-title{color:var(--cx-text-strong)}
744
+ .cx-shell .cx-pm-meta{color:var(--cx-text-dim)}
745
+ .cx-shell .cx-pm-act{background:var(--cx-surface-2);border-color:var(--cx-border);color:var(--cx-text-dim)}
746
+ .cx-shell .cx-msg{background:var(--cx-surface-2);border-color:var(--cx-border);color:var(--cx-text)}
747
+ .cx-shell .cx-msg.user{background:var(--cx-accent-soft);border-color:var(--cx-border-strong)}
748
+ .cx-shell .cx-msg-body{color:var(--cx-text)}
749
+ .cx-shell .cx-msg-meta{color:var(--cx-text-faint)}
750
+ .cx-shell .cx-sysline{color:var(--cx-text-faint)}
751
+ .cx-shell .cx-hint-text{color:var(--cx-text-dim)}
752
+ .cx-shell .cx-hint-card{background:var(--cx-surface-2);border-color:var(--cx-border);color:var(--cx-text)}
753
+ .cx-shell .cx-hint-card .hd{color:var(--cx-text-dim)}
754
+ .cx-shell .cx-suggest button{background:var(--cx-surface-2);border-color:var(--cx-border);color:var(--cx-text)}
755
+ .cx-shell .cx-cal,.cx-shell .cx-taskmap{background:var(--cx-surface-1);border-color:var(--cx-border)}
756
+ .cx-shell .cx-card{background:var(--cx-surface-1);border-color:var(--cx-border-strong);color:var(--cx-text);box-shadow:var(--cx-shadow)}
757
+ .cx-shell .cx-input,.cx-shell .cx-form .cx-input{background:var(--cx-surface-2);border-color:var(--cx-border);color:var(--cx-text)}
758
+ .cx-shell .cx-modal{background:color-mix(in srgb,var(--cx-surface-0) 72%,transparent)}
759
+ .cx-shell .cx-gate{background:var(--cx-surface-2);border-color:var(--cx-border-strong);color:var(--cx-text)}
760
+ .cx-shell .cx-gate-t{color:var(--cx-text-strong)}
761
+ .cx-shell .cx-gate-d{color:var(--cx-text-dim)}
762
+ .cx-shell .cx-btn{background:var(--cx-surface-2);border-color:var(--cx-border);color:var(--cx-text)}
763
+ .cx-shell .cx-btn:hover{border-color:var(--cx-accent);color:var(--cx-accent)}
764
+ .cx-shell .cx-btn.pri{background:var(--cx-accent-soft);border-color:var(--cx-accent);color:var(--cx-accent)}
765
+ .cx-node-actions .cx-btn,.cx-space-actions .cx-btn,.cx-app-actions .cx-btn{border-color:var(--cx-line2);background:rgba(8,25,40,.7);color:var(--cx-text-dim);box-shadow:none}
766
+ .cx-node-actions .cx-btn:hover,.cx-space-actions .cx-btn:hover,.cx-app-actions .cx-btn:hover{border-color:var(--cx-accent);color:var(--cx-accent)}
767
+ .cx-node-actions .cx-btn.pri,.cx-space-actions .cx-btn.pri,.cx-app-actions .cx-btn.pri{border-color:var(--cx-line2);background:rgba(8,25,40,.7);color:var(--cx-text)}
768
+ .cx-node-actions .cx-btn.pri:hover,.cx-space-actions .cx-btn.pri:hover,.cx-app-actions .cx-btn.pri:hover{border-color:var(--cx-accent);color:var(--cx-accent)}
769
+ .cx-tools .cx-btn{border-color:var(--cx-line2);background:rgba(8,25,40,.7);color:var(--cx-text-dim);box-shadow:none}
770
+ .cx-tools .cx-btn:hover{border-color:var(--cx-accent);color:var(--cx-accent)}
771
+ .cx-tools .cx-btn.pri{border-color:var(--cx-line2);background:rgba(8,25,40,.7);color:var(--cx-text)}
772
+ .cx-tools .cx-btn.pri:hover{border-color:var(--cx-accent);color:var(--cx-accent)}
773
+
774
+
775
+ .cx-shell .cx-menu,.cx-shell .cx-sel-menu{background:var(--cx-surface-1);border-color:var(--cx-border-strong)}
776
+ .cx-shell .cx-menu-item,.cx-shell .cx-sel-item{color:var(--cx-text);border-color:var(--cx-border)}
777
+ .cx-shell .cx-menu-item:hover,.cx-shell .cx-sel-item:hover,.cx-shell .cx-sel-item.on{background:var(--cx-accent-soft);color:var(--cx-accent)}
778
+ .cx-shell .cx-taskmap-leaflet .leaflet-container{background:var(--cx-surface-2)}
779
+
780
+ .cx-space-actions{display:flex;align-items:center;justify-content:flex-end;gap:5px;width:100%;margin-left:0;flex:none;margin-top:4px}
781
+ .cx-shell .cx-filter-btn{background:var(--cx-surface-2);border-color:var(--cx-border);color:var(--cx-text-dim)}
782
+ .cx-shell .cx-filter-btn.on{color:var(--cx-accent);border-color:var(--cx-accent);background:var(--cx-accent-soft)}
783
+ .cx-shell .cx-compose-plus{background:var(--cx-surface-2);border-color:var(--cx-border);color:var(--cx-accent)}
784
+ .cx-shell .cx-chat .x{background:transparent;border:0;color:var(--cx-text-dim);font-size:var(--cx-fs-title);line-height:1;width:24px;height:24px;border-radius:5px}
785
+ .cx-shell .cx-chat .x:hover{background:var(--cx-accent-soft);color:var(--cx-accent)}
786
+ .cx-shell .cx-pm-op,.cx-shell .cx-pm-refresh{color:var(--cx-text-dim)}
787
+ .cx-shell .cx-pm-op:hover,.cx-shell .cx-pm-refresh:hover{color:var(--cx-accent);background:var(--cx-accent-soft)}
788
+ .cx-shell .cx-tag{background:var(--cx-surface-2);border-color:var(--cx-border);color:var(--cx-text-dim)}
789
+ .cx-shell .cx-tag.cy{color:var(--cx-accent);border-color:var(--cx-border-strong)}
790
+ .cx-shell .cx-webtab{background:var(--cx-surface-2);border-color:var(--cx-border);color:var(--cx-text-dim)}
791
+ .cx-shell .cx-webtab.on{background:var(--cx-accent-soft);border-color:var(--cx-accent);color:var(--cx-accent)}
792
+ .cx-shell .cx-filter-menu{background:var(--cx-surface-1);border-color:var(--cx-border-strong)}
793
+ .cx-shell .cx-filter-item{color:var(--cx-text)}
794
+ .cx-shell .cx-filter-item:hover,.cx-shell .cx-filter-item.on{background:var(--cx-accent-soft);color:var(--cx-accent)}
795
+ .cx-shell .cx-cal-h button{color:var(--cx-text-dim)}
796
+ .cx-shell .cx-cal-h button:hover{color:var(--cx-accent)}
797
+ .cx-shell .leaflet-bar a{background:var(--cx-surface-1);color:var(--cx-text);border-color:var(--cx-border)}
798
+ .cx-shell .leaflet-bar a:hover{background:var(--cx-accent-soft);color:var(--cx-accent)}
799
+
800
+ .cx-shell[data-theme="light"] .cx-preview,.cx-shell[data-theme="light"] .cx-webframe{background:#f4fafd}
801
+ .cx-shell[data-theme="light"] .cx-preview .cx-empty,.cx-shell[data-theme="light"] .cx-webframe .cx-empty{color:#678694;background:#f4fafd}
802
+ .cx-shell[data-theme="light"] .cx-official{background:#f3f9fc;border-color:#c9dde8}
803
+ .cx-shell[data-theme="light"] .cx-official label{color:#4c6e7e}
804
+ .cx-shell[data-theme="light"] .cx-chat-actions .cx-btn{background:#fff;border-color:#bcd4e1;color:#224a5b}
805
+ .cx-shell[data-theme="light"] .cx-chat .x{background:transparent;color:#5e7f8f}
806
+ .cx-shell[data-theme="light"] .cx-compose-send{background:linear-gradient(135deg,#73eaff,#45e9ad);color:#063d42;box-shadow:0 0 18px rgba(54,210,220,.28)}
807
+ .cx-shell[data-theme="light"] .cx-compose-plus{background:#fff;color:#0b7f9f;border-color:#bcd4e1}
808
+ .cx-shell[data-theme="light"] .cx-chat-h{box-shadow:0 1px 0 rgba(31,73,94,.06)}
809
+
810
+ .cx-console{flex:0 0 auto;border-top:1px solid var(--cx-border);background:var(--cx-surface-0);display:flex;flex-direction:column;min-height:80px;position:relative}
811
+ .cx-console-h{display:flex;align-items:center;gap:10px;padding:4px 10px;border-bottom:1px solid var(--cx-border);background:var(--cx-surface-2);font-size:var(--cx-fs-body);color:var(--cx-text-dim)}
812
+ .cx-console-tabs{display:flex;gap:2px}
813
+ .cx-console-tab{border:0;border-bottom:2px solid transparent;background:transparent;color:var(--cx-text-dim);font:var(--cx-fs-body)/1.5 var(--cx-font);padding:4px 8px;cursor:pointer;display:flex;gap:5px;align-items:center}
814
+ .cx-console-tab span{font-size:var(--cx-fs-body);color:var(--cx-text-faint)}
815
+ .cx-console-tab.on{color:var(--cx-accent);border-bottom-color:var(--cx-accent)}
816
+ .cx-console-status{margin-left:auto;font-size:var(--cx-fs-body);letter-spacing:.1em;color:var(--cx-text-faint)}
817
+ .cx-console-actions{display:flex;gap:3px}
818
+ .cx-console-actions button{width:22px;height:20px;padding:0;border:1px solid var(--cx-border);background:var(--cx-surface-1);color:var(--cx-text);font:var(--cx-fs)/1 var(--cx-font);cursor:pointer;border-radius:3px}
819
+ .cx-console-actions button:hover{color:var(--cx-accent);border-color:var(--cx-accent)}
820
+ .cx-console-body{flex:1;min-height:0;overflow:auto;padding:4px 12px;font-size:var(--cx-fs-body);line-height:1.6;color:var(--cx-text-dim);font-family:var(--cx-mono)}
821
+ .cx-console-table{width:100%;border-collapse:collapse;font-size:var(--cx-fs-body);font-family:var(--cx-mono)}
822
+ .cx-console-table th{position:sticky;top:0;z-index:1;background:var(--cx-surface-1);color:var(--cx-text-dim);text-align:left;font-weight:600;padding:3px 8px;border-bottom:1px solid var(--cx-border);cursor:pointer;white-space:nowrap;letter-spacing:.06em;user-select:none}
823
+ .cx-console-table th:hover{color:var(--cx-accent)}
824
+ .cx-console-table td{padding:2px 8px;border-bottom:1px solid color-mix(in srgb,var(--cx-border) 50%,transparent);vertical-align:top;word-break:break-all}
825
+ .cx-console-table tr:hover td{background:var(--cx-accent-soft)}
826
+ .cx-console-table tr.err td{color:var(--cx-red)}
827
+ .cx-console-table td:first-child{white-space:nowrap;color:var(--cx-text-dim)}
828
+ .cx-console-body{display:flex;align-items:stretch;padding:0}
829
+ .cx-console-main{flex:1;min-width:0;overflow:auto;padding:4px 8px}
830
+ .cx-console-detail{width:40%;min-width:260px;max-width:560px;border-left:1px solid var(--cx-border);overflow:auto;padding:8px 10px;font-size:var(--cx-fs-body);font-family:var(--cx-mono);align-self:flex-start;height:auto;max-height:100%;box-sizing:border-box}
831
+ .cx-console-detail-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;color:var(--cx-accent);font-size:var(--cx-fs-body);letter-spacing:.08em}
832
+ .cx-console-detail-h button{border:0;background:transparent;color:var(--cx-text-dim);cursor:pointer;font-size:var(--cx-fs);line-height:1}
833
+ .cx-console-detail .kv{display:grid;grid-template-columns:64px 1fr;gap:3px 8px;margin-bottom:8px}
834
+ .cx-console-detail .k{color:var(--cx-text-dim)}
835
+ .cx-console-detail pre{white-space:pre-wrap;word-break:break-all;background:var(--cx-surface-2);border:1px solid var(--cx-border);border-radius:4px;padding:6px;margin:0}
836
+ .cx-console-table tbody tr{cursor:pointer}
837
+ .cx-console-table tr.on td{background:var(--cx-accent-soft)}
838
+
839
+
840
+ .cx-console-resize{position:absolute;left:0;right:0;top:-3px;height:6px;cursor:ns-resize}
841
+ .cx-console-open{position:absolute;right:16px;bottom:12px;z-index:10;border:1px solid var(--cx-border);background:var(--cx-surface-1);color:var(--cx-accent);font:var(--cx-fs-body) var(--cx-font);padding:4px 8px;cursor:pointer;border-radius:4px;box-shadow:var(--cx-shadow)}
842
+
843
+ .cx-shell[data-theme="light"] .cx-preview iframe,.cx-shell[data-theme="light"] .cx-webframe iframe{background:#f4fafd}
844
+
845
+ .cx-select{border:1px solid var(--cx-border);background:var(--cx-surface-2);color:var(--cx-text);font:var(--cx-fs-body)/1.2 var(--cx-font);padding:5px 6px;border-radius:5px;cursor:pointer;outline:none}
846
+ .cx-select:hover,.cx-select:focus{border-color:var(--cx-accent);color:var(--cx-accent)}
847
+ .cx-icon-btn{min-width:30px;width:30px;height:30px;padding:0;display:inline-grid;place-items:center;font-size:var(--cx-fs-title);line-height:1}
848
+ .cx-kind{display:inline-flex;align-items:center;padding:2px 5px;border:1px solid currentColor;border-radius:3px;font-size:var(--cx-fs-body);font-weight:800;letter-spacing:.06em}
849
+ .cx-kind.type-serve{color:#0b7f9f}.cx-kind.type-space{color:#7a5bd6}.cx-kind.type-recent{color:#b57416}
850
+ .cx-card-line{display:flex;align-items:center;justify-content:space-between;gap:6px;min-width:0}
851
+ .cx-card-line .cx-name{min-width:0;flex:1}
852
+ .cx-card-head{display:flex;align-items:center;justify-content:space-between;gap:6px;margin-bottom:4px}
853
+ .cx-status-r{font-size:var(--cx-fs-body);padding:2px 5px;border:1px solid var(--cx-border);border-radius:3px;color:var(--cx-text-dim)}
854
+ .cx-status-r.on{color:#3ff0a2;font-weight:700;border-color:rgba(127,201,168,.35);background:rgba(7,132,90,.10)}
855
+ .cx-status-r.off{color:#ff8196;font-weight:700;border-color:rgba(216,169,177,.30);background:rgba(160,70,80,.08)}
856
+
857
+ .cx-actions .cx-btn{flex:none;white-space:nowrap;height:30px;padding:0 10px;display:inline-flex;align-items:center;justify-content:center;line-height:1}
858
+ .cx-actions .cx-btn.cx-icon-btn{width:30px;min-width:30px;padding:0}
859
+ .cx-actions .cx-select{flex:none;width:auto;min-width:86px;height:30px}
860
+ .cx-actions .cx-chip{flex:none}
861
+ .cx-chips{min-width:0}
862
+
863
+ .cx-shell .cx-store{background:var(--cx-surface-1);border-color:var(--cx-border);color:var(--cx-text);flex-wrap:wrap}
864
+ .cx-shell .cx-store:hover{background:var(--cx-accent-soft);border-color:var(--cx-border-strong)}
865
+ .cx-shell .cx-store .sn{color:var(--cx-text-strong)}
866
+ .cx-shell .cx-store .ss{color:var(--cx-text-dim)}
867
+ .cx-store-actions{display:flex;align-items:center;justify-content:flex-end;gap:4px;width:100%;margin-left:0;flex-wrap:wrap;margin-top:6px;border-top:1px solid var(--cx-border);padding-top:6px}
868
+ .cx-store-titleline{display:flex;align-items:center;gap:6px;min-width:0}
869
+ .cx-store-titleline .sn{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
870
+ .cx-store-actions .cx-btn{height:26px;padding:0 7px;font-size:var(--cx-fs-body)}
871
+ .cx-shell[data-theme="light"] .cx-store{background:#fff}
872
+ .cx-shell[data-theme="light"] .cx-store:hover{background:#eef8fc}
873
+ .cx-store-main{display:flex;align-items:center;gap:8px;flex:1;min-width:0;cursor:pointer}
874
+
875
+ .cx-avatar-extra{display:flex;gap:8px;align-items:flex-start;border-top:1px solid var(--cx-border);margin-top:8px;padding-top:8px}
876
+ .cx-avatar-preview{width:54px;height:54px;flex:none;border:1px solid var(--cx-border);border-radius:6px;overflow:hidden;background:var(--cx-surface-2);display:grid;place-items:center;color:var(--cx-accent);font-size:var(--cx-fs-body)}
877
+ .cx-avatar-preview img{width:100%;height:100%;object-fit:cover}
878
+ .cx-avatar-extra-title{font-size:var(--cx-fs);font-weight:700;color:var(--cx-text-strong)}
879
+ .cx-avatar-extra-sub{font-size:var(--cx-fs-body);color:var(--cx-text-dim);line-height:1.5;margin:2px 0 5px}
880
+ .cx-avatar-skills{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:5px}
881
+ .cx-avatar-skill-empty{font-size:var(--cx-fs-body);color:var(--cx-text-faint)}
882
+ .cx-avatar-skill-add{display:flex;gap:4px;align-items:center}
883
+ .cx-avatar-skill-add .cx-input{flex:1;min-width:0;height:26px}
884
+
885
+ .cx-pm-side.right{display:flex;flex-direction:column}
886
+ .cx-pm-side.right .cx-taskmap{margin-top:auto;position:sticky;bottom:0;flex:none}
887
+
888
+
889
+
890
+
891
+
892
+ .cx-cal-views{display:flex;gap:3px;padding:3px 0 6px}
893
+ .cx-cal-view{flex:1;border:1px solid var(--cx-border);background:var(--cx-surface-2);color:var(--cx-text-dim);font:var(--cx-fs-body)/1.2 var(--cx-font);padding:4px 0;cursor:pointer;border-radius:3px}
894
+ .cx-cal-view.on{color:var(--cx-accent);border-color:var(--cx-accent);background:var(--cx-accent-soft)}
895
+ .cx-cal-years{display:grid;grid-template-columns:repeat(4,1fr);gap:3px}
896
+ .cx-cal-year,.cx-cal-month{border:1px solid var(--cx-border);background:var(--cx-surface-2);color:var(--cx-text);font:var(--cx-fs-body) var(--cx-font);padding:7px 2px;cursor:pointer;border-radius:3px}
897
+ .cx-cal-year.on,.cx-cal-month.on{background:var(--cx-accent-soft);border-color:var(--cx-accent);color:var(--cx-accent)}
898
+ .cx-cal-months{display:grid;grid-template-columns:repeat(4,1fr);gap:3px}
899
+ .cx-cal-month{display:flex;flex-direction:column;gap:2px}
900
+ .cx-cal-month span{font-size:var(--cx-fs-body);color:var(--cx-text-faint);white-space:nowrap;overflow:hidden}
901
+ .cx-cal-day .l{position:static;margin-top:2px;font-size:calc(var(--cx-fs-body) - 1.5px);line-height:1.1;color:var(--cx-text-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
902
+ .cx-cal-day{height:42px}
903
+
904
+ .cx-cal-day.on{background:color-mix(in srgb,var(--cx-accent) 14%,transparent);border-color:color-mix(in srgb,var(--cx-accent) 45%,transparent);color:var(--cx-text-strong)}
905
+ .cx-cal-day.start,.cx-cal-day.end{background:color-mix(in srgb,var(--cx-accent) 32%,transparent);border-color:var(--cx-accent);color:var(--cx-text-strong);font-weight:800;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--cx-accent) 45%,transparent)}
906
+
907
+ /* 四步递进:标题底色由左至右渐深,01→04 一眼看出层级(2026-11-06) */
908
+ .cx-pipe>.cx-stage:nth-of-type(1){--cx-a:10%;--cx-b:2%}
909
+ .cx-pipe>.cx-stage:nth-of-type(2){--cx-a:16%;--cx-b:5%}
910
+ .cx-pipe>.cx-stage:nth-of-type(3){--cx-a:22%;--cx-b:8%}
911
+ .cx-pipe>.cx-stage:nth-of-type(4){--cx-a:28%;--cx-b:11%}
912
+ .cx-body>.cx-panel:nth-of-type(1){--cx-a:14%;--cx-b:4%}
913
+ .cx-body>.cx-panel:nth-of-type(2){--cx-a:20%;--cx-b:8%}
914
+ .cx-body>.cx-panel:nth-of-type(3){--cx-a:26%;--cx-b:12%}
915
+ .cx-body>.cx-panel:nth-of-type(4){--cx-a:32%;--cx-b:16%}
916
+ .cx-pipe>.cx-stage:not(.on){background-image:linear-gradient(90deg,color-mix(in srgb,var(--cx-accent) var(--cx-a,0%),transparent),color-mix(in srgb,var(--cx-accent) var(--cx-b,0%),transparent))}
917
+ .cx-body>.cx-panel>.cx-ph{background-image:linear-gradient(90deg,color-mix(in srgb,var(--cx-accent) var(--cx-a,0%),transparent),color-mix(in srgb,var(--cx-accent) var(--cx-b,0%),transparent))}
918
+
919
+ /* 窗口模式:对话 / 管理 / 开发;右上角给 DSH 图标留白(2026-11-06) */
920
+ .cx-shell{--cx-host-right:88px;--cx-host-left:168px;--cx-host-left-pad:0px;position:relative}
921
+ .cx-header{padding-left:calc(16px + var(--cx-host-left-pad))}
922
+ .cx-chat.full .cx-chat-hin{max-width:900px}
923
+ .cx-chat.full .cx-compose{max-width:900px}
924
+ .cx-chat.full .cx-hint{max-width:900px;width:calc(100% - 36px);padding:0}
925
+ .cx-chat.full .cx-hint-panel{max-width:900px;width:calc(100% - 36px);padding:0}
926
+ .cx-shell{--cx-pm-side-w:280px}
927
+ .cx-chat-host{flex:1;min-height:0;display:flex;min-width:0;padding:10px 12px 12px}
928
+ .cx-dev-host{flex:1;min-height:0;display:flex;min-width:0}
929
+ .cx-chat-host.full{position:absolute;inset:0;z-index:500;padding:0}
930
+ .cx-shell.host-chrome .cx-chat-host.full .cx-chat{padding-top:0}
931
+ .cx-chat.dock{position:relative;inset:auto;width:100%;height:100%;flex:1;min-height:0;border:1px solid var(--cx-line);z-index:1;box-shadow:none}
932
+ .cx-header{padding-right:calc(16px + var(--cx-host-right))}
933
+ .cx-header>.cx-actions{margin-left:auto}
934
+ .cx-pipe>.cx-chips{margin-left:auto;flex:none;flex-wrap:nowrap;padding-left:12px;overflow:hidden}
935
+
936
+ .cx-views{display:flex;flex:none;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:3;border:1px solid var(--cx-line);background:var(--cx-surface-1)}
937
+ .cx-view{padding:6px 10px;border:0;border-right:1px solid var(--cx-line);background:transparent;color:var(--cx-muted);font:700 var(--cx-fs-body)/1 var(--cx-font);letter-spacing:.08em;cursor:pointer}
938
+ .cx-view:last-child{border-right:0}
939
+ .cx-view:hover{color:var(--cx-text)}
940
+ .cx-view.on{background:color-mix(in srgb,var(--cx-accent) 16%,transparent);color:var(--cx-accent)}
941
+ .cx-dev{flex:1;min-height:0;display:grid;grid-template-columns:220px minmax(0,1fr) 300px;gap:10px;padding:10px 12px 0;overflow:hidden}.cx-dev-wrap{flex:1;min-height:0;display:flex;flex-direction:column;min-width:0}
942
+ .cx-dev-wrap{position:relative}
943
+ .cx-dev-wrap>.cx-chat-bg{z-index:0}
944
+ .cx-dev-top,.cx-dev{position:relative;z-index:1}
945
+ .cx-dev-top{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--cx-line);background:var(--cx-surface-1);flex:none;flex-wrap:wrap}
946
+ .cx-dev-projects{display:flex;gap:4px;overflow:auto;flex:1;min-width:0;padding-bottom:2px}
947
+ .cx-dev-ptab{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border:1px solid var(--cx-border);border-radius:4px;background:transparent;color:var(--cx-text-dim);font:var(--cx-fs-body) var(--cx-mono);cursor:pointer;white-space:nowrap}
948
+ .cx-dev-ptab.on{color:var(--cx-accent);border-color:var(--cx-accent);background:var(--cx-accent-soft)}
949
+ .cx-dev-ptab .x{border:0;background:transparent;color:inherit;cursor:pointer;font-size:var(--cx-fs-body);padding:0}
950
+ .cx-dev-target{display:flex;gap:6px;flex:none}
951
+ .cx-dev{flex:1;min-height:0;display:grid;grid-template-columns:220px minmax(0,1fr) var(--cx-preview-w,360px);grid-template-rows:minmax(0,1fr) 200px;gap:8px;padding:8px 10px;overflow:hidden}
952
+ .cx-dev-explorer{grid-column:1;grid-row:1/3}
953
+ .cx-dev-editor{grid-column:2;grid-row:1}
954
+ .cx-dev-preview{grid-column:3;grid-row:1}
955
+ .cx-dev-term{grid-column:2/4;grid-row:2}
956
+ .cx-preview-wrap{display:flex;flex-direction:column}
957
+ .cx-preview-frame{flex:1;width:100%;border:0;background:var(--cx-surface-1)}
958
+ .cx-preview-wrap{background:var(--cx-surface-1)}
959
+ .cx-preview-empty{background:var(--cx-surface-1);color:var(--cx-text-faint);font:var(--cx-fs-body) var(--cx-mono);align-items:center;justify-content:center}
960
+ .cx-dev-preview{position:relative}
961
+ .cx-pane-refresh{position:absolute;top:6px;right:8px;z-index:3;width:20px;height:20px;border:1px solid var(--cx-border);border-radius:4px;background:rgba(6,20,32,.75);color:var(--cx-text-dim);cursor:pointer;font-size:var(--cx-fs);line-height:1}
962
+ .cx-pane-refresh:hover{color:var(--cx-accent);border-color:var(--cx-accent)}
963
+ .cx-preview-grip{position:absolute;left:0;top:0;bottom:0;width:6px;cursor:col-resize;z-index:4}
964
+ .cx-preview-grip:hover{background:var(--cx-accent-soft)}
965
+ .cx-preview-md{flex:1;min-height:0;overflow:auto;padding:10px 12px;font:var(--cx-fs)/1.8 var(--cx-font);color:var(--cx-text)}
966
+ .cx-preview-md h1,.cx-preview-md h2,.cx-preview-md h3{margin:10px 0 6px;color:var(--cx-text-strong)}
967
+ .cx-preview-md pre{background:rgba(6,20,32,.7);padding:8px;border-radius:6px;overflow:auto}
968
+ .cx-preview-md code{font-family:var(--cx-mono);color:var(--cx-accent)}
969
+ .cx-preview-text{flex:1;min-height:0;overflow:auto;margin:0;padding:10px 12px;font:var(--cx-fs)/1.7 var(--cx-mono);color:var(--cx-text-dim);white-space:pre-wrap}
970
+
971
+ .cx-dev .cx-dev-editor{background:transparent}
972
+ .cx-dev .cx-editor-wrap,.cx-dev .cx-editor-host,.cx-dev .cx-editor-ta{background:transparent}
973
+ .cx-dev .cx-editor-host .monaco-editor,.cx-dev .cx-editor-host .monaco-editor .margin,.cx-dev .cx-editor-host .monaco-editor-background,.cx-dev .cx-editor-host .monaco-editor .overflow-guard{background:transparent!important}
974
+ .cx-dev .cx-dev-editor{border:0}
975
+ .cx-dev .cx-dev-editor .cx-dev-h{border-bottom:0}
976
+ .cx-dev .cx-tabs{background:transparent;border:0}
977
+ .cx-dev .cx-editor-wrap,.cx-dev .cx-editor-host,.cx-dev .cx-editor-ta,.cx-dev .cx-dev-editor,.cx-dev .cx-dev-editor .cx-dev-b{border:0!important;box-shadow:none!important;outline:0!important}
978
+ .cx-dev.hide-left{grid-template-columns:minmax(0,1fr) var(--cx-preview-w,360px)}
979
+ .cx-dev.hide-right{grid-template-columns:220px minmax(0,1fr)}
980
+ .cx-dev.hide-left.hide-right{grid-template-columns:minmax(0,1fr)}
981
+ .cx-dev.hide-bottom{grid-template-rows:minmax(0,1fr)}
982
+ .cx-dev.hide-left .cx-dev-explorer{display:none}
983
+ .cx-dev.hide-left .cx-dev-editor{grid-column:1}
984
+ .cx-dev.hide-left .cx-dev-preview{grid-column:2}
985
+ .cx-dev.hide-left .cx-dev-term{grid-column:1/3}
986
+ .cx-dev.hide-right .cx-dev-preview{display:none}
987
+ .cx-dev.hide-right .cx-dev-term{grid-column:2/3}
988
+ .cx-dev.hide-left.hide-right .cx-dev-editor{grid-column:1}
989
+ .cx-dev.hide-left.hide-right .cx-dev-term{grid-column:1/2}
990
+ .cx-dev.hide-bottom .cx-dev-term{display:none}
991
+ .cx-dev.hide-bottom .cx-dev-explorer{grid-row:1/2}
992
+ .cx-pm-op.on{color:var(--cx-accent);border-color:var(--cx-accent)}
993
+ .cx-pm-op.cx-pm-txt{width:auto;min-width:34px;padding:0 6px;font:var(--cx-fs-body)/1 var(--cx-font);letter-spacing:.04em}
994
+
995
+ .cx-dev .cx-editor-host .monaco-editor,.cx-dev .cx-editor-host .monaco-editor .overflow-guard,.cx-dev .cx-editor-host .monaco-editor .margin{border:0!important;box-shadow:none!important;outline:0!important}
996
+ .cx-dev .cx-tabs,.cx-dev .cx-tabs .cx-tab{border-bottom:0!important;box-shadow:none!important}
997
+ .cx-dev .cx-crumb{border:0}
998
+ .cx-dev .cx-tab{border-right:0}
999
+ .cx-dev .cx-tab .ico{font-size:var(--cx-fs-body);font-weight:800;letter-spacing:0;color:var(--cx-text-faint);min-width:12px;text-align:center}
1000
+ .cx-dev .cx-tab.on .ico{color:var(--cx-accent)}
1001
+ .cx-crumb{display:flex;align-items:center;gap:3px;padding:3px 10px;background:transparent;font:var(--cx-fs-body) var(--cx-mono);color:var(--cx-text-dim);overflow:auto;flex:none;white-space:nowrap}
1002
+ .cx-crumb .seg{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;border-radius:3px;cursor:pointer}
1003
+ .cx-crumb .seg:hover{background:var(--cx-accent-soft);color:var(--cx-accent)}
1004
+ .cx-crumb .seg.file{color:var(--cx-text)}
1005
+ .cx-crumb .ci{opacity:.65;font-size:var(--cx-fs-body)}
1006
+ .cx-crumb .sep{opacity:.45}
1007
+ .cx-crumb-actions{margin-left:auto;display:flex;gap:2px;flex:none}
1008
+ .cx-git-log .h{color:var(--cx-accent);font:var(--cx-fs-body) var(--cx-mono);flex:none}
1009
+ .cx-git-log .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
1010
+ .cx-git-log .when{flex:none;font-size:var(--cx-fs-body);opacity:.55}
1011
+ .cx-statusbar{display:flex;align-items:center;gap:10px;padding:3px 10px;border-top:1px solid var(--cx-border);background:var(--cx-surface-1);font:var(--cx-fs-body) var(--cx-mono);color:var(--cx-text-dim);flex:none;overflow:hidden}
1012
+ .cx-statusbar .spacer{flex:1}
1013
+ .cx-statusbar .sep{width:1px;height:10px;background:var(--cx-border)}
1014
+ .cx-statusbar .sb-path{max-width:40%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--cx-text)}
1015
+ .cx-statusbar .sb-branch{color:var(--cx-accent)}
1016
+ .cx-tree-sect.cx-tree-sect-top{border-top:1px solid var(--cx-border);border-radius:0;margin-top:8px;padding-top:9px}
1017
+ .cx-git-count{margin-left:6px;padding:0 5px;border-radius:8px;background:var(--cx-accent-soft);color:var(--cx-accent);font-size:var(--cx-fs-body)}
1018
+ .cx-tree-item .cx-git-badge{margin-left:auto;width:12px;text-align:center;font:var(--cx-fs-body) var(--cx-mono);color:var(--cx-muted)}
1019
+ .cx-git-badge.mod{color:#ffb454}.cx-git-badge.add{color:var(--cx-green)}.cx-git-badge.del{color:#ff5c7a}.cx-git-badge.unt{color:#8fd9b6}
1020
+
1021
+
1022
+ .cx-dev .cx-tab{background:rgba(10,32,49,.65);border:0;border-top:2px solid transparent;border-radius:4px 4px 0 0;margin:0 2px 0 0}
1023
+ .cx-dev .cx-tab:hover{background:rgba(14,42,62,.8);color:var(--cx-text)}
1024
+ .cx-dev .cx-tab.on{background:transparent;border-top-color:var(--cx-accent);color:var(--cx-accent)}
1025
+ .cx-dev .cx-tab .x{color:inherit}
1026
+ .cx-menu-item .hint{margin-left:auto;padding-left:12px;opacity:.5;font-size:var(--cx-fs-body)}
1027
+ .cx-menu-item .lb{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}
1028
+ .cx-menu-item.on{color:var(--cx-accent)}
1029
+ .cx-tree-menu{position:fixed;z-index:900;min-width:150px;padding:4px;border:1px solid var(--cx-border-strong);border-radius:6px;background:var(--cx-surface-1);box-shadow:0 12px 30px rgba(0,0,0,.45)}
1030
+ .cx-namedlg{position:fixed;z-index:950;left:50%;top:30%;transform:translateX(-50%);width:min(360px,80vw);padding:12px;border:1px solid var(--cx-border-strong);border-radius:8px;background:var(--cx-surface-1);box-shadow:0 18px 50px rgba(0,0,0,.5)}
1031
+ .cx-namedlg .t{font:var(--cx-fs-body) var(--cx-mono);color:var(--cx-accent);margin-bottom:8px}
1032
+ .cx-namedlg .cx-input{width:100%;margin-bottom:8px}
1033
+ .cx-namedlg .b{display:flex;justify-content:flex-end;gap:8px}
1034
+
1035
+
1036
+ .cx-dev-col{display:flex;flex-direction:column;min-height:0;min-width:0;border:1px solid var(--cx-line);background:var(--cx-surface-1)}
1037
+ .cx-dev-h{display:flex;align-items:center;gap:8px;padding:8px 10px;border-bottom:1px solid var(--cx-line);background:var(--cx-surface-2);font:700 var(--cx-fs-body)/1 var(--cx-font);letter-spacing:.14em;color:var(--cx-text-dim)}
1038
+ .cx-dev-hint{margin-left:auto;font-weight:400;letter-spacing:.06em;opacity:.7}
1039
+ .cx-dev-b{flex:1;min-height:0;overflow:auto}
1040
+ .cx-tree{padding:8px 10px;font:var(--cx-fs)/1.9 var(--cx-font);color:var(--cx-text-dim)}
1041
+ .cx-tree .d{color:var(--cx-text)}
1042
+ .cx-tree .f{padding-left:14px;color:var(--cx-text-dim)}
1043
+ .cx-tabs{display:flex;border-bottom:1px solid var(--cx-line);background:var(--cx-surface-2);overflow:auto}
1044
+ .cx-tab{padding:7px 12px;border-right:1px solid var(--cx-line);font:var(--cx-fs)/1 var(--cx-font);color:var(--cx-text-dim);white-space:nowrap}
1045
+ .cx-tab.on{background:var(--cx-surface-1);color:var(--cx-text-strong);box-shadow:inset 0 -2px 0 var(--cx-accent)}
1046
+ .cx-code{margin:0;padding:12px 14px;font:var(--cx-fs)/1.8 var(--cx-font);color:var(--cx-text-faint);white-space:pre;overflow:auto}
1047
+ .cx-tree{display:flex;flex-direction:column;padding:4px 0}
1048
+ .cx-tree-item{display:flex;align-items:center;gap:6px;padding:3px 8px;font:var(--cx-fs) var(--cx-mono);color:var(--cx-text-dim);cursor:pointer;white-space:nowrap;overflow:hidden}
1049
+ .cx-tree-item:hover{background:var(--cx-accent-soft);color:var(--cx-text)}
1050
+ .cx-tree-item.on{background:var(--cx-accent-soft);color:var(--cx-accent)}
1051
+ .cx-tree-item .ico{width:10px;flex:none;opacity:.8}
1052
+ .cx-tree-item .nm{overflow:hidden;text-overflow:ellipsis}
1053
+ .cx-tree-item .chev{width:10px;flex:none;opacity:.6;font-size:var(--cx-fs-body)}
1054
+ .cx-tree-item .fic{width:14px;display:inline-flex;align-items:center;justify-content:center;flex:none}
1055
+ .cx-tree-item .chev{display:inline-flex;align-items:center;justify-content:center;color:var(--cx-text-faint)}
1056
+ .cx-tree-recent{border-bottom:1px solid var(--cx-line);padding-bottom:4px;margin-bottom:4px}
1057
+ .cx-tree-sect{display:flex;align-items:center;gap:6px;padding:6px 8px;margin:2px 0;border-radius:4px;cursor:pointer;font:600 var(--cx-fs) var(--cx-font);letter-spacing:.02em;color:var(--cx-text-dim);position:sticky;top:0;z-index:3;background:var(--cx-surface-1)}
1058
+ .cx-tree-sect:hover{background:var(--cx-accent-soft);color:var(--cx-accent)}
1059
+ .cx-tree-sect .chev{width:10px;display:inline-flex;align-items:center;justify-content:center;opacity:.7}
1060
+ .cx-crumb-sep{width:1px;height:12px;margin:0 4px;background:var(--cx-border)}
1061
+
1062
+ .cx-editor-wrap{position:relative;display:flex;flex-direction:column;overflow:hidden}
1063
+ .cx-editor-host{flex:1;min-height:0;width:100%;min-height:220px}
1064
+ .cx-editor-ta{flex:1;width:100%;min-height:220px;border:0;resize:none;background:#1e1e1e;color:#d4d4d4;font:var(--cx-fs)/1.6 Menlo,monospace;padding:10px;outline:none}
1065
+ .cx-term-wrap{display:flex;flex-direction:column;background:#04101a;overflow:hidden}
1066
+ .cx-term-h{padding:4px 8px;border-bottom:1px solid var(--cx-line)}
1067
+ .cx-term-tabs{display:flex;gap:4px;align-items:center}
1068
+ .cx-term-tab{border:0;border-bottom:2px solid transparent;background:transparent;color:var(--cx-text-dim);font:600 var(--cx-fs-body) var(--cx-font);letter-spacing:.10em;text-transform:uppercase;padding:4px 10px;cursor:pointer}
1069
+ .cx-term-tab.on{color:var(--cx-accent);border-bottom-color:var(--cx-accent)}
1070
+ .cx-term-sessions{display:flex;gap:4px;align-items:center;margin-left:8px}
1071
+ .cx-term-sess{display:inline-flex;align-items:center;gap:3px;padding:2px 6px;border:1px solid var(--cx-border);border-radius:3px;font:var(--cx-fs-body) var(--cx-mono);color:var(--cx-text-dim);cursor:pointer}
1072
+ .cx-term-sess.on{color:var(--cx-accent);border-color:var(--cx-accent)}
1073
+ .cx-term-sess .x{border:0;background:transparent;color:inherit;font-size:var(--cx-fs-body);cursor:pointer;padding:0 0 0 4px;opacity:.35}
1074
+ .cx-term-sess:hover .x{opacity:1}
1075
+ .cx-term-add{border:1px solid var(--cx-border);background:transparent;color:var(--cx-text-dim);border-radius:3px;font-size:var(--cx-fs);line-height:1;padding:1px 6px;cursor:pointer}
1076
+ .cx-term-add:hover{color:var(--cx-accent);border-color:var(--cx-accent)}
1077
+ .cx-term-out{margin:0;padding:8px 10px;font:var(--cx-fs)/1.6 var(--cx-mono);color:var(--cx-text-dim);white-space:pre-wrap}
1078
+
1079
+ .cx-term-host{flex:1;min-height:0;padding:4px}
1080
+ .cx-dev-status{font:var(--cx-fs-body) var(--cx-mono);color:var(--cx-text-dim);padding:4px 8px;border-top:1px solid var(--cx-border)}
1081
+ .cx-dev-status.err{color:var(--cx-red)}
1082
+ .cx-dev-statusbar{display:flex;align-items:center;gap:8px;padding:4px 8px;border-top:1px solid var(--cx-border);font:var(--cx-fs-body) var(--cx-mono);color:var(--cx-text-dim)}
1083
+ .cx-dev-statusbar .cx-btn{margin-left:auto}
1084
+ .cx-tab{display:flex;align-items:center;gap:6px;cursor:pointer}
1085
+ .cx-tab.on{color:var(--cx-accent);background:var(--cx-accent-soft)}
1086
+ .cx-tab .x{border:0;background:transparent;color:var(--cx-text-dim);cursor:pointer;font-size:var(--cx-fs);line-height:1}
1087
+ .cx-dev-soon{margin:12px;padding:12px 14px;border:1px dashed var(--cx-border-strong);background:var(--cx-surface-2)}
1088
+ .cx-dev-soon .t{font:800 var(--cx-fs)/1.4 var(--cx-font);letter-spacing:.12em;color:var(--cx-accent)}
1089
+ .cx-dev-soon .d{margin-top:4px;font-size:var(--cx-fs);line-height:1.7;color:var(--cx-text-dim)}
1090
+ .cx-dev-soon ul{margin:6px 0 0;padding-left:16px;font-size:var(--cx-fs);line-height:1.8;color:var(--cx-text-dim)}
1091
+ @media(max-width:1100px){.cx-dev{grid-template-columns:1fr;overflow:auto}.cx-dev-col{min-height:220px}}
1092
+ @media(max-width:1000px){.cx-brand{min-width:0}.cx-brand .cx-sub{display:none}.cx-chips{display:none}.cx-header{gap:10px}.cx-views{position:static;transform:none;left:auto;top:auto}}
1093
+
1094
+ @media(max-width:900px){.cx-shell{--cx-host-right:56px}}
1095
+
1096
+ /* 我的背景:照片虚拟世界 + 输入区小按钮(2026-11-06) */
1097
+ .cx-chat-bg{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none}
1098
+ .cx-chat-bg img{width:100%;height:100%;object-fit:cover;display:block;opacity:.55}
1099
+ .cx-chat-bg.photo:after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(4,10,18,.35),rgba(4,10,18,.72))}
1100
+ .cx-shell[data-theme="light"] .cx-chat-bg img{opacity:.55}
1101
+ .cx-shell[data-theme="light"] .cx-chat-bg.photo:after{background:linear-gradient(180deg,rgba(238,246,251,.28),rgba(238,246,251,.72))}
1102
+ .cx-compose-mini{height:32px;min-width:32px;padding:0 6px;border:1px solid rgba(30,70,92,.7);background:rgba(7,20,32,.55);color:var(--cx-text-dim);font-size:var(--cx-fs);line-height:1;cursor:pointer;flex:none;display:inline-flex;align-items:center;justify-content:center}
1103
+ .cx-compose-mini:hover{color:var(--cx-accent);border-color:var(--cx-accent)}
1104
+ .cx-shell[data-theme="light"] .cx-compose-mini{background:#fff;border-color:#bcd4e1;color:#33586a}
1105
+
1106
+ /* 右键菜单:数字人 / 背景(2026-11-06) */
1107
+ .cx-ctxmenu{position:fixed;z-index:600;min-width:176px;padding:4px;background:var(--cx-surface-1);border:1px solid var(--cx-border);box-shadow:var(--cx-shadow)}
1108
+ .cx-ctxmenu-t{padding:6px 10px 5px;font:700 var(--cx-fs-body)/1.2 var(--cx-font);letter-spacing:.12em;color:var(--cx-text-faint);border-bottom:1px solid var(--cx-border);margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
1109
+ .cx-ctxmenu button{display:block;width:100%;text-align:left;padding:7px 10px;border:0;background:transparent;color:var(--cx-text);font:var(--cx-fs)/1.4 var(--cx-font);cursor:pointer;white-space:nowrap}
1110
+ .cx-ctxmenu button:hover{background:color-mix(in srgb,var(--cx-accent) 14%,transparent);color:var(--cx-accent)}
1111
+ .cx-chat-actions .cx-btn.on{color:var(--cx-accent);border-color:var(--cx-accent);background:color-mix(in srgb,var(--cx-accent) 12%,transparent)}
1112
+
1113
+ .cx-shell[data-theme="light"] .cx-init .cx-input{background:rgba(4,16,26,.92);border-color:rgba(var(--cx-hue-rgb),.28);color:#e6fbff}
1114
+ .cx-shell[data-theme="light"] .cx-init .cx-input:focus{border-color:var(--cx-cyan);box-shadow:0 0 0 2px rgba(var(--cx-hue-rgb),.18)}
1115
+ .cx-shell[data-theme="light"] .cx-init .cx-form label{color:#8fb8c9}
1116
+ .cx-shell[data-theme="light"] .cx-init .cx-btn{background:rgba(8,26,40,.92);border:1px solid rgba(var(--cx-hue-rgb),.35);color:#cfeff9}
1117
+ .cx-shell[data-theme="light"] .cx-init .cx-btn:hover{border-color:var(--cx-cyan);color:#eaffff}
1118
+ .cx-shell[data-theme="light"] .cx-init .cx-btn.pri{background:linear-gradient(90deg,rgba(10,108,134,.95),rgba(10,143,106,.95));border-color:var(--cx-cyan);color:#eaffff;box-shadow:0 0 18px rgba(var(--cx-hue-rgb),.35)}
1119
+
1120
+ .cx-init-wiz{display:flex;gap:6px;margin:4px 0 12px}
1121
+ .cx-init-tab{flex:1;display:flex;flex-direction:column;gap:2px;padding:8px 10px;border:1px solid rgba(var(--cx-hue-rgb),.25);background:rgba(6,22,34,.7);color:#8fb8c9;cursor:pointer;text-align:left;font:var(--cx-fs-body) var(--cx-mono);border-radius:2px}
1122
+ .cx-init-tab b{color:var(--cx-cyan);font-size:var(--cx-fs)}
1123
+ .cx-init-tab i{font-size:var(--cx-fs-body);letter-spacing:.1em;color:rgba(143,184,201,.6);font-style:normal}
1124
+ .cx-init-tab.on{border-color:var(--cx-cyan);background:rgba(var(--cx-hue-rgb),.12);color:#eaffff;box-shadow:0 0 16px rgba(var(--cx-hue-rgb),.25)}
1125
+ .cx-init-tab.done b:after{content:" ✓";color:var(--cx-green)}
1126
+ .cx-init-modes{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-bottom:10px}
1127
+ .cx-init-mode{display:flex;flex-direction:column;gap:2px;padding:7px 8px;border:1px solid rgba(var(--cx-hue-rgb),.22);background:rgba(4,14,22,.8);color:#8fb8c9;cursor:pointer;text-align:left;border-radius:2px}
1128
+ .cx-init-mode b{font-size:var(--cx-fs-body);color:#cfeff9}
1129
+ .cx-init-mode span{font-size:var(--cx-fs-body);color:#6f97a9}
1130
+ .cx-init-mode.on{border-color:var(--cx-cyan);background:rgba(var(--cx-hue-rgb),.12);box-shadow:0 0 14px rgba(var(--cx-hue-rgb),.25)}
1131
+ .cx-init-mode.on b{color:#eaffff}
1132
+ .cx-init-login{display:flex;align-items:center;gap:10px;margin-top:10px;font:var(--cx-fs-body) var(--cx-mono);flex-wrap:wrap}
1133
+ .cx-init-login .ok{color:var(--cx-green)}
1134
+ .cx-init-login .err{color:var(--cx-red)}
1135
+ .cx-init-grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
1136
+ .cx-init-sub{display:flex;flex-direction:column;gap:6px}
1137
+ .cx-init-sub h3{margin:0;font:var(--cx-fs-body) var(--cx-mono);letter-spacing:.12em;color:var(--cx-cyan)}
1138
+ .cx-init-pic{height:120px;border:1px dashed rgba(var(--cx-hue-rgb),.35);border-radius:4px;display:flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;background:rgba(4,16,26,.6)}
1139
+ .cx-init-pic img{width:100%;height:100%;object-fit:cover}
1140
+ .cx-init-pic .ph{display:flex;flex-direction:column;gap:4px;align-items:center;color:#8fb8c9;font-size:var(--cx-fs-body)}
1141
+ .cx-init-pic .ph b{color:var(--cx-cyan)}
1142
+ .cx-init-pic .ph span{font-size:var(--cx-fs-body);color:#6f97a9}
1143
+ .cx-init-sum{font:var(--cx-fs-body) var(--cx-mono);color:#8fb8c9;margin-top:8px}
1144
+
1145
+
1146
+ /* ── 按钮一律不用强调色描边:只有数据卡片与页签才高亮 ─────────────── */
1147
+ .cx-shell .cx-btn,
1148
+ .cx-shell .cx-btn:hover,
1149
+ .cx-shell .cx-btn.pri,
1150
+ .cx-shell .cx-btn.pri:hover,
1151
+ .cx-shell .cx-pm-op,
1152
+ .cx-shell .cx-pm-op:hover,
1153
+ .cx-shell .cx-pm-op.on,
1154
+ .cx-shell .cx-pane-refresh,
1155
+ .cx-shell .cx-pane-refresh:hover,
1156
+ .cx-shell .cx-term-add,
1157
+ .cx-shell .cx-term-add:hover,
1158
+ .cx-shell .cx-compose-plus:hover,
1159
+ .cx-shell .cx-compose-mini:hover,
1160
+ .cx-shell .cx-sel-btn:hover,
1161
+ .cx-shell .cx-sel-btn.on,
1162
+ .cx-shell .cx-webstatus:hover,
1163
+ .cx-shell .cx-addrbar .nav:hover:not(:disabled),
1164
+ .cx-shell .cx-suggest button:hover,
1165
+ .cx-shell .cx-hint-card:hover,
1166
+ .cx-shell .cx-hint-card.on,
1167
+ .cx-shell .cx-pm-act:hover,
1168
+ .cx-shell .cx-console-actions button:hover,
1169
+ .cx-shell .cx-taskmap-actions button:hover,
1170
+ .cx-shell .cx-chat-actions .cx-btn.on,
1171
+ .cx-shell .cx-filter-chip:hover,
1172
+ .cx-shell .cx-filter-chip.on,
1173
+ .cx-shell .cx-filter-btn:hover,
1174
+ .cx-shell .cx-filter-btn.on {
1175
+ border-color: var(--cx-line2) !important;
1176
+ box-shadow: none !important;
1177
+ }
1178
+ /* 主按钮靠底色/文字体现,不靠描边 */
1179
+ .cx-shell .cx-btn.pri,
1180
+ .cx-shell .cx-chat-actions .cx-btn.on {
1181
+ background: var(--cx-accent-soft);
1182
+ color: var(--cx-accent);
1183
+ }
1184
+ .cx-shell .cx-select:hover,
1185
+ .cx-shell .cx-select:focus {
1186
+ border-color: var(--cx-line2) !important;
1187
+ color: var(--cx-accent);
1188
+ box-shadow: none !important;
1189
+ }
1190
+
1191
+ /* ── 卡片 / 按钮 / 标签:悬停统一背景高亮 ─────────────────────────────── */
1192
+ .cx-shell :is(.cx-btn,.cx-pm-op,.cx-pm-act,.cx-filter-chip,.cx-filter-btn,.cx-filter,.cx-sel-btn,
1193
+ .cx-compose-plus,.cx-compose-mini,.cx-suggest button,.cx-hint-card,.cx-webstatus,.cx-addrbar .nav,
1194
+ .cx-pane-refresh,.cx-term-add,.cx-term-tab,.cx-term-sess,.cx-tab,.cx-chat-tab,.cx-init-tab,.cx-init-mode,
1195
+ .cx-console-actions button,.cx-taskmap-actions button):hover {
1196
+ background: rgba(var(--cx-hue-rgb),.10);
1197
+ }
1198
+ .cx-shell :is(.cx-btn.pri,.cx-chat-actions .cx-btn.on):hover {
1199
+ background: color-mix(in srgb, var(--cx-accent) 20%, transparent);
1200
+ }
1201
+ .cx-shell :is(.cx-node,.cx-space,.cx-app,.cx-avatar,.cx-hint-card,.cx-cal-day):hover {
1202
+ background: rgba(var(--cx-hue-rgb),.07);
1203
+ }
1204
+
1205
+ /* ── 统一下拉:所有选择器同一套外观 ───────────────────────────────── */
1206
+ .cx-drop{position:relative;display:inline-flex;align-items:center}
1207
+ .cx-drop-btn{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;border:1px solid var(--cx-line2);border-radius:4px;background:var(--cx-surface-2);color:var(--cx-text);font:var(--cx-fs) var(--cx-font);cursor:pointer;box-sizing:border-box}
1208
+ .cx-drop-btn:hover{background:rgba(var(--cx-hue-rgb),.10)}
1209
+ .cx-drop-btn.on{color:var(--cx-accent)}
1210
+ .cx-drop-btn .cv{opacity:.55;font-size:var(--cx-fs-body)}
1211
+ .cx-drop-pop{position:absolute;left:8px;top:100%;margin-top:4px;z-index:950;min-width:150px;padding:4px;border:1px solid var(--cx-line2);border-radius:6px;background:var(--cx-surface-1);box-shadow:0 14px 36px rgba(0,0,0,.5)}
1212
+ .cx-drop-item{display:flex;align-items:center;gap:8px;width:100%;border:0;text-align:left;background:transparent;color:var(--cx-text);font:var(--cx-fs) var(--cx-font);padding:6px 8px;border-radius:4px;cursor:pointer;white-space:nowrap}
1213
+ .cx-drop-item:hover{background:rgba(var(--cx-hue-rgb),.12);color:var(--cx-accent)}
1214
+ .cx-drop-item.on{color:var(--cx-accent)}
1215
+ .cx-drop-item .ck{margin-left:auto;padding-left:12px;width:12px;flex:none;font-size:var(--cx-fs-body);opacity:.9;text-align:right}
1216
+ /* 菜单类弹层与下拉保持同一套圆角/描边/阴影 */
1217
+ .cx-menu,.cx-tree-menu{border-radius:6px;background:var(--cx-surface-1);border:1px solid var(--cx-line2);box-shadow:0 14px 36px rgba(0,0,0,.5);padding:4px}
1218
+
1219
+ /* 浅色主题:文件标签 */
1220
+ .cx-shell[data-theme="light"] .cx-dev .cx-tab{background:rgba(9,60,80,.06);color:var(--cx-text-dim);border-top-color:transparent}
1221
+ .cx-shell[data-theme="light"] .cx-dev .cx-tab:hover{background:rgba(9,60,80,.11);color:var(--cx-text)}
1222
+ .cx-shell[data-theme="light"] .cx-dev .cx-tab.on{background:transparent;border-top-color:var(--cx-accent);color:var(--cx-accent)}
1223
+ .cx-shell[data-theme="light"] .cx-dev .cx-tab.on .ico{color:var(--cx-accent)}
1224
+ .cx-shell[data-theme="light"] .cx-dev .cx-tab .ico{color:var(--cx-text-faint)}
1225
+
1226
+ .cx-shell[data-theme="light"] .cx-editor-ta{background:transparent;color:var(--cx-text)}
1227
+ .cx-shell[data-theme="light"] .cx-editor-host .monaco-editor,
1228
+ .cx-shell[data-theme="light"] .cx-editor-host .monaco-editor-background,
1229
+ .cx-shell[data-theme="light"] .cx-editor-host .monaco-editor .margin{background:transparent!important}
1230
+
1231
+ /* 请求日志 */
1232
+ .cx-term-badge{margin-left:5px;font-size:var(--cx-fs-body);letter-spacing:0;color:var(--cx-text-faint)}
1233
+ .cx-req-list{display:flex;flex-direction:column;padding:4px 6px}
1234
+ .cx-req-row{display:flex;align-items:center;gap:10px;width:100%;text-align:left;border:0;border-bottom:1px solid var(--cx-line);background:transparent;color:var(--cx-text-dim);font:var(--cx-fs-body) var(--cx-mono);padding:5px 6px;cursor:pointer}
1235
+ .cx-req-row:hover{background:rgba(var(--cx-hue-rgb),.10);color:var(--cx-text)}
1236
+ .cx-req-row .at{flex:none;color:var(--cx-text)}
1237
+ .cx-req-row .ms,.cx-req-row .tk{flex:none;opacity:.75}
1238
+ .cx-req-row .msg{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
1239
+ .cx-req-detail{display:flex;flex-direction:column;gap:8px;max-height:70vh;overflow:auto}
1240
+ .cx-req-detail .kv{display:grid;grid-template-columns:1fr 1fr;gap:4px 14px;font:var(--cx-fs-body) var(--cx-mono)}
1241
+ .cx-req-detail .kv .row{display:flex;gap:8px}
1242
+ .cx-req-detail .kv .k{color:var(--cx-text-faint);flex:none}
1243
+ .cx-req-detail .kv .v{color:var(--cx-text)}
1244
+ .cx-req-sect{font:600 var(--cx-fs-body) var(--cx-font);color:var(--cx-accent);margin-top:4px}
1245
+ .cx-req-pre{margin:0;padding:8px;background:rgba(6,20,32,.6);border:1px solid var(--cx-line);border-radius:4px;font:var(--cx-fs-body)/1.55 var(--cx-mono);color:var(--cx-text);white-space:pre-wrap;word-break:break-word;max-height:26vh;overflow:auto}
1246
+
1247
+ .cx-chat-center{overflow:visible!important}
1248
+
1249
+ .cx-dev-actions{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin:6px 0}
1250
+
1251
+ .cx-scan-tabs{display:flex;gap:2px;margin:8px 0 4px;border-bottom:1px solid var(--cx-border)}
1252
+ .cx-scan-tab{border:0;border-bottom:2px solid transparent;background:transparent;color:var(--cx-text-dim);font:600 var(--cx-fs-body) var(--cx-font);letter-spacing:.06em;padding:5px 10px;cursor:pointer}
1253
+ .cx-scan-tab:hover{background:rgba(var(--cx-hue-rgb),.10);color:var(--cx-text)}
1254
+ .cx-scan-tab.on{color:var(--cx-accent);border-bottom-color:var(--cx-accent)}
1255
+ .cx-scan-tab .n{margin-left:5px;font-size:var(--cx-fs-body);color:var(--cx-text-faint)}
1256
+ .cx-scan-body{max-height:46vh;overflow:auto}
1257
+ .cx-empty-d{padding:14px;text-align:center;color:var(--cx-text-faint);font:var(--cx-fs-body) var(--cx-mono)}
1258
+
1259
+ .cx-pm-stars{margin-top:4px;color:#ffd166;font-size:var(--cx-fs);letter-spacing:2px;line-height:1;text-shadow:0 0 8px rgba(255,209,102,.25)}
1260
+ .cx-shell[data-theme="light"] .cx-pm-stars{color:#d99400;text-shadow:none}
1261
+ .cx-pm-content{margin-top:4px;font-size:var(--cx-fs-body);line-height:1.45;color:var(--cx-text-dim);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}
1262
+ .cx-shell[data-theme="light"] .cx-pm-content{color:#557080}
1263
+ .cx-pm-card-titleline{display:flex;align-items:center;gap:6px;min-width:0}
1264
+ .cx-pm-card-titleline .cx-pm-title{flex:1;min-width:0}
1265
+ .cx-pm-card-titleline .cx-pm-status{flex:none;white-space:nowrap}
1266
+ .cx-pm-status.status-daily{color:#7bd4ff;border-color:#2b6f92;background:rgba(50,140,180,.15)}
1267
+ .cx-pm-status.status-weekly{color:#b49cff;border-color:#6750a8;background:rgba(120,90,200,.16)}
1268
+ .cx-pm-status.status-monthly{color:#6ef7b0;border-color:#2f8060;background:rgba(40,160,110,.15)}
1269
+ .cx-pm-status.status-quarterly{color:#ffb454;border-color:#8a6a2a;background:rgba(180,130,40,.16)}
1270
+ .cx-pm-status.status-annual{color:#ff8fa3;border-color:#8a3d4d;background:rgba(180,60,80,.15)}
1271
+ .cx-pm-status.status-issue{color:#ff6b83;border-color:#8a3d4d;background:rgba(180,60,80,.18)}
1272
+ .cx-shell[data-theme="light"] .cx-pm-status.status-daily{color:#0a5f7d;border-color:#5aa6c4;background:#eaf6fb}
1273
+ .cx-shell[data-theme="light"] .cx-pm-status.status-weekly{color:#523496;border-color:#9b7fd0;background:#f3eefc}
1274
+ .cx-shell[data-theme="light"] .cx-pm-status.status-monthly{color:#08663f;border-color:#4fae85;background:#e9f8f0}
1275
+ .cx-shell[data-theme="light"] .cx-pm-status.status-quarterly{color:#7a5000;border-color:#c49a3a;background:#fdf5e3}
1276
+ .cx-shell[data-theme="light"] .cx-pm-status.status-annual{color:#a02034;border-color:#cf7f8e;background:#fdeef1}
1277
+ .cx-shell[data-theme="light"] .cx-pm-status.status-issue{color:#a02034;border-color:#cf7f8e;background:#fdeef1}
1278
+ .cx-busy-overlay{position:fixed;inset:0;z-index:1200;display:grid;place-items:start center;padding-top:18vh;background:rgba(2,8,14,.36);backdrop-filter:blur(2px);pointer-events:all}
1279
+ .cx-busy-card{display:flex;align-items:center;gap:12px;min-width:240px;max-width:min(460px,90vw);padding:14px 18px;border:1px solid var(--cx-cyan);border-radius:8px;background:var(--cx-panel);box-shadow:0 18px 60px rgba(0,0,0,.45),0 0 30px rgba(var(--cx-hue-rgb),.12);color:var(--cx-text)}
1280
+ .cx-busy-card b{font-size:var(--cx-fs);color:var(--cx-cyan);letter-spacing:.06em}
1281
+ .cx-busy-sub{margin-top:5px;font-size:var(--cx-fs-body);color:var(--cx-muted)}
1282
+ .cx-busy-spinner{width:20px;height:20px;flex:none;border:2px solid rgba(var(--cx-hue-rgb),.22);border-top-color:var(--cx-cyan);border-radius:50%;animation:cx-spin .8s linear infinite}
1283
+ @keyframes cx-spin{to{transform:rotate(360deg)}}
1284
+ .cx-shell[data-theme="light"] .cx-busy-overlay{background:rgba(220,240,248,.5)}
1285
+ .cx-shell[data-theme="light"] .cx-busy-card{background:#fff;border-color:#5aa6c4;box-shadow:0 18px 60px rgba(20,70,90,.18)}
1286
+ .cx-shell[data-theme="light"] .cx-busy-card b{color:#0a5f7d}
1287
+ .cx-toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);z-index:1300;display:flex;align-items:center;gap:8px;max-width:min(520px,90vw);padding:10px 14px;border:1px solid var(--cx-cyan);border-radius:7px;background:var(--cx-panel);color:var(--cx-text);font-size:var(--cx-fs);box-shadow:0 12px 40px rgba(0,0,0,.38);animation:cx-toast-fade .18s ease both;will-change:opacity}
1288
+ .cx-toast.err{border-color:var(--cx-red);color:#ffdbe2}
1289
+ .cx-toast-mark{width:18px;height:18px;display:grid;place-items:center;border-radius:50%;background:rgba(var(--cx-hue-rgb),.16);color:var(--cx-cyan);font-weight:800;font-size:var(--cx-fs)}
1290
+ .cx-toast.err .cx-toast-mark{background:rgba(255,92,122,.16);color:var(--cx-red)}
1291
+ @keyframes cx-toast-fade{from{opacity:0}to{opacity:1}}
1292
+ .cx-node,.cx-space,.cx-app,.cx-store,.cx-pm-card{transition:opacity .18s ease,transform .18s ease,background .18s ease}
1293
+ .cx-body.busy .cx-node,.cx-body.busy .cx-space,.cx-body.busy .cx-app,.cx-body.busy .cx-store{opacity:.45;transform:translateY(2px)}
1294
+ .cx-pm-side{transition:opacity .18s ease,transform .18s ease}
1295
+ .cx-pm-side.refreshing{opacity:.58;transform:translateY(2px)}
1296
+ .cx-shell[data-theme="light"] .cx-toast{background:#fff;box-shadow:0 12px 40px rgba(20,70,90,.18)}
1297
+ .cx-pm-card.fresh{position:relative;overflow:hidden;border-color:var(--cx-cyan);animation:cx-pm-fresh 1.7s ease-out both;box-shadow:0 0 0 1px rgba(var(--cx-hue-rgb),.35),0 0 28px rgba(var(--cx-hue-rgb),.18)}
1298
+ .cx-pm-card.fresh::after{content:"";position:absolute;inset:-40% -20%;pointer-events:none;background:linear-gradient(105deg,transparent 35%,rgba(var(--cx-hue-rgb),.28) 48%,rgba(var(--cx-green-rgb),.22) 52%,transparent 65%);transform:translateX(-120%);animation:cx-pm-scan 1.1s ease-out .1s both}
1299
+ @keyframes cx-pm-fresh{0%{opacity:.2;transform:translateY(8px) scale(.985)}45%{opacity:1;transform:translateY(0) scale(1.005)}100%{opacity:1;transform:none}}
1300
+ @keyframes cx-pm-scan{to{transform:translateX(120%)}}
1301
+ .cx-shell[data-theme="light"] .cx-pm-card.fresh{box-shadow:0 0 0 1px rgba(11,127,159,.35),0 0 24px rgba(11,127,159,.16)}
1302
+ .cx-data-table.fresh{animation:cx-data-fresh 1.4s ease-out both;border:1px solid rgba(var(--cx-hue-rgb),.35);border-radius:4px}
1303
+ @keyframes cx-data-fresh{0%{opacity:.3;box-shadow:inset 0 0 0 1px rgba(var(--cx-hue-rgb),.5),0 0 0 rgba(var(--cx-hue-rgb),0)}45%{opacity:1;box-shadow:inset 0 0 28px rgba(var(--cx-hue-rgb),.12),0 0 24px rgba(var(--cx-hue-rgb),.16)}100%{opacity:1;box-shadow:none}}
1304
+ .cx-form-hint{margin:0 0 10px;padding:7px 9px;border-left:2px solid var(--cx-cyan);background:rgba(var(--cx-hue-rgb),.06);color:var(--cx-text-dim);font-size:var(--cx-fs-body);line-height:1.6}
1305
+ .cx-form-hint b,.cx-req{color:var(--cx-red);font-weight:800}
1306
+ .cx-field.req .cx-field-lb{color:var(--cx-text-strong)}
1307
+ .cx-form-warn{margin-top:8px;color:var(--cx-orange);font-size:var(--cx-fs-body)}
1308
+ .cx-pm-card.fresh{border-color:var(--cx-cyan);animation:cx-pm-fresh 2s ease-out both;box-shadow:0 0 0 2px rgba(var(--cx-hue-rgb),.45),0 0 42px rgba(var(--cx-hue-rgb),.32),inset 0 0 30px rgba(var(--cx-hue-rgb),.08)}
1309
+ .cx-pm-card.fresh::after{background:linear-gradient(105deg,transparent 28%,rgba(var(--cx-hue-rgb),.42) 46%,rgba(var(--cx-green-rgb),.35) 52%,transparent 70%);animation:cx-pm-scan 1.35s ease-out .05s 2 both}
1310
+ @keyframes cx-pm-fresh{0%{opacity:0;transform:translateY(12px) scale(.97)}35%{opacity:1;transform:translateY(-1px) scale(1.01)}100%{opacity:1;transform:none}}
1311
+ .cx-data-table.fresh{animation:cx-data-fresh 1.8s ease-out both;border:1px solid rgba(var(--cx-hue-rgb),.55);box-shadow:0 0 0 1px rgba(var(--cx-hue-rgb),.3),0 0 30px rgba(var(--cx-hue-rgb),.2)}
1312
+ .cx-data-flash{position:fixed;inset:0;z-index:1100;pointer-events:none;background:radial-gradient(circle at 50% 45%,rgba(var(--cx-hue-rgb),.10),transparent 45%),linear-gradient(105deg,transparent 35%,rgba(var(--cx-hue-rgb),.13) 49%,transparent 62%);animation:cx-data-flash .62s ease-out both}
1313
+ @keyframes cx-data-flash{0%{opacity:0}25%{opacity:1}100%{opacity:0}}
1314
+ .cx-console-detail-table{max-height:none;overflow:visible;border-top:1px solid var(--cx-border);border-bottom:1px solid var(--cx-border);margin-top:6px}
1315
+ .cx-console-detail-table .cx-console-table{font-size:var(--cx-fs-body)}
1316
+ .cx-pm-card.trace{position:relative;border-color:#7be0ff;box-shadow:0 0 0 2px rgba(123,224,255,.55),0 0 34px rgba(123,224,255,.28);animation:cx-trace-pulse 1.3s ease-in-out 2}
1317
+ @keyframes cx-trace-pulse{0%,100%{box-shadow:0 0 0 1px rgba(123,224,255,.35),0 0 18px rgba(123,224,255,.15)}50%{box-shadow:0 0 0 3px rgba(123,224,255,.7),0 0 46px rgba(123,224,255,.42)}}
1318
+ .cx-trace-badge{flex:none;font:var(--cx-fs-body)/1.2 var(--cx-mono);color:#7be0ff;border:1px solid rgba(123,224,255,.45);border-radius:3px;padding:2px 4px;background:rgba(123,224,255,.08)}
1319
+ .cx-console-detail-sub{margin-top:8px;font-size:var(--cx-fs-body);font-weight:700;letter-spacing:.1em;color:var(--cx-cyan);text-transform:uppercase}
1320
+ .cx-console-detail-head{max-height:120px;overflow:auto;margin:3px 0 0;padding:6px;border:1px solid var(--cx-border);background:var(--cx-surface-2);font:var(--cx-fs-body)/1.45 var(--cx-mono);color:var(--cx-text-dim);white-space:pre-wrap}
1321
+
1322
+ .cx-console-table th:nth-child(5),.cx-console-table td:nth-child(5),.cx-console-table th:nth-child(6),.cx-console-table td:nth-child(6){white-space:nowrap;min-width:58px;word-break:normal}
1323
+
1324
+ .cx-console-actions .cx-console-clear{width:auto;min-width:38px;padding:0 7px;white-space:nowrap;font-size:var(--cx-fs-body);letter-spacing:.02em}
1325
+ .cx-pm-glance{display:flex;align-items:center;gap:4px;margin-right:8px;max-width:430px;overflow:hidden}
1326
+ .cx-pm-glance .lb{font-size:var(--cx-fs-body);color:var(--cx-text-dim);letter-spacing:.08em;white-space:nowrap}
1327
+ .cx-pm-glance button{max-width:96px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border:1px solid var(--cx-border);background:var(--cx-surface-1);color:var(--cx-text);font-size:var(--cx-fs-body);padding:3px 6px;border-radius:3px;cursor:pointer}
1328
+ .cx-pm-glance button:hover{color:var(--cx-accent);border-color:var(--cx-accent)}
1329
+ .cx-log-btn{margin-left:6px;border:1px solid var(--cx-border);background:var(--cx-surface-1);color:var(--cx-cyan);font:var(--cx-fs-body)/1 var(--cx-mono);padding:2px 5px;border-radius:3px;cursor:pointer}
1330
+ .cx-result-card{margin-top:8px;border:1px solid var(--cx-border);border-radius:6px;background:var(--cx-surface-2);padding:9px 10px;min-width:220px}
1331
+ .cx-result-title{font:var(--cx-fs-body)/1.3 var(--cx-mono);letter-spacing:.08em;color:var(--cx-cyan);text-transform:uppercase;margin-bottom:6px}
1332
+ .cx-result-rows{display:flex;flex-direction:column;gap:3px}
1333
+ .cx-result-row{display:flex;justify-content:space-between;gap:18px;font-size:var(--cx-fs-body);color:var(--cx-text-dim)}
1334
+ .cx-result-row b{font-weight:500;color:var(--cx-text);text-align:right}
1335
+ .cx-result-link{margin-top:8px;border:1px solid var(--cx-border);background:var(--cx-surface-1);color:var(--cx-accent);border-radius:4px;padding:4px 8px;font-size:var(--cx-fs-body);cursor:pointer}
1336
+ .cx-detail-tabs{display:flex;gap:4px;padding:4px 0 2px;border-bottom:1px solid var(--cx-border);margin-bottom:4px}
1337
+ .cx-detail-tabs .cx-console-tab{padding:3px 8px;font-size:var(--cx-fs-body)}
1338
+ .cx-console-detail-raw{max-height:300px;overflow:auto;margin:4px 0 0;padding:7px;border:1px solid var(--cx-border);background:var(--cx-surface-2);font:var(--cx-fs-body)/1.5 var(--cx-mono);white-space:pre-wrap}
1339
+ .cx-console-empty{padding:10px;color:var(--cx-text-dim);font-size:var(--cx-fs-body)}
1340
+ .cx-detail-tabs{display:flex!important;flex-direction:row!important;flex-wrap:wrap!important;align-items:center!important}
1341
+ .cx-detail-tabs .cx-console-tab{display:inline-flex!important;width:auto!important;flex:0 0 auto!important;white-space:nowrap!important}
1342
+ .cx-console-detail .kv{margin-bottom:14px;padding-bottom:12px;border-bottom:1px solid var(--cx-border);row-gap:6px}
1343
+ .cx-detail-head-table{table-layout:fixed;width:100%;margin-bottom:8px}
1344
+ .cx-detail-head-table th:first-child,.cx-detail-head-table td:first-child{width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
1345
+ .cx-detail-head-table td:last-child{word-break:break-all}
1346
+ .cx-console-detail-sub{margin-top:12px}
1347
+ .cx-console-detail{display:flex!important;flex-direction:column!important;height:auto!important;max-height:100%!important;align-self:flex-start!important;overflow:auto!important;box-sizing:border-box}
1348
+ .cx-console-detail-h{justify-content:flex-end!important;margin-bottom:2px!important;flex:none}
1349
+ .cx-detail-tabs{position:sticky!important;top:0!important;z-index:8!important;background:var(--cx-surface-1)!important;flex:none;display:flex!important;flex-direction:row!important;flex-wrap:nowrap!important;border-bottom:1px solid var(--cx-border)}
1350
+ .cx-detail-tabs .cx-console-tab{flex:1 1 0!important;justify-content:center!important;min-width:0!important;white-space:nowrap!important;padding:5px 4px!important}
1351
+ .cx-console-detail .cx-console-detail-table{width:100%;margin-top:2px}
1352
+ .cx-console-detail .cx-console-detail-table .cx-console-table{width:100%}
1353
+ .cx-console-detail{width:46%!important;min-width:320px!important;background:var(--cx-surface-1)!important;padding:0 12px 12px!important}
1354
+ .cx-detail-head{position:relative;z-index:9;background:var(--cx-surface-1);display:flex;align-items:center;justify-content:space-between;gap:8px;padding:9px 0 7px;border-bottom:1px solid var(--cx-border)}
1355
+ .cx-detail-titlebox{display:flex;align-items:center;gap:6px;min-width:0}
1356
+ .cx-detail-method{font:var(--cx-fs-body)/1 var(--cx-mono);letter-spacing:.08em;padding:4px 6px;border-radius:3px;background:var(--cx-surface-2);border:1px solid var(--cx-border);color:var(--cx-cyan)}
1357
+ .cx-detail-titlebox b{font-size:var(--cx-fs);color:var(--cx-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
1358
+ .cx-detail-status{font:var(--cx-fs-body)/1 var(--cx-mono);padding:4px 5px;border-radius:3px;border:1px solid var(--cx-border)}
1359
+ .cx-detail-status.ok{color:#66e0a3;border-color:rgba(102,224,163,.35);background:rgba(102,224,163,.08)}
1360
+ .cx-detail-status.bad{color:#ff7a7a;border-color:rgba(255,122,122,.4);background:rgba(255,122,122,.08)}
1361
+ .cx-detail-head-actions{display:flex;align-items:center;gap:5px;flex:none}
1362
+ .cx-detail-logid{font:var(--cx-fs-body)/1 var(--cx-mono);color:var(--cx-text-faint);border:1px solid var(--cx-border);border-radius:3px;padding:3px 5px;max-width:88px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
1363
+ .cx-console-detail-h{display:none!important}
1364
+ .cx-detail-tabs{padding:7px 0 3px!important;margin-bottom:0!important;gap:3px!important}
1365
+ .cx-detail-tabs .cx-console-tab{border-radius:4px;border-bottom:0!important;padding:5px 6px!important;color:var(--cx-text-dim);background:transparent}
1366
+ .cx-detail-tabs .cx-console-tab.on{background:var(--cx-accent-soft);color:var(--cx-accent)}
1367
+ .cx-detail-section{margin:12px 0 5px;font:var(--cx-fs-body)/1.4 var(--cx-mono);letter-spacing:.12em;color:var(--cx-text-faint);text-transform:uppercase}
1368
+ .cx-detail-kv{grid-template-columns:78px minmax(0,1fr)!important;border:1px solid var(--cx-border);border-radius:5px;padding:7px 8px!important;background:var(--cx-surface-2)}
1369
+ .cx-detail-kv .k{color:var(--cx-text-faint);font-size:var(--cx-fs-body)}
1370
+ .cx-detail-kv .v{color:var(--cx-text);overflow-wrap:anywhere}
1371
+ .cx-detail-head-table{margin-top:2px!important;border:1px solid var(--cx-border);border-radius:4px;overflow:hidden}
1372
+ .cx-detail-head-table th{font-size:var(--cx-fs-body);letter-spacing:.1em;padding:5px 7px!important}
1373
+ .cx-detail-head-table td{font-size:var(--cx-fs-body);padding:5px 7px!important}
1374
+ .cx-detail-head-table tbody tr:nth-child(even) td{background:color-mix(in srgb,var(--cx-surface-2) 45%,transparent)}
1375
+ .cx-console-detail{max-width:100%!important;min-width:0!important;overflow-x:hidden!important}
1376
+ .cx-detail-kv{min-width:0!important}
1377
+ .cx-detail-kv .v{min-width:0!important;overflow-wrap:anywhere!important;word-break:break-word!important;white-space:normal!important}
1378
+ .cx-console-detail .kv>span{min-width:0!important;overflow-wrap:anywhere;word-break:break-word}
1379
+ .cx-console-detail .cx-console-table{max-width:100%!important;table-layout:fixed!important}
1380
+ .cx-console-detail .cx-console-table td,.cx-console-detail .cx-console-table th{min-width:0!important;overflow-wrap:anywhere!important;word-break:break-word!important;white-space:normal!important}
1381
+ .cx-console-detail .cx-console-table td:first-child,.cx-console-detail .cx-console-table th:first-child{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}
1382
+ .cx-detail-tabs .cx-detail-close{flex:0 0 auto!important;border:0!important;background:transparent!important;color:var(--cx-text-dim)!important;font:var(--cx-fs-title)/1 var(--cx-mono)!important;padding:3px 5px!important;cursor:pointer}
1383
+ .cx-detail-tabs{top:0!important}
1384
+ .cx-git-sections{display:flex;flex-direction:column;border-top:1px solid var(--cx-border);margin-top:6px;padding-top:2px}
1385
+ .cx-git-sections .cx-tree-recent{border-bottom:0;margin:0;padding:0}
1386
+ .cx-git-sections .cx-tree-sect-top{margin-top:0;border-top:0;padding:6px 0}
1387
+ .cx-dev-explorer .cx-dev-b{display:flex;flex-direction:column}
1388
+ .cx-dev-explorer .cx-tree{flex:1;min-height:0;overflow:auto}
1389
+ .cx-git-sections{flex:none!important;margin-top:auto!important;border-top:1px solid var(--cx-border);padding-top:2px}
1390
+ .cx-git-sections .cx-tree-sect-top{padding:6px 8px!important;margin:2px 0!important;border-top:0!important;border-radius:4px}
1391
+ .cx-git-sections .cx-tree-sect-top .chev{width:10px}
1392
+ .cx-dev-explorer .cx-tree>*{flex:0 0 auto!important;min-height:auto!important}
1393
+ .cx-dev-explorer .cx-tree .cx-tree-item,.cx-dev-explorer .cx-tree .cx-tree-sect{flex:none!important}
1394
+ .cx-dev-explorer .cx-tree .cx-git-sections{flex:none!important;margin-top:auto!important}
1395
+ .cx-git-history-head{border-top:1px solid var(--cx-border)!important;border-bottom:1px solid var(--cx-border)!important;margin-top:4px!important}
1396
+ .cx-port-row{display:flex;gap:6px;align-items:center}
1397
+ .cx-port-row .cx-input{flex:1;min-width:0}
1398
+ .cx-init-debug-h{margin-top:12px;font:var(--cx-fs-body)/1.4 var(--cx-mono);letter-spacing:.12em;color:var(--cx-cyan);text-transform:uppercase}
1399
+ .cx-init-debug{max-height:220px;overflow:auto;margin-top:4px;padding:8px;border:1px solid var(--cx-border);border-radius:4px;background:var(--cx-surface-2);font:var(--cx-fs-body)/1.55 var(--cx-mono);color:var(--cx-text-dim);white-space:pre-wrap;word-break:break-word}
1400
+ .cx-init-debug{max-height:220px;overflow:auto;margin-top:4px;border:1px solid var(--cx-border);border-radius:4px;background:var(--cx-surface-2)}
1401
+ .cx-init-log{width:100%;border-collapse:collapse;font:var(--cx-fs-body)/1.5 var(--cx-mono);table-layout:fixed}
1402
+ .cx-init-log th{position:sticky;top:0;background:var(--cx-surface-1);color:var(--cx-text-faint);text-align:left;padding:4px 6px;border-bottom:1px solid var(--cx-border);font-size:var(--cx-fs-body);letter-spacing:.08em}
1403
+ .cx-init-log td{padding:4px 6px;border-bottom:1px solid color-mix(in srgb,var(--cx-border) 45%,transparent);color:var(--cx-text-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
1404
+ .cx-init-log td.impact{white-space:normal;word-break:break-word}
1405
+ .cx-init-log tr.error td{color:#ff7a7a}
1406
+ .cx-init-log tr.ok td:last-child{color:#66e0a3}
1407
+ .cx-init-log th:nth-child(1),.cx-init-log td:nth-child(1){width:70px}
1408
+ .cx-init-log th:nth-child(2),.cx-init-log td:nth-child(2){width:52px}
1409
+ .cx-init-log th:nth-child(3),.cx-init-log td:nth-child(3){width:120px}
1410
+ .cx-init-log th:nth-child(5),.cx-init-log td:nth-child(5){width:48px}
1411
+ .cx-space-picker{display:flex;flex-wrap:wrap;gap:6px;margin-top:2px}
1412
+ .cx-space-check{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--cx-border);background:var(--cx-surface-1);border-radius:4px;padding:5px 7px;font-size:var(--cx-fs-body);color:var(--cx-text-dim);cursor:pointer}
1413
+ .cx-space-check input{accent-color:var(--cx-cyan);margin:0}
1414
+ .cx-space-check.on{border-color:var(--cx-cyan);color:var(--cx-text);background:var(--cx-accent-soft)}
1415
+ .cx-space-check.forced{cursor:default;opacity:1}
1416
+ .cx-space-check i{font-style:normal;font-size:var(--cx-fs-body);color:var(--cx-cyan)}
1417
+ .cx-init-card .cx-foot{position:sticky;top:0;z-index:5;background:var(--cx-surface-1);border-bottom:1px solid var(--cx-border);padding-top:8px;padding-bottom:8px}
1418
+ .cx-init-debug-h{display:flex;align-items:center;gap:8px;justify-content:space-between}
1419
+ .cx-init-debug{max-height:150px}
1420
+ .cx-init-debug.expanded{max-height:420px}
1421
+ .cx-backend-log{display:flex;flex-direction:column;gap:6px;min-height:0}
1422
+ .cx-backend-log-h{display:flex;align-items:center;gap:8px;justify-content:space-between;color:var(--cx-text-dim);font:var(--cx-fs-body)/1.4 var(--cx-mono)}
1423
+ .cx-term-log{max-height:360px;overflow:auto;margin:0;padding:8px;border:1px solid var(--cx-border);background:#020a10;color:#b9d7e8;font:var(--cx-fs-body)/1.6 var(--cx-mono);white-space:pre-wrap;word-break:break-word}
1424
+ .cx-term-line{padding:0 2px}
1425
+ .cx-term-line.warn{color:#f3c969;background:rgba(243,201,105,.05)}
1426
+ .cx-term-line.err{color:#ff7a7a;background:rgba(255,122,122,.06)}
1427
+ .cx-term-log .t{color:#5c9fb8}
1428
+ .cx-term-log .id{color:#61e0c0}
1429
+ .cx-term-log .link{color:#7cc7ff;text-decoration:underline;text-underline-offset:2px}
1430
+ .cx-term-log .mark{font-weight:700}
1431
+ .cx-pm-caret{display:none;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border:0;background:transparent;color:var(--cx-cyan);font:700 var(--cx-fs-title)/1 var(--cx-mono);cursor:pointer;flex:none}
1432
+ .cx-pm-caret span{transform:translateY(-1px)}
1433
+ .cx-pm-kind{display:inline-flex;align-items:center;justify-content:center;width:20px;flex:none}
1434
+ .cx-pm-h:hover .cx-pm-caret,.cx-pm-h:focus-within .cx-pm-caret{display:inline-flex}
1435
+ .cx-pm-h:hover .cx-pm-kind,.cx-pm-h:focus-within .cx-pm-kind{display:none}
1436
+ .cx-pm-create-big{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;margin-top:9px;padding:11px 12px;border:1px dashed var(--cx-cyan);border-radius:5px;background:color-mix(in srgb,var(--cx-cyan) 7%,transparent);color:var(--cx-cyan);font:600 var(--cx-fs)/1 var(--cx-font);cursor:pointer;letter-spacing:.04em}
1437
+ .cx-pm-create-big span{font:400 var(--cx-fs-title)/1 var(--cx-mono)}
1438
+ .cx-pm-create-big:hover{background:color-mix(in srgb,var(--cx-cyan) 14%,transparent);border-style:solid}
1439
+ .cx-icon{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;min-width:20px;padding:0;border:0;background:transparent;color:currentColor;line-height:1;vertical-align:middle}
1440
+ .cx-icon svg{display:block;width:16px;height:16px;flex:none}
1441
+ .cx-pm-caret.cx-icon,.cx-pm-kind{width:20px;min-width:20px;height:20px}
1442
+ .cx-pm-refresh.cx-icon,.cx-pm-op.cx-icon{width:20px;height:20px;padding:0}
1443
+ .cx-fold.cx-icon{width:20px;height:20px}
1444
+ .cx-pm-create-big .cx-icon{width:18px;height:18px}
1445
+ .cx-pm-caret.cx-icon{display:none}
1446
+ .cx-pm-h:hover .cx-pm-caret.cx-icon,.cx-pm-h:focus-within .cx-pm-caret.cx-icon{display:inline-flex}
1447
+ .cx-btn.cx-icon{padding:0}
1448
+ .cx-pm-refresh.cx-icon,.cx-pm-op.cx-icon,.cx-term-add.cx-icon{background:transparent;border:0}
1449
+ .cx-view{display:inline-flex;align-items:center;gap:5px}
1450
+ .cx-view .cx-icon,.cx-view svg{width:14px;height:14px;min-width:14px}
1451
+ .cx-view svg{stroke-width:1.4}
1452
+ .cx-pm-h .cx-pm-refresh,.cx-tree-sect .cx-pm-refresh{visibility:hidden;opacity:0;transition:opacity .12s}
1453
+ .cx-pm-h:hover .cx-pm-refresh,.cx-pm-h:focus-within .cx-pm-refresh,.cx-tree-sect:hover .cx-pm-refresh,.cx-tree-sect:focus-within .cx-pm-refresh{visibility:visible;opacity:1}
1454
+ .cx-tree-sect .cx-pm-op{margin-left:0}
1455
+ .cx-pipe .cx-stage .cx-icon svg{width:14px;height:14px;stroke-width:1.4}
1456
+ .cx-panel .cx-tool-refresh{visibility:hidden;opacity:0;transition:opacity .12s}
1457
+ .cx-panel:hover .cx-tool-refresh,.cx-panel:focus-within .cx-tool-refresh{visibility:visible;opacity:1}
1458
+ .cx-ph .cx-icon{width:20px;height:20px;color:var(--cx-cyan)}
1459
+ .cx-ph .cx-icon svg{width:18px;height:18px;stroke-width:1.4}
1460
+ .cx-stage .cx-icon{color:currentColor}
1461
+ .cx-chip .cx-icon{width:14px;height:14px;color:var(--cx-cyan)}
1462
+ .cx-chip .cx-icon svg{width:14px;height:14px;stroke-width:1.4}
1463
+ .cx-aff{display:inline-flex;align-items:center;gap:6px;min-width:0;border:1px solid transparent;border-radius:4px;background:transparent;color:inherit;font:inherit;line-height:1.2;transition:background .12s,color .12s,border-color .12s,opacity .12s}
1464
+ .cx-aff .cx-aff-zh,.cx-aff .cx-aff-en{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
1465
+ .cx-aff--icon .cx-aff-zh,.cx-aff--icon .cx-aff-en{display:none}
1466
+ .cx-aff--short .cx-aff-en{display:none}
1467
+ .cx-aff--text .cx-icon{display:none}
1468
+ .cx-aff.action{padding:2px 4px;cursor:pointer}
1469
+ .cx-aff.action:hover{background:color-mix(in srgb,var(--cx-accent) 12%,transparent);border-color:color-mix(in srgb,var(--cx-accent) 30%,transparent);color:var(--cx-accent)}
1470
+ .cx-aff.on{background:color-mix(in srgb,var(--cx-accent) 14%,transparent);border-color:color-mix(in srgb,var(--cx-accent) 35%,transparent);color:var(--cx-accent)}
1471
+ .cx-panel-title{gap:7px;color:var(--cx-text)}
1472
+ .cx-panel-title .cx-aff-zh{font:700 var(--cx-fs-body)/1.2 var(--cx-font);letter-spacing:.12em}
1473
+ .cx-panel-title .cx-aff-en{font:600 var(--cx-fs-body)/1.2 var(--cx-font);letter-spacing:.12em;color:var(--cx-text-faint)}
1474
+ .cx-stage-title{gap:6px}
1475
+ .cx-stage-title .cx-aff-zh{font-size:var(--cx-fs-body);letter-spacing:.12em}
1476
+ .cx-chip.cx-aff{padding:5px 9px;border:1px solid var(--cx-line);background:rgba(7,20,32,.75);white-space:nowrap}
1477
+ .cx-chip.cx-aff:hover{border-color:var(--cx-cyan);background:color-mix(in srgb,var(--cx-cyan) 10%,rgba(7,20,32,.75))}
1478
+ .cx-aff.action:active{transform:translateY(1px)}
1479
+ .cx-icon{cursor:pointer;border-radius:4px;transition:background .12s,color .12s,opacity .12s}
1480
+ .cx-icon:hover{background:color-mix(in srgb,var(--cx-accent) 12%,transparent);color:var(--cx-accent)}
1481
+ .cx-icon:active{transform:translateY(1px)}
1482
+ .cx-pm-refresh.cx-icon:hover,.cx-tree-sect .cx-pm-refresh.cx-icon:hover{background:transparent}
1483
+ .cx-ph .cx-panel-title{flex:1;min-width:0;color:#c9f7ff}
1484
+ .cx-shell .cx-ph .cx-panel-title{color:var(--cx-text-strong)}
1485
+ .cx-ph .cx-panel-title .cx-aff-en{color:var(--cx-text-faint)}
1486
+ .cx-aff--icon.action{padding:0}
1487
+ .cx-view.cx-aff{padding:6px 10px;border:0;border-right:1px solid var(--cx-line);border-radius:0;background:transparent}
1488
+ .cx-view.cx-aff:hover{border-right-color:var(--cx-line);background:color-mix(in srgb,var(--cx-accent) 12%,transparent)}
1489
+ .cx-view.cx-aff.on{background:color-mix(in srgb,var(--cx-accent) 16%,transparent);color:var(--cx-accent)}
1490
+ .cx-aff{vertical-align:middle;line-height:1}
1491
+ .cx-aff>*{align-self:center;flex:none}
1492
+ .cx-aff .cx-aff-zh,.cx-aff .cx-aff-en,.cx-aff>B{display:inline-flex;align-items:center;align-self:center;min-height:1em;line-height:1}
1493
+ .cx-aff .cx-aff-zh{font-size:var(--cx-fs-body)}
1494
+ .cx-aff .cx-aff-en{font-size:var(--cx-fs-body);letter-spacing:.08em}
1495
+ .cx-panel-title,.cx-stage-title{height:20px}
1496
+ .cx-panel-title .cx-aff-zh,.cx-panel-title .cx-aff-en,.cx-stage-title .cx-aff-zh{height:20px}
1497
+ .cx-chip.cx-aff .cx-aff-zh,.cx-chip.cx-aff .cx-aff-en,.cx-chip.cx-aff b{height:14px}
1498
+ .cx-aff{height:20px}
1499
+ .cx-aff .cx-aff-zh,.cx-aff .cx-aff-en{display:inline-flex;align-items:center;height:20px;line-height:20px;vertical-align:middle;padding:0}
1500
+ .cx-aff .cx-icon{height:20px;line-height:0;align-items:center;justify-content:center}
1501
+ .cx-aff>b{display:inline-flex;align-items:center;height:20px;line-height:20px}
1502
+ .cx-chip.cx-aff{height:24px}
1503
+ .cx-chip.cx-aff .cx-aff-zh,.cx-chip.cx-aff .cx-aff-en,.cx-chip.cx-aff>b{height:14px;line-height:14px}
1504
+ .cx-view.cx-aff{height:28px}
1505
+ .cx-view.cx-aff .cx-aff-zh,.cx-view.cx-aff .cx-aff-en{height:20px;line-height:20px}
1506
+ .cx-ph .cnt{display:inline-flex;align-items:center;height:20px;line-height:20px}
1507
+ .cx-entity{display:flex;align-items:center;gap:10px;min-width:0;width:100%;padding:4px 2px;border-radius:4px;cursor:pointer;transition:background .12s}
1508
+ .cx-entity:hover{background:color-mix(in srgb,var(--cx-accent) 7%,transparent)}
1509
+ .cx-entity.on{background:color-mix(in srgb,var(--cx-accent) 10%,transparent)}
1510
+ .cx-entity-pic{width:46px;height:46px;flex:none;display:flex;align-items:center;justify-content:center;overflow:hidden;border:1px solid var(--cx-line);border-radius:5px;background:var(--cx-surface-2);color:var(--cx-cyan)}
1511
+ .cx-entity-pic img{width:100%;height:100%;object-fit:cover;display:block}
1512
+ .cx-entity-copy{min-width:0;flex:1;display:flex;flex-direction:column;gap:4px}
1513
+ .cx-entity-head{display:flex;align-items:center;gap:6px;min-width:0}
1514
+ .cx-entity-type{font:700 var(--cx-fs-body)/1 var(--cx-font);letter-spacing:.08em;color:var(--cx-cyan);text-transform:uppercase;white-space:nowrap}
1515
+ .cx-entity-name{font:700 var(--cx-fs)/1.2 var(--cx-font);color:var(--cx-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}
1516
+ .cx-entity-status{font:600 var(--cx-fs-body)/1 var(--cx-font);letter-spacing:.06em;white-space:nowrap;padding:3px 5px;border-radius:3px;border:1px solid var(--cx-line)}
1517
+ .cx-entity-status.ok{color:var(--cx-green);border-color:color-mix(in srgb,var(--cx-green) 45%,transparent)}
1518
+ .cx-entity-status.off{color:var(--cx-muted)}
1519
+ .cx-entity-meta{font:var(--cx-fs-body)/1.4 var(--cx-mono);color:var(--cx-text-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
1520
+ .cx-entity-pic{width:38px;height:38px;align-self:center}
1521
+ .cx-entity-copy{gap:4px}
1522
+ .cx-entity-head{height:20px}
1523
+ .cx-entity-meta{height:14px;line-height:14px}
1524
+ .cx-stage.cx-aff,.cx-chip.cx-aff{height:32px;box-sizing:border-box;padding:0 10px;border:1px solid var(--cx-line);border-radius:4px;background:transparent;color:var(--cx-text-dim);gap:6px}
1525
+ .cx-stage.cx-aff .cx-aff-zh,.cx-chip.cx-aff .cx-aff-zh,.cx-stage.cx-aff .cx-aff-value,.cx-chip.cx-aff b{height:20px;line-height:20px;font-size:var(--cx-fs-body);letter-spacing:.08em;display:inline-flex;align-items:center}
1526
+ .cx-stage.cx-aff .cx-icon,.cx-chip.cx-aff .cx-icon{width:18px;height:18px;min-width:18px;color:var(--cx-cyan)}
1527
+ .cx-stage.cx-aff .cx-icon svg,.cx-chip.cx-aff .cx-icon svg{width:18px;height:18px}
1528
+ .cx-stage.cx-aff:hover,.cx-chip.cx-aff:hover{background:color-mix(in srgb,var(--cx-accent) 10%,transparent);border-color:color-mix(in srgb,var(--cx-accent) 35%,transparent);color:var(--cx-accent)}
1529
+ .cx-stage.cx-aff.on,.cx-chip.cx-aff.on{background:color-mix(in srgb,var(--cx-accent) 14%,transparent);border-color:color-mix(in srgb,var(--cx-accent) 45%,transparent);color:var(--cx-accent)}
1530
+ .cx-pipe>.cx-stage.cx-aff:not(.on){background:transparent}
1531
+ .cx-shell[data-theme="light"] .cx-stage.cx-aff,.cx-shell[data-theme="light"] .cx-chip.cx-aff{background:transparent;border-color:var(--cx-line)}
1532
+ .cx-pipe>.cx-stage.cx-aff,.cx-pipe .cx-chips .cx-chip.cx-aff{height:36px;flex:0 0 auto;min-width:0;padding:0 12px;background:var(--cx-surface-1);border-color:var(--cx-line);color:var(--cx-text-dim)}
1533
+ .cx-pipe>.cx-stage.cx-aff .cx-aff-zh,.cx-pipe>.cx-stage.cx-aff .cx-aff-value{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
1534
+ .cx-pipe .cx-chips .cx-chip.cx-aff .cx-aff-zh,.cx-pipe .cx-chips .cx-chip.cx-aff b{max-width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
1535
+ .cx-pipe>.cx-stage.cx-aff:hover,.cx-pipe .cx-chips .cx-chip.cx-aff:hover{background:color-mix(in srgb,var(--cx-accent) 10%,var(--cx-surface-1));border-color:color-mix(in srgb,var(--cx-accent) 35%,transparent);color:var(--cx-accent)}
1536
+ .cx-pipe>.cx-stage.cx-aff.on,.cx-pipe .cx-chips .cx-chip.cx-aff.on{background:color-mix(in srgb,var(--cx-accent) 12%,var(--cx-surface-1));border-color:color-mix(in srgb,var(--cx-accent) 40%,transparent);color:var(--cx-accent)}
1537
+ .cx-shell[data-theme="light"] .cx-pipe>.cx-stage.cx-aff,.cx-shell[data-theme="light"] .cx-pipe .cx-chips .cx-chip.cx-aff{background:#fff;border-color:var(--cx-line)}
1538
+ .cx-bar{display:flex;align-items:center;gap:6px;min-height:36px;padding:0 10px;border-bottom:1px solid var(--cx-line)}
1539
+ .cx-workspace{display:flex;flex-direction:column;height:100%;min-height:0;background:var(--cx-bg)}
1540
+ .cx-workspace-header,.cx-workspace-tabs,.cx-workspace-toolbar{flex:none}
1541
+ .cx-workspace-body{display:grid;grid-template-columns:auto minmax(0,1fr) auto;min-height:0;flex:1}
1542
+ .cx-workspace-left,.cx-workspace-right{min-width:0;overflow:auto;border-right:1px solid var(--cx-line)}
1543
+ .cx-workspace-right{border-right:0;border-left:1px solid var(--cx-line)}
1544
+ .cx-workspace-main{display:flex;flex-direction:column;min-width:0;min-height:0}
1545
+ .cx-workspace-canvas{display:grid;grid-template-columns:minmax(0,1fr) auto;min-height:0;flex:1}
1546
+ .cx-workspace-content,.cx-workspace-preview{min-width:0;min-height:0;overflow:auto}
1547
+ .cx-workspace-preview{border-left:1px solid var(--cx-line)}
1548
+ .cx-workspace-output{flex:none;max-height:42%;overflow:auto;border-top:1px solid var(--cx-line)}
1549
+ .cx-workspace-status{flex:none;min-height:24px;padding:0 10px;display:flex;align-items:center;border-top:1px solid var(--cx-line);font:var(--cx-fs-body)/1.4 var(--cx-mono);color:var(--cx-text-dim)}
1550
+ .cx-card-list{display:flex;flex-direction:column;gap:6px;min-width:0}
1551
+ .cx-table-list,.cx-tree-list{min-width:0}
1552
+ .cx-pm-card .cx-entity{padding:0 0 4px}
1553
+ .cx-pm-card .cx-entity-pic{width:30px;height:30px}
1554
+ .cx-pm-card .cx-entity-type{font-size:var(--cx-fs-body)}
1555
+ .cx-pm-card .cx-entity-name{font-size:var(--cx-fs)}
1556
+ .cx-entity-status.warn{color:var(--cx-orange);border-color:color-mix(in srgb,var(--cx-orange) 45%,transparent)}
1557
+ .cx-stage.cx-aff,.cx-chip.cx-aff{height:var(--cx-control-h)}
1558
+ .cx-aff .cx-aff-zh,.cx-aff .cx-aff-en,.cx-aff>b{height:var(--cx-line-h);line-height:var(--cx-line-h)}
1559
+ /* Address bar: breadcrumb segments + optional input + actions, one 32px line box. */
1560
+ .cx-addressbar{display:flex;align-items:center;gap:6px;height:32px;min-width:0;padding:0 8px;border:1px solid var(--cx-line);border-radius:4px;background:var(--cx-surface-1);color:var(--cx-text-dim);font:var(--cx-fs-body)/1 var(--cx-font)}
1561
+ .cx-addressbar-segments{display:flex;align-items:center;gap:3px;min-width:0;overflow:hidden}
1562
+ .cx-addressbar-seg{display:inline-flex;align-items:center;gap:5px;height:24px;min-width:0;padding:0 5px;border:1px solid transparent;border-radius:3px;background:transparent;color:var(--cx-text-dim);font:var(--cx-fs-body)/1 var(--cx-font);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
1563
+ .cx-addressbar-seg:hover,.cx-addressbar-seg.on{color:var(--cx-accent);border-color:color-mix(in srgb,var(--cx-accent) 30%,transparent);background:color-mix(in srgb,var(--cx-accent) 8%,transparent)}
1564
+ .cx-addressbar-seg .cx-icon{width:13px;height:13px;min-width:13px;color:currentColor}
1565
+ .cx-addressbar-input{flex:1;min-width:0}
1566
+ .cx-addressbar-actions{display:flex;align-items:center;gap:4px;flex:none}
1567
+ /* Dropdowns and context menus: aligned rows, scrollable, never run off-screen. */
1568
+ .cx-menu,.cx-tree-menu,.cx-drop-pop,.cx-ctxmenu{max-height:min(60vh,420px);overflow-y:auto;overscroll-behavior:contain;min-width:180px;max-width:min(420px,calc(100vw - 16px))}
1569
+ .cx-menu-item,.cx-tree-menu .cx-menu-item,.cx-drop-item,.cx-ctxmenu button{display:flex;align-items:center;min-height:28px;padding:6px 9px;gap:8px;line-height:1.25;text-align:left;white-space:nowrap}
1570
+ .cx-menu-item .mi,.cx-tree-menu .cx-menu-item .mi{width:16px;min-width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center;flex:none}
1571
+ .cx-menu-item .lb,.cx-tree-menu .cx-menu-item .lb{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}
1572
+ .cx-menu-item .hint{margin-left:auto;flex:none}
1573
+ .cx-menu-item:hover,.cx-tree-menu .cx-menu-item:hover,.cx-drop-item:hover,.cx-ctxmenu button:hover{background:color-mix(in srgb,var(--cx-accent) 12%,transparent);color:var(--cx-accent)}
1574
+ .cx-menu-item.danger,.cx-ctxmenu button.danger{color:var(--cx-red)}
1575
+ .cx-tree-menu{padding:4px}
1576
+ .cx-tree-menu .cx-menu-item{gap:6px;padding-left:0}
1577
+ .cx-tree-menu .cx-menu-item .mi{width:12px;min-width:12px;height:12px}
1578
+ .cx-menu-more{position:sticky;bottom:-4px;margin:4px -4px -4px;padding:6px 9px;border-top:1px solid var(--cx-border);background:var(--cx-surface-1);color:var(--cx-text-faint);font:var(--cx-fs-body)/1.3 var(--cx-font);text-align:center;pointer-events:none}
1579
+ /* All chrome bars share the same vertical center line. */
1580
+ .cx-header,.cx-pipe,.cx-ph,.cx-tools,.cx-crumb,.cx-statusbar,.cx-dev-h,.cx-webtabs,.cx-addrbar,.cx-addressbar,.cx-bar{display:flex;align-items:center}
1581
+ .cx-header>*,.cx-pipe>*,.cx-ph>*,.cx-tools>*,.cx-crumb>*,.cx-statusbar>*,.cx-dev-h>*,.cx-webtabs>*,.cx-addrbar>*,.cx-addressbar>*,.cx-bar>*{align-self:center}
1582
+ .cx-ph{min-height:38px}
1583
+ .cx-tools{min-height:36px;align-content:center}
1584
+ .cx-crumb{min-height:32px}
1585
+ .cx-webtabs{align-items:center;padding-bottom:4px}
1586
+ .cx-webtab{align-self:center}
1587
+ .cx-addrbar,.cx-addressbar{min-height:38px}
1588
+ .cx-statusbar{min-height:26px}
1589
+ .cx-dev-h{min-height:32px}
1590
+
1591
+ /* ── 工具栏对齐修复(2026-11-08)──
1592
+ 1. 过滤组件(label + chips)上下居中:统一高度,避免 label 与 chip 基线错位
1593
+ 2. 工具栏图标按钮长宽一致:.cx-btn.xs 的 height 会覆盖 .cx-icon-btn,这里用 3 类选择器拉平 */
1594
+ .cx-tools{align-items:center}
1595
+ .cx-tools .cx-filter{align-self:center}
1596
+ .cx-filter.inline{align-items:center;justify-content:flex-start}
1597
+ .cx-filter.inline .cx-filter-label{display:inline-flex;align-items:center;height:24px;line-height:1}
1598
+ .cx-filter.inline .cx-filter-chip{height:24px;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box}
1599
+ .cx-btn.xs.cx-icon-btn{width:26px;min-width:26px;height:26px;padding:0;display:inline-grid;place-items:center;box-sizing:border-box}
1600
+
1601
+ /* ── 初始化弹层:浅色主题下保持深色 splash,消除白块(2026-11-08)──
1602
+ .cx-init-card 是硬编码深色,而 .cx-input / .cx-foot 走 var(--cx-surface-*)
1603
+ 在浅色主题会翻成白色 → 白输入框 + 白页脚条。这里把 init 内部 token 钉死为深色。 */
1604
+ .cx-init{--cx-surface-0:#050a12;--cx-surface-1:#08131f;--cx-surface-2:#0b1b2b;--cx-border:#16384d;--cx-line:#16384d;--cx-text:#d9f4ff;--cx-text-dim:#8fb8c9;--cx-text-faint:#6f9bb3}
1605
+ .cx-init .cx-input,.cx-init .cx-input:focus{background:rgba(4,16,26,.92)!important;border-color:rgba(var(--cx-hue-rgb),.28)!important;color:#e6fbff!important}
1606
+ .cx-init .cx-field,.cx-init .cx-form label{color:#8fb8c9!important}
1607
+ .cx-init-card .cx-foot{position:static;background:transparent;border-bottom:0}
1608
+
1609
+ /* 控件定位:调试栏点条目 → 滚动到控件并高亮 */
1610
+ .cx-locate-flash{outline:2px solid var(--cx-green)!important;outline-offset:2px;box-shadow:0 0 0 4px rgba(var(--cx-green-rgb),.28)!important;animation:cx-locate-pulse .7s ease 2;z-index:5;position:relative}
1611
+ @keyframes cx-locate-pulse{50%{box-shadow:0 0 0 10px rgba(var(--cx-green-rgb),.10)!important}}
1612
+ .cx-console-table td.cx-loc{color:var(--cx-green);text-align:center;font-size:var(--cx-fs)}
1613
+
1614
+ /* 工具栏上下边距 + 上下居中;官方空间列表图标/中英文对齐;部署按钮加宽(2026-11-08) */
1615
+ .cx-tools{padding-top:9px;padding-bottom:9px;min-height:42px;align-items:center}
1616
+ .cx-pm-tools{padding:6px 0;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
1617
+ .cx-space-check,.cx-official-row{display:flex;align-items:center;gap:6px;min-height:22px}
1618
+ .cx-space-ico{display:inline-flex;align-items:center;justify-content:center;width:16px;flex:none;color:var(--cx-cyan)}
1619
+ .cx-space-name{font-size:var(--cx-fs);color:var(--cx-text)}
1620
+ .cx-space-en{font-style:normal;font-size:var(--cx-fs-body);letter-spacing:.02em;color:var(--cx-text-faint);white-space:nowrap}
1621
+ .cx-space-date{font-size:var(--cx-fs-body);color:var(--cx-text-faint);opacity:.75}
1622
+ .cx-space-check.forced,.cx-official-row.forced{cursor:default}
1623
+ .cx-deploy-btn{width:100%;max-width:100%;min-width:0;padding:0 18px;justify-content:center;display:flex}
1624
+ .cx-entity-ico{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;color:var(--cx-cyan)}
1625
+
1626
+ /* 已安装空间卡片标题:图标 + 中文 + 英文(与待安装列表一致) */
1627
+ .cx-space-title{display:inline-flex;align-items:center;gap:5px;min-width:0;flex-wrap:wrap;white-space:normal;overflow:visible}
1628
+ .cx-space-title .cx-space-name{font-weight:700;color:var(--cx-text)}
1629
+ .cx-space-title .cx-space-ico{color:var(--cx-cyan)}
1630
+
1631
+ /* 网页标签图标 + 管理视图地址栏(2026-11-08) */
1632
+ .cx-webtab-ico{width:14px;height:14px;border-radius:3px;object-fit:cover;flex:none;background:rgba(var(--cx-hue-rgb),.12)}
1633
+ .cx-webtabs .cx-webtab,.cx-chat-tabs .cx-chat-tab{display:inline-flex;align-items:center;gap:6px}
1634
+ .cx-web .cx-addrbar,.cx-webframe .cx-addrbar{display:flex;align-items:center;gap:6px;padding:6px 8px;border-bottom:1px solid var(--cx-border);background:var(--cx-surface-2)}
1635
+ .cx-web .cx-addr-input,.cx-webframe .cx-addr-input{flex:1;min-width:0;height:24px;background:var(--cx-surface-0);border:1px solid var(--cx-border);color:var(--cx-text);font:var(--cx-fs) var(--cx-font);padding:0 8px;border-radius:4px}
1636
+
1637
+ /* 管理视图网页最大化 + 地址栏 */
1638
+ .cx-web.max{position:absolute;top:44px;left:0;right:0;bottom:0;z-index:520;background:var(--cx-surface-0);padding:8px;display:flex;flex-direction:column}
1639
+ .cx-web.max .cx-webframe{flex:1;min-height:0}
1640
+
1641
+ /* 面板最大化:铺满插件区域,只保留顶部标题栏(2026-11-08) */
1642
+ .cx-mapsec.max,.cx-cal.max{position:absolute;left:0;right:0;top:44px;bottom:0;z-index:520;background:var(--cx-surface-0);padding:8px;display:flex;flex-direction:column;overflow:auto;margin:0}
1643
+ .cx-mapsec.max .cx-taskmap{flex:1;min-height:0}
1644
+ .cx-mapsec.max .cx-taskmap-leaflet{flex:1;min-height:0}
1645
+ .cx-cal.max{overflow:auto}
1646
+
1647
+ /* 最大化内容撑满(地图/日历与网页一致,2026-11-08) */
1648
+ .cx-mapsec.max .cx-taskmap{position:static;flex:1;display:flex;flex-direction:column;min-height:0;margin-top:8px}
1649
+ .cx-mapsec.max .cx-taskmap-leaflet{flex:1;height:auto;min-height:0}
1650
+ .cx-cal.max .cx-cal-grid{flex:1;grid-auto-rows:1fr}
1651
+ .cx-cal.max .cx-cal-day{height:auto;min-height:30px}
1652
+ .cx-cal.max .cx-cal-w{flex:none}
1653
+
1654
+ /* 最大化 = 插件输出区(fixed 到 shell 矩形,跳过标题栏) */
1655
+ .cx-web.max,.cx-mapsec.max,.cx-calsec.max,.cx-cal.max{
1656
+ position:fixed;
1657
+ left:var(--cx-shell-left,0);
1658
+ top:calc(var(--cx-shell-top,0px) + 44px);
1659
+ width:var(--cx-shell-width,100vw);
1660
+ height:calc(var(--cx-shell-height,100vh) - 44px);
1661
+ z-index:520;background:var(--cx-surface-0);padding:8px;margin:0;
1662
+ display:flex;flex-direction:column;overflow:auto;box-sizing:border-box;
1663
+ }
1664
+ .cx-calsec.max .cx-cal{flex:1;min-height:0;display:flex;flex-direction:column}
1665
+ .cx-calsec.max .cx-cal-grid{flex:1;grid-auto-rows:1fr}
1666
+ .cx-calsec.max .cx-cal-day{height:auto;min-height:30px}
1667
+
1668
+ /* 最大化:脱离侧栏,相对 chat 满区(与网页最大化的 flex 机制一致) */
1669
+ .cx-chat.maxview .cx-pm-side{position:static!important;overflow:visible!important;width:auto!important;border:0!important;padding:0!important;background:transparent!important}
1670
+ .cx-chat.maxview .cx-mapsec.max,
1671
+ .cx-chat.maxview .cx-calsec.max{position:absolute;left:0;right:0;top:0;bottom:0;z-index:520;width:auto;height:auto;background:var(--cx-surface-0);padding:8px;margin:0;display:flex;flex-direction:column;overflow:auto;box-sizing:border-box}
1672
+ .cx-chat.maxview .cx-chat-h,.cx-chat.maxview .cx-compose,.cx-chat.maxview .cx-chat-tabs{display:none}
1673
+
1674
+ /* 调试栏最大化(与网页同盒)+ 初始化空间两列(2026-11-08) */
1675
+ .cx-console.max{position:absolute;left:0;right:0;top:44px;bottom:0;z-index:520;height:auto!important;margin:0;border-radius:0;display:flex;flex-direction:column}
1676
+ .cx-console.max .cx-console-body{flex:1;min-height:0}
1677
+ .cx-space-picker{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 10px;width:100%}
1678
+ .cx-space-check{width:100%;min-width:0}
1679
+ .cx-space-check .cx-space-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
1680
+
1681
+ /* 管理模式网页最大化:与网页最大化同盒(:has 让面板让位,绝对定位到 shell) */
1682
+ .cx-panel:has(> .cx-web.max){position:static;border:0;background:transparent}
1683
+ .cx-web.max{position:absolute;left:0;right:0;top:84px;bottom:0;z-index:520;width:auto;height:auto;margin:0;padding:6px;background:var(--cx-surface-0);display:flex;flex-direction:column;box-sizing:border-box}
1684
+
1685
+ /* 最大化统一盒子 = 插件输出区(实测矩形,!important 覆盖旧规则) */
1686
+ .cx-web.max,.cx-console.max,.cx-mapsec.max,.cx-calsec.max,.cx-cal.max{
1687
+ position:fixed!important;
1688
+ left:var(--cx-area-left,0)!important;
1689
+ top:var(--cx-area-top,0)!important;
1690
+ width:var(--cx-area-width,100vw)!important;
1691
+ height:var(--cx-area-height,100vh)!important;
1692
+ z-index:520!important;margin:0!important;border:0!important;border-radius:0!important;
1693
+ display:flex!important;flex-direction:column!important;overflow:auto!important;
1694
+ background:var(--cx-surface-0)!important;padding:6px!important;box-sizing:border-box!important;
1695
+ }
1696
+ .cx-web.max .cx-webframe{flex:1!important;min-height:0!important}
1697
+ .cx-console.max .cx-console-body{flex:1!important;min-height:0!important}
1698
+
1699
+ /* 调试栏终端 + 编辑器终端标签换行(2026-11-08) */
1700
+ .cx-console-term{flex:1;min-height:0;width:100%;background:#04101a;border-radius:4px;overflow:hidden}
1701
+ .cx-term-sessions{flex-wrap:wrap;overflow:visible;max-width:100%}
1702
+ .cx-term-sess{flex:none}
1703
+
1704
+ /* 终端宿主容器:保持挂载,只切换显示 */
1705
+ .cx-term-hosts{flex:1;min-height:0;display:flex;flex-direction:column}
1706
+ .cx-term-hosts .cx-term-host{flex:1;min-height:0}
1707
+
1708
+ /* 编辑器输出栏开发工具(终端执行) */
1709
+ .cx-term-outwrap{flex:1;min-height:0;display:flex;flex-direction:column}
1710
+ .cx-devtools{display:flex;flex-wrap:wrap;gap:4px;padding:4px 0;border-bottom:1px solid var(--cx-line);flex:none}
1711
+ .cx-devbtn{border:1px solid var(--cx-line);background:var(--cx-surface-2);color:var(--cx-text-dim);font:var(--cx-fs-body) var(--cx-font);letter-spacing:.04em;padding:3px 7px;border-radius:3px;cursor:pointer}
1712
+ .cx-devbtn:hover{border-color:var(--cx-accent);color:var(--cx-accent)}
1713
+
1714
+ /* 调试栏极简终端 */
1715
+ .cx-console-term-simple{flex:1;min-height:0;display:flex;flex-direction:column;background:#04101a;border-radius:4px;overflow:hidden;font-family:var(--cx-mono)}
1716
+ .cx-console-term-out{flex:1;min-height:0;margin:0;padding:6px 8px;overflow:auto;white-space:pre-wrap;word-break:break-all;color:#cfeff9;font:var(--cx-fs)/1.5 var(--cx-mono)}
1717
+ .cx-console-term-bar{display:flex;align-items:center;gap:6px;border-top:1px solid #16384d;padding:4px 8px;flex:none}
1718
+ .cx-console-term-bar .ps{color:var(--cx-green);font:var(--cx-fs) var(--cx-mono)}
1719
+ .cx-console-term-in{flex:1;min-width:0;background:transparent;border:0;outline:none;color:#eaffff;font:var(--cx-fs) var(--cx-mono)}
1720
+
1721
+ /* 调试栏 xterm 终端宿主 */
1722
+ .cx-console-term{flex:1;min-height:0;width:100%;position:relative;background:#04101a;border-radius:4px;overflow:hidden}
1723
+ .cx-console-term .xterm{height:100%}
1724
+
1725
+ /* 调试栏终端:单例 wrap 撑满 */
1726
+ .cx-console-term-inner{position:absolute;inset:0;overflow:hidden}
1727
+ .cx-calsec.max>.cx-pm-h{flex:none;position:sticky;top:0;z-index:2;background:var(--cx-surface-0);padding:6px 2px;margin:0 0 8px}
1728
+ .cx-calsec.max>.cx-cal{flex:1;min-height:0;margin:0;overflow:auto}
1729
+ .cx-calsec.max .cx-cal-grid{flex:1}
1730
+ .cx-pm-max.cx-icon{color:var(--cx-text-dim)}
1731
+ .cx-pm-h:hover .cx-pm-max.cx-icon{color:var(--cx-cyan)}
1732
+
1733
+ /* 管理视图网页:标签图标 + 地址栏 + 最大化(2026-11-08) */
1734
+ .cx-webtab-ico{width:14px;height:14px;border-radius:3px;object-fit:cover;flex:none;background:rgba(var(--cx-hue-rgb),.12)}
1735
+ .cx-webtabs .cx-webtab{display:inline-flex;align-items:center;gap:6px}
1736
+ .cx-web .cx-addrbar{display:flex;align-items:center;gap:6px;padding:6px 8px;border-bottom:1px solid var(--cx-border);background:var(--cx-surface-2)}
1737
+ .cx-web .cx-addr-input{flex:1;min-width:0;height:24px;background:var(--cx-surface-0);border:1px solid var(--cx-border);color:var(--cx-text);font:var(--cx-fs) var(--cx-font);padding:0 8px;border-radius:4px}
1738
+ .cx-webframe.max{position:fixed;left:var(--cx-shell-left,0);top:calc(var(--cx-shell-top,0px) + 44px);width:var(--cx-shell-width,100vw);height:calc(var(--cx-shell-height,100vh) - 44px);z-index:520;background:var(--cx-surface-0);padding:6px;box-sizing:border-box}
1739
+
1740
+ /* 最大化统一:只用插件输出区(shell 矩形),不盖 DSH 侧边栏(2026-11-08 最终) */
1741
+ .cx-calsec.max{position:fixed!important;left:var(--cx-shell-left,0)!important;top:calc(var(--cx-shell-top,0px) + 44px)!important;width:var(--cx-shell-width,100vw)!important;height:calc(var(--cx-shell-height,100vh) - 44px)!important;z-index:520!important;background:var(--cx-surface-0)!important;padding:8px!important;box-sizing:border-box!important;display:flex!important;flex-direction:column!important;overflow:auto!important;margin:0!important;border:0!important}
1742
+ .cx-calsec.max .cx-cal{flex:1!important;min-height:0!important;display:flex!important;flex-direction:column!important}
1743
+ .cx-calsec.max .cx-cal-grid{flex:1!important;grid-auto-rows:1fr!important}
1744
+ .cx-calsec.max .cx-cal-day{height:auto!important;min-height:30px!important}
1745
+
1746
+ /* 修正:聊天面板有 transform,fixed 会被它当容器 → 改用 absolute 相对 .cx-chat 铺满(2026-11-08 v2) */
1747
+ .cx-calsec.max,.cx-taskmap.full{
1748
+ position:absolute!important;
1749
+ left:0!important;right:0!important;top:44px!important;bottom:0!important;
1750
+ width:auto!important;height:auto!important;max-width:none!important;
1751
+ z-index:900!important;margin:0!important;padding:8px!important;border-radius:0!important;
1752
+ box-sizing:border-box!important;overflow:auto!important;background:var(--cx-surface-0)!important;
1753
+ }
1754
+ .cx-calsec.max .cx-cal{flex:1!important;min-height:0!important;display:flex!important;flex-direction:column!important}
1755
+ .cx-calsec.max .cx-cal-grid{flex:1!important;grid-auto-rows:1fr!important}
1756
+ .cx-calsec.max .cx-cal-day{height:auto!important;min-height:30px!important}
1757
+
1758
+ /* 根因:.cx-pm-side 的 transform(refreshing 动画)会成为绝对定位容器,把最大化困在 300px 侧栏里。
1759
+ 最大化时让它让位,使 absolute 落到 .cx-chat-body(插件输出区)。 */
1760
+ .cx-pm-side:has(.cx-calsec.max),.cx-pm-side:has(.cx-taskmap.full){
1761
+ transform:none!important;position:static!important;overflow:visible!important;
1762
+ width:auto!important;flex:1!important;padding:0!important;border:0!important;background:transparent!important;
1763
+ }
1764
+
1765
+ /* 最大化四视图统一:与 .cx-webframe.max 完全同一套 fixed + shell 矩形;
1766
+ 并中和祖先 transform(刷新动画会改变包含块)。 */
1767
+ body:has(.cx-calsec.max) .cx-chat,
1768
+ body:has(.cx-calsec.max) .cx-pm-side,
1769
+ body:has(.cx-taskmap.full) .cx-chat,
1770
+ body:has(.cx-taskmap.full) .cx-pm-side{transform:none!important;contain:none!important;filter:none!important}
1771
+ .cx-calsec.max,.cx-taskmap.full{
1772
+ position:fixed!important;
1773
+ left:var(--cx-shell-left,0)!important;
1774
+ top:calc(var(--cx-shell-top,0px) + 44px)!important;
1775
+ width:var(--cx-shell-width,100vw)!important;
1776
+ height:calc(var(--cx-shell-height,100vh) - 44px)!important;
1777
+ right:auto!important;bottom:auto!important;max-width:none!important;
1778
+ z-index:900!important;margin:0!important;padding:8px!important;border-radius:0!important;
1779
+ box-sizing:border-box!important;overflow:auto!important;background:var(--cx-surface-0)!important;
1780
+ }
1781
+ .cx-calsec.max .cx-cal{flex:1!important;min-height:0!important;display:flex!important;flex-direction:column!important}
1782
+ .cx-calsec.max .cx-cal-grid{flex:1!important;grid-auto-rows:1fr!important}
1783
+ .cx-calsec.max .cx-cal-day{height:auto!important;min-height:30px!important}
1784
+
1785
+ /* 最高优先级覆盖:.cx-shell .cx-pm-side.right .cx-taskmap.full 是旧的全窗口规则(specificity 更高) */
1786
+ .cx-shell .cx-pm-side .cx-taskmap.full{
1787
+ position:fixed!important;
1788
+ left:var(--cx-shell-left,0)!important;
1789
+ top:calc(var(--cx-shell-top,0px) + 44px)!important;
1790
+ width:var(--cx-shell-width,100vw)!important;
1791
+ height:calc(var(--cx-shell-height,100vh) - 44px)!important;
1792
+ right:auto!important;bottom:auto!important;max-width:none!important;margin:0!important;padding:8px!important;
1793
+ box-sizing:border-box!important;overflow:hidden!important;background:var(--cx-surface-1)!important;
1794
+ }
1795
+
1796
+ /* 地图 leaflet 同步收敛到插件矩形(覆盖旧 100vw/100vh) */
1797
+ .cx-shell .cx-pm-side .cx-taskmap.full .cx-taskmap-leaflet{
1798
+ position:absolute!important;left:8px!important;right:8px!important;top:44px!important;bottom:8px!important;
1799
+ width:auto!important;height:auto!important;border:0!important;border-radius:0!important;
1800
+ }
1801
+
1802
+ /* 地图最大化:让整块 section(标题栏 + 地图)flex 撑满 */
1803
+ .cx-mapsec.max{display:flex!important;flex-direction:column!important}
1804
+ .cx-mapsec.max .cx-taskmap{flex:1!important;min-height:0!important;position:static!important;margin-top:8px!important}
1805
+ .cx-mapsec.max .cx-taskmap-leaflet{position:absolute!important;left:0!important;right:0!important;top:0!important;bottom:0!important;width:auto!important;height:auto!important}
1806
+
1807
+ /* 地图最大化:标题栏在最上,地图在下方占满(leaflet 相对 .cx-taskmap 定位) */
1808
+ .cx-mapsec.max{display:flex!important;flex-direction:column!important;overflow:hidden!important}
1809
+ .cx-mapsec.max>.cx-pm-h{flex:none!important}
1810
+ .cx-mapsec.max .cx-taskmap{flex:1!important;min-height:0!important;position:relative!important;margin:8px 0 0!important;overflow:hidden!important}
1811
+ .cx-mapsec.max .cx-taskmap-leaflet{position:absolute!important;left:0!important;right:0!important;top:0!important;bottom:0!important;width:auto!important;height:auto!important}
1812
+
1813
+ /* ContextOS 控制台:输入框芯片 + 配置抽屉(2026-11-08) */
1814
+ .cx-ctx-chip{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 9px;border:1px solid var(--cx-border);border-radius:999px;background:var(--cx-surface-2);color:var(--cx-text-dim);font:var(--cx-fs-body) var(--cx-font);cursor:pointer;flex:none}
1815
+ .cx-ctx-chip:hover{border-color:var(--cx-accent);color:var(--cx-accent)}
1816
+ .cx-ctx-chip-k{color:var(--cx-cyan);font-weight:700;letter-spacing:.06em}
1817
+ .cx-ctx-chip-v{color:var(--cx-text)}
1818
+ .cx-ctx-chip-s{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--cx-text-faint)}
1819
+ .cx-ctx-drawer{position:fixed;inset:0;z-index:1200;background:rgba(2,8,14,.28);display:flex;align-items:stretch;justify-content:flex-end;padding:0}
1820
+ .cx-ctx-panel{width:min(520px,46vw);height:100%;display:flex;flex-direction:column;border-left:1px solid var(--cx-cyan);border-radius:0;background:var(--cx-surface-0);box-shadow:-18px 0 60px rgba(0,0,0,.5);overflow:hidden}
1821
+ .cx-ctx-head{display:flex;align-items:center;gap:10px;padding:10px 12px;border-bottom:1px solid var(--cx-border);background:var(--cx-surface-1)}
1822
+ .cx-ctx-title{font:800 var(--cx-fs) var(--cx-font);letter-spacing:.14em;color:var(--cx-cyan)}
1823
+ .cx-ctx-meta{flex:1;min-width:0;font:var(--cx-fs-body) var(--cx-mono);color:var(--cx-text-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
1824
+ .cx-ctx-x{border:0;background:transparent;color:var(--cx-text-dim);font:var(--cx-fs-title) var(--cx-font);cursor:pointer}
1825
+ .cx-ctx-tabs{display:flex;flex-wrap:wrap;gap:4px;padding:8px 12px;border-bottom:1px solid var(--cx-border);background:var(--cx-surface-1)}
1826
+ .cx-ctx-tab{height:24px;padding:0 9px;border:1px solid transparent;border-radius:4px;background:transparent;color:var(--cx-text-dim);font:var(--cx-fs-body) var(--cx-font);cursor:pointer}
1827
+ .cx-ctx-tab.on{border-color:var(--cx-cyan);color:var(--cx-cyan);background:color-mix(in srgb,var(--cx-cyan) 10%,transparent)}
1828
+ .cx-ctx-body{flex:1;min-height:0;overflow:auto;padding:12px}
1829
+ .cx-ctx-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
1830
+ .cx-ctx-actions{grid-column:1/-1;display:flex;justify-content:flex-end;gap:8px}
1831
+ .cx-ctx-list{display:flex;flex-direction:column;gap:6px}
1832
+ .cx-ctx-cmd{display:flex;gap:10px;padding:6px 8px;border:1px solid var(--cx-border);border-radius:4px;background:var(--cx-surface-1)}
1833
+ .cx-ctx-cmd .nm{color:var(--cx-cyan);font:var(--cx-fs) var(--cx-mono)}
1834
+ .cx-ctx-cmd .ds{color:var(--cx-text-faint);font:var(--cx-fs-body) var(--cx-font);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
1835
+ .cx-ctx-stats{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}
1836
+ .cx-ctx-stat{display:flex;flex-direction:column;gap:4px;padding:10px;border:1px solid var(--cx-border);border-radius:4px;background:var(--cx-surface-1)}
1837
+ .cx-ctx-stat b{font:700 var(--cx-fs-title) var(--cx-font);color:var(--cx-cyan)}
1838
+ .cx-ctx-stat span{font:var(--cx-fs-body) var(--cx-font);color:var(--cx-text-faint)}
1839
+ .cx-ctx-empty{padding:16px;color:var(--cx-text-faint);font:var(--cx-fs) var(--cx-font)}
1840
+
1841
+ /* ContextOS 会话标题栏按钮 */
1842
+ .cx-ctx-hbtn{display:inline-flex;align-items:center;gap:5px;height:24px;padding:0 8px;border:1px solid var(--cx-border);border-radius:4px;background:var(--cx-surface-2);color:var(--cx-text-dim);font:var(--cx-fs-body) var(--cx-font);cursor:pointer}
1843
+ .cx-ctx-hbtn:hover{border-color:var(--cx-accent);color:var(--cx-accent)}
1844
+ .cx-ctx-hdot{width:6px;height:6px;border-radius:50%;background:var(--cx-cyan);box-shadow:0 0 6px var(--cx-cyan)}
1845
+
1846
+ /* 控制台:命令行内输入与刷新按钮 */
1847
+ .cx-ctx-cmd .cx-input{flex:1;min-width:0;height:22px;font-size:var(--cx-fs-body)}
1848
+ .cx-ctx-cmd{flex-wrap:nowrap}
1849
+ .cx-ctx-head .cx-btn.xs{flex:none}
1850
+
1851
+ /* 控制台提示条 */
1852
+ .cx-ctx-msg{padding:6px 12px;border-bottom:1px solid var(--cx-border);background:color-mix(in srgb,var(--cx-cyan) 10%,transparent);color:var(--cx-cyan);font:var(--cx-fs-body) var(--cx-font)}
1853
+
1854
+ /* 控制台视觉:头部 logo / 摘要 pill / 分段标签(2026-11-08) */
1855
+ .cx-ctx-head{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--cx-border);background:linear-gradient(180deg,var(--cx-surface-1),var(--cx-surface-0))}
1856
+ .cx-ctx-logo{width:32px;height:32px;flex:none;display:grid;place-items:center;border:1px solid var(--cx-cyan);border-radius:6px;color:var(--cx-cyan);font:800 var(--cx-fs-body) var(--cx-mono);letter-spacing:.08em;box-shadow:0 0 14px rgba(var(--cx-hue-rgb),.25)}
1857
+ .cx-ctx-titles{flex:1;min-width:0}
1858
+ .cx-ctx-title{font:800 var(--cx-fs) var(--cx-font);letter-spacing:.2em;color:var(--cx-cyan)}
1859
+ .cx-ctx-sub{font:var(--cx-fs-body) var(--cx-mono);color:var(--cx-text-faint);letter-spacing:.06em;margin-top:2px}
1860
+ .cx-ctx-acts{display:flex;align-items:center;gap:6px;flex:none}
1861
+ .cx-ctx-acts .cx-icon-btn{width:26px;height:26px;border:1px solid var(--cx-border);border-radius:4px;background:var(--cx-surface-2);color:var(--cx-text-dim);font:var(--cx-fs-title) var(--cx-font);cursor:pointer}
1862
+ .cx-ctx-acts .cx-icon-btn:hover{border-color:var(--cx-accent);color:var(--cx-accent)}
1863
+ .cx-ctx-sum{display:flex;flex-wrap:wrap;gap:6px;padding:8px 14px;border-bottom:1px solid var(--cx-border);background:var(--cx-surface-0)}
1864
+ .cx-ctx-pill{height:20px;display:inline-flex;align-items:center;padding:0 8px;border:1px solid var(--cx-border);border-radius:999px;color:var(--cx-text-dim);font:var(--cx-fs-body) var(--cx-mono);background:var(--cx-surface-1)}
1865
+ .cx-ctx-pill.on{border-color:var(--cx-cyan);color:var(--cx-cyan)}
1866
+ .cx-ctx-pill.dim{opacity:.65}
1867
+ .cx-ctx-tabs{display:flex;flex-wrap:wrap;gap:2px;padding:8px 10px;border-bottom:1px solid var(--cx-border);background:var(--cx-surface-1)}
1868
+ .cx-ctx-tab{height:26px;padding:0 10px;border:1px solid transparent;border-radius:4px;background:transparent;color:var(--cx-text-dim);font:var(--cx-fs-body) var(--cx-font);cursor:pointer}
1869
+ .cx-ctx-tab:hover{color:var(--cx-text)}
1870
+ .cx-ctx-tab.on{border-color:var(--cx-cyan);color:var(--cx-cyan);background:color-mix(in srgb,var(--cx-cyan) 12%,transparent)}
1871
+ .cx-ctx-body{padding:14px}
1872
+ .cx-ctx-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
1873
+ .cx-ctx-form .cx-field{display:flex;flex-direction:column;gap:4px;font:var(--cx-fs-body) var(--cx-font);letter-spacing:.08em;color:var(--cx-text-faint);text-transform:uppercase}
1874
+ .cx-ctx-form .cx-input{height:26px;font-size:var(--cx-fs)}
1875
+ .cx-ctx-actions{grid-column:1/-1;display:flex;justify-content:flex-end;gap:8px;padding-top:4px;border-top:1px solid var(--cx-border)}
1876
+
1877
+ /* 控制台下拉:统一高度与内边距,避免文字被截 */
1878
+ .cx-ctx-form select.cx-input{height:28px;padding:0 8px;line-height:28px;font-size:var(--cx-fs);appearance:auto;-webkit-appearance:auto;background-color:var(--cx-surface-0)}
1879
+ .cx-ctx-form .cx-input{height:28px}
1880
+
1881
+ /* 右栏五个标题栏:常驻堆叠(滚动时依次吸顶,全部可见) */
1882
+ .cx-pm-side.right .cx-pm-h{position:sticky;top:calc(var(--cx-hi, 0) * 34px);z-index:calc(60 - var(--cx-hi, 0));backdrop-filter:blur(8px);box-shadow:0 1px 0 var(--cx-border)}
1883
+ /* 让日历/地图的标题也直接参与右栏布局,才能对整栏吸顶吸底 */
1884
+ .cx-pm-side.right .cx-calsec:not(.max),.cx-pm-side.right .cx-mapsec:not(.max){display:contents}
1885
+ .cx-pm-side.right .cx-pm-h:hover{z-index:calc(60 - var(--cx-hi, 0))}
1886
+
1887
+ /* 卡片图标容器 */
1888
+ .cx-entity-ico{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;color:var(--cx-cyan)}
1889
+
1890
+ /* 卡片出场特效:5 种,新卡/变更卡轮换(2026-11-08) */
1891
+ .cx-in{animation-duration:1s;animation-timing-function:cubic-bezier(.22,1,.36,1);animation-fill-mode:both;will-change:transform,opacity,filter}
1892
+ .cx-in-1{animation-name:cx-in-slide}
1893
+ .cx-in-2{animation-name:cx-in-pop}
1894
+ .cx-in-3{animation-name:cx-in-flip}
1895
+ .cx-in-4{animation-name:cx-in-neon}
1896
+ .cx-in-5{animation-name:cx-in-drop}
1897
+ @keyframes cx-in-slide{
1898
+ 0%{opacity:0;transform:translateX(26px) skewX(-2deg);filter:blur(3px)}
1899
+ 60%{opacity:1;transform:translateX(-3px) skewX(0);filter:blur(0)}
1900
+ 100%{opacity:1;transform:none}
1901
+ }
1902
+ @keyframes cx-in-pop{
1903
+ 0%{opacity:0;transform:scale(.86);filter:blur(4px)}
1904
+ 55%{opacity:1;transform:scale(1.035);filter:blur(0)}
1905
+ 80%{transform:scale(.995)}
1906
+ 100%{transform:scale(1)}
1907
+ }
1908
+ @keyframes cx-in-flip{
1909
+ 0%{opacity:0;transform:perspective(720px) rotateX(-32deg) translateY(10px);transform-origin:50% 0}
1910
+ 70%{opacity:1;transform:perspective(720px) rotateX(4deg) translateY(0)}
1911
+ 100%{opacity:1;transform:none}
1912
+ }
1913
+ @keyframes cx-in-neon{
1914
+ 0%{opacity:0;box-shadow:0 0 0 rgba(var(--cx-hue-rgb),0)}
1915
+ 45%{opacity:1;box-shadow:0 0 26px rgba(var(--cx-hue-rgb),.5),inset 0 0 18px rgba(var(--cx-hue-rgb),.18);border-color:rgba(var(--cx-hue-rgb),.85)}
1916
+ 100%{opacity:1;box-shadow:0 0 0 rgba(var(--cx-hue-rgb),0)}
1917
+ }
1918
+ @keyframes cx-in-drop{
1919
+ 0%{opacity:0;transform:translateY(-18px) scale(.98)}
1920
+ 60%{opacity:1;transform:translateY(3px) scale(1)}
1921
+ 80%{transform:translateY(-1px)}
1922
+ 100%{transform:none}
1923
+ }
1924
+ @media (prefers-reduced-motion: reduce){.cx-in{animation:none!important}}
1925
+
1926
+ /* 新卡/变更卡的闪光扫过(恢复旧的闪光感,叠加在五种出场特效上) */
1927
+ .cx-pm-card.cx-in{position:relative;overflow:hidden}
1928
+ .cx-pm-card.cx-in::after{content:'';position:absolute;inset:0;pointer-events:none;background:linear-gradient(105deg,transparent 28%,rgba(var(--cx-hue-rgb),.38) 46%,rgba(255,255,255,.22) 50%,rgba(var(--cx-hue-rgb),.38) 54%,transparent 72%);transform:translateX(-130%);animation:cx-card-sweep 1.8s cubic-bezier(.4,0,.2,1) .1s both}
1929
+ @keyframes cx-card-sweep{0%{transform:translateX(-130%);opacity:0}18%{opacity:1}100%{transform:translateX(130%);opacity:0}}
1930
+
1931
+ /* 数字分身:呼吸、悬停加速、点击故障闪烁(2026-11-08) */
1932
+ .cx-avatar3d{cursor:grab}
1933
+ .cx-avatar3d:active{cursor:grabbing}
1934
+ .cx-avatar3d-inner{animation:cx-av-breathe 6.5s ease-in-out infinite}
1935
+ @keyframes cx-av-breathe{0%,100%{filter:brightness(1)}50%{filter:brightness(1.08)}}
1936
+ .cx-avatar3d.hover .cx-avatar-ring{animation-duration:5s}
1937
+ .cx-avatar3d.hover .cx-avatar-halo{opacity:1;transform:scale(1.08)}
1938
+ .cx-avatar3d.hover .cx-avatar-wave i{animation-duration:.7s}
1939
+ .cx-avatar3d.hover .cx-avatar3d-inner{filter:brightness(1.12) saturate(1.1)}
1940
+ .cx-avatar-glitch{position:absolute;inset:0;pointer-events:none;z-index:9;background:linear-gradient(90deg,rgba(var(--cx-hue-rgb),.14),transparent 30%,rgba(255,120,220,.12) 60%,transparent);mix-blend-mode:screen;animation:cx-av-glitch .42s steps(3,end) both}
1941
+ @keyframes cx-av-glitch{
1942
+ 0%{opacity:0;transform:translateX(0)}
1943
+ 15%{opacity:1;transform:translateX(-4px)}
1944
+ 30%{opacity:.6;transform:translateX(5px)}
1945
+ 45%{opacity:1;transform:translateX(-2px)}
1946
+ 60%{opacity:.4;transform:translateX(3px)}
1947
+ 100%{opacity:0;transform:translateX(0)}
1948
+ }
1949
+
1950
+ /* 赛博世界:点击爆发光 + 顶部 HUD */
1951
+ .cx-city3d{position:relative}
1952
+ .cx-city3d.cx-city-burst::after{content:'';position:absolute;inset:0;pointer-events:none;z-index:6;background:radial-gradient(circle at 50% 55%,rgba(var(--cx-hue-rgb),.35),transparent 45%);animation:cx-city-burst .72s ease-out both}
1953
+ @keyframes cx-city-burst{0%{opacity:0;transform:scale(.9)}30%{opacity:1}100%{opacity:0;transform:scale(1.06)}}
1954
+ .cx-city-hud{position:absolute;left:18px;top:14px;z-index:5;display:flex;gap:14px;align-items:center;pointer-events:none;font:var(--cx-fs-body) var(--cx-mono);letter-spacing:.14em;color:var(--cx-cyan)}
1955
+ .cx-city-hud span{display:inline-flex;align-items:center;gap:6px;padding:3px 8px;border:1px solid var(--cx-border);border-radius:999px;background:rgba(4,12,20,.55);backdrop-filter:blur(6px)}
1956
+ .cx-city-hud .dot{width:5px;height:5px;border-radius:50%;background:var(--cx-green);box-shadow:0 0 6px var(--cx-green);animation:cx-hud-blink 1.8s ease-in-out infinite}
1957
+ @keyframes cx-hud-blink{0%,100%{opacity:.35}50%{opacity:1}}
1958
+
1959
+ /* 切换模式:选中卡片统一「移动闪光」扫过(管理模式/开发模式/对话模式一致) */
1960
+ .cx-shell.cx-view-flash .cx-pm-card.on,
1961
+ .cx-shell.cx-view-flash .cx-node.on,
1962
+ .cx-shell.cx-view-flash .cx-space.on,
1963
+ .cx-shell.cx-view-flash .cx-app.on,
1964
+ .cx-shell.cx-view-flash .cx-webtab.on,
1965
+ .cx-shell.cx-view-flash .cx-tree-item.on,
1966
+ .cx-shell.cx-view-flash .cx-tab.on,
1967
+ .cx-shell.cx-view-flash .cx-term-tab.on,
1968
+ .cx-shell.cx-view-flash .cx-term-sess.on{position:relative;overflow:hidden}
1969
+
1970
+ .cx-shell.cx-view-flash .cx-pm-card.on::before,
1971
+ .cx-shell.cx-view-flash .cx-node.on::before,
1972
+ .cx-shell.cx-view-flash .cx-space.on::before,
1973
+ .cx-shell.cx-view-flash .cx-app.on::before,
1974
+ .cx-shell.cx-view-flash .cx-webtab.on::before,
1975
+ .cx-shell.cx-view-flash .cx-tree-item.on::before,
1976
+ .cx-shell.cx-view-flash .cx-tab.on::before,
1977
+ .cx-shell.cx-view-flash .cx-term-tab.on::before,
1978
+ .cx-shell.cx-view-flash .cx-term-sess.on::before{
1979
+ content:'';position:absolute;inset:0;pointer-events:none;z-index:4;border-radius:inherit;
1980
+ background:linear-gradient(105deg,transparent 28%,rgba(var(--cx-hue-rgb),.42) 46%,rgba(255,255,255,.24) 50%,rgba(var(--cx-hue-rgb),.42) 54%,transparent 72%);
1981
+ transform:translateX(-130%);
1982
+ box-shadow:0 0 0 1px rgba(var(--cx-hue-rgb),.55),0 0 18px rgba(var(--cx-hue-rgb),.35);
1983
+ animation:cx-sel-sweep 1.5s cubic-bezier(.4,0,.2,1) .05s both;
1984
+ }
1985
+ @keyframes cx-sel-sweep{
1986
+ 0%{transform:translateX(-130%);opacity:0}
1987
+ 12%{opacity:1}
1988
+ 100%{transform:translateX(130%);opacity:0}
1989
+ }
1990
+
1991
+
1992
+ /* 首次进入模式:五扇门开门过场 + WELCOME TO(2026-11-08) */
1993
+ .cx-intro{position:absolute;inset:0;z-index:950;display:grid;place-items:center;overflow:hidden;pointer-events:none;
1994
+ background:radial-gradient(circle at 50% 50%,rgba(6,18,28,.94),rgba(2,7,12,.985));
1995
+ animation:cx-intro-fade 3.2s ease both}
1996
+ @keyframes cx-intro-fade{0%{opacity:1}82%{opacity:1}100%{opacity:0}}
1997
+ .cx-intro-doors{position:absolute;inset:0;display:grid;grid-template-columns:repeat(5,1fr);gap:1px}
1998
+ .cx-intro-doors i{display:block;background:linear-gradient(180deg,#0a1b28,#02080f 60%,#061520);
1999
+ border-left:1px solid rgba(var(--cx-hue-rgb),.22);box-shadow:inset 0 0 40px rgba(var(--cx-hue-rgb),.08);
2000
+ animation:cx-door 1.15s cubic-bezier(.76,0,.24,1) both}
2001
+ .cx-intro-doors i:nth-child(odd){transform-origin:top}
2002
+ .cx-intro-doors i:nth-child(even){transform-origin:bottom}
2003
+ @keyframes cx-door{0%{transform:scaleY(1)}100%{transform:scaleY(0);opacity:0}}
2004
+ .cx-intro-txt{position:relative;z-index:2;text-align:center;animation:cx-intro-txt 3.2s ease both}
2005
+ @keyframes cx-intro-txt{0%,10%{opacity:0;transform:translateY(14px)}25%{opacity:1;transform:none}78%{opacity:1}100%{opacity:0;transform:translateY(-10px)}}
2006
+ .cx-intro-w{font:800 var(--cx-fs-body) var(--cx-mono);letter-spacing:.5em;color:var(--cx-cyan);opacity:.9}
2007
+ .cx-intro-m{font:900 var(--cx-fs-title) var(--cx-font);letter-spacing:.18em;color:#eafcff;margin:8px 0;
2008
+ text-shadow:0 0 26px rgba(var(--cx-hue-rgb),.55),0 0 60px rgba(var(--cx-hue-rgb),.25)}
2009
+ .cx-intro-s{font:var(--cx-fs-body) var(--cx-mono);letter-spacing:.3em;color:var(--cx-text-faint)}
2010
+
2011
+ /* 进入/离开初始化:快速欢迎过场(2026-11-08) */
2012
+ .cx-welcome{animation:cx-welcome-fade 1.8s ease both}
2013
+ @keyframes cx-welcome-fade{0%{opacity:1}75%{opacity:1}100%{opacity:0}}
2014
+ .cx-welcome .cx-intro-doors i{animation-duration:.9s}
2015
+ .cx-welcome .cx-intro-txt{animation:cx-welcome-txt 1.8s ease both}
2016
+ @keyframes cx-welcome-txt{0%{opacity:0;transform:scale(.94)}22%{opacity:1;transform:none}75%{opacity:1}100%{opacity:0;transform:scale(1.02)}}
2017
+ .cx-welcome .cx-intro-m{font-size:var(--cx-fs-title)}
2018
+
2019
+ /* 输入框:边框包住工具栏 + 更大圆角 + 流动光带(2026-11-08) */
2020
+ .cx-compose{
2021
+ border-radius:24px;
2022
+ border-color:rgba(var(--cx-hue-rgb),.42);
2023
+ box-shadow:0 0 26px rgba(var(--cx-hue-rgb),.12),0 10px 34px rgba(0,0,0,.35),inset 0 0 24px rgba(var(--cx-hue-rgb),.045);
2024
+ animation:cx-compose-breathe 5.5s ease-in-out infinite;
2025
+ }
2026
+ @keyframes cx-compose-breathe{
2027
+ 0%,100%{box-shadow:0 0 22px rgba(var(--cx-hue-rgb),.10),0 10px 34px rgba(0,0,0,.35),inset 0 0 22px rgba(var(--cx-hue-rgb),.04)}
2028
+ 50%{box-shadow:0 0 38px rgba(var(--cx-hue-rgb),.22),0 10px 34px rgba(0,0,0,.35),inset 0 0 30px rgba(var(--cx-hue-rgb),.07)}
2029
+ }
2030
+ .cx-compose::after{
2031
+ content:'';position:absolute;inset:0;border-radius:inherit;padding:1.5px;pointer-events:none;z-index:0;
2032
+ background:linear-gradient(90deg,transparent 0%,rgba(var(--cx-hue-rgb),.05) 12%,rgba(var(--cx-hue-rgb),.95) 30%,rgba(255,255,255,.75) 38%,rgba(var(--cx-green-rgb),.85) 52%,rgba(var(--cx-hue-rgb),.05) 72%,transparent 100%);
2033
+ background-size:300% 100%;
2034
+ -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
2035
+ -webkit-mask-composite:xor;mask-composite:exclude;
2036
+ animation:cx-compose-ring 4.2s linear infinite;
2037
+ }
2038
+ @keyframes cx-compose-ring{0%{background-position:0% 0}100%{background-position:300% 0}}
2039
+ .cx-compose .cx-compose-tools{background:transparent}
2040
+ .cx-compose .cx-compose-input{padding-bottom:6px}
2041
+ .cx-shell[data-theme="light"] .cx-compose{box-shadow:0 8px 28px rgba(24,66,84,.12),0 0 22px rgba(var(--cx-hue-rgb),.10)}
2042
+
2043
+ /* 输入框边框:提高基础亮度(同选择器、后置覆盖) */
2044
+ .cx-shell .cx-compose{border-color:rgba(var(--cx-hue-rgb),.48)}
2045
+ .cx-shell[data-theme="light"] .cx-compose{border-color:rgba(24,120,150,.45)}
2046
+
2047
+ /* 去掉输入区外层方框;圆角框加光波扩散(2026-11-08) */
2048
+ .cx-chat,.cx-chat.full,.cx-chat.webmax,.cx-chat-center,.cx-chat-body{border:0;outline:0;box-shadow:none}
2049
+ .cx-chat.full{background:transparent}
2050
+ .cx-compose::before{
2051
+ content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:0;
2052
+ border:0;box-shadow:0 0 0 0 rgba(var(--cx-hue-rgb),.5);
2053
+ animation:cx-compose-wave 3.2s ease-out infinite;
2054
+ }
2055
+ @keyframes cx-compose-wave{
2056
+ 0%{box-shadow:0 0 0 0 rgba(var(--cx-hue-rgb),.5),0 0 18px rgba(var(--cx-hue-rgb),.18)}
2057
+ 70%{box-shadow:0 0 0 10px rgba(var(--cx-hue-rgb),.10),0 0 22px rgba(var(--cx-hue-rgb),.10)}
2058
+ 100%{box-shadow:0 0 0 16px rgba(var(--cx-hue-rgb),0),0 0 26px rgba(var(--cx-hue-rgb),0)}
2059
+ }
2060
+ .cx-compose:focus-within::before{animation-duration:2.2s}
2061
+
2062
+ /* 输入框:彻底去掉宿主/浏览器给的 outline(那圈“多余边框”),聚焦改用边框配色 */
2063
+ .cx-shell .cx-compose,
2064
+ .cx-shell .cx-compose:focus,
2065
+ .cx-shell .cx-compose:focus-within,
2066
+ .cx-shell .cx-compose:focus-visible,
2067
+ .cx-shell .cx-compose-input,
2068
+ .cx-shell .cx-compose-input:focus,
2069
+ .cx-shell .cx-compose-input:focus-visible{
2070
+ outline:0!important;outline-width:0!important;outline-offset:0!important;
2071
+ }
2072
+ .cx-shell .cx-compose:focus-within{border-color:rgba(var(--cx-green-rgb),.75)}
2073
+
2074
+ /* + / 发送:更大、带底色、间距更松(2026-11-08) */
2075
+ .cx-compose .cx-compose-tools{gap:8px;padding:8px 12px 10px}
2076
+ .cx-compose-plus,.cx-compose-send{width:40px;height:40px;flex:none}
2077
+ .cx-compose-plus{margin-right:6px;border:1px solid rgba(var(--cx-hue-rgb),.5);background:linear-gradient(180deg,rgba(var(--cx-hue-rgb),.22),rgba(var(--cx-hue-rgb),.08));color:#d6fbff;font:var(--cx-fs-title)/38px var(--cx-font);box-shadow:0 0 14px rgba(var(--cx-hue-rgb),.18),inset 0 0 10px rgba(var(--cx-hue-rgb),.12)}
2078
+ .cx-compose-plus:hover{border-color:var(--cx-cyan);background:linear-gradient(180deg,rgba(var(--cx-hue-rgb),.34),rgba(var(--cx-hue-rgb),.14));box-shadow:0 0 20px rgba(var(--cx-hue-rgb),.4),inset 0 0 12px rgba(var(--cx-hue-rgb),.2)}
2079
+ .cx-compose-send{margin-left:6px;width:42px;height:42px;border-radius:50%;background:linear-gradient(135deg,var(--cx-cyan),var(--cx-green));color:#03141c;font:800 var(--cx-fs-title)/40px var(--cx-font);box-shadow:0 0 20px rgba(var(--cx-hue-rgb),.45),inset 0 1px 0 rgba(255,255,255,.5)}
2080
+ .cx-compose-send:hover{box-shadow:0 0 26px rgba(var(--cx-hue-rgb),.65),inset 0 1px 0 rgba(255,255,255,.6)}
2081
+ .cx-compose-send:disabled{opacity:.35;box-shadow:none}
2082
+ .cx-compose .cx-compose-input{padding:12px 16px 8px}
2083
+
2084
+ /* + 号:主题覆盖下也保持青色底 */
2085
+ .cx-shell .cx-compose-plus{background:linear-gradient(180deg,rgba(var(--cx-hue-rgb),.22),rgba(var(--cx-hue-rgb),.08))}
2086
+ .cx-shell .cx-compose-plus:hover{background:linear-gradient(180deg,rgba(var(--cx-hue-rgb),.34),rgba(var(--cx-hue-rgb),.14))}
2087
+ .cx-shell[data-theme="light"] .cx-compose-plus{background:linear-gradient(180deg,rgba(var(--cx-hue-rgb),.28),rgba(var(--cx-hue-rgb),.12));color:#0a3a47}
2088
+ .cx-shell[data-theme="light"] .cx-compose-send{background:linear-gradient(135deg,var(--cx-cyan),var(--cx-green));color:#03141c}
2089
+
2090
+ /* + / 发送:同尺寸同圆角 + 悬停光影 + 点击光波 + 右键震动(2026-11-08) */
2091
+ .cx-compose-plus,.cx-compose-send{width:40px;height:40px;border-radius:50%;position:relative;overflow:hidden;isolation:isolate}
2092
+ .cx-compose-plus{font:var(--cx-fs-title)/38px var(--cx-font)}
2093
+ .cx-compose-send{font:800 var(--cx-fs-title)/38px var(--cx-font)}
2094
+ .cx-compose-plus::after,.cx-compose-send::after{
2095
+ content:'';position:absolute;inset:-45%;pointer-events:none;z-index:2;
2096
+ background:conic-gradient(from 0deg,transparent 0deg,rgba(255,255,255,.55) 38deg,transparent 96deg);
2097
+ opacity:0;mix-blend-mode:screen;
2098
+ }
2099
+ .cx-compose-plus:hover::after,.cx-compose-send:hover::after{opacity:1;animation:cx-btn-spin 1.35s linear infinite}
2100
+ @keyframes cx-btn-spin{to{transform:rotate(360deg)}}
2101
+ .cx-compose-plus:active,.cx-compose-send:active{animation:cx-btn-wave .45s ease-out}
2102
+ @keyframes cx-btn-wave{
2103
+ 0%{box-shadow:0 0 0 0 rgba(var(--cx-hue-rgb),.75),0 0 14px rgba(var(--cx-hue-rgb),.5)}
2104
+ 100%{box-shadow:0 0 0 16px rgba(var(--cx-hue-rgb),0),0 0 22px rgba(var(--cx-hue-rgb),0)}
2105
+ }
2106
+ .cx-shake{animation:cx-shake .45s cubic-bezier(.36,.07,.19,.97)}
2107
+ @keyframes cx-shake{
2108
+ 10%,90%{transform:translateX(-1px)}
2109
+ 20%,80%{transform:translateX(2px)}
2110
+ 30%,50%,70%{transform:translateX(-3px)}
2111
+ 40%,60%{transform:translateX(3px)}
2112
+ }
2113
+
2114
+ /* 声效 / 动效 / 色系:三档可切换(2026-11-08) */
2115
+ .cx-shell[data-color="green"]{--cx-cyan:var(--cx-green);--cx-accent:var(--cx-green);--cx-green:var(--cx-cyan)}
2116
+ .cx-shell[data-color="violet"]{--cx-cyan:#a78bfa;--cx-accent:#a78bfa;--cx-green:#7dd3fc}
2117
+ .cx-shell[data-color="amber"]{--cx-cyan:#ffb454;--cx-accent:#ffb454;--cx-green:#ffe08a}
2118
+ .cx-shell[data-light="off"] .cx-compose::before,
2119
+ .cx-shell[data-light="off"] .cx-compose::after,
2120
+ .cx-shell[data-light="off"] .cx-compose-plus::after,
2121
+ .cx-shell[data-light="off"] .cx-compose-send::after,
2122
+ .cx-shell[data-light="off"] .cx-in,
2123
+ .cx-shell[data-light="off"] .cx-intro,
2124
+ .cx-shell[data-light="off"] .cx-city-hud .dot{animation:none!important}
2125
+ .cx-shell[data-light="off"] .cx-compose{animation:none}
2126
+ .cx-shell[data-light="mid"] .cx-compose::after{animation-duration:6.5s}
2127
+ .cx-shell[data-light="mid"] .cx-compose::before{animation-duration:4.6s}
2128
+ .cx-shell[data-light="low"] .cx-compose::after{animation-duration:9s}
2129
+ .cx-shell[data-light="low"] .cx-compose::before{animation:none}
2130
+
2131
+ /* 更多鼠标特效:按钮/下拉悬停发光、抬升、描边 */
2132
+ .cx-btn,.cx-sel-btn,.cx-compose-plus,.cx-compose-send{transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease,background .18s ease,color .18s ease}
2133
+ .cx-btn:hover,.cx-sel-btn:hover{transform:translateY(-1px);border-color:rgba(var(--cx-hue-rgb),.8);box-shadow:0 0 16px rgba(var(--cx-hue-rgb),.35),inset 0 0 10px rgba(var(--cx-hue-rgb),.12)}
2134
+ .cx-sel-btn:hover .v{color:var(--cx-cyan)}
2135
+ .cx-btn:active,.cx-sel-btn:active{transform:translateY(0) scale(.97)}
2136
+ .cx-compose-plus:hover,.cx-compose-send:hover{transform:translateY(-1px) scale(1.04)}
2137
+ .cx-compose-plus:active,.cx-compose-send:active{transform:scale(.94)}
2138
+
2139
+ /* 头部下拉:悬停也有光影 */
2140
+ .cx-drop{transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease,background .18s ease}
2141
+ .cx-drop:hover{transform:translateY(-1px);border-color:rgba(var(--cx-hue-rgb),.8);box-shadow:0 0 14px rgba(var(--cx-hue-rgb),.35),inset 0 0 8px rgba(var(--cx-hue-rgb),.12)}
2142
+ .cx-drop:active{transform:scale(.97)}
2143
+
2144
+ /* 风格:科技 / 古典 / 沙漠 / 雨林(2026-11-08) */
2145
+ .cx-shell[data-style="classic"]{
2146
+ --cx-cyan:#d8b45a;--cx-accent:#d8b45a;--cx-green:#b8963e;--cx-line2:rgba(216,180,90,.3);
2147
+ background:radial-gradient(900px 420px at 20% -10%,rgba(216,180,90,.16),transparent 60%),radial-gradient(700px 360px at 90% 0%,rgba(120,80,30,.14),transparent 55%),linear-gradient(180deg,#120e08,#0a0806);
2148
+ font-family:Georgia,"Songti SC",serif;
2149
+ }
2150
+ .cx-shell[data-style="desert"]{
2151
+ --cx-cyan:#f0a35e;--cx-accent:#f0a35e;--cx-green:#ffcf8a;--cx-line2:rgba(240,163,94,.3);
2152
+ background:radial-gradient(900px 420px at 15% -10%,rgba(240,163,94,.18),transparent 60%),radial-gradient(800px 400px at 95% 0%,rgba(180,90,30,.14),transparent 55%),linear-gradient(180deg,#18100a,#0b0704);
2153
+ }
2154
+ .cx-shell[data-style="rainforest"]{
2155
+ --cx-cyan:#5eead4;--cx-accent:#5eead4;--cx-green:#86efac;--cx-line2:rgba(94,234,212,.3);
2156
+ background:radial-gradient(900px 420px at 18% -10%,rgba(94,234,212,.16),transparent 60%),radial-gradient(800px 400px at 92% 0%,rgba(40,140,90,.16),transparent 55%),linear-gradient(180deg,#06120e,#030806);
2157
+ }
2158
+ .cx-shell[data-style="classic"] .cx-pm-card,
2159
+ .cx-shell[data-style="classic"] .cx-compose{border-color:rgba(216,180,90,.42)}
2160
+ .cx-shell[data-style="classic"] .cx-title{letter-spacing:.08em}
2161
+
2162
+ /* 下拉不被遮挡 */
2163
+ .cx-header{position:relative;z-index:60;overflow:visible}
2164
+ .cx-actions{overflow:visible}
2165
+ .cx-drop{position:relative;z-index:61}
2166
+ .cx-drop-pop{z-index:2000!important}
2167
+
2168
+ /* 追加色系 */
2169
+ .cx-shell[data-color="rose"]{--cx-cyan:#ff6b9d;--cx-accent:#ff6b9d;--cx-green:#ff9ec4}
2170
+ .cx-shell[data-color="ice"]{--cx-cyan:#7dd3fc;--cx-accent:#7dd3fc;--cx-green:#a5f3fc}
2171
+ .cx-shell[data-color="warm"]{--cx-cyan:#ff9f6b;--cx-accent:#ff9f6b;--cx-green:#ffd08a}
2172
+
2173
+ /* 追加风格:赛博 / 蒸汽 / 极简 */
2174
+ .cx-shell[data-style="cyber"]{
2175
+ --cx-cyan:#ff5cf0;--cx-accent:#ff5cf0;--cx-green:var(--cx-cyan);
2176
+ background:radial-gradient(900px 420px at 15% -10%,rgba(255,92,240,.18),transparent 60%),radial-gradient(800px 400px at 92% 0%,rgba(var(--cx-hue-rgb),.14),transparent 55%),linear-gradient(180deg,#150a1e,#07030c);
2177
+ }
2178
+ .cx-shell[data-style="steam"]{
2179
+ --cx-cyan:#c98a5a;--cx-accent:#c98a5a;--cx-green:#e0b07a;
2180
+ background:radial-gradient(900px 420px at 20% -10%,rgba(201,138,90,.16),transparent 60%),radial-gradient(800px 400px at 90% 0%,rgba(90,50,20,.18),transparent 55%),linear-gradient(180deg,#14100c,#0a0704);
2181
+ }
2182
+ .cx-shell[data-style="minimal"]{
2183
+ --cx-cyan:#d7e3ea;--cx-accent:#d7e3ea;--cx-green:#b8c9d4;
2184
+ background:linear-gradient(180deg,#0d1216,#080b0e);
2185
+ }
2186
+ .cx-shell[data-style="minimal"] .cx-compose::after,
2187
+ .cx-shell[data-style="minimal"] .cx-compose::before{animation:none!important;opacity:0}
2188
+ .cx-shell[data-style="minimal"] .cx-in{animation-duration:.3s}
2189
+
2190
+ /* 动效·微 */
2191
+ .cx-shell[data-light="micro"] .cx-compose::after{animation-duration:12s}
2192
+ .cx-shell[data-light="micro"] .cx-compose::before{animation:none}
2193
+ .cx-shell[data-light="micro"] .cx-in{animation-duration:.45s}
2194
+
2195
+ /* 数据操作特效:创建 / 修改 / 删除 / 刷新(2026-11-08) */
2196
+ .cx-op-fx{position:absolute;inset:0;z-index:940;pointer-events:none;animation-duration:.95s;animation-fill-mode:both}
2197
+ .cx-op-create{background:radial-gradient(circle at 50% 58%,rgba(var(--cx-green-rgb),.35),transparent 58%);animation-name:cx-op-pop}
2198
+ .cx-op-update{background:linear-gradient(90deg,transparent 20%,rgba(var(--cx-hue-rgb),.30) 50%,transparent 80%);animation-name:cx-op-sweep}
2199
+ .cx-op-delete{background:radial-gradient(circle at 50% 55%,rgba(255,88,88,.34),transparent 58%);animation-name:cx-op-shock}
2200
+ .cx-op-refresh{background:repeating-linear-gradient(0deg,rgba(var(--cx-hue-rgb),.16) 0 2px,transparent 2px 7px);animation-name:cx-op-scan}
2201
+ @keyframes cx-op-pop{0%{opacity:0;transform:scale(.9)}30%{opacity:1}100%{opacity:0;transform:scale(1.05)}}
2202
+ @keyframes cx-op-sweep{0%{opacity:0;transform:translateX(-60%)}40%{opacity:1}100%{opacity:0;transform:translateX(60%)}}
2203
+ @keyframes cx-op-shock{0%{opacity:0}15%{opacity:1;transform:translateX(-4px)}45%{transform:translateX(4px)}70%{transform:translateX(-2px)}100%{opacity:0;transform:none}}
2204
+ @keyframes cx-op-scan{0%{opacity:0;background-position:0 0}20%{opacity:1}100%{opacity:0;background-position:0 140px}}
2205
+ .cx-shell[data-light="off"] .cx-op-fx{animation:none;display:none}
2206
+
2207
+ /* 鼠标跟随光晕 + 光标环(2026-11-08) */
2208
+ .cx-shell::after{
2209
+ content:'';position:absolute;inset:0;pointer-events:none;z-index:905;
2210
+ opacity:var(--cx-cursor,0);transition:opacity .25s ease;
2211
+ background:radial-gradient(220px 220px at var(--mx,50%) var(--my,50%),rgba(var(--cx-hue-rgb),.18),rgba(var(--cx-hue-rgb),.05) 45%,transparent 70%);
2212
+ mix-blend-mode:screen;
2213
+ }
2214
+ .cx-cursor-ring{
2215
+ position:absolute;left:var(--mx,50%);top:var(--my,50%);width:18px;height:18px;margin:-9px 0 0 -9px;border-radius:50%;
2216
+ border:1.5px solid rgba(var(--cx-hue-rgb),.9);box-shadow:0 0 14px rgba(var(--cx-hue-rgb),.7),inset 0 0 8px rgba(var(--cx-hue-rgb),.4);
2217
+ pointer-events:none;z-index:906;opacity:var(--cx-cursor,0);
2218
+ transition:opacity .25s ease,transform .12s ease-out;
2219
+ transform:translate(0,0) scale(1);
2220
+ mix-blend-mode:screen;
2221
+ }
2222
+ .cx-shell[data-light="off"]::after,.cx-shell[data-light="off"] .cx-cursor-ring{display:none}
2223
+
2224
+ /* 彗星拖尾画布 + 水波光纹(2026-11-08) */
2225
+ .cx-comet{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:904;mix-blend-mode:screen;opacity:.95}
2226
+ .cx-water{position:absolute;inset:0;pointer-events:none;z-index:903;overflow:hidden;mix-blend-mode:screen;opacity:.55}
2227
+ .cx-water i{position:absolute;width:160px;height:160px;margin:-80px 0 0 -80px;border-radius:50%;
2228
+ border:1px solid rgba(var(--cx-hue-rgb),.35);
2229
+ box-shadow:0 0 50px rgba(var(--cx-hue-rgb),.18),inset 0 0 40px rgba(var(--cx-hue-rgb),.12);
2230
+ animation:cx-ripple 6.6s cubic-bezier(.22,1,.36,1) infinite;transform-origin:center}
2231
+ .cx-water i:nth-child(2){border-color:rgba(var(--cx-green-rgb),.3);box-shadow:0 0 50px rgba(var(--cx-green-rgb),.16),inset 0 0 40px rgba(var(--cx-green-rgb),.1)}
2232
+ .cx-water i:nth-child(3){border-color:rgba(157,139,255,.28);box-shadow:0 0 50px rgba(157,139,255,.16),inset 0 0 40px rgba(157,139,255,.1)}
2233
+ @keyframes cx-ripple{
2234
+ 0%{transform:scale(.25);opacity:0}
2235
+ 12%{opacity:.9}
2236
+ 60%{opacity:.35}
2237
+ 100%{transform:scale(2.6);opacity:0}
2238
+ }
2239
+ .cx-water::before{content:'';position:absolute;inset:-20%;background:
2240
+ repeating-radial-gradient(circle at 30% 40%,rgba(var(--cx-hue-rgb),.10) 0 2px,transparent 2px 26px),
2241
+ repeating-radial-gradient(circle at 70% 65%,rgba(var(--cx-green-rgb),.08) 0 2px,transparent 2px 34px);
2242
+ animation:cx-caustic 22s linear infinite;opacity:.35}
2243
+ @keyframes cx-caustic{0%{transform:translate3d(0,0,0) scale(1)}50%{transform:translate3d(2%,-1.5%,0) scale(1.03)}100%{transform:translate3d(0,0,0) scale(1)}}
2244
+ .cx-shell[data-light="off"] .cx-comet,.cx-shell[data-light="off"] .cx-water{display:none}
2245
+
2246
+ /* 光标光效:降低亮度 + 随动效强弱变化(2026-11-08) */
2247
+ .cx-shell[data-light="high"]{--cx-glow:.10;--cx-comet-op:1;--cx-ring-op:1}
2248
+ .cx-shell[data-light="mid"]{--cx-glow:.07;--cx-comet-op:.7;--cx-ring-op:.8}
2249
+ .cx-shell[data-light="low"]{--cx-glow:.045;--cx-comet-op:.45;--cx-ring-op:.6}
2250
+ .cx-shell[data-light="micro"]{--cx-glow:.03;--cx-comet-op:.25;--cx-ring-op:.45}
2251
+ .cx-shell::after{
2252
+ background:radial-gradient(160px 160px at var(--mx,50%) var(--my,50%),
2253
+ rgba(var(--cx-hue-rgb),var(--cx-glow,.10)),
2254
+ rgba(var(--cx-hue-rgb),calc(var(--cx-glow,.10) * .35)) 45%,
2255
+ transparent 72%) !important;
2256
+ mix-blend-mode:normal !important;
2257
+ }
2258
+ .cx-comet{opacity:var(--cx-comet-op,1) !important}
2259
+ .cx-cursor-ring{opacity:calc(var(--cx-cursor,0) * var(--cx-ring-op,1)) !important}
2260
+
2261
+ /* 色系:主色与 rgba 三元组(2026-11-08) */
2262
+ .cx-shell[data-hue="cyan"]{--cx-cyan:#3ee7ff;--cx-accent:#3ee7ff;--cx-green:#42f5a7;--cx-hue-rgb:62,231,255;--cx-green-rgb:66,245,167}
2263
+ .cx-shell[data-hue="green"]{--cx-cyan:#42f5a7;--cx-accent:#42f5a7;--cx-green:#3ee7ff;--cx-hue-rgb:66,245,167;--cx-green-rgb:62,231,255}
2264
+ .cx-shell[data-hue="violet"]{--cx-cyan:#a78bfa;--cx-accent:#a78bfa;--cx-green:#7dd3fc;--cx-hue-rgb:167,139,250;--cx-green-rgb:125,211,252}
2265
+ .cx-shell[data-hue="amber"]{--cx-cyan:#ffb454;--cx-accent:#ffb454;--cx-green:#ffe08a;--cx-hue-rgb:255,180,84;--cx-green-rgb:255,224,138}
2266
+ .cx-shell[data-hue="rose"]{--cx-cyan:#ff6b9d;--cx-accent:#ff6b9d;--cx-green:#ff9ec4;--cx-hue-rgb:255,107,157;--cx-green-rgb:255,158,196}
2267
+ .cx-shell[data-hue="ice"]{--cx-cyan:#7dd3fc;--cx-accent:#7dd3fc;--cx-green:#a5f3fc;--cx-hue-rgb:125,211,252;--cx-green-rgb:165,243,252}
2268
+ .cx-shell[data-hue="warm"]{--cx-cyan:#ff9f6b;--cx-accent:#ff9f6b;--cx-green:#ffd08a;--cx-hue-rgb:255,159,107;--cx-green-rgb:255,208,138}
2269
+
2270
+ /* 色系:边框与弱文字也跟随色调 */
2271
+ .cx-shell[data-hue]:not([data-hue="cyan"]){
2272
+ --cx-line:rgba(var(--cx-hue-rgb),.20);
2273
+ --cx-line2:rgba(var(--cx-hue-rgb),.34);
2274
+ --cx-border:rgba(var(--cx-hue-rgb),.30);
2275
+ --cx-border-strong:rgba(var(--cx-hue-rgb),.55);
2276
+ --cx-muted:color-mix(in srgb,var(--cx-cyan) 38%,#6f9bb3);
2277
+ --cx-text-dim:color-mix(in srgb,var(--cx-cyan) 22%,#7fa5b6);
2278
+ }
2279
+ .cx-shell[data-theme="light"][data-hue]:not([data-hue="cyan"]){
2280
+ --cx-line:rgba(var(--cx-hue-rgb),.30);
2281
+ --cx-line2:rgba(var(--cx-hue-rgb),.45);
2282
+ --cx-border:rgba(var(--cx-hue-rgb),.40);
2283
+ --cx-border-strong:rgba(var(--cx-hue-rgb),.65);
2284
+ }
2285
+
2286
+ /* 按键与标签统一跟随色系 */
2287
+ .cx-shell .cx-btn,.cx-shell .cx-sel-btn,.cx-shell .cx-drop,.cx-shell .cx-view,.cx-shell .cx-compose-plus,.cx-shell .cx-term-tab,.cx-shell .cx-pm-act{
2288
+ color:color-mix(in srgb,var(--cx-cyan) 55%,var(--cx-text));
2289
+ }
2290
+ .cx-shell .cx-btn:not(.pri),.cx-shell .cx-sel-btn,.cx-shell .cx-term-tab{border-color:rgba(var(--cx-hue-rgb),.35)}
2291
+ .cx-shell .cx-btn:not(.pri):hover,.cx-shell .cx-sel-btn:hover,.cx-shell .cx-term-tab:hover{border-color:var(--cx-cyan);color:var(--cx-cyan)}
2292
+ .cx-shell .cx-view.on,.cx-shell .cx-console-tab.on,.cx-shell .cx-pm-card.on,.cx-shell .cx-tree-item.on,.cx-shell .cx-webtab.on{color:var(--cx-cyan)}
2293
+ .cx-shell .cx-sub,.cx-shell .cx-label,.cx-shell .cx-meta,.cx-shell .cx-sysline,.cx-shell .cx-hint{color:color-mix(in srgb,var(--cx-cyan) 26%,var(--cx-text-dim))}
2294
+ .cx-shell .cx-pipe,.cx-shell .cx-statusbar,.cx-shell .cx-crumb{border-color:rgba(var(--cx-hue-rgb),.18)}
2295
+
2296
+ /* 头部按钮边框也跟随色系 */
2297
+ .cx-shell .cx-actions .cx-btn,.cx-shell .cx-header .cx-btn{border-color:rgba(var(--cx-hue-rgb),.42);color:color-mix(in srgb,var(--cx-cyan) 55%,var(--cx-text))}
2298
+ .cx-shell .cx-actions .cx-btn:hover,.cx-shell .cx-header .cx-btn:hover{border-color:var(--cx-cyan);color:var(--cx-cyan)}
2299
+
2300
+ /* 顶部流程条 / 状态标签:强制跟随色系 */
2301
+ .cx-shell .cx-pipe .cx-stage{color:color-mix(in srgb,var(--cx-cyan) 32%,var(--cx-muted))}
2302
+ .cx-shell .cx-pipe .cx-stage.on,.cx-shell .cx-pipe .cx-stage-title.on{color:var(--cx-cyan);border-color:rgba(var(--cx-hue-rgb),.42)}
2303
+ .cx-shell .cx-pipe .cx-stage.on .cx-aff-value,.cx-shell .cx-pipe .cx-stage-title.on .cx-aff-value{color:var(--cx-cyan)}
2304
+ .cx-shell .cx-pipe .cx-stage .n{border-color:rgba(var(--cx-hue-rgb),.45);color:var(--cx-cyan)}
2305
+ .cx-shell .cx-chip{border-color:rgba(var(--cx-hue-rgb),.35);color:color-mix(in srgb,var(--cx-cyan) 45%,var(--cx-text))}
2306
+ .cx-shell .cx-chip.on{border-color:var(--cx-cyan);color:var(--cx-cyan)}
2307
+
2308
+
2309
+ /* ============================================================
2310
+ DESIGN SYSTEM(2026-11-08 收敛版)
2311
+ 字号 10/12/14 · 图标 14/18 · 控件 28px · 栏高自动
2312
+ ============================================================ */
2313
+ /* 令牌一律 --cx- 前缀:宿主 DSH 也定义 --fs-…、--sp-…、--h-item 等通用名,
2314
+ 在 :root 上覆盖它们会把宿主原生界面(如消息工具栏)一起改坏。 */
2315
+ :root{
2316
+ --cx-fs-10:10px; --cx-fs-12:12px; --cx-fs-14:14px;
2317
+ --cx-icon-10:14px; --cx-icon-12:18px; --cx-icon-14:18px;
2318
+ --cx-sp-2:4px; --cx-sp-3:6px; --cx-sp-4:8px; --cx-sp-5:10px; --cx-sp-7:20px;
2319
+ --cx-r-sm:4px; --cx-r-lg:24px;
2320
+ --cx-pad-bar:10px; --cx-gap-bar:8px; --cx-h-item:28px;
2321
+ --cx-fs:var(--cx-fs-12); --cx-fs-body:var(--cx-fs-10); --cx-fs-status:var(--cx-fs-10); --cx-fs-title:var(--cx-fs-14);
2322
+ }
2323
+
2324
+ /* —— 字号角色 —— */
2325
+ .cx-shell{font-size:var(--cx-fs-12)}
2326
+ .cx-shell .cx-title,.cx-shell .cx-entity-name,.cx-shell .cx-pm-card .cx-entity-name,.cx-shell .cx-msg-role{font-size:var(--cx-fs-14)!important}
2327
+ .cx-shell .cx-msg,.cx-shell .cx-pm-content,.cx-shell .cx-entity-copy,.cx-shell .cx-compose-input,.cx-shell .cx-input,.cx-shell .cx-select,.cx-shell .cx-table,.cx-shell .cx-console{font-size:var(--cx-fs-10)!important}
2328
+ .cx-shell .cx-entity-type,.cx-shell .cx-entity-status,.cx-shell .cx-entity-meta,.cx-shell .cx-sub,.cx-shell .cx-hint,.cx-shell .cx-sysline{font-size:var(--cx-fs-10)!important}
2329
+ .cx-shell .cx-btn,.cx-shell .cx-sel-btn,.cx-shell .cx-drop,.cx-shell .cx-view,.cx-shell .cx-stage,.cx-shell .cx-tag,.cx-shell .cx-chip,.cx-shell .cx-pm-act,.cx-shell .cx-aff-zh,.cx-shell .cx-aff-en,.cx-shell .cx-aff-value,.cx-shell .cx-pm-h{font-size:var(--cx-fs-12)!important}
2330
+
2331
+ /* —— 图标角色 —— */
2332
+ .cx-shell .cx-aff svg,.cx-shell .cx-view svg,.cx-shell .cx-drop svg,.cx-shell .cx-btn svg,.cx-shell .cx-sel-btn svg,
2333
+ .cx-shell .cx-stage svg,.cx-shell .cx-term-tab svg,.cx-shell .cx-pm-ops svg,.cx-shell .cx-compose-plus svg,
2334
+ .cx-shell .cx-compose-send svg,.cx-shell .cx-menu-item svg,.cx-shell .cx-tag svg,.cx-shell .cx-pm-h svg,
2335
+ .cx-shell .cx-entity-ico,.cx-shell .cx-entity-ico svg,.cx-shell .cx-entity-pic svg,.cx-shell .cx-title svg,
2336
+ .cx-shell .cx-header .cx-mark svg{width:var(--cx-icon-12)!important;height:var(--cx-icon-12)!important;flex:none}
2337
+ .cx-shell .cx-entity-meta svg,.cx-shell .cx-hint svg,.cx-shell .cx-sysline svg,.cx-shell .cx-entity-status svg,
2338
+ .cx-shell .cx-tag svg{width:var(--cx-icon-10)!important;height:var(--cx-icon-10)!important}
2339
+
2340
+ /* —— 栏:不设高度,统一内边距 —— */
2341
+ .cx-shell .cx-header,.cx-shell .cx-pipe,.cx-shell .cx-chat-h,.cx-shell .cx-chat-tabs,
2342
+ .cx-shell .cx-addrbar,.cx-shell .cx-statusbar,.cx-shell .cx-console-head,.cx-shell .cx-console-tabs,.cx-shell .cx-pm-h{
2343
+ height:auto!important;max-height:none!important;min-height:0!important;
2344
+ margin:0!important;box-sizing:border-box;
2345
+ display:flex!important;align-items:center;gap:var(--cx-gap-bar)!important;flex-wrap:nowrap;
2346
+ }
2347
+ .cx-shell .cx-header{padding:var(--cx-sp-7)!important;overflow:visible!important}
2348
+ .cx-shell .cx-pipe,.cx-shell .cx-chat-tabs,.cx-shell .cx-console-tabs{padding:var(--cx-sp-3) var(--cx-pad-bar)!important;overflow-x:auto;overflow-y:hidden;scrollbar-width:none}
2349
+ .cx-shell .cx-pipe::-webkit-scrollbar,.cx-shell .cx-chat-tabs::-webkit-scrollbar,.cx-shell .cx-console-tabs::-webkit-scrollbar{height:0}
2350
+ .cx-shell .cx-chat-h{padding:var(--cx-sp-7)!important;overflow:visible!important}
2351
+ .cx-shell .cx-pm-h{padding:var(--cx-sp-3) var(--cx-pad-bar)!important;overflow:hidden}
2352
+ .cx-shell .cx-pm-h>*{flex:none}
2353
+
2354
+ /* —— 顶栏四段:品牌 | 模式(占满居中) | 样式 —— */
2355
+ .cx-shell .cx-header .cx-brand{flex:0 0 auto;min-width:0;overflow:visible!important}
2356
+ .cx-shell .cx-header .cx-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
2357
+ .cx-shell .cx-header .cx-views{flex:1 1 auto;min-width:0;position:static!important;transform:none!important;display:flex;justify-content:center;align-items:center;gap:2px!important;border:0!important;background:transparent!important;box-shadow:none!important;z-index:auto!important}
2358
+ .cx-shell .cx-header .cx-actions{flex:0 0 auto;margin-left:0!important;gap:2px!important;justify-content:flex-end;display:flex;align-items:center}
2359
+
2360
+ /* —— 控件:28px / 10px / 12px —— */
2361
+ .cx-shell .cx-header .cx-view,
2362
+ .cx-shell .cx-header .cx-btn,
2363
+ .cx-shell .cx-header .cx-actions .cx-drop>*:not(.cx-drop-pop),
2364
+ .cx-shell .cx-drop-btn,
2365
+ .cx-shell .cx-pipe .cx-stage,
2366
+ .cx-shell .cx-chat-tabs .cx-chat-tab,
2367
+ .cx-shell .cx-console-tabs .cx-console-tab{
2368
+ height:var(--cx-h-item)!important;min-height:var(--cx-h-item)!important;
2369
+ padding:0 var(--cx-pad-bar)!important;margin:0!important;
2370
+ font-size:var(--cx-fs-12)!important;line-height:1!important;
2371
+ box-sizing:border-box;display:inline-flex;align-items:center;
2372
+ }
2373
+ .cx-shell .cx-pipe .cx-stage .n{width:var(--cx-icon-12)!important;height:var(--cx-icon-12)!important;font-size:var(--cx-fs-10)!important}
2374
+ .cx-shell .cx-header .cx-view *,.cx-shell .cx-header .cx-drop *,.cx-shell .cx-btn *{font-size:var(--cx-fs-12)!important;line-height:1!important}
2375
+
2376
+ /* —— 窄屏隐藏顺序 —— */
2377
+ @media (max-width:1560px){.cx-shell .cx-header .cx-actions .cx-drop:nth-child(1){display:none}}
2378
+ @media (max-width:1440px){.cx-shell .cx-header .cx-actions .cx-drop:nth-child(2){display:none}}
2379
+ @media (max-width:1340px){.cx-shell .cx-header .cx-actions .cx-drop:nth-child(3){display:none}}
2380
+ @media (max-width:1240px){.cx-shell .cx-header .cx-actions .cx-drop:nth-child(4){display:none}}
2381
+ @media (max-width:1140px){.cx-shell .cx-header .cx-actions .cx-drop:nth-child(5){display:none}}
2382
+ @media (max-width:1040px){.cx-shell .cx-header .cx-actions .cx-drop:nth-child(6){display:none}}
2383
+ @media (max-width:900px){.cx-shell .cx-header .cx-views .cx-aff-en,.cx-shell .cx-header .cx-brand .cx-sub{display:none}}
2384
+
2385
+ /* —— 性能:减少重绘 —— */
2386
+ .cx-shell .cx-comet,.cx-shell .cx-water,.cx-shell .cx-cursor-ring{contain:strict}
2387
+ .cx-shell .cx-in,.cx-shell .cx-op-fx{will-change:transform,opacity}
2388
+ @media (prefers-reduced-motion: reduce){
2389
+ .cx-shell .cx-in,.cx-shell .cx-op-fx,.cx-shell .cx-intro,.cx-shell .cx-welcome,.cx-shell .cx-cursor-ring{animation:none!important}
2390
+ .cx-shell .cx-comet,.cx-shell .cx-water{display:none!important}
2391
+ }
2392
+
2393
+ /* 「更多」菜单键:正方形,不再窄条 */
2394
+ .cx-shell .cx-menu-wrap{display:inline-flex;flex:none}
2395
+ .cx-shell .cx-menu-wrap>.cx-btn,
2396
+ .cx-shell .cx-menu-wrap>.cx-btn.xs{
2397
+ width:var(--cx-h-item)!important;min-width:var(--cx-h-item)!important;
2398
+ height:var(--cx-h-item)!important;padding:0!important;
2399
+ display:inline-flex;align-items:center;justify-content:center;
2400
+ box-sizing:border-box;
2401
+ }
2402
+
2403
+ /* 所有图标控件:正方向(宽高相等) */
2404
+ .cx-shell .cx-icon-btn,
2405
+ .cx-shell .cx-menu-wrap>.cx-btn,
2406
+ .cx-shell .cx-pm-ops button,
2407
+ .cx-shell .cx-addrbar .cx-icon-btn,
2408
+ .cx-shell .cx-console-head .cx-btn,
2409
+ .cx-shell .cx-compose-plus,
2410
+ .cx-shell .cx-compose-send{
2411
+ width:var(--cx-h-item)!important;min-width:var(--cx-h-item)!important;
2412
+ height:var(--cx-h-item)!important;
2413
+ padding:0!important;aspect-ratio:1/1;
2414
+ display:inline-flex;align-items:center;justify-content:center;
2415
+ box-sizing:border-box;flex:none;
2416
+ }
2417
+ .cx-shell svg{aspect-ratio:1/1;flex:none}
2418
+ .cx-shell .cx-webtab-ico,
2419
+ .cx-shell .cx-webtab-ico img,
2420
+ .cx-shell .cx-tab img{width:var(--cx-icon-12)!important;height:var(--cx-icon-12)!important;object-fit:contain;border-radius:3px}
2421
+
2422
+ /* 标签栏 + 与地址栏更多:统一 28×28 方形 */
2423
+ .cx-shell .cx-webtabs>.cx-btn.xs,
2424
+ .cx-shell .cx-webtabs .cx-webtab-add,
2425
+ .cx-shell .cx-addrbar>.cx-btn.xs,
2426
+ .cx-shell .cx-addrbar .cx-addressbar-actions>.cx-btn,
2427
+ .cx-shell .cx-addrbar .cx-addressbar-actions button{
2428
+ width:var(--cx-h-item)!important;min-width:var(--cx-h-item)!important;
2429
+ height:var(--cx-h-item)!important;padding:0!important;
2430
+ aspect-ratio:1/1;display:inline-flex;align-items:center;justify-content:center;
2431
+ box-sizing:border-box;flex:none;
2432
+ }
2433
+ .cx-shell .cx-addrbar .cx-btn.xs svg,
2434
+ .cx-shell .cx-webtabs>.cx-btn.xs svg{width:var(--cx-icon-10)!important;height:var(--cx-icon-10)!important}
2435
+
2436
+ /* 输入类控件文字 12px */
2437
+ .cx-shell .cx-compose-input,
2438
+ .cx-shell .cx-input,
2439
+ .cx-shell .cx-select,
2440
+ .cx-shell .cx-textarea,
2441
+ .cx-shell .cx-addr-input,
2442
+ .cx-shell .cx-addr-input::placeholder,
2443
+ .cx-shell .cx-compose-input::placeholder{font-size:13px!important}
2444
+
2445
+ /* 特效筛选(下拉选项 / 菜单项)文字放大到 14px */
2446
+ .cx-shell .cx-drop-pop .cx-drop-item,
2447
+ .cx-shell .cx-drop-pop button,
2448
+ .cx-shell .cx-menu .cx-menu-item,
2449
+ .cx-shell .cx-ctxmenu button{
2450
+ font-size:var(--cx-fs-14)!important;
2451
+ padding:8px 10px!important;
2452
+ line-height:1.2!important;
2453
+ }
2454
+
2455
+ /* 品牌标识:两个 SVG logo,去掉旧的旋转方块/圆点 */
2456
+ .cx-shell .cx-mark{transform:none!important;border:0!important;background:transparent!important;box-shadow:none!important;width:26px;height:26px;display:grid;place-items:center;color:var(--cx-cyan)}
2457
+ .cx-shell .cx-mark svg{width:22px!important;height:22px!important}
2458
+ .cx-shell .cx-chat-orb{width:28px;height:28px;display:grid;place-items:center;border-radius:50%;background:radial-gradient(circle at 30% 20%,rgba(var(--cx-hue-rgb),.25),rgba(4,14,22,.9));border:1px solid rgba(var(--cx-hue-rgb),.45);color:var(--cx-cyan);box-shadow:0 0 14px rgba(var(--cx-hue-rgb),.28)}
2459
+ .cx-shell .cx-chat-orb svg{width:22px!important;height:22px!important}
2460
+
2461
+ /* 地址栏按钮图标统一 14px(更多菜单不再偏大) */
2462
+ .cx-shell .cx-addrbar button svg,
2463
+ .cx-shell .cx-addrbar .cx-addressbar-actions svg{width:var(--cx-icon-10)!important;height:var(--cx-icon-10)!important}
2464
+ .cx-shell .cx-addrbar .cx-addressbar-actions button{padding:0!important;display:inline-flex;align-items:center;justify-content:center}
2465
+
2466
+ /* 地图:深色主题 + 与插件主题协调;标题栏恢复高度 */
2467
+ .cx-mapsec .cx-pm-h{min-height:34px!important;padding:4px 10px!important}
2468
+ .cx-taskmap{background:#04101a}
2469
+ .cx-taskmap .leaflet-container{background:#04101a}
2470
+ .cx-taskmap .leaflet-tile-pane{filter:invert(1) hue-rotate(185deg) brightness(.82) contrast(.92) saturate(.9)}
2471
+ .cx-taskmap.cx-map-blue .leaflet-tile-pane{filter:invert(1) hue-rotate(195deg) saturate(1.5) brightness(.7) contrast(.95)}
2472
+ .cx-taskmap.cx-map-light .leaflet-tile-pane{filter:none}
2473
+ .cx-taskmap .leaflet-control-attribution{background:rgba(4,16,26,.7);color:var(--cx-text-faint)}
2474
+ .cx-map-theme{height:24px!important;min-height:24px!important;padding:0 8px!important;font-size:var(--cx-fs-10)!important}
2475
+
2476
+ /* 地址栏图标:统一标准 18px(与 12px 文字配套) */
2477
+ .cx-shell .cx-addrbar button svg,
2478
+ .cx-shell .cx-addrbar .cx-addressbar-actions svg,
2479
+ .cx-shell .cx-addrbar .cx-btn svg{width:var(--cx-icon-12)!important;height:var(--cx-icon-12)!important}
2480
+ .cx-shell .cx-addrbar button,
2481
+ .cx-shell .cx-addrbar .cx-addressbar-actions button{
2482
+ width:var(--cx-h-item)!important;min-width:var(--cx-h-item)!important;height:var(--cx-h-item)!important;
2483
+ padding:0!important;display:inline-flex;align-items:center;justify-content:center;flex:none;
2484
+ }
2485
+
2486
+ /* 最大化地图:标题栏回到顶部(取消吸顶偏移),地图在标题下方 */
2487
+ .cx-mapsec.max .cx-pm-h,
2488
+ .cx-calsec.max .cx-pm-h{position:static!important;top:auto!important;bottom:auto!important;z-index:auto!important}
2489
+ .cx-mapsec.max .cx-taskmap{position:relative!important;flex:1!important;min-height:0!important}
2490
+ .cx-mapsec.max .cx-taskmap-leaflet{position:absolute!important;left:0!important;right:0!important;top:0!important;bottom:0!important;height:auto!important}
2491
+
2492
+ /* 地图主题:瓦片滤镜按档位覆盖(取消 pane 级滤镜叠加) */
2493
+ .cx-taskmap .leaflet-tile-pane{filter:none!important}
2494
+ .cx-taskmap .leaflet-tile{filter:none!important}
2495
+ .cx-taskmap.cx-map-dark .leaflet-tile{filter:invert(1) hue-rotate(185deg) brightness(.82) contrast(.95) saturate(.85)!important}
2496
+ .cx-taskmap.cx-map-blue .leaflet-tile{filter:invert(1) hue-rotate(200deg) brightness(.7) contrast(1) saturate(1.4)!important}
2497
+ .cx-taskmap.cx-map-light .leaflet-tile{filter:none!important}
2498
+
2499
+ /* 分区标题栏:最小高度 34px,标题不参与压缩 */
2500
+ .cx-shell .cx-pm-h{min-height:34px!important;padding:4px 10px!important;box-sizing:border-box}
2501
+ .cx-shell .cx-pm-h .cx-pm-title,
2502
+ .cx-shell .cx-pm-h .t,
2503
+ .cx-shell .cx-pm-h .cx-aff{flex:1 1 auto;min-width:0}
2504
+ .cx-shell .cx-pm-h .cx-aff-zh,
2505
+ .cx-shell .cx-pm-h .cx-aff-en{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
2506
+ .cx-shell .cx-pm-h .cx-pm-ops,
2507
+ .cx-shell .cx-pm-h .cx-pm-max{flex:0 0 auto}
2508
+
2509
+ /* 卡片上的「更多」与左侧动作键同尺寸(22px) */
2510
+ .cx-shell .cx-pm-card .cx-menu-wrap{display:inline-flex}
2511
+ .cx-shell .cx-pm-card .cx-menu-wrap>.cx-btn,
2512
+ .cx-shell .cx-pm-card .cx-menu-wrap>.cx-btn.xs{
2513
+ width:22px!important;min-width:22px!important;
2514
+ height:22px!important;min-height:22px!important;
2515
+ padding:0!important;border-radius:3px;
2516
+ display:inline-flex;align-items:center;justify-content:center;
2517
+ }
2518
+ .cx-shell .cx-pm-card .cx-menu-wrap>.cx-btn svg{width:14px!important;height:14px!important}
2519
+
2520
+ /* 节点/空间/应用卡片:更多菜单与 主页/编程 同尺寸 */
2521
+ .cx-shell .cx-node .cx-menu-wrap,
2522
+ .cx-shell .cx-space .cx-menu-wrap,
2523
+ .cx-shell .cx-app .cx-menu-wrap{display:inline-flex;flex:none}
2524
+ .cx-shell .cx-node .cx-menu-wrap>.cx-btn,
2525
+ .cx-shell .cx-space .cx-menu-wrap>.cx-btn,
2526
+ .cx-shell .cx-app .cx-menu-wrap>.cx-btn{
2527
+ width:26px!important;min-width:26px!important;
2528
+ height:26px!important;min-height:26px!important;
2529
+ padding:0!important;border-radius:3px;
2530
+ display:inline-flex;align-items:center;justify-content:center;
2531
+ }
2532
+ .cx-shell .cx-node .cx-menu-wrap>.cx-btn svg,
2533
+ .cx-shell .cx-space .cx-menu-wrap>.cx-btn svg,
2534
+ .cx-shell .cx-app .cx-menu-wrap>.cx-btn svg{width:14px!important;height:14px!important}
2535
+ .cx-shell .cx-node .cx-btn.xs,
2536
+ .cx-shell .cx-space .cx-btn.xs,
2537
+ .cx-shell .cx-app .cx-btn.xs{height:26px!important;min-height:26px!important;padding:0 10px!important;font-size:var(--cx-fs-12)!important}
2538
+
2539
+ /* 开发模式:停掉装饰性特效,面板延迟渲染 */
2540
+ .cx-shell[data-view="dev"] .cx-comet,
2541
+ .cx-shell[data-view="dev"] .cx-water,
2542
+ .cx-shell[data-view="dev"] .cx-cursor-ring{display:none!important}
2543
+ .cx-shell[data-view="dev"] .cx-dev .cx-panel,
2544
+ .cx-shell[data-view="dev"] .cx-console{content-visibility:auto;contain-intrinsic-size:400px}
2545
+
2546
+ /* 模式过场:更大的字 + 炫酷扫光 */
2547
+ .cx-intro-w{font-size:12px!important;letter-spacing:.62em!important;color:var(--cx-cyan);text-shadow:0 0 18px rgba(var(--cx-hue-rgb),.8)}
2548
+ .cx-intro-m{font-size:56px!important;letter-spacing:.2em!important;line-height:1.05!important;margin:14px 0 10px!important;
2549
+ background:linear-gradient(100deg,#eafcff 10%,var(--cx-cyan) 38%,#ffffff 52%,var(--cx-green) 70%,#eafcff 90%);
2550
+ -webkit-background-clip:text;background-clip:text;color:transparent!important;
2551
+ filter:drop-shadow(0 0 26px rgba(var(--cx-hue-rgb),.55));
2552
+ background-size:220% 100%;animation:cx-intro-shine 3.2s linear both}
2553
+ @keyframes cx-intro-shine{0%{background-position:0% 0}100%{background-position:120% 0}}
2554
+ .cx-intro-s{font-size:12px!important;letter-spacing:.32em!important;color:var(--cx-text-dim)}
2555
+ .cx-intro::before{content:'';position:absolute;inset:0;pointer-events:none;z-index:1;
2556
+ background:repeating-linear-gradient(0deg,rgba(var(--cx-hue-rgb),.10) 0 1px,transparent 1px 4px);
2557
+ opacity:.35;animation:cx-intro-scan 3.2s linear both}
2558
+ @keyframes cx-intro-scan{0%{background-position:0 0}100%{background-position:0 220px}}
2559
+ .cx-intro-txt::after{content:'';display:block;width:120px;height:2px;margin:14px auto 0;
2560
+ background:linear-gradient(90deg,transparent,var(--cx-cyan),transparent);
2561
+ box-shadow:0 0 18px rgba(var(--cx-hue-rgb),.8);animation:cx-intro-line 3.2s ease both}
2562
+ @keyframes cx-intro-line{0%{width:0;opacity:0}30%{width:160px;opacity:1}100%{width:220px;opacity:.35}}
2563
+
2564
+ /* 顶部工具条:所有 chip 等高、等内外边距 */
2565
+ .cx-shell .cx-pipe{gap:6px!important;align-items:center}
2566
+ .cx-shell .cx-pipe>*:not(.cx-arrow){
2567
+ height:28px!important;min-height:28px!important;max-height:28px!important;
2568
+ padding:0 10px!important;margin:0!important;
2569
+ display:inline-flex!important;align-items:center;gap:6px;
2570
+ box-sizing:border-box;border-radius:4px;
2571
+ }
2572
+ .cx-shell .cx-pipe>*:not(.cx-arrow) *{line-height:1!important}
2573
+
2574
+ /* 顶部工具条:所有 chip 统一样式(底色/描边/圆角/内边距) */
2575
+ .cx-shell .cx-pipe>*:not(.cx-arrow){
2576
+ background:var(--cx-surface-1)!important;
2577
+ border:1px solid rgba(var(--cx-hue-rgb),.30)!important;
2578
+ color:var(--cx-text)!important;
2579
+ border-radius:4px!important;
2580
+ padding:0 10px!important;
2581
+ height:28px!important;min-height:28px!important;max-height:28px!important;
2582
+ margin:0!important;
2583
+ }
2584
+ .cx-shell .cx-pipe>*:not(.cx-arrow):hover{
2585
+ border-color:var(--cx-cyan)!important;
2586
+ box-shadow:0 0 12px rgba(var(--cx-hue-rgb),.35);
2587
+ }
2588
+ .cx-shell .cx-pipe>*:not(.cx-arrow).on{
2589
+ border-color:var(--cx-cyan)!important;
2590
+ background:color-mix(in srgb,var(--cx-cyan) 14%,var(--cx-surface-1))!important;
2591
+ color:var(--cx-cyan)!important;
2592
+ }
2593
+ .cx-shell .cx-pipe .cx-arrow{color:var(--cx-text-faint)!important;padding:0 2px!important;margin:0!important;height:28px!important;display:inline-flex;align-items:center}
2594
+
2595
+ /* 顶部工具条:强制完全同款(覆盖所有历史差异) */
2596
+ .cx-shell .cx-pipe > *:not(.cx-arrow){
2597
+ all: unset;
2598
+ box-sizing: border-box!important;
2599
+ display: inline-flex!important;
2600
+ align-items: center!important;
2601
+ justify-content: flex-start!important;
2602
+ gap: 6px!important;
2603
+ flex: 0 0 auto!important;
2604
+ align-self: center!important;
2605
+ height: 28px!important;
2606
+ min-height: 28px!important;
2607
+ max-height: 28px!important;
2608
+ padding: 0 10px!important;
2609
+ margin: 0!important;
2610
+ border: 1px solid rgba(var(--cx-hue-rgb), .30)!important;
2611
+ border-radius: 4px!important;
2612
+ background: var(--cx-surface-1)!important;
2613
+ color: var(--cx-text)!important;
2614
+ font-family: var(--cx-font)!important;
2615
+ font-size: 12px!important;
2616
+ font-weight: 600!important;
2617
+ line-height: 1!important;
2618
+ letter-spacing: .04em!important;
2619
+ white-space: nowrap!important;
2620
+ cursor: pointer;
2621
+ }
2622
+ .cx-shell .cx-pipe > *:not(.cx-arrow) *{
2623
+ font-size: 12px!important;
2624
+ line-height: 1!important;
2625
+ font-weight: 600!important;
2626
+ color: inherit!important;
2627
+ background: transparent!important;
2628
+ border: 0!important;
2629
+ margin: 0!important;
2630
+ padding: 0!important;
2631
+ }
2632
+ .cx-shell .cx-pipe .cx-arrow{
2633
+ all: unset;
2634
+ display: inline-flex!important;
2635
+ align-items: center!important;
2636
+ height: 28px!important;
2637
+ padding: 0 2px!important;
2638
+ margin: 0!important;
2639
+ color: var(--cx-text-faint)!important;
2640
+ font-size: 12px!important;
2641
+ }
2642
+
2643
+ /* .cx-chips 是容器,不是 chip 本身;内部 4 个 chip 与左侧 4 个完全同款 */
2644
+ .cx-shell .cx-pipe > .cx-chips{
2645
+ all: unset;
2646
+ display: flex!important;
2647
+ align-items: center!important;
2648
+ gap: 6px!important;
2649
+ flex: 0 0 auto!important;
2650
+ height: 28px!important;
2651
+ padding: 0!important;
2652
+ margin: 0!important;
2653
+ border: 0!important;
2654
+ background: transparent!important;
2655
+ }
2656
+ .cx-shell .cx-pipe .cx-chip{
2657
+ box-sizing: border-box!important;
2658
+ display: inline-flex!important;
2659
+ align-items: center!important;
2660
+ gap: 6px!important;
2661
+ flex: 0 0 auto!important;
2662
+ height: 28px!important;min-height: 28px!important;max-height: 28px!important;
2663
+ padding: 0 10px!important;
2664
+ margin: 0!important;
2665
+ border: 1px solid rgba(var(--cx-hue-rgb), .30)!important;
2666
+ border-radius: 4px!important;
2667
+ background: var(--cx-surface-1)!important;
2668
+ color: var(--cx-text)!important;
2669
+ font-family: var(--cx-font)!important;
2670
+ font-size: 12px!important;
2671
+ font-weight: 600!important;
2672
+ line-height: 1!important;
2673
+ letter-spacing: .04em!important;
2674
+ white-space: nowrap!important;
2675
+ cursor: pointer;
2676
+ }
2677
+ .cx-shell .cx-pipe .cx-chip *{
2678
+ font-size: 12px!important;line-height: 1!important;font-weight: 600!important;
2679
+ color: inherit!important;background: transparent!important;border: 0!important;margin: 0!important;padding: 0!important;
2680
+ }
2681
+ .cx-shell .cx-pipe .cx-chip:hover{border-color:var(--cx-cyan)!important;box-shadow:0 0 12px rgba(var(--cx-hue-rgb),.35)!important}
2682
+
2683
+ /* 顶上工具条:选中态只变描边,底色与其它 chip 完全一致 */
2684
+ .cx-shell .cx-pipe .cx-stage.on,
2685
+ .cx-shell .cx-pipe .cx-chip.on,
2686
+ .cx-shell .cx-pipe > *:not(.cx-arrow).on{
2687
+ background:var(--cx-surface-1)!important;
2688
+ color:var(--cx-text)!important;
2689
+ border-color:var(--cx-cyan)!important;
2690
+ box-shadow:none!important;
2691
+ }
2692
+
2693
+ /* 标签栏/工具条容器:内边距统一 10px */
2694
+ .cx-shell .cx-pipe,
2695
+ .cx-shell .cx-webtabs,
2696
+ .cx-shell .cx-chat-tabs,
2697
+ .cx-shell .cx-console-tabs{padding:10px!important}
2698
+
2699
+ /* 顶部工具条下拉:容器不占样式,按钮保持 chip 外观 */
2700
+ .cx-shell .cx-pipe > .cx-pipe-sel{
2701
+ all: unset;
2702
+ position: relative;
2703
+ display: inline-flex!important;
2704
+ align-items: center!important;
2705
+ height: 28px!important;
2706
+ padding: 0!important;margin: 0!important;
2707
+ border: 0!important;background: transparent!important;
2708
+ flex: 0 0 auto!important;
2709
+ }
2710
+ .cx-shell .cx-pipe .cx-stage-btn{
2711
+ box-sizing: border-box;
2712
+ display: inline-flex;align-items: center;gap: 6px;
2713
+ height: 28px;padding: 0 10px;margin: 0;
2714
+ border: 1px solid rgba(var(--cx-hue-rgb), .30);
2715
+ border-radius: 4px;
2716
+ background: var(--cx-surface-1);
2717
+ color: var(--cx-text);
2718
+ font: 600 12px/1 var(--cx-font);
2719
+ letter-spacing: .04em;white-space: nowrap;cursor: pointer;
2720
+ }
2721
+ .cx-shell .cx-pipe .cx-stage-btn:hover{border-color: var(--cx-cyan)}
2722
+ .cx-shell .cx-pipe .cx-pipe-caret{font-size: 12px;opacity: .7;margin-left: 2px}
2723
+ .cx-shell .cx-pipe .cx-pipe-menu{
2724
+ position: absolute;left: 0;top: calc(100% + 4px);z-index: 3000;
2725
+ min-width: 220px;max-height: 320px;overflow: auto;
2726
+ padding: 4px;border: 1px solid var(--cx-line2);border-radius: 6px;
2727
+ background: var(--cx-surface-1);box-shadow: 0 14px 36px rgba(0,0,0,.45);
2728
+ }
2729
+
2730
+ /* 顶部 chip 点击下拉(固定定位,不改动 layout) */
2731
+ .cx-shell .cx-pipe .cx-stage,
2732
+ .cx-shell .cx-pipe .cx-chip{cursor:pointer}
2733
+ .cx-shell .cx-pipe-menu-fixed{
2734
+ position:fixed;z-index:3000;
2735
+ min-width:220px;max-height:340px;overflow:auto;
2736
+ padding:4px;border:1px solid var(--cx-line2);border-radius:6px;
2737
+ background:var(--cx-surface-1);box-shadow:0 16px 40px rgba(0,0,0,.45);
2738
+ }
2739
+ .cx-shell .cx-pipe-menu-fixed .cx-pipe-menu-title{
2740
+ padding:6px 8px;font:600 10px var(--cx-font);letter-spacing:.12em;
2741
+ color:var(--cx-text-faint);text-transform:uppercase;
2742
+ }
2743
+ .cx-shell .cx-pipe-menu-fixed .cx-menu-item.on{border-left:2px solid var(--cx-cyan);color:var(--cx-cyan)}
2744
+ .cx-shell .cx-pipe-menu-fixed .cx-menu-item.empty{opacity:.6;cursor:default}
2745
+
2746
+ /* 顶部下拉:三列(图标 / 文字 / 选中)对齐 */
2747
+ .cx-shell .cx-pipe-menu-fixed .cx-menu-item.cx-menu-3col{
2748
+ display:grid!important;
2749
+ grid-template-columns:18px minmax(0,1fr) 16px;
2750
+ align-items:center;gap:8px;
2751
+ width:100%;text-align:left;
2752
+ padding:6px 8px!important;
2753
+ }
2754
+ .cx-shell .cx-menu-3col svg{width:14px!important;height:14px!important;opacity:.85}
2755
+ .cx-shell .cx-menu-3col .cx-menu-lbl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px!important}
2756
+ .cx-shell .cx-menu-3col .cx-menu-chk{text-align:right;color:var(--cx-cyan);font-size:12px!important;line-height:1}
2757
+ .cx-shell .cx-menu-3col.on .cx-menu-lbl{color:var(--cx-cyan)}
2758
+
2759
+ /* 顶部下拉与流程条下拉统一:三列、左对齐、两端对齐 */
2760
+ .cx-shell .cx-menu-item.cx-menu-3col{
2761
+ display:grid!important;
2762
+ grid-template-columns:18px minmax(0,1fr) 18px;
2763
+ align-items:center;gap:8px;
2764
+ width:100%;text-align:left;
2765
+ padding:6px 10px!important;
2766
+ }
2767
+ .cx-shell .cx-menu-item.cx-menu-3col .cx-menu-lbl{
2768
+ overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px!important;
2769
+ }
2770
+ .cx-shell .cx-menu-item.cx-menu-3col .cx-menu-chk{
2771
+ display:flex;justify-content:flex-end;color:var(--cx-cyan);
2772
+ }
2773
+ .cx-shell .cx-drop-pop{left:0!important;right:auto!important;min-width:100%!important}
2774
+
2775
+ /* 下拉浮层:左对齐 chip,宽度随内容,保证中间文字列有空间 */
2776
+ .cx-shell .cx-drop-pop{
2777
+ left:0!important;right:auto!important;
2778
+ width:max-content!important;
2779
+ min-width:200px!important;
2780
+ max-width:min(360px, 92vw)!important;
2781
+ }
2782
+
2783
+ /* 全局下拉列表:三列 + 上下溢出箭头 */
2784
+ .cx-shell .cx-menu-list{display:flex;flex-direction:column;min-width:0}
2785
+ .cx-shell .cx-menu-scroll{
2786
+ display:flex;flex-direction:column;gap:1px;
2787
+ max-height:300px;overflow-y:auto;overscroll-behavior:contain;
2788
+ }
2789
+ .cx-shell .cx-menu-hint{
2790
+ height:16px;flex:none;display:flex;align-items:center;justify-content:center;
2791
+ font-size:10px;line-height:1;color:var(--cx-cyan);pointer-events:none;
2792
+ letter-spacing:2px;opacity:.9;
2793
+ }
2794
+ .cx-shell .cx-menu-hint.top{background:linear-gradient(180deg,var(--cx-surface-1),transparent)}
2795
+ .cx-shell .cx-menu-hint.bottom{background:linear-gradient(0deg,var(--cx-surface-1),transparent)}
2796
+ .cx-shell .cx-drop-pop{overflow:visible!important}
2797
+ .cx-shell .cx-pipe-menu-fixed{overflow:visible!important}
2798
+
2799
+ /* 侧边栏切换键与品牌之间 10px */
2800
+ .cx-shell .cx-header > .cx-sb-toggle{margin-right:10px!important}
2801
+ .cx-shell .cx-header > .cx-brand{margin-left:0!important}
2802
+
2803
+ /* 顶栏间距改为显式 margin:侧栏键后正好 10px */
2804
+ .cx-shell .cx-header{gap:0!important}
2805
+ .cx-shell .cx-header>.cx-sb-toggle{margin-right:10px!important}
2806
+ .cx-shell .cx-header>.cx-brand{margin-right:10px!important}
2807
+
2808
+ /* 侧栏键与品牌之间 20px */
2809
+ .cx-shell .cx-header>.cx-sb-toggle{margin-right:20px!important}
2810
+
2811
+ /* 浅色主题:不显示开场过场 / INITIALIZE 遮罩(READY 保留) */
2812
+ .cx-shell[data-theme="light"] .cx-intro:not(.cx-welcome){display:none!important}
2813
+ .cx-shell[data-theme="light"] .cx-welcome:not([data-ready="true"]){display:none!important}
2814
+
2815
+ /* 过滤下拉:文字在左,选中勾在右 */
2816
+ .cx-shell .cx-filter-item{display:flex!important;align-items:center;justify-content:space-between;gap:10px;width:100%}
2817
+ .cx-shell .cx-filter-item .cx-filter-text{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
2818
+ .cx-shell .cx-filter-item .cx-filter-check{flex:0 0 16px;display:flex;justify-content:flex-end;margin-left:auto;color:var(--cx-cyan)}
2819
+
2820
+ /* 地图:标题栏与地图贴在一起(不再吸底、不再 display:contents) */
2821
+ .cx-pm-side.right .cx-mapsec{display:block!important;position:relative!important;margin-top:8px!important}
2822
+ .cx-pm-side.right .cx-mapsec .cx-taskmap{position:relative!important;bottom:auto!important;margin-top:0!important;flex:none!important}
2823
+ .cx-pm-side.right .cx-mapsec.folded{display:block!important}
2824
+
2825
+ /* 地图吸附在右侧栏底部(非最大化时) */
2826
+ .cx-pm-side.right .cx-mapsec:not(.max){
2827
+ display:block!important;
2828
+ position:sticky!important;
2829
+ bottom:0!important;
2830
+ left:auto!important;
2831
+ right:auto!important;
2832
+ top:auto!important;
2833
+ width:auto!important;
2834
+ margin:8px 0 0!important;
2835
+ z-index:30!important;
2836
+ border-radius:6px;
2837
+ box-shadow:0 -8px 24px rgba(0,0,0,.22);
2838
+ }
2839
+ .cx-pm-side.right .cx-mapsec:not(.max) .cx-taskmap{position:relative!important;bottom:auto!important;margin:0!important;flex:none!important;padding:6px}
2840
+ .cx-pm-side.right .cx-mapsec:not(.max) .cx-taskmap-leaflet{height:170px!important}
2841
+ .cx-pm-side.right .cx-mapsec:not(.max).folded{width:auto!important}
2842
+
2843
+ /* 右侧栏改为纵向 flex:地图贴住栏底(内容短时推到底,长时 sticky 吸附) */
2844
+ .cx-pm-side.right{display:flex!important;flex-direction:column}
2845
+ .cx-pm-side.right .cx-mapsec:not(.max){margin-top:auto!important;position:sticky!important;bottom:0!important}
2846
+
2847
+ /* 地图标题栏:与其它分栏一致,左侧留出内边距 */
2848
+ .cx-pm-side.right .cx-mapsec:not(.max) .cx-pm-h{padding-left:10px!important}
2849
+ .cx-pm-side.right .cx-mapsec:not(.max) .cx-pm-h>:first-child{margin-left:0!important;padding-left:0!important}
2850
+ .cx-pm-side.right .cx-mapsec:not(.max) .cx-pm-titleline{gap:6px}
2851
+
2852
+ /* 地图卡片左右内边距清零,标题从最左开始 */
2853
+ .cx-pm-side.right .cx-mapsec:not(.max){padding-left:0!important;padding-right:0!important}
2854
+
2855
+ /* 输入框工具栏:四段(添加 / 节点组 / 分身组 / 发送) */
2856
+ .cx-shell .cx-compose-tools{display:flex!important;align-items:center!important;gap:0!important}
2857
+ .cx-shell .cx-compose-tools>.cx-compose-plus{margin-right:10px!important}
2858
+ .cx-shell .cx-compose-tools>:nth-child(2),
2859
+ .cx-shell .cx-compose-tools>:nth-child(3){margin-right:3px!important}
2860
+ .cx-shell .cx-compose-tools>.cx-compose-right{margin-left:auto!important;display:flex!important;align-items:center!important;gap:0!important}
2861
+ .cx-shell .cx-compose-right>*+*{margin-left:3px!important}
2862
+ .cx-shell .cx-compose-right>.cx-compose-send{margin-left:10px!important}
2863
+
2864
+ /* 输入框:字号 12,提示词标签化 */
2865
+ .cx-shell .cx-compose-input{font-size:13px!important;line-height:1.65!important}
2866
+ .cx-shell .cx-suggest{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 2px}
2867
+ .cx-shell .cx-suggest-tag{
2868
+ border:1px solid rgba(var(--cx-hue-rgb),.32);
2869
+ background:var(--cx-surface-2);
2870
+ color:var(--cx-text-dim);
2871
+ font:12px/1 var(--cx-font);
2872
+ padding:6px 10px;border-radius:14px;cursor:pointer;
2873
+ max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
2874
+ transition:border-color .15s,color .15s;
2875
+ }
2876
+ .cx-shell .cx-suggest-tag:hover{border-color:var(--cx-cyan);color:var(--cx-cyan)}
2877
+
2878
+ /* 浅色主题:发送键用深青底白箭头 */
2879
+ .cx-shell[data-theme="light"] .cx-compose-send{
2880
+ background:linear-gradient(135deg,#0b7f9f,#0f766e)!important;
2881
+ color:#fff!important;
2882
+ box-shadow:0 2px 10px rgba(11,127,159,.35)!important;
2883
+ }
2884
+
2885
+ /* 甘特图:计划条 + 任务条 */
2886
+ .cx-shell .cx-gantt{padding:2px 0 0}
2887
+ .cx-shell .cx-gantt-row{display:flex;align-items:flex-start;gap:6px;padding:3px 0}
2888
+ .cx-shell .cx-gantt-name{flex:0 0 62px;max-width:62px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;color:var(--cx-text-dim);line-height:14px}
2889
+ .cx-shell .cx-gantt-track{position:relative;flex:1;min-height:14px;background:rgba(var(--cx-hue-rgb),.06);border-radius:3px}
2890
+ .cx-shell .cx-gantt-plan{position:absolute;top:0;background:rgba(var(--cx-hue-rgb),.16);border:1px solid rgba(var(--cx-hue-rgb),.35);border-radius:3px;overflow:hidden}
2891
+ .cx-shell .cx-gantt-task{position:absolute;height:3px;border-radius:2px;background:var(--cx-amber,#e0a44a)}
2892
+ .cx-shell .cx-gantt-task.finished{background:var(--cx-green,#3ddc84)}
2893
+ .cx-shell .cx-gantt-task.canceled{background:var(--cx-text-faint,#6b7d88)}
2894
+ .cx-shell .cx-gantt-task.created{background:rgba(var(--cx-hue-rgb),.55)}
2895
+ .cx-shell .cx-gantt-empty{font-size:10px;color:var(--cx-text-faint);padding:4px 0}
2896
+
2897
+ /* 甘特图:顶部总时间轴 + 当前计划高亮 */
2898
+ .cx-shell .cx-gantt-axis{display:flex;justify-content:space-between;align-items:center;font-size:10px;color:var(--cx-text-faint);padding:0 2px 4px;letter-spacing:.06em}
2899
+ .cx-shell .cx-gantt-axis .mid{color:var(--cx-text-dim);letter-spacing:.1em}
2900
+ .cx-shell .cx-gantt-plan.on{background:rgba(var(--cx-hue-rgb),.34);border-color:var(--cx-cyan);box-shadow:0 0 0 1px rgba(var(--cx-hue-rgb),.25)}
2901
+
2902
+ /* 进度甘特图:吸附左栏底部(同地图) */
2903
+ .cx-shell .cx-pm-side:not(.right){display:flex!important;flex-direction:column}
2904
+ .cx-shell .cx-gantt-sec{
2905
+ margin-top:auto!important;
2906
+ position:sticky!important;bottom:0!important;
2907
+ z-index:30;
2908
+ padding:4px 6px 6px;
2909
+ border:1px solid var(--cx-border);
2910
+ border-radius:6px;
2911
+ background:var(--cx-surface-2);
2912
+ box-shadow:0 -8px 24px rgba(0,0,0,.18);
2913
+ }
2914
+
2915
+ /* 甘特图:不外溢,任务条加高到 10px */
2916
+ .cx-shell .cx-gantt-sec{box-sizing:border-box!important;width:100%!important;max-width:100%!important;overflow:hidden}
2917
+ .cx-shell .cx-gantt{overflow:hidden}
2918
+ .cx-shell .cx-gantt-row{overflow:hidden}
2919
+ .cx-shell .cx-gantt-track{overflow:hidden}
2920
+ .cx-shell .cx-gantt-task{height:10px!important;border-radius:3px}
2921
+ .cx-shell .cx-gantt-plan{overflow:hidden!important}
2922
+
2923
+ /* 甘特图:当前时间竖线 */
2924
+ .cx-shell .cx-gantt-body{position:relative}
2925
+ .cx-shell .cx-gantt-now{
2926
+ position:absolute;top:0;bottom:0;width:1px;
2927
+ background:var(--cx-cyan);
2928
+ box-shadow:0 0 6px rgba(var(--cx-hue-rgb),.55);
2929
+ z-index:3;pointer-events:none;
2930
+ }
2931
+ .cx-shell .cx-gantt-now::before{
2932
+ content:'';position:absolute;top:-3px;left:-2px;
2933
+ width:5px;height:5px;border-radius:50%;background:var(--cx-cyan);
2934
+ }
2935
+
2936
+ /* 甘特图内容区加高 */
2937
+ .cx-shell .cx-gantt{min-height:56px;padding-bottom:6px}
2938
+ .cx-shell .cx-gantt-row{padding:5px 0}
2939
+ .cx-shell .cx-gantt-track{min-height:30px}
2940
+ .cx-shell .cx-gantt-sec{padding-bottom:10px}
2941
+
2942
+ /* 进度区与地图卡片等高 */
2943
+ .cx-shell .cx-gantt-sec{
2944
+ min-height:210px!important;
2945
+ display:flex!important;flex-direction:column;
2946
+ }
2947
+ .cx-shell .cx-gantt{flex:1 1 auto;min-height:0;overflow:auto}
2948
+
2949
+ /* 地图/进度固定在栏底时,必须盖住所有分区标题栏(标题 z-index 是 60..56 递减) */
2950
+ .cx-shell .cx-pm-side.right .cx-mapsec:not(.max){z-index:80!important}
2951
+ .cx-shell .cx-pm-side:not(.right) .cx-gantt-sec{z-index:80!important}
2952
+
2953
+ /* 甘特图折叠后只占标题高度,仍贴栏底 */
2954
+ .cx-shell .cx-gantt-sec.folded{min-height:0!important}
2955
+
2956
+ /* 终端操作键 + 分屏 + 浅色主题背景 */
2957
+ .cx-shell .cx-term-acts{display:flex;align-items:center;gap:4px;margin-left:auto}
2958
+ .cx-shell .cx-term-act{
2959
+ height:22px;padding:0 8px;border-radius:4px;
2960
+ border:1px solid var(--cx-border);background:var(--cx-surface-2);
2961
+ color:var(--cx-text-dim);font:12px/1 var(--cx-font);cursor:pointer;
2962
+ }
2963
+ .cx-shell .cx-term-act:hover{border-color:var(--cx-cyan);color:var(--cx-cyan)}
2964
+ .cx-shell .cx-term-act.on{border-color:var(--cx-cyan);color:var(--cx-cyan);background:color-mix(in srgb,var(--cx-cyan) 12%,var(--cx-surface-2))}
2965
+ .cx-shell .cx-console-terms{display:flex;flex-direction:column;height:100%;min-height:0}
2966
+ .cx-shell .cx-console-terms .cx-console-term{flex:1 1 0;min-height:0;height:auto}
2967
+ .cx-shell .cx-console-terms.split .cx-console-term+.cx-console-term{border-top:1px solid var(--cx-border)}
2968
+ .cx-shell .cx-console-term-inner{height:100%}
2969
+ .cx-shell[data-theme="light"] .xterm,
2970
+ .cx-shell[data-theme="light"] .xterm .xterm-viewport,
2971
+ .cx-shell[data-theme="light"] .xterm .xterm-screen{background:#ffffff!important}
2972
+ .cx-shell[data-theme="light"] .xterm .xterm-rows{color:#1d3a4a}
2973
+
2974
+ /* ============ 监控视图(数字大屏) ============ */
2975
+ .cx-shell .cx-monitor{padding:12px 14px 18px;overflow:auto;height:100%;box-sizing:border-box;display:flex;flex-direction:column;gap:10px}
2976
+ .cx-shell .cx-mon-head{display:flex;align-items:flex-end;justify-content:space-between;gap:12px}
2977
+ .cx-shell .cx-mon-title{font:700 16px var(--cx-font);color:var(--cx-text);letter-spacing:.06em}
2978
+ .cx-shell .cx-mon-sub{font:11px var(--cx-font);color:var(--cx-text-faint);margin-top:3px}
2979
+ .cx-shell .cx-mon-head-r{display:flex;align-items:center;gap:8px}
2980
+ .cx-shell .cx-mon-live{font:600 10px var(--cx-font);color:var(--cx-green);letter-spacing:.14em}
2981
+ .cx-shell .cx-mon-kpis{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px}
2982
+ .cx-shell .cx-mon-kpi{border:1px solid var(--cx-border);border-radius:8px;background:var(--cx-surface-2);padding:10px 12px;position:relative;overflow:hidden}
2983
+ .cx-shell .cx-mon-kpi::after{content:'';position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--cx-cyan);opacity:.7}
2984
+ .cx-shell .cx-mon-kpi.tone-green::after{background:var(--cx-green)}
2985
+ .cx-shell .cx-mon-kpi.tone-amber::after{background:var(--cx-amber,#ffbe4a)}
2986
+ .cx-shell .cx-mon-kpi.tone-rose::after{background:var(--cx-rose,#ff5c8a)}
2987
+ .cx-shell .cx-mon-kpi .k{font:600 10px var(--cx-font);color:var(--cx-text-faint);letter-spacing:.12em}
2988
+ .cx-shell .cx-mon-kpi .v{font:700 24px var(--cx-font);color:var(--cx-text);margin:4px 0 2px;line-height:1}
2989
+ .cx-shell .cx-mon-kpi .s{font:10px var(--cx-font);color:var(--cx-text-dim)}
2990
+ .cx-shell .cx-mon-grid{display:grid;grid-template-columns:1.05fr 1.5fr 1fr;gap:10px;min-height:220px}
2991
+ .cx-shell .cx-mon-grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
2992
+ .cx-shell .cx-mon-panel{border:1px solid var(--cx-border);border-radius:8px;background:var(--cx-surface-2);padding:10px 12px;display:flex;flex-direction:column;min-height:0}
2993
+ .cx-shell .cx-mon-pt{font:600 10px var(--cx-font);color:var(--cx-text-faint);letter-spacing:.14em;margin-bottom:8px}
2994
+ .cx-shell .cx-mon-spark{width:100%;height:100px;flex:1}
2995
+ .cx-shell .cx-mon-twin{width:100%;flex:1;min-height:170px;display:block}
2996
+ .cx-shell .cx-mon-legend{display:flex;align-items:center;gap:6px;font:10px var(--cx-font);color:var(--cx-text-faint);margin-top:6px}
2997
+ .cx-shell .cx-mon-legend .dot,.cx-shell .cx-mon-keys .dot{width:7px;height:7px;border-radius:50%;display:inline-block;background:var(--cx-cyan)}
2998
+ .cx-shell .cx-mon-legend .dot.amber,.cx-shell .cx-mon-keys .dot.amber{background:var(--cx-amber,#ffbe4a)}
2999
+ .cx-shell .cx-mon-keys .dot.green{background:var(--cx-green)}
3000
+ .cx-shell .cx-mon-donut-wrap{display:flex;align-items:center;gap:12px;flex:1}
3001
+ .cx-shell .cx-mon-donut-n{font:700 20px var(--cx-font);fill:var(--cx-text)}
3002
+ .cx-shell .cx-mon-donut-l{font:9px var(--cx-font);fill:var(--cx-text-faint);letter-spacing:.14em}
3003
+ .cx-shell .cx-mon-keys{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;font:11px var(--cx-font);color:var(--cx-text-dim)}
3004
+ .cx-shell .cx-mon-keys li{display:flex;align-items:center;gap:6px}
3005
+ .cx-shell .cx-mon-keys b{margin-left:auto;color:var(--cx-text);font-weight:700}
3006
+ .cx-shell .cx-mon-bar{display:flex;align-items:center;gap:8px;margin:5px 0;font:11px var(--cx-font);color:var(--cx-text-dim)}
3007
+ .cx-shell .cx-mon-bar .n{width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
3008
+ .cx-shell .cx-mon-bar .t{flex:1;height:6px;border-radius:3px;background:rgba(var(--cx-hue-rgb),.10);overflow:hidden}
3009
+ .cx-shell .cx-mon-bar .t i{display:block;height:100%;background:linear-gradient(90deg,var(--cx-cyan),var(--cx-green));border-radius:3px}
3010
+ .cx-shell .cx-mon-bar .v{width:28px;text-align:right;color:var(--cx-text)}
3011
+ .cx-shell .cx-mon-feed{display:flex;gap:8px;font:11px var(--cx-font);color:var(--cx-text-dim);padding:3px 0;border-bottom:1px dashed rgba(var(--cx-hue-rgb),.10)}
3012
+ .cx-shell .cx-mon-feed .t{color:var(--cx-text-faint);width:58px}
3013
+ .cx-shell .cx-mon-feed .o{color:var(--cx-cyan);width:110px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
3014
+ .cx-shell .cx-mon-feed .s{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
3015
+ .cx-shell .cx-mon-empty{font:11px var(--cx-font);color:var(--cx-text-faint);padding:6px 0}
3016
+ @media (max-width:1200px){
3017
+ .cx-shell .cx-mon-kpis{grid-template-columns:repeat(3,minmax(0,1fr))}
3018
+ .cx-shell .cx-mon-grid{grid-template-columns:1fr 1fr}
3019
+ }
3020
+
3021
+ /* 顶部下拉:中间列保底宽度,避免 1fr 塌成 0 */
3022
+ .cx-shell .cx-drop-pop{min-width:240px!important}
3023
+ .cx-shell .cx-drop-pop .cx-menu-3col{grid-template-columns:18px minmax(120px,1fr) 18px!important}
3024
+
3025
+ /* 2026-11-13: today ring + full-screen year/long views fill the panel */
3026
+ .cx-cal-day .d.today{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;border:1px solid var(--cx-cyan);border-radius:50%;color:var(--cx-cyan);font-weight:600}
3027
+ .cx-cal-f-r{display:flex;align-items:center;gap:12px}
3028
+ .cx-calsec.max .cx-cal-years,.cx-calsec.max .cx-cal-months{flex:1!important;grid-auto-rows:1fr!important}
3029
+ .cx-calsec.max .cx-cal-years>button,.cx-calsec.max .cx-cal-months>button{height:100%!important;min-height:0!important;display:flex;flex-direction:column;align-items:center;justify-content:center}
3030
+
3031
+ /* 2026-11-13: map header aligns with other sections; gantt matches map height */
3032
+ .cx-mapsec .cx-pm-h{padding-left:10px;padding-right:8px}
3033
+ .cx-shell .cx-gantt{min-height:180px}
3034
+
3035
+ /* 2026-11-13: 进度分栏与地图卡片固定同高(标题 + 180 画布 + 内边距 ≈ 218) */
3036
+ .cx-shell{--cx-sec-h:218px}
3037
+ .cx-gantt-sec{height:var(--cx-sec-h)!important;display:flex;flex-direction:column;overflow:hidden}
3038
+ .cx-gantt-sec .cx-gantt{flex:1 1 auto!important;min-height:0!important;overflow:auto!important}
3039
+ .cx-pm-side.right .cx-mapsec:not(.max){height:var(--cx-sec-h)!important;display:flex!important;flex-direction:column!important}
3040
+ .cx-pm-side.right .cx-mapsec:not(.max) .cx-taskmap{flex:1 1 auto!important;min-height:0!important;display:flex;flex-direction:column}
3041
+ .cx-pm-side.right .cx-mapsec:not(.max) .cx-taskmap-leaflet{flex:1 1 auto!important;height:auto!important;min-height:0!important}
3042
+
3043
+ /* 2026-11-15: 折叠态不再继承固定高度,收成标题条 */
3044
+ .cx-gantt-sec.folded{height:auto!important;min-height:0!important;flex:0 0 auto!important;overflow:visible!important}
3045
+ .cx-pm-side.right .cx-mapsec.folded{height:auto!important;min-height:0!important;flex:0 0 auto!important}
3046
+ .cx-pm-side .cx-gantt-sec.folded .cx-pm-h,.cx-pm-side .cx-mapsec.folded .cx-pm-h{min-height:0!important}
3047
+
3048
+ /* 2026-11-13: gantt rows share the fixed section height so every plan stays visible */
3049
+ .cx-shell .cx-gantt-body{display:flex;flex-direction:column;gap:4px}
3050
+ .cx-shell .cx-gantt-row{padding:0!important}
3051
+ .cx-shell .cx-gantt-track{min-height:0!important}
3052
+
3053
+ /* 2026-11-13: left panel keeps the progress block visible; the plan list scrolls above it */
3054
+ .cx-pm-side:not(.right){display:flex!important;flex-direction:column;overflow:hidden;min-height:0;height:100%}
3055
+ .cx-pm-side:not(.right) .cx-pm-scroll{flex:1 1 auto;min-height:0;overflow:auto;overflow-x:hidden}
3056
+ .cx-pm-side:not(.right) .cx-gantt-sec{flex:none}
3057
+
3058
+ /* 2026-11-13: message hover toolbar */
3059
+ .cx-msg-wrap{display:flex;flex-direction:column;align-items:stretch;gap:2px;max-width:94%;min-width:0}
3060
+ .cx-msg-wrap.user{align-items:flex-end}
3061
+ .cx-msg-wrap .cx-msg{max-width:100%}
3062
+ .cx-msg-meta .cx-msg-tools{margin-left:auto;display:flex;align-items:center;gap:6px;flex:0 0 auto;opacity:0;transition:opacity .12s ease}
3063
+ .cx-msg-wrap:hover .cx-msg-meta .cx-msg-tools,.cx-msg-wrap:focus-within .cx-msg-meta .cx-msg-tools{opacity:1}
3064
+ .cx-msg-meta .cx-msg-tools{font-size:inherit;line-height:inherit;letter-spacing:inherit}
3065
+ .cx-msg-meta .cx-msg-tools .cx-msg-tool{font:inherit;line-height:inherit;height:auto;padding:0 4px;letter-spacing:inherit;color:inherit;opacity:1}
3066
+ .cx-msg-tool{border:0;background:transparent;color:var(--cx-muted);font:var(--cx-fs-body)/1 var(--cx-font);cursor:pointer;padding:1px 4px;border-radius:3px;letter-spacing:.06em}
3067
+ .cx-msg-tool:hover{color:var(--cx-cyan);background:rgba(var(--cx-hue-rgb),.12)}
3068
+ .cx-msg-tool.danger:hover{color:#ff7b7b}
3069
+ @media (hover:none){.cx-msg-meta .cx-msg-tools{opacity:1}}
3070
+
3071
+ /* 应用实例回执卡(参考管理视图 APP 卡片) */
3072
+ .cx-app-card{display:flex;align-items:center;gap:10px;padding:9px 10px;border:1px solid var(--cx-line);border-radius:8px;background:var(--cx-panel-2);min-width:280px;max-width:420px}
3073
+ .cx-app-card-ico{width:34px;height:34px;flex:none;border-radius:8px;overflow:hidden;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,rgba(var(--cx-hue-rgb),.55),rgba(var(--cx-hue-rgb),.18));border:1px solid rgba(var(--cx-hue-rgb),.45)}
3074
+ .cx-app-card-ico img{width:100%;height:100%;object-fit:cover}
3075
+ .cx-app-card-ico .ph{font-size:14px;font-weight:600;color:#fff}
3076
+ .cx-app-card-main{flex:1;min-width:0}
3077
+ .cx-app-card-title{font-size:14px;font-weight:600;color:var(--cx-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
3078
+ .cx-app-card-sub{font-size:10px;color:var(--cx-text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}
3079
+ .cx-app-card-open{flex:none;height:24px;padding:0 10px;border-radius:4px;border:1px solid rgba(var(--cx-hue-rgb),.5);background:rgba(var(--cx-hue-rgb),.12);color:var(--cx-cyan);font-size:10px;letter-spacing:.08em;cursor:pointer}
3080
+ .cx-app-card-open:hover{background:rgba(var(--cx-hue-rgb),.22)}
3081
+
3082
+ /* 消息列表里的数据表单 */
3083
+ .cx-wform{border:1px solid var(--cx-line);border-radius:8px;background:var(--cx-panel-2);padding:12px 14px;width:100%;max-width:720px}
3084
+ .cx-wform-h{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}
3085
+ .cx-wform-h .t{font-size:12px;font-weight:600;color:var(--cx-text)}
3086
+ .cx-wform-h .s{font-size:10px;color:var(--cx-text-3)}
3087
+ .cx-wform-row{display:flex;align-items:center;gap:10px;margin-bottom:6px}
3088
+ .cx-wform-row .k{width:96px;flex:none;font-size:10px;color:var(--cx-text-2)}
3089
+ .cx-wform-input{flex:1;height:26px;padding:0 8px;border-radius:4px;border:1px solid var(--cx-line);background:var(--cx-panel);color:var(--cx-text);font-size:12px;outline:0}
3090
+ .cx-wform-input:focus{border-color:rgba(var(--cx-hue-rgb),.6)}
3091
+ .cx-wform-acts{display:flex;justify-content:flex-end;margin-top:8px}
3092
+ .cx-wform-submit{height:26px;padding:0 14px;border-radius:4px;border:1px solid rgba(var(--cx-hue-rgb),.55);background:rgba(var(--cx-hue-rgb),.18);color:var(--cx-cyan);font-size:12px;cursor:pointer}
3093
+ .cx-wform-submit:hover{background:rgba(var(--cx-hue-rgb),.3)}
3094
+ .cx-wform-submit:disabled{opacity:.6;cursor:default}
3095
+
3096
+ /* 表单里的实例/功能信息 + 错误提示 */
3097
+ .cx-wform-meta{display:flex;flex-wrap:wrap;gap:4px 14px;margin:0 0 10px;font-size:10px;color:var(--cx-text-3)}
3098
+
3099
+ /* 参数确认表单(创建空间 / 应用模板):标题、参数名、脚注 */
3100
+ .cx-wform-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:8px}
3101
+ .cx-wform-title{font-size:12px;font-weight:600;color:var(--cx-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
3102
+ .cx-wform-count{flex:none;font-size:10px;color:var(--cx-text-3)}
3103
+ .cx-wform-note{margin:0 0 10px;font-size:10px;line-height:1.6;color:var(--cx-text-2);word-break:break-word}
3104
+ .cx-wform-label{width:96px;flex:none;font-size:10px;color:var(--cx-text-2)}
3105
+ .cx-wform-label .req{color:#ff6b6b;font-style:normal;margin-left:2px}
3106
+ .cx-wform-foot{display:flex;justify-content:flex-end;margin-top:8px}
3107
+ .cx-wform-err{margin-top:8px;padding:6px 8px;border-radius:4px;border:1px solid rgba(255,90,90,.5);background:rgba(255,90,90,.12);color:#ff9a9a;font-size:10px;word-break:break-word}
3108
+
3109
+ /* 表单顶部的实例卡 */
3110
+ .cx-wform-app{display:flex;align-items:center;gap:8px;margin-bottom:8px}
3111
+ .cx-wform-app .ico{width:28px;height:28px;flex:none;display:grid;place-items:center;border-radius:6px;background:rgba(var(--cx-hue-rgb),.18);color:var(--cx-cyan)}
3112
+ .cx-wform-app .body{display:flex;flex-direction:column;min-width:0}
3113
+ .cx-wform-app .name{font-size:12px;font-weight:600;color:var(--cx-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
3114
+ .cx-wform-app .sub{font-size:10px;color:var(--cx-text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
3115
+
3116
+ /* 表单实例卡可点击 */
3117
+ .cx-wform-app.link{cursor:pointer;border-radius:6px;margin-left:-4px;padding:4px}
3118
+ .cx-wform-app.link:hover{background:rgba(var(--cx-hue-rgb),.12)}
3119
+
3120
+ /* 提交成功后的「查看详情」 */
3121
+ .cx-wform-open{height:26px;padding:0 14px;border-radius:4px;border:1px solid rgba(var(--cx-hue-rgb),.55);background:rgba(var(--cx-hue-rgb),.16);color:var(--cx-cyan);font-size:12px;cursor:pointer}
3122
+ .cx-wform-open:hover{background:rgba(var(--cx-hue-rgb),.3)}
3123
+ .cx-wform.done{border-color:rgba(var(--cx-green,80,220,160),.45)}
3124
+
3125
+ /* 已提交:字段置灰只读 */
3126
+ .cx-wform-row.ro{opacity:.62}
3127
+ .cx-wform-row.ro .v{flex:1;height:26px;line-height:26px;padding:0 8px;border-radius:4px;border:1px solid var(--cx-line);background:var(--cx-panel);font-size:12px;color:var(--cx-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
3128
+
3129
+ /* 必填标记 */
3130
+ .cx-wform-row .k .req{font-style:normal;color:#ff7b7b;margin-left:2px}
3131
+
3132
+ /* 全局统一结果卡片:节点 / 空间 / 实例 / 模板 / 数据 */
3133
+ .cx-msg .cx-rc,.cx-rc{
3134
+ display:flex!important;flex-direction:row!important;align-items:center!important;
3135
+ gap:12px;white-space:normal!important;font-family:var(--cx-font,system-ui,sans-serif);
3136
+ margin:8px 0;padding:12px;border:1px solid var(--cx-line);
3137
+ border-left:3px solid rgba(var(--cx-hue-rgb),.85);border-radius:8px;
3138
+ background:linear-gradient(180deg,rgba(var(--cx-hue-rgb),.07),rgba(0,0,0,0));
3139
+ background-color:var(--cx-panel);
3140
+ }
3141
+ .cx-msg .cx-rc-ico,.cx-rc-ico{
3142
+ flex:0 0 40px!important;width:40px;height:40px;border-radius:10px;overflow:hidden;
3143
+ display:flex!important;align-items:center;justify-content:center;
3144
+ background:rgba(var(--cx-hue-rgb),.16);border:1px solid rgba(var(--cx-hue-rgb),.35);color:var(--cx-cyan);
3145
+ }
3146
+ .cx-rc-ico img{width:100%;height:100%;object-fit:cover}
3147
+ .cx-msg .cx-rc-main,.cx-rc-main{flex:1 1 auto!important;min-width:0;display:block!important}
3148
+ .cx-msg .cx-rc-head,.cx-rc-head{display:flex!important;align-items:center;gap:8px;white-space:nowrap;overflow:hidden}
3149
+ .cx-msg .cx-rc-kind,.cx-rc-kind{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--cx-cyan);opacity:.75;flex:0 0 auto}
3150
+ .cx-msg .cx-rc-title,.cx-rc-title{font-size:14px!important;font-weight:600;color:var(--cx-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
3151
+ .cx-msg .cx-rc-badge,.cx-rc-badge{flex:0 0 auto;font-size:10px;padding:1px 7px;border-radius:999px;border:1px solid rgba(var(--cx-hue-rgb),.5);color:var(--cx-cyan);background:rgba(var(--cx-hue-rgb),.1)}
3152
+ .cx-rc-badge.ok{border-color:rgba(90,220,160,.5);color:#5adca0;background:rgba(90,220,160,.1)}
3153
+ .cx-msg .cx-rc-sub,.cx-rc-sub{font-size:10px!important;line-height:16px;color:var(--cx-text-2);margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
3154
+ .cx-msg .cx-rc-meta,.cx-rc-meta{display:flex!important;flex-wrap:wrap;gap:4px 10px;margin-top:5px;font-size:10px;color:var(--cx-text-2);opacity:.85}
3155
+ .cx-msg .cx-rc-acts,.cx-rc-acts{flex:0 0 auto!important;display:flex!important;flex-direction:row!important;gap:6px;align-self:center}
3156
+ .cx-msg .cx-rc-btn,.cx-rc-btn{
3157
+ height:26px!important;min-height:26px;padding:0 12px!important;border-radius:5px;
3158
+ border:1px solid rgba(var(--cx-hue-rgb),.55)!important;background:rgba(var(--cx-hue-rgb),.14)!important;
3159
+ color:var(--cx-cyan)!important;font-size:10px!important;line-height:24px;cursor:pointer;white-space:nowrap;
3160
+ box-shadow:none!important;
3161
+ }
3162
+ .cx-msg .cx-rc-btn:hover,.cx-rc-btn:hover{background:rgba(var(--cx-hue-rgb),.3)!important}
3163
+
3164
+ /* 失败后的常用调试工具条(编程 / 节点 / 空间 / 开发模式) */
3165
+ .cx-toolrow{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:2px 0 8px}
3166
+ .cx-toolsel{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--cx-dim)}
3167
+ .cx-toolsel select{height:28px;padding:0 8px;border-radius:4px;border:1px solid var(--cx-line);background:var(--cx-panel);color:var(--cx-fg);font-size:12px}
3168
+ .cx-toolrow .cx-btn.sm{height:28px;padding:0 10px;font-size:12px}
3169
+
3170
+ /* 网页最大化:强制收起左右两栏(覆盖文件中部所有 display:flex!important) */
3171
+ .cx-shell .cx-chat.webmax .cx-pm-side,
3172
+ .cx-shell .cx-chat.webmax .cx-pm-side:not(.right),
3173
+ .cx-shell .cx-chat.webmax .cx-pm-side.right{display:none!important;width:0!important;min-width:0!important;padding:0!important;border:0!important}
3174
+ .cx-shell .cx-chat.webmax .cx-chat-b{max-width:none!important}
3175
+
3176
+ /* 网页聚焦:shell 级收起左右两栏(不依赖组件内部状态) */
3177
+ .cx-shell[data-webfocus="1"] .cx-pm-side{display:none!important;width:0!important;min-width:0!important;padding:0!important;border:0!important;overflow:hidden!important}
3178
+ /* 网页最大化:连对话框标题栏一起收起,只留标签栏 + 地址栏 */
3179
+ .cx-shell[data-webfocus="1"] .cx-chat-h{display:none!important}
3180
+
3181
+ /* 写数据的四步拆解 */
3182
+ .cx-step{display:flex;align-items:center;gap:6px;margin:4px 0 4px 34px;font-size:var(--cx-fs-body);color:var(--cx-text-faint,rgba(180,220,235,.6));letter-spacing:.04em}
3183
+ .cx-step::before{content:"";width:4px;height:4px;border-radius:50%;background:var(--cx-cyan,#3fd0d8);opacity:.75;flex:none}
3184
+ .cx-shell[data-theme="light"] .cx-step{color:#5e7f8d}
3185
+
3186
+ /* 应用/功能只读表格 */
3187
+ .cx-dtable{border:1px solid var(--cx-line,rgba(120,200,220,.18));border-radius:8px;overflow:hidden;margin:6px 0;background:rgba(8,24,34,.35)}
3188
+ .cx-dtable-h{display:flex;align-items:center;justify-content:space-between;padding:7px 10px;font-size:var(--cx-fs-body);color:var(--cx-text-dim,#9fc4d2);border-bottom:1px solid var(--cx-line,rgba(120,200,220,.14))}
3189
+ .cx-dtable-h .n{color:var(--cx-cyan,#3fd0d8)}
3190
+ .cx-dtable-wrap{max-height:320px;overflow:auto}
3191
+ .cx-dtable table{width:100%;border-collapse:collapse;font-size:var(--cx-fs-body)}
3192
+ .cx-dtable th,.cx-dtable td{padding:6px 10px;text-align:left;white-space:nowrap;border-bottom:1px solid rgba(120,200,220,.08)}
3193
+ .cx-dtable th{color:var(--cx-text-faint,rgba(180,220,235,.6));font-weight:400;position:sticky;top:0;background:rgba(8,24,34,.9)}
3194
+ .cx-shell[data-theme="light"] .cx-dtable{background:#fff}
3195
+ .cx-shell[data-theme="light"] .cx-dtable th{background:#f4fafc}
3196
+
3197
+ /* 含表单的消息:整条铺满,参数不被气泡挤窄 */
3198
+ .cx-msg:has(.cx-wform),
3199
+ .cx-chat.full .cx-msg:has(.cx-wform){max-width:100%!important;width:100%!important}
3200
+ .cx-msg:has(.cx-wform) .cx-msg-main,
3201
+ .cx-msg:has(.cx-wform) .cx-msg-body{width:100%!important;min-width:0}
3202
+ .cx-msg .cx-wform{width:100%!important;max-width:none!important}
3203
+ .cx-wform-row .k{width:120px;flex:none}
3204
+ .cx-wform-row .cx-wform-input,.cx-wform-row input,.cx-wform-row textarea,.cx-wform-row select{min-width:0;flex:1;width:auto}
3205
+
3206
+ /* 含表单的消息:右边留白,不贴满 */
3207
+ .cx-msg:has(.cx-wform),
3208
+ .cx-chat.full .cx-msg:has(.cx-wform){max-width:calc(100% - 32px)!important;width:calc(100% - 32px)!important;margin-right:32px}
3209
+
3210
+ /* 统一消息最大宽度:表单与普通消息同宽,表单占满该消息 */
3211
+ .cx-msg,
3212
+ .cx-chat.full .cx-msg,
3213
+ .cx-msg:has(.cx-wform),
3214
+ .cx-chat.full .cx-msg:has(.cx-wform){max-width:92%!important;width:auto!important;margin-right:0!important}
3215
+ .cx-msg:has(.cx-wform),
3216
+ .cx-chat.full .cx-msg:has(.cx-wform){width:92%!important}
3217
+ .cx-msg .cx-wform{width:100%!important;max-width:none!important}
3218
+
3219
+ /* 执行状态行:与输入框同一容器、同一左基线 */
3220
+ .cx-chat-typing{width:calc(100% - 36px);max-width:1080px;box-sizing:border-box;margin:0 auto;padding:2px 15px 4px}
3221
+
3222
+ /* 上下文菜单右侧的「是否已打开」状态点 */
3223
+ .cx-menu-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:rgba(var(--cx-hue-rgb),.28)}
3224
+ .cx-menu-dot.open{background:var(--cx-green,#42f5a7);box-shadow:0 0 6px rgba(66,245,167,.6)}
3225
+
3226
+ /* 菜单分隔线:常用工具与危险操作之间 */
3227
+ .cx-menu-sep{height:1px;margin:4px 8px;background:rgba(var(--cx-hue-rgb),.18)}
3228
+ .cx-menu-item.danger .cx-menu-lbl{color:#ff6b6b}
3229
+ .cx-menu-item.danger svg{color:#ff6b6b}
3230
+
3231
+ /* 节点/空间卡:加宽一档;标题与副标题都只占一行,超出省略,悬停看完整 */
3232
+ /* 服务节点与项目空间等宽,两边都能完整显示副标题 */
3233
+ .cx-body{grid-template-columns:minmax(320px,1fr) minmax(320px,1fr) minmax(250px,.92fr) minmax(360px,1.6fr)}
3234
+ .cx-node .cx-entity-meta,.cx-space .cx-entity-meta{height:14px;white-space:nowrap;text-overflow:ellipsis;display:block;overflow:hidden}
3235
+ .cx-node .cx-entity-name,.cx-space .cx-entity-name{white-space:nowrap;text-overflow:ellipsis;display:block;overflow:hidden}
3236
+
3237
+ /* 标题后面的时间(最近应用) */
3238
+ .cx-entity-time{flex:none;margin-left:6px;font-size:10px;color:var(--cx-muted);letter-spacing:.02em;white-space:nowrap}
3239
+
3240
+ /* 详情:键值两列 */
3241
+ .cx-dtable-kv th{width:150px;text-align:left;font-weight:500;color:var(--cx-mut);white-space:nowrap}
3242
+ .cx-dtable-kv td{color:var(--cx-fg)}
3243
+
3244
+ /* ===== 监控看板(Grafana 风格面板) ===== */
3245
+ .cx-mon-board{margin:0 0 14px}
3246
+ .cx-mon-board-h{display:flex;align-items:center;gap:10px;padding:0 0 8px}
3247
+ .cx-mon-board-h .t{font-size:12px;letter-spacing:.12em;color:var(--cx-cyan)}
3248
+ .cx-mon-board-h .s{font-size:10px;color:var(--cx-mut)}
3249
+ .cx-mon-board-h .cx-btn{margin-left:auto}
3250
+ .cx-mon-board-grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:10px}
3251
+ .cx-mon-bo{min-height:120px}
3252
+ .cx-mon-bo-act{margin-left:auto;display:flex;gap:4px}
3253
+ .cx-mon-bo-body{padding:8px 4px 2px;min-height:64px}
3254
+ .cx-mon-stat{display:flex;align-items:baseline;gap:8px}
3255
+ .cx-mon-stat b{font-size:22px;color:var(--cx-fg);font-variant-numeric:tabular-nums}
3256
+ .cx-mon-stat b.sm{font-size:12px;font-weight:500}
3257
+ .cx-mon-stat span{font-size:10px;color:var(--cx-mut)}
3258
+ .cx-mon-tbl .h,.cx-mon-tbl .r{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:6px;font-size:10px;padding:3px 0;border-bottom:1px solid rgba(var(--cx-hue-rgb),.10)}
3259
+ .cx-mon-tbl .h{color:var(--cx-mut);text-transform:uppercase;letter-spacing:.06em}
3260
+ .cx-mon-tbl .r{color:var(--cx-fg);white-space:nowrap;overflow:hidden}
3261
+ .cx-mon-kv div{display:flex;justify-content:space-between;font-size:10px;padding:2px 0;border-bottom:1px solid rgba(var(--cx-hue-rgb),.08)}
3262
+ .cx-mon-kv span{color:var(--cx-mut)}
3263
+ .cx-mon-kv b{color:var(--cx-fg);font-weight:500;max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
3264
+ .cx-mon-frame{width:100%;height:220px;border:1px solid rgba(var(--cx-hue-rgb),.18);border-radius:6px;background:#fff}
3265
+ .cx-mon-empty.err{color:var(--cx-rose)}
3266
+ .cx-mon-ed{position:fixed;right:24px;bottom:24px;width:340px;max-height:70vh;overflow:auto;z-index:4000;padding:12px;border-radius:8px;background:var(--cx-panel);border:1px solid rgba(var(--cx-hue-rgb),.35);box-shadow:0 16px 48px rgba(0,0,0,.45);display:flex;flex-direction:column;gap:8px}
3267
+ .cx-mon-ed-h{font-size:12px;color:var(--cx-cyan);letter-spacing:.08em}
3268
+ .cx-mon-ed label{display:flex;flex-direction:column;gap:3px;font-size:10px;color:var(--cx-mut)}
3269
+ .cx-mon-ed input,.cx-mon-ed select{height:28px;padding:0 8px;font-size:12px;border-radius:4px;border:1px solid rgba(var(--cx-hue-rgb),.3);background:var(--cx-bg);color:var(--cx-fg);outline:0}
3270
+ .cx-mon-ed-row{display:grid;grid-template-columns:1fr 1fr;gap:6px}
3271
+ .cx-mon-ed-f{display:flex;justify-content:flex-end;gap:6px;margin-top:4px}
3272
+
3273
+ /* 输入框上方:可点击的提示词 */
3274
+ .cx-hint{flex-wrap:nowrap}
3275
+ .cx-hint-name{flex:none;font-size:var(--cx-fs-body);color:var(--cx-cyan);letter-spacing:.06em;max-width:32%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
3276
+ .cx-hint-quick{flex:1;min-width:0;display:flex;gap:6px;overflow:hidden}
3277
+ .cx-hint-chip{flex:none;height:24px;padding:0 9px;border:1px solid rgba(0,212,255,.28);background:rgba(0,212,255,.07);color:#bfe9f7;border-radius:12px;font-family:var(--cx-font);font-size:10px;line-height:22px;cursor:pointer;white-space:nowrap;max-width:260px;overflow:hidden;text-overflow:ellipsis}
3278
+ .cx-hint-chip:hover{border-color:var(--cx-cyan);background:rgba(0,212,255,.16);color:#eafcff}
3279
+
3280
+ /* 实时过程行 */
3281
+ .cx-live{display:flex;align-items:center;gap:8px;padding:6px 2px;color:#8fc7da;font-size:10px;letter-spacing:.04em}
3282
+ .cx-live-dot{width:6px;height:6px;border-radius:50%;background:var(--cx-cyan);box-shadow:0 0 8px var(--cx-cyan);animation:cx-pulse 1.1s ease-in-out infinite}
3283
+ @keyframes cx-pulse{0%,100%{opacity:.35;transform:scale(.8)}50%{opacity:1;transform:scale(1.15)}}
3284
+ .cx-live-t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
3285
+
3286
+ /* 请求上下文面板 */
3287
+ .cx-trace-mask{position:fixed;inset:0;background:rgba(2,10,16,.62);backdrop-filter:blur(2px);z-index:9000;display:flex;align-items:center;justify-content:center;padding:24px}
3288
+ .cx-trace{width:min(980px,94vw);max-height:86vh;display:flex;flex-direction:column;background:#05121c;border:1px solid rgba(0,212,255,.28);border-radius:10px;box-shadow:0 24px 60px rgba(0,0,0,.55)}
3289
+ .cx-trace-h{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid rgba(0,212,255,.18);font-size:12px;color:#dff6ff}
3290
+ .cx-trace-sub{flex:1;font-size:10px;color:#7d9bb0}
3291
+ .cx-trace-x{border:0;background:transparent;color:#8fc7da;cursor:pointer;font-size:12px}
3292
+ .cx-trace-b{flex:1;overflow:auto;padding:6px 14px 12px}
3293
+ .cx-trace-sec{margin-top:8px}
3294
+ .cx-trace-k{font-size:10px;color:var(--cx-cyan);letter-spacing:.08em;margin-bottom:4px}
3295
+ .cx-trace-code{margin:0;padding:8px 10px;background:#04101a;border:1px solid rgba(0,212,255,.14);border-radius:6px;font-size:10px;line-height:1.55;color:#bfe9f7;white-space:pre-wrap;word-break:break-all;max-height:260px;overflow:auto}
3296
+ .cx-trace-f{display:flex;justify-content:flex-end;padding:8px 14px;border-top:1px solid rgba(0,212,255,.18)}
3297
+ .cx-section{display:flex;flex-direction:column;gap:8px;min-width:0}
3298
+ .cx-section-h{font-size:var(--cx-fs);font-weight:600;color:var(--cx-cyan);letter-spacing:.06em;text-transform:uppercase;opacity:.85}
3299
+ .cx-btn.cx-sm{padding:2px 7px;font-size:var(--cx-fs)}
3300
+ .cx-btn.cx-primary{border-color:var(--cx-cyan);color:var(--cx-bg);background:var(--cx-cyan)}
3301
+ .cx-btn.cx-danger{border-color:var(--cx-red);color:var(--cx-red)}
3302
+ .cx-btn.cx-ghost{border-color:transparent;background:transparent}
3303
+ .cx-tabs{display:flex;gap:6px;flex-wrap:wrap}
3304
+ .cx-tab.on{border-color:var(--cx-cyan);color:var(--cx-cyan)}
3305
+ /* accessibility / native controls */
3306
+ .cx-shell{color-scheme:dark}
3307
+ .cx-shell[data-theme="light"]{color-scheme:light}
3308
+ .cx-shell button:focus-visible,.cx-shell select:focus-visible,.cx-shell input:focus-visible,.cx-shell textarea:focus-visible,.cx-shell [tabindex]:focus-visible{outline:2px solid var(--cx-accent);outline-offset:2px}
3309
+ .cx-shell .leaflet-container:focus-visible{outline:2px solid var(--cx-accent);outline-offset:-2px}
3310
+ @media (prefers-reduced-motion: reduce){
3311
+ .cx-shell *, .cx-shell *::before, .cx-shell *::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}
3312
+ }
3313
+ .cx-error-pane{padding:24px;border:1px solid var(--cx-border);background:var(--cx-surface-1);color:var(--cx-text);margin:16px;border-radius:8px}
3314
+ .cx-error-title{font-size:var(--cx-fs-title);font-weight:700;color:var(--cx-danger,var(--cx-red));margin-bottom:8px}
3315
+ .cx-error-msg{font:var(--cx-fs)/1.6 var(--cx-mono);color:var(--cx-text-dim);white-space:pre-wrap;max-height:180px;overflow:auto;margin-bottom:12px}
3316
+ .cx-error-actions{display:flex;gap:8px}