@researai/deepscientist 1.5.0 → 1.5.1

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 (163) hide show
  1. package/AGENTS.md +26 -0
  2. package/README.md +19 -179
  3. package/assets/connectors/lingzhu/openclaw-bridge/README.md +124 -0
  4. package/assets/connectors/lingzhu/openclaw-bridge/index.ts +162 -0
  5. package/assets/connectors/lingzhu/openclaw-bridge/openclaw.plugin.json +145 -0
  6. package/assets/connectors/lingzhu/openclaw-bridge/package.json +35 -0
  7. package/assets/connectors/lingzhu/openclaw-bridge/src/cli.ts +180 -0
  8. package/assets/connectors/lingzhu/openclaw-bridge/src/config.ts +196 -0
  9. package/assets/connectors/lingzhu/openclaw-bridge/src/debug-log.ts +111 -0
  10. package/assets/connectors/lingzhu/openclaw-bridge/src/events.ts +4 -0
  11. package/assets/connectors/lingzhu/openclaw-bridge/src/http-handler.ts +1133 -0
  12. package/assets/connectors/lingzhu/openclaw-bridge/src/image-cache.ts +75 -0
  13. package/assets/connectors/lingzhu/openclaw-bridge/src/lingzhu-tools.ts +246 -0
  14. package/assets/connectors/lingzhu/openclaw-bridge/src/transform.ts +541 -0
  15. package/assets/connectors/lingzhu/openclaw-bridge/src/types.ts +131 -0
  16. package/assets/connectors/lingzhu/openclaw-bridge/tsconfig.json +14 -0
  17. package/assets/connectors/lingzhu/openclaw.lingzhu.config.template.json +39 -0
  18. package/bin/ds.js +233 -53
  19. package/docs/en/00_QUICK_START.md +134 -0
  20. package/docs/en/01_SETTINGS_REFERENCE.md +1104 -0
  21. package/docs/en/02_START_RESEARCH_GUIDE.md +404 -0
  22. package/docs/en/03_QQ_CONNECTOR_GUIDE.md +325 -0
  23. package/docs/en/04_LINGZHU_CONNECTOR_GUIDE.md +216 -0
  24. package/docs/en/05_TUI_GUIDE.md +141 -0
  25. package/docs/en/06_RUNTIME_AND_CANVAS.md +679 -0
  26. package/docs/en/07_MEMORY_AND_MCP.md +253 -0
  27. package/docs/en/08_FIGURE_STYLE_GUIDE.md +97 -0
  28. package/docs/en/09_DOCTOR.md +108 -0
  29. package/docs/en/90_ARCHITECTURE.md +245 -0
  30. package/docs/en/91_DEVELOPMENT.md +195 -0
  31. package/docs/en/99_ACKNOWLEDGEMENTS.md +29 -0
  32. package/docs/zh/00_QUICK_START.md +134 -0
  33. package/docs/zh/01_SETTINGS_REFERENCE.md +1137 -0
  34. package/docs/zh/02_START_RESEARCH_GUIDE.md +414 -0
  35. package/docs/zh/03_QQ_CONNECTOR_GUIDE.md +324 -0
  36. package/docs/zh/04_LINGZHU_CONNECTOR_GUIDE.md +230 -0
  37. package/docs/zh/05_TUI_GUIDE.md +128 -0
  38. package/docs/zh/06_RUNTIME_AND_CANVAS.md +271 -0
  39. package/docs/zh/07_MEMORY_AND_MCP.md +235 -0
  40. package/docs/zh/08_FIGURE_STYLE_GUIDE.md +97 -0
  41. package/docs/zh/09_DOCTOR.md +112 -0
  42. package/docs/zh/99_ACKNOWLEDGEMENTS.md +29 -0
  43. package/install.sh +32 -8
  44. package/package.json +4 -2
  45. package/pyproject.toml +1 -1
  46. package/src/deepscientist/artifact/guidance.py +9 -2
  47. package/src/deepscientist/artifact/service.py +482 -22
  48. package/src/deepscientist/bash_exec/monitor.py +27 -5
  49. package/src/deepscientist/bash_exec/runtime.py +639 -0
  50. package/src/deepscientist/bash_exec/service.py +99 -16
  51. package/src/deepscientist/bridges/base.py +3 -0
  52. package/src/deepscientist/bridges/connectors.py +292 -13
  53. package/src/deepscientist/channels/qq.py +19 -2
  54. package/src/deepscientist/channels/relay.py +1 -0
  55. package/src/deepscientist/cli.py +32 -25
  56. package/src/deepscientist/config/models.py +28 -2
  57. package/src/deepscientist/config/service.py +201 -6
  58. package/src/deepscientist/connector_runtime.py +2 -0
  59. package/src/deepscientist/daemon/api/handlers.py +50 -5
  60. package/src/deepscientist/daemon/api/router.py +1 -0
  61. package/src/deepscientist/daemon/app.py +442 -15
  62. package/src/deepscientist/doctor.py +444 -0
  63. package/src/deepscientist/home.py +1 -0
  64. package/src/deepscientist/latex_runtime.py +17 -4
  65. package/src/deepscientist/lingzhu_support.py +182 -0
  66. package/src/deepscientist/mcp/server.py +49 -2
  67. package/src/deepscientist/prompts/builder.py +181 -58
  68. package/src/deepscientist/quest/layout.py +1 -0
  69. package/src/deepscientist/quest/service.py +63 -2
  70. package/src/deepscientist/quest/stage_views.py +19 -1
  71. package/src/deepscientist/runtime_tools/__init__.py +16 -0
  72. package/src/deepscientist/runtime_tools/builtins.py +19 -0
  73. package/src/deepscientist/runtime_tools/models.py +29 -0
  74. package/src/deepscientist/runtime_tools/registry.py +40 -0
  75. package/src/deepscientist/runtime_tools/service.py +59 -0
  76. package/src/deepscientist/runtime_tools/tinytex.py +25 -0
  77. package/src/deepscientist/tinytex.py +276 -0
  78. package/src/prompts/connectors/lingzhu.md +12 -0
  79. package/src/prompts/connectors/qq.md +121 -0
  80. package/src/prompts/system.md +177 -33
  81. package/src/skills/analysis-campaign/SKILL.md +22 -6
  82. package/src/skills/baseline/SKILL.md +5 -4
  83. package/src/skills/decision/SKILL.md +4 -3
  84. package/src/skills/experiment/SKILL.md +5 -4
  85. package/src/skills/finalize/SKILL.md +5 -4
  86. package/src/skills/idea/SKILL.md +5 -4
  87. package/src/skills/intake-audit/SKILL.md +277 -0
  88. package/src/skills/intake-audit/references/state-audit-template.md +41 -0
  89. package/src/skills/rebuttal/SKILL.md +407 -0
  90. package/src/skills/rebuttal/references/action-plan-template.md +63 -0
  91. package/src/skills/rebuttal/references/evidence-update-template.md +30 -0
  92. package/src/skills/rebuttal/references/response-letter-template.md +113 -0
  93. package/src/skills/rebuttal/references/review-matrix-template.md +55 -0
  94. package/src/skills/review/SKILL.md +293 -0
  95. package/src/skills/review/references/experiment-todo-template.md +29 -0
  96. package/src/skills/review/references/review-report-template.md +83 -0
  97. package/src/skills/review/references/revision-log-template.md +40 -0
  98. package/src/skills/scout/SKILL.md +5 -4
  99. package/src/skills/write/SKILL.md +7 -3
  100. package/src/tui/dist/components/WelcomePanel.js +17 -43
  101. package/src/tui/dist/components/messages/BashExecOperationMessage.js +3 -2
  102. package/src/tui/package.json +1 -1
  103. package/src/ui/dist/assets/{AiManusChatView-7v-dHngU.js → AiManusChatView-w5lF2Ttt.js} +109 -575
  104. package/src/ui/dist/assets/{AnalysisPlugin-B_Xmz-KE.js → AnalysisPlugin-DJOED79I.js} +1 -1
  105. package/src/ui/dist/assets/{AutoFigurePlugin-Cko-0tm1.js → AutoFigurePlugin-DaG61Y0M.js} +63 -8
  106. package/src/ui/dist/assets/{CliPlugin-BsU0ht7q.js → CliPlugin-CV4LqUB_.js} +43 -609
  107. package/src/ui/dist/assets/{CodeEditorPlugin-DcMMP0Rt.js → CodeEditorPlugin-DylfAea4.js} +8 -8
  108. package/src/ui/dist/assets/{CodeViewerPlugin-BqoQ5QyY.js → CodeViewerPlugin-F7saY0LM.js} +5 -5
  109. package/src/ui/dist/assets/{DocViewerPlugin-D7eHNhU6.js → DocViewerPlugin-COP0c7jf.js} +3 -3
  110. package/src/ui/dist/assets/{GitDiffViewerPlugin-DLJN42T5.js → GitDiffViewerPlugin-CAS05pT9.js} +1 -1
  111. package/src/ui/dist/assets/{ImageViewerPlugin-gJMV7MOu.js → ImageViewerPlugin-Bco1CN_w.js} +5 -6
  112. package/src/ui/dist/assets/{LabCopilotPanel-B857sfxP.js → LabCopilotPanel-CvMlCD99.js} +12 -15
  113. package/src/ui/dist/assets/LabPlugin-BYankkE4.js +2676 -0
  114. package/src/ui/dist/assets/LabPlugin-D9jVIo0A.css +2698 -0
  115. package/src/ui/dist/assets/{LatexPlugin-DWKEo-Wj.js → LatexPlugin-LDSMR-t-.js} +16 -16
  116. package/src/ui/dist/assets/{MarkdownViewerPlugin-DBzoEmhv.js → MarkdownViewerPlugin-B7o80jgm.js} +4 -4
  117. package/src/ui/dist/assets/{MarketplacePlugin-DoHc-8vo.js → MarketplacePlugin-CM6ZOcpC.js} +3 -3
  118. package/src/ui/dist/assets/{NotebookEditor-CKjKH-yS.js → NotebookEditor-Dc61cXmK.js} +3 -3
  119. package/src/ui/dist/assets/{PdfLoader-zFoL0VPo.js → PdfLoader-DWowuQwx.js} +1 -1
  120. package/src/ui/dist/assets/{PdfMarkdownPlugin-DXPaL9Nt.js → PdfMarkdownPlugin-BsJM1q_a.js} +3 -3
  121. package/src/ui/dist/assets/{PdfViewerPlugin-DhK8qCFp.js → PdfViewerPlugin-DB2eEEFQ.js} +10 -10
  122. package/src/ui/dist/assets/{SearchPlugin-CdSi6krf.js → SearchPlugin-CraThSvt.js} +1 -1
  123. package/src/ui/dist/assets/{Stepper-V-WiDQJl.js → Stepper-CgocRTPq.js} +1 -1
  124. package/src/ui/dist/assets/{TextViewerPlugin-hIs1Efiu.js → TextViewerPlugin-B1JGhKtd.js} +4 -4
  125. package/src/ui/dist/assets/{VNCViewer-DG8b0q2X.js → VNCViewer-CclFC7FM.js} +9 -10
  126. package/src/ui/dist/assets/{bibtex-HDac6fVW.js → bibtex-D3IKsMl7.js} +1 -1
  127. package/src/ui/dist/assets/{code-BnBeNxBc.js → code-BP37Xx0p.js} +1 -1
  128. package/src/ui/dist/assets/{file-content-IRQ3jHb8.js → file-content-BAJSu-9r.js} +1 -1
  129. package/src/ui/dist/assets/{file-diff-panel-DZoQ9I6r.js → file-diff-panel-DUGeCTuy.js} +1 -1
  130. package/src/ui/dist/assets/{file-socket-BMCdLc-P.js → file-socket-CXc1Ojf7.js} +1 -1
  131. package/src/ui/dist/assets/{file-utils-CltILB3w.js → file-utils-2J21jt7M.js} +1 -1
  132. package/src/ui/dist/assets/{image-Boe6ffhu.js → image-CMMmgvcn.js} +1 -1
  133. package/src/ui/dist/assets/{index-BlplpvE1.js → index-BaVumsQT.js} +2 -2
  134. package/src/ui/dist/assets/{index-DZqJ-qAM.js → index-CWgMgpow.js} +60 -2154
  135. package/src/ui/dist/assets/{index-DO43pFZP.js → index-DmwmJmbW.js} +6372 -8434
  136. package/src/ui/dist/assets/{index-Bq2bvfkl.css → index-KGt-z-dD.css} +225 -2920
  137. package/src/ui/dist/assets/{index-2Zf65FZt.js → index-s7aHnNQ4.js} +1 -1
  138. package/src/ui/dist/assets/{message-square-mUHn_Ssb.js → message-square-CQRfX0Am.js} +1 -1
  139. package/src/ui/dist/assets/{monaco-fe0arNEU.js → monaco-B4TbdsrF.js} +1 -1
  140. package/src/ui/dist/assets/{popover-D_7i19qU.js → popover-B8Rokodk.js} +1 -1
  141. package/src/ui/dist/assets/{project-sync-DyVGrU7H.js → project-sync-D_i96KH4.js} +2 -8
  142. package/src/ui/dist/assets/{sigma-BzazRyxQ.js → sigma-D12PnzCN.js} +1 -1
  143. package/src/ui/dist/assets/{tooltip-DN_yjHFH.js → tooltip-B6YrI4aJ.js} +1 -1
  144. package/src/ui/dist/assets/trash-Bc8jGp0V.js +32 -0
  145. package/src/ui/dist/assets/{useCliAccess-DV2L2Qxy.js → useCliAccess-mXVCYSZ-.js} +12 -42
  146. package/src/ui/dist/assets/{useFileDiffOverlay-DyTj-p_V.js → useFileDiffOverlay-Bg6b9H9K.js} +1 -1
  147. package/src/ui/dist/assets/{wrap-text-ozYHtUwq.js → wrap-text-Drh5GEnL.js} +1 -1
  148. package/src/ui/dist/assets/{zoom-out-BN9MUyCQ.js → zoom-out-CJj9DZLn.js} +1 -1
  149. package/src/ui/dist/index.html +2 -2
  150. package/assets/fonts/Inter-Variable.ttf +0 -0
  151. package/assets/fonts/NotoSerifSC-Regular-C94HN_ZN.ttf +0 -0
  152. package/assets/fonts/NunitoSans-Variable.ttf +0 -0
  153. package/assets/fonts/Satoshi-Medium-ByP-Zb-9.woff2 +0 -0
  154. package/assets/fonts/SourceSans3-Variable.ttf +0 -0
  155. package/assets/fonts/ds-fonts.css +0 -83
  156. package/src/ui/dist/assets/Inter-Variable-VF2RPR_K.ttf +0 -0
  157. package/src/ui/dist/assets/LabPlugin-bL7rpic8.js +0 -43
  158. package/src/ui/dist/assets/NotoSerifSC-Regular-C94HN_ZN-C94HN_ZN.ttf +0 -0
  159. package/src/ui/dist/assets/NunitoSans-Variable-B_ZymHAd.ttf +0 -0
  160. package/src/ui/dist/assets/Satoshi-Medium-ByP-Zb-9-GkA34YXu.woff2 +0 -0
  161. package/src/ui/dist/assets/SourceSans3-Variable-CD-WOsSK.ttf +0 -0
  162. package/src/ui/dist/assets/info-CcsK_htA.js +0 -18
  163. package/src/ui/dist/assets/user-plus-BusDx-hF.js +0 -79
@@ -0,0 +1,2698 @@
1
+ .lab-root {
2
+ position: relative;
3
+ display: flex;
4
+ flex-direction: column;
5
+ min-height: 0;
6
+ flex: 1 1 auto;
7
+ height: 100%;
8
+ width: 100%;
9
+ overflow: visible;
10
+ border-radius: 0;
11
+ background: transparent;
12
+ --lab-bg: #f6f6f6;
13
+ --lab-surface: #ffffff;
14
+ --lab-surface-muted: #f0f0f0;
15
+ --lab-surface-strong: #e9e9e9;
16
+ --lab-background: var(--lab-surface-muted);
17
+ --lab-border: #e2e2e2;
18
+ --lab-border-strong: #cfcfcf;
19
+ --lab-text-primary: #111111;
20
+ --lab-text-secondary: #4f4f4f;
21
+ --lab-text-muted: #8a8a8a;
22
+ --lab-accent: #c4a066;
23
+ --lab-accent-strong: #b48d4f;
24
+ --lab-danger: #b42318;
25
+ --lab-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), 0 12px 26px rgba(0, 0, 0, 0.06);
26
+ --lab-dark: rgba(32, 33, 38, 0.78);
27
+ --lab-radius: 14px;
28
+ --lab-spacing-xs: 4px;
29
+ --lab-spacing-sm: 8px;
30
+ --lab-spacing-md: 12px;
31
+ --lab-spacing-lg: 16px;
32
+ --lab-spacing-xl: 24px;
33
+ --lab-text-xs: 10px;
34
+ --lab-text-sm: 12px;
35
+ --lab-text-base: 14px;
36
+ --lab-text-lg: 16px;
37
+ --lab-duration-fast: 150ms;
38
+ --lab-duration-normal: 250ms;
39
+ --lab-duration-slow: 400ms;
40
+ --lab-z-dropdown: 100;
41
+ --lab-z-modal: 200;
42
+ --lab-z-toast: 300;
43
+ --lab-avatar-palette: #c7c7c7, #b6b6b6, #a5a5a5, #949494, #838383, #727272, #616161, #505050, #3f3f3f;
44
+ }
45
+
46
+ :is(.dark, [data-theme="dark"]) .lab-root {
47
+ background: transparent;
48
+ --lab-bg: #141518;
49
+ --lab-surface: #1c1d22;
50
+ --lab-surface-muted: #17181c;
51
+ --lab-surface-strong: #23252b;
52
+ --lab-background: var(--lab-surface-muted);
53
+ --lab-border: rgba(255, 255, 255, 0.08);
54
+ --lab-border-strong: rgba(255, 255, 255, 0.16);
55
+ --lab-text-primary: #f1e9de;
56
+ --lab-text-secondary: #c5bdb2;
57
+ --lab-text-muted: #9a9389;
58
+ --lab-accent: #d2b077;
59
+ --lab-accent-strong: #e0bf88;
60
+ --lab-danger: #f08c84;
61
+ --lab-shadow: 0 1px 2px rgba(0, 0, 0, 0.35), 0 18px 36px rgba(0, 0, 0, 0.45);
62
+ --lab-dark: rgba(12, 13, 16, 0.85);
63
+ --lab-avatar-palette: #504b45, #5a5450, #65605c, #706a66, #7b746f, #87807b, #928a85, #9d958f, #a89f99;
64
+ }
65
+
66
+ :is(.dark, [data-theme="dark"]) .lab-card-hover:hover {
67
+ box-shadow: 0 26px 70px rgba(0, 0, 0, 0.55);
68
+ }
69
+
70
+ :is(.dark, [data-theme="dark"]) .lab-status-dot {
71
+ background: #6a6d73;
72
+ }
73
+
74
+ :is(.dark, [data-theme="dark"]) .lab-status-dot-idle, :is(.dark, [data-theme="dark"]) .lab-status-dot-running {
75
+ background: #82bca0;
76
+ }
77
+
78
+ :is(.dark, [data-theme="dark"]) .lab-status-dot-busy {
79
+ background: #d2b077;
80
+ }
81
+
82
+ #workspace-root[data-lab-onboarding='true']::after {
83
+ content: '';
84
+ position: absolute;
85
+ inset: 0;
86
+ background: rgba(12, 12, 12, 0.38);
87
+ z-index: 70;
88
+ pointer-events: auto;
89
+ }
90
+
91
+ #workspace-root[data-lab-onboarding='true'] {
92
+ position: relative;
93
+ }
94
+
95
+ #workspace-root[data-lab-onboarding='true'] .ds-copilot-dock .ds-copilot-glass {
96
+ border-color: rgba(212, 175, 55, 0.7);
97
+ box-shadow:
98
+ 0 0 0 1px rgba(212, 175, 55, 0.5),
99
+ 0 18px 42px rgba(34, 28, 12, 0.35);
100
+ }
101
+
102
+ #workspace-root[data-lab-onboarding='true'] .ds-copilot-dock {
103
+ filter: drop-shadow(0 20px 48px rgba(212, 175, 55, 0.2));
104
+ position: relative;
105
+ z-index: 80;
106
+ pointer-events: auto;
107
+ }
108
+
109
+ .lab-onboarding-exit {
110
+ margin-left: auto;
111
+ border-radius: 999px;
112
+ border: 1px solid rgba(212, 175, 55, 0.5);
113
+ padding: 4px 10px;
114
+ font-size: 11px;
115
+ color: rgba(68, 52, 20, 0.85);
116
+ background: rgba(212, 175, 55, 0.12);
117
+ transition: background 150ms ease, border-color 150ms ease, color 150ms ease;
118
+ }
119
+
120
+ .lab-onboarding-exit:hover {
121
+ background: rgba(212, 175, 55, 0.2);
122
+ border-color: rgba(212, 175, 55, 0.7);
123
+ color: rgba(48, 36, 10, 0.95);
124
+ }
125
+
126
+ .lab-pi-onboarding-banner {
127
+ display: flex;
128
+ align-items: center;
129
+ justify-content: space-between;
130
+ gap: 12px;
131
+ margin: 12px 16px 0 16px;
132
+ padding: 10px 12px;
133
+ border-radius: 12px;
134
+ border: 1px solid rgba(212, 175, 55, 0.4);
135
+ background: rgba(255, 247, 232, 0.7);
136
+ color: var(--lab-text-primary);
137
+ font-size: 12px;
138
+ }
139
+
140
+ .lab-pi-onboarding-banner button {
141
+ border-radius: 8px;
142
+ border: 1px solid rgba(30, 20, 8, 0.2);
143
+ padding: 4px 10px;
144
+ font-size: 11px;
145
+ background: rgba(255, 255, 255, 0.7);
146
+ color: rgba(38, 26, 10, 0.9);
147
+ transition: background 150ms ease, border-color 150ms ease;
148
+ }
149
+
150
+ .lab-pi-onboarding-banner button:hover {
151
+ background: rgba(255, 255, 255, 0.9);
152
+ border-color: rgba(30, 20, 8, 0.35);
153
+ }
154
+
155
+ .lab-pi-onboarding-title {
156
+ font-weight: 600;
157
+ font-size: 12px;
158
+ }
159
+
160
+ .lab-pi-onboarding-subtitle {
161
+ margin-top: 2px;
162
+ color: var(--lab-text-secondary);
163
+ font-size: 11px;
164
+ }
165
+
166
+ .lab-card {
167
+ border-radius: 14px;
168
+ border: 1px solid var(--lab-border);
169
+ background: var(--lab-surface);
170
+ box-shadow: var(--lab-shadow);
171
+ }
172
+
173
+ .lab-panel {
174
+ display: flex;
175
+ flex: 1 1 auto;
176
+ min-height: 0;
177
+ border-radius: 14px;
178
+ border: 1px solid var(--lab-border);
179
+ background: var(--lab-surface);
180
+ box-shadow: var(--lab-shadow);
181
+ }
182
+
183
+ .lab-card-hover {
184
+ transition: transform 240ms ease, box-shadow 240ms ease;
185
+ }
186
+
187
+ .lab-root button {
188
+ transition: transform var(--lab-duration-fast) ease;
189
+ }
190
+
191
+ .lab-root button:active {
192
+ transform: scale(0.97);
193
+ }
194
+
195
+ [data-motion='off'] .lab-root button:active {
196
+ transform: none;
197
+ }
198
+
199
+ .lab-card-hover:hover {
200
+ transform: translateY(-2px);
201
+ box-shadow: 0 24px 60px rgba(51, 48, 40, 0.18);
202
+ }
203
+
204
+ @keyframes labEnterScale {
205
+ from {
206
+ transform: scale(0.95);
207
+ opacity: 0;
208
+ }
209
+ to {
210
+ transform: scale(1);
211
+ opacity: 1;
212
+ }
213
+ }
214
+
215
+ [data-motion='off'] .lab-card-hover {
216
+ transition: none;
217
+ }
218
+
219
+ [data-motion='off'] .lab-card-hover:hover {
220
+ transform: none;
221
+ box-shadow: var(--lab-shadow);
222
+ }
223
+
224
+ .lab-card-hover:focus-visible {
225
+ outline: 2px solid var(--lab-accent);
226
+ outline-offset: 2px;
227
+ }
228
+
229
+ @keyframes labTerminalProgressIndeterminate {
230
+ 0% {
231
+ transform: translateX(0);
232
+ }
233
+ 100% {
234
+ transform: translateX(240%);
235
+ }
236
+ }
237
+
238
+ @keyframes labTerminalProgressPulse {
239
+ 0%,
240
+ 100% {
241
+ background: var(--lab-border);
242
+ }
243
+ 50% {
244
+ background: color-mix(in srgb, var(--lab-accent) 30%, var(--lab-border));
245
+ }
246
+ }
247
+
248
+ .lab-avatar {
249
+ position: relative;
250
+ display: grid;
251
+ place-items: center;
252
+ border-radius: 16px;
253
+ background: var(--lab-surface-muted);
254
+ border: 1px solid var(--lab-border);
255
+ width: 44px;
256
+ height: 44px;
257
+ flex-shrink: 0;
258
+ }
259
+
260
+ .lab-avatar::before {
261
+ display: none;
262
+ }
263
+
264
+ .lab-avatar img {
265
+ width: 100%;
266
+ height: 100%;
267
+ -o-object-fit: cover;
268
+ object-fit: cover;
269
+ border-radius: inherit;
270
+ opacity: 1;
271
+ position: relative;
272
+ z-index: 1;
273
+ }
274
+
275
+ .lab-avatar-ring {
276
+ position: absolute;
277
+ inset: -4px;
278
+ border-radius: 18px;
279
+ border: 2px solid transparent;
280
+ transition: border-color 300ms ease, box-shadow 300ms ease;
281
+ }
282
+
283
+ .lab-avatar-sm {
284
+ width: 32px;
285
+ height: 32px;
286
+ border-radius: 12px;
287
+ }
288
+
289
+ .lab-avatar-sm img {
290
+ width: 100%;
291
+ height: 100%;
292
+ }
293
+
294
+ .lab-status-dot {
295
+ width: 8px;
296
+ height: 8px;
297
+ border-radius: 999px;
298
+ background: #b6b6b6;
299
+ }
300
+
301
+ .lab-status-dot-idle, .lab-status-dot-running {
302
+ background: #7a7a7a;
303
+ }
304
+
305
+ .lab-status-dot-busy {
306
+ background: #8a8a8a;
307
+ }
308
+
309
+ .lab-status-indicator {
310
+ display: inline-flex;
311
+ align-items: center;
312
+ justify-content: center;
313
+ width: 22px;
314
+ height: 22px;
315
+ border-radius: 999px;
316
+ border: 1px solid var(--lab-border);
317
+ background: var(--lab-surface-muted);
318
+ color: var(--lab-text-secondary);
319
+ flex-shrink: 0;
320
+ }
321
+
322
+ .lab-status-indicator-working {
323
+ border-color: transparent;
324
+ background: transparent;
325
+ }
326
+
327
+ .lab-status-indicator-waiting {
328
+ border-color: rgba(173, 134, 82, 0.35);
329
+ background: rgba(173, 134, 82, 0.14);
330
+ color: #7c5a2e;
331
+ }
332
+
333
+ .lab-status-orbit {
334
+ gap: 0;
335
+ line-height: 0;
336
+ }
337
+
338
+ @keyframes labStatusSpin {
339
+ from {
340
+ transform: rotate(0deg);
341
+ }
342
+ to {
343
+ transform: rotate(360deg);
344
+ }
345
+ }
346
+
347
+ .lab-status-waiting .lab-avatar-ring {
348
+ animation: labWaitingPulse 2.8s ease-in-out infinite;
349
+ }
350
+
351
+ [data-motion='off'] .lab-status-waiting .lab-avatar-ring {
352
+ animation: none;
353
+ }
354
+
355
+
356
+ .lab-section-tabs {
357
+ display: flex;
358
+ align-items: center;
359
+ gap: 18px;
360
+ }
361
+
362
+ .lab-section-tab {
363
+ position: relative;
364
+ padding: 8px 2px 12px;
365
+ font-size: 15px;
366
+ color: var(--lab-text-secondary);
367
+ transition: color 160ms ease;
368
+ }
369
+
370
+ .lab-section-tab:hover {
371
+ color: var(--lab-text-primary);
372
+ }
373
+
374
+ .lab-section-tab-active {
375
+ color: var(--lab-text-primary);
376
+ font-weight: 600;
377
+ }
378
+
379
+ .lab-section-tab-indicator {
380
+ position: absolute;
381
+ left: 0;
382
+ right: 0;
383
+ bottom: -1px;
384
+ height: 2px;
385
+ border-radius: 999px;
386
+ background: var(--lab-accent);
387
+ }
388
+
389
+ .lab-copilot-header {
390
+ display: flex;
391
+ align-items: center;
392
+ gap: 16px;
393
+ width: 100%;
394
+ min-width: 0;
395
+ flex-wrap: wrap;
396
+ container-type: inline-size;
397
+ container-name: lab-copilot-header;
398
+ }
399
+
400
+ .lab-copilot-tabs {
401
+ flex: 1 1 auto;
402
+ min-width: 0;
403
+ flex-wrap: wrap;
404
+ -moz-column-gap: 18px;
405
+ column-gap: 18px;
406
+ row-gap: 6px;
407
+ }
408
+
409
+ .lab-copilot-agent {
410
+ display: inline-flex;
411
+ align-items: center;
412
+ gap: 10px;
413
+ flex: 0 0 auto;
414
+ margin-left: auto;
415
+ }
416
+
417
+ .lab-copilot-agent-meta {
418
+ display: flex;
419
+ flex-direction: column;
420
+ gap: 2px;
421
+ min-width: 0;
422
+ }
423
+
424
+ .lab-copilot-agent-name {
425
+ max-width: 220px;
426
+ font-size: 13px;
427
+ font-weight: 600;
428
+ color: var(--lab-text-primary);
429
+ white-space: nowrap;
430
+ overflow: hidden;
431
+ text-overflow: ellipsis;
432
+ }
433
+
434
+ .lab-copilot-agent-status {
435
+ display: inline-flex;
436
+ align-items: center;
437
+ gap: 6px;
438
+ font-size: 11px;
439
+ font-weight: 500;
440
+ color: var(--lab-text-secondary);
441
+ white-space: nowrap;
442
+ }
443
+
444
+ @container lab-copilot-header (max-width: 440px) {
445
+ .lab-copilot-agent-name {
446
+ display: none;
447
+ }
448
+ }
449
+
450
+ .lab-copilot-menu {
451
+ width: min(420px, 92vw);
452
+ border-radius: 16px;
453
+ border: 1px solid var(--lab-border-strong);
454
+ background: var(--lab-surface);
455
+ background: color-mix(in srgb, var(--lab-surface) 86%, transparent);
456
+ backdrop-filter: blur(18px) saturate(140%);
457
+ -webkit-backdrop-filter: blur(18px) saturate(140%);
458
+ box-shadow: var(--lab-shadow);
459
+ padding: 14px;
460
+ }
461
+
462
+ .lab-copilot-menu-section {
463
+ display: flex;
464
+ flex-direction: column;
465
+ gap: 10px;
466
+ }
467
+
468
+ .lab-copilot-menu-section + .lab-copilot-menu-section {
469
+ margin-top: 12px;
470
+ padding-top: 12px;
471
+ border-top: 1px solid var(--lab-border);
472
+ }
473
+
474
+ .lab-copilot-menu-title {
475
+ font-size: 11px;
476
+ text-transform: uppercase;
477
+ letter-spacing: 0.08em;
478
+ color: var(--lab-text-muted);
479
+ }
480
+
481
+ .lab-copilot-menu-muted {
482
+ font-size: 12px;
483
+ color: var(--lab-text-muted);
484
+ }
485
+
486
+ .lab-copilot-entity-list {
487
+ display: flex;
488
+ flex-wrap: wrap;
489
+ gap: 8px;
490
+ }
491
+
492
+ .lab-copilot-entity {
493
+ display: inline-flex;
494
+ align-items: center;
495
+ gap: 6px;
496
+ max-width: 160px;
497
+ padding: 4px 8px 4px 4px;
498
+ border-radius: 999px;
499
+ border: 1px solid var(--lab-border);
500
+ background: var(--lab-surface-muted);
501
+ transition: border-color 160ms ease, background 160ms ease, color 160ms ease;
502
+ }
503
+
504
+ .lab-copilot-entity.is-manageable {
505
+ cursor: context-menu;
506
+ }
507
+
508
+ .lab-copilot-entity.is-manageable:hover {
509
+ border-color: var(--lab-border-strong);
510
+ background: var(--lab-surface-strong);
511
+ }
512
+
513
+ .lab-copilot-entity-name {
514
+ max-width: 110px;
515
+ font-size: 11px;
516
+ color: var(--lab-text-secondary);
517
+ white-space: nowrap;
518
+ overflow: hidden;
519
+ text-overflow: ellipsis;
520
+ }
521
+
522
+ .lab-copilot-entity-add {
523
+ width: 34px;
524
+ height: 34px;
525
+ padding: 0;
526
+ justify-content: center;
527
+ border-style: dashed;
528
+ color: var(--lab-text-muted);
529
+ cursor: pointer;
530
+ }
531
+
532
+ .lab-copilot-entity-add:hover:not(:disabled) {
533
+ color: var(--lab-text-primary);
534
+ }
535
+
536
+ .lab-copilot-entity-add:disabled {
537
+ opacity: 0.5;
538
+ cursor: not-allowed;
539
+ }
540
+
541
+ .lab-copilot-search {
542
+ display: flex;
543
+ align-items: center;
544
+ gap: 8px;
545
+ padding: 6px 10px;
546
+ border-radius: 12px;
547
+ border: 1px solid var(--lab-border);
548
+ background: var(--lab-surface-muted);
549
+ color: var(--lab-text-muted);
550
+ }
551
+
552
+ .lab-copilot-search-input {
553
+ flex: 1;
554
+ border: none;
555
+ background: transparent;
556
+ font-size: 12px;
557
+ color: var(--lab-text-primary);
558
+ }
559
+
560
+ .lab-copilot-search-input:focus {
561
+ outline: none;
562
+ }
563
+
564
+ .lab-copilot-search-results {
565
+ display: flex;
566
+ flex-direction: column;
567
+ gap: 6px;
568
+ max-height: 220px;
569
+ overflow-y: auto;
570
+ }
571
+
572
+ .lab-copilot-search-result {
573
+ text-align: left;
574
+ border-radius: 12px;
575
+ border: 1px solid transparent;
576
+ padding: 8px 10px;
577
+ background: var(--lab-surface);
578
+ transition: border-color 180ms ease, background 180ms ease, color 180ms ease;
579
+ }
580
+
581
+ .lab-copilot-search-result:hover {
582
+ border-color: var(--lab-border-strong);
583
+ background: var(--lab-surface-strong);
584
+ }
585
+
586
+ .lab-copilot-search-title {
587
+ font-size: 12px;
588
+ font-weight: 600;
589
+ color: var(--lab-text-primary);
590
+ }
591
+
592
+ .lab-copilot-search-excerpt {
593
+ margin-top: 2px;
594
+ font-size: 11px;
595
+ color: var(--lab-text-secondary);
596
+ }
597
+
598
+ .lab-copilot-menu-select {
599
+ min-height: 38px;
600
+ width: 100%;
601
+ font-size: 12px;
602
+ }
603
+
604
+ .lab-copilot-overflow-trigger {
605
+ border-color: var(--lab-border);
606
+ }
607
+
608
+ .lab-copilot-context-menu {
609
+ position: fixed;
610
+ z-index: 10020;
611
+ min-width: 160px;
612
+ padding: 6px;
613
+ border-radius: 10px;
614
+ border: 1px solid color-mix(in srgb, var(--lab-border, #cfcfcf) 80%, #c8c8c8);
615
+ background: color-mix(in srgb, var(--lab-surface, #ffffff) 90%, #f2f2f2);
616
+ box-shadow: var(--lab-shadow);
617
+ }
618
+
619
+ .lab-copilot-context-item {
620
+ display: flex;
621
+ width: 100%;
622
+ align-items: center;
623
+ gap: 8px;
624
+ border-radius: 8px;
625
+ padding: 8px 10px;
626
+ font-size: 12px;
627
+ text-align: left;
628
+ color: var(--lab-text-primary);
629
+ }
630
+
631
+ .lab-copilot-context-menu button {
632
+ display: flex;
633
+ width: 100%;
634
+ align-items: center;
635
+ gap: 8px;
636
+ background: transparent;
637
+ border: none;
638
+ cursor: pointer;
639
+ border-radius: 8px;
640
+ padding: 8px 10px;
641
+ font-size: 12px;
642
+ text-align: left;
643
+ color: var(--lab-text-primary);
644
+ }
645
+
646
+ .lab-copilot-context-menu button:hover:not(:disabled) {
647
+ background: var(--lab-surface-strong);
648
+ }
649
+
650
+ .lab-copilot-context-menu button:disabled {
651
+ opacity: 0.5;
652
+ cursor: not-allowed;
653
+ }
654
+
655
+ .lab-copilot-add-dialog {
656
+ max-width: 520px;
657
+ width: min(520px, 92vw);
658
+ }
659
+
660
+ .lab-copilot-add-title {
661
+ font-size: 16px;
662
+ color: var(--lab-text-primary);
663
+ }
664
+
665
+ .lab-copilot-add-subtitle {
666
+ margin-top: 4px;
667
+ font-size: 12px;
668
+ color: var(--lab-text-secondary);
669
+ }
670
+
671
+ .lab-copilot-add-list {
672
+ margin-top: 12px;
673
+ display: grid;
674
+ gap: 8px;
675
+ max-height: 320px;
676
+ overflow-y: auto;
677
+ }
678
+
679
+ .lab-copilot-add-row {
680
+ display: flex;
681
+ align-items: center;
682
+ gap: 10px;
683
+ border-radius: 12px;
684
+ border: 1px solid var(--lab-border);
685
+ padding: 8px 12px;
686
+ background: var(--lab-surface);
687
+ text-align: left;
688
+ width: 100%;
689
+ cursor: pointer;
690
+ transition: border-color 160ms ease, background 160ms ease;
691
+ }
692
+
693
+ .lab-copilot-add-row:hover {
694
+ border-color: var(--lab-border-strong);
695
+ background: var(--lab-surface-strong);
696
+ }
697
+
698
+ .lab-copilot-add-row.is-selected {
699
+ border-color: var(--lab-accent);
700
+ background: rgba(196, 160, 102, 0.12);
701
+ }
702
+
703
+ .lab-copilot-add-check {
704
+ display: inline-flex;
705
+ align-items: center;
706
+ justify-content: center;
707
+ width: 18px;
708
+ height: 18px;
709
+ border-radius: 6px;
710
+ border: 1px solid var(--lab-border);
711
+ color: var(--lab-text-secondary);
712
+ }
713
+
714
+ .lab-copilot-add-row.is-selected .lab-copilot-add-check {
715
+ border-color: var(--lab-accent);
716
+ color: var(--lab-accent);
717
+ }
718
+
719
+ .lab-copilot-add-name {
720
+ flex: 1;
721
+ font-size: 12px;
722
+ color: var(--lab-text-primary);
723
+ white-space: nowrap;
724
+ overflow: hidden;
725
+ text-overflow: ellipsis;
726
+ }
727
+
728
+ .lab-copilot-add-empty {
729
+ margin-top: 12px;
730
+ font-size: 12px;
731
+ color: var(--lab-text-muted);
732
+ }
733
+
734
+ .lab-copilot-add-footer {
735
+ margin-top: 8px;
736
+ gap: 8px;
737
+ }
738
+
739
+ [data-motion='off'] .magicui-border-beam,
740
+ [data-motion='off'] .magicui-grid-pattern,
741
+ [data-motion='off'] .aceternity-moving-border {
742
+ animation: none;
743
+ }
744
+
745
+ .lab-moment-card {
746
+ display: grid;
747
+ grid-template-columns: 48px minmax(0, 1fr);
748
+ gap: 18px;
749
+ padding: 22px 8px 24px;
750
+ border-bottom: 1px solid rgba(0, 0, 0, 0.05);
751
+ background: transparent;
752
+ align-items: flex-start;
753
+ }
754
+
755
+ .lab-moment-main {
756
+ display: flex;
757
+ flex-direction: column;
758
+ gap: 12px;
759
+ min-width: 0;
760
+ }
761
+
762
+ .lab-moment-card:last-child {
763
+ border-bottom-color: transparent;
764
+ }
765
+
766
+ .lab-moment-avatar {
767
+ width: 38px;
768
+ height: 38px;
769
+ border-radius: 12px;
770
+ }
771
+
772
+ .lab-moment-avatar img {
773
+ border-radius: inherit;
774
+ }
775
+
776
+ .lab-moment-avatar span {
777
+ font-size: 12px;
778
+ font-weight: 600;
779
+ color: var(--lab-text-secondary);
780
+ position: relative;
781
+ z-index: 1;
782
+ }
783
+
784
+ .lab-moment-name {
785
+ font-size: 13px;
786
+ font-weight: 600;
787
+ color: var(--lab-text-secondary);
788
+ }
789
+
790
+ .lab-moment-timestamp {
791
+ font-size: 10px;
792
+ color: var(--lab-text-muted);
793
+ }
794
+
795
+ .lab-message-timestamp {
796
+ margin-top: 6px;
797
+ font-size: 10px;
798
+ color: var(--lab-text-muted);
799
+ }
800
+
801
+ .lab-moment-content {
802
+ font-size: var(--lab-text-base);
803
+ color: var(--lab-text-primary);
804
+ line-height: 1.7;
805
+ }
806
+
807
+ .lab-moment-content :is(p, ul, ol) {
808
+ margin: 0 0 6px;
809
+ }
810
+
811
+ .lab-moment-content :is(ul, ol) {
812
+ padding-left: var(--lab-spacing-lg);
813
+ }
814
+
815
+ .lab-moment-media {
816
+ display: grid;
817
+ grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
818
+ gap: var(--lab-spacing-sm);
819
+ }
820
+
821
+ .lab-moment-media-item {
822
+ border-radius: 12px;
823
+ overflow: hidden;
824
+ border: 1px solid var(--lab-border);
825
+ background: var(--lab-surface-muted);
826
+ aspect-ratio: 1 / 1;
827
+ }
828
+
829
+ .lab-moment-media-item img {
830
+ width: 100%;
831
+ height: 100%;
832
+ -o-object-fit: cover;
833
+ object-fit: cover;
834
+ display: block;
835
+ }
836
+
837
+ .lab-moment-meta-row {
838
+ display: flex;
839
+ align-items: center;
840
+ justify-content: space-between;
841
+ gap: 14px;
842
+ margin-top: 4px;
843
+ }
844
+
845
+ .lab-moment-actions {
846
+ display: inline-flex;
847
+ align-items: center;
848
+ gap: 12px;
849
+ }
850
+
851
+ .lab-moment-action {
852
+ display: inline-flex;
853
+ align-items: center;
854
+ gap: 6px;
855
+ font-size: 11px;
856
+ font-weight: 600;
857
+ border-radius: 999px;
858
+ padding: 2px 8px;
859
+ border: 1px solid transparent;
860
+ color: var(--lab-text-secondary);
861
+ background: transparent;
862
+ transition: background-color var(--lab-duration-fast) ease, border-color var(--lab-duration-fast) ease, color var(--lab-duration-fast) ease;
863
+ }
864
+
865
+ .lab-moment-action:hover:not(:disabled) {
866
+ background: var(--lab-surface-muted);
867
+ border-color: var(--lab-border-strong);
868
+ color: var(--lab-text-primary);
869
+ }
870
+
871
+ .lab-moment-action.is-active {
872
+ border-color: var(--lab-accent);
873
+ color: var(--lab-text-primary);
874
+ }
875
+
876
+ .lab-moment-action:disabled {
877
+ opacity: 0.55;
878
+ cursor: not-allowed;
879
+ }
880
+
881
+ .lab-moment-reactions {
882
+ display: flex;
883
+ flex-direction: column;
884
+ gap: 6px;
885
+ background: var(--lab-surface-muted);
886
+ border: 1px solid var(--lab-border);
887
+ border-radius: 10px;
888
+ padding: 8px 10px;
889
+ font-size: 11px;
890
+ color: var(--lab-text-secondary);
891
+ }
892
+
893
+ .lab-moment-like-row {
894
+ display: flex;
895
+ align-items: center;
896
+ gap: 6px;
897
+ font-weight: 600;
898
+ color: var(--lab-text-secondary);
899
+ flex-wrap: wrap;
900
+ }
901
+
902
+ .lab-moment-like-names {
903
+ color: var(--lab-text-primary);
904
+ }
905
+
906
+ .lab-moment-comment-row {
907
+ display: flex;
908
+ flex-wrap: wrap;
909
+ gap: 4px;
910
+ line-height: 1.4;
911
+ }
912
+
913
+ .lab-moment-comment-name {
914
+ font-weight: 600;
915
+ color: var(--lab-text-primary);
916
+ }
917
+
918
+ .lab-moment-comment-sep {
919
+ color: var(--lab-text-muted);
920
+ }
921
+
922
+ .lab-moment-comment-text {
923
+ color: var(--lab-text-secondary);
924
+ }
925
+
926
+ .lab-moment-comment {
927
+ display: flex;
928
+ flex-direction: column;
929
+ gap: var(--lab-spacing-xs);
930
+ margin-top: 8px;
931
+ }
932
+
933
+ .lab-friends-list {
934
+ display: flex;
935
+ flex-direction: column;
936
+ }
937
+
938
+ .lab-moment-comment-input {
939
+ width: 100%;
940
+ border-radius: 12px;
941
+ border: 1px solid var(--lab-border);
942
+ background: var(--lab-surface-muted);
943
+ padding: 8px 10px;
944
+ font-size: 12px;
945
+ color: var(--lab-text-primary);
946
+ resize: vertical;
947
+ min-height: 64px;
948
+ }
949
+
950
+ .lab-moment-comment-input:focus {
951
+ outline: 2px solid color-mix(in srgb, var(--lab-accent) 50%, transparent);
952
+ outline-offset: 2px;
953
+ }
954
+
955
+ .lab-moment-comment-actions {
956
+ display: flex;
957
+ gap: var(--lab-spacing-xs);
958
+ justify-content: flex-end;
959
+ }
960
+
961
+ .lab-moment-action-secondary {
962
+ background: transparent;
963
+ border-color: var(--lab-border);
964
+ }
965
+
966
+ .lab-moment-action-primary {
967
+ background: var(--lab-accent);
968
+ border-color: transparent;
969
+ color: #111111;
970
+ }
971
+
972
+ .lab-moment-action-primary:hover:not(:disabled) {
973
+ background: var(--lab-accent-strong);
974
+ color: #111111;
975
+ }
976
+
977
+ .lab-message-highlight {
978
+ animation: labMessageFlash 1.2s ease;
979
+ box-shadow: 0 0 0 1px rgba(196, 160, 102, 0.3), 0 0 12px rgba(196, 160, 102, 0.35);
980
+ }
981
+
982
+ [data-motion='off'] .lab-message-highlight {
983
+ animation: none;
984
+ }
985
+
986
+ @keyframes labLinkFlow {
987
+ 0% {
988
+ transform: translateX(-60%);
989
+ opacity: 0;
990
+ }
991
+ 30% {
992
+ opacity: 1;
993
+ }
994
+ 100% {
995
+ transform: translateX(60%);
996
+ opacity: 0;
997
+ }
998
+ }
999
+
1000
+ @keyframes labNodePulse {
1001
+ 0%, 100% {
1002
+ box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.0);
1003
+ }
1004
+ 50% {
1005
+ box-shadow: 0 0 0 6px rgba(0, 0, 0, 0.08);
1006
+ }
1007
+ }
1008
+
1009
+ @keyframes labNodeBlocked {
1010
+ 0%, 100% {
1011
+ box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.0);
1012
+ }
1013
+ 50% {
1014
+ box-shadow: 0 0 0 6px rgba(0, 0, 0, 0.12);
1015
+ }
1016
+ }
1017
+
1018
+ @keyframes labTopProgress {
1019
+ 0% {
1020
+ transform: translateX(-60%);
1021
+ opacity: 0.2;
1022
+ }
1023
+ 50% {
1024
+ opacity: 1;
1025
+ }
1026
+ 100% {
1027
+ transform: translateX(260%);
1028
+ opacity: 0.3;
1029
+ }
1030
+ }
1031
+
1032
+ @keyframes labSkeletonShimmer {
1033
+ 0% {
1034
+ transform: translateX(-100%);
1035
+ }
1036
+ 100% {
1037
+ transform: translateX(100%);
1038
+ }
1039
+ }
1040
+
1041
+ @keyframes labMessageFlash {
1042
+ 0% {
1043
+ background-color: rgba(196, 160, 102, 0.15);
1044
+ }
1045
+ 100% {
1046
+ background-color: transparent;
1047
+ }
1048
+ }
1049
+
1050
+ @keyframes labCheckPop {
1051
+ 0% {
1052
+ transform: scale(0.9);
1053
+ opacity: 0.4;
1054
+ }
1055
+ 60% {
1056
+ transform: scale(1.2);
1057
+ opacity: 1;
1058
+ }
1059
+ 100% {
1060
+ transform: scale(1);
1061
+ opacity: 0.9;
1062
+ }
1063
+ }
1064
+
1065
+ @keyframes labNodeComplete {
1066
+ 0% {
1067
+ box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.0);
1068
+ }
1069
+ 50% {
1070
+ box-shadow: 0 0 0 10px rgba(196, 160, 102, 0.2);
1071
+ }
1072
+ 100% {
1073
+ box-shadow: 0 0 0 1px rgba(196, 160, 102, 0.2);
1074
+ }
1075
+ }
1076
+
1077
+ @keyframes labGradientShift {
1078
+ 0% {
1079
+ background-position: 0% 0%;
1080
+ }
1081
+ 50% {
1082
+ background-position: 80% 40%;
1083
+ }
1084
+ 100% {
1085
+ background-position: 0% 0%;
1086
+ }
1087
+ }
1088
+
1089
+ @keyframes labIdlePulse {
1090
+ 0%, 100% {
1091
+ box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.0);
1092
+ }
1093
+ 50% {
1094
+ box-shadow: 0 0 0 6px rgba(0, 0, 0, 0.1);
1095
+ }
1096
+ }
1097
+
1098
+ @keyframes labWorkingPulse {
1099
+ 0%, 100% {
1100
+ box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.0);
1101
+ }
1102
+ 50% {
1103
+ box-shadow: 0 0 0 8px rgba(0, 0, 0, 0.12);
1104
+ }
1105
+ }
1106
+
1107
+ @keyframes labWaitingPulse {
1108
+ 0%, 100% {
1109
+ box-shadow: 0 0 0 0 rgba(160, 120, 70, 0.0);
1110
+ }
1111
+ 50% {
1112
+ box-shadow: 0 0 0 7px rgba(160, 120, 70, 0.2);
1113
+ }
1114
+ }
1115
+
1116
+ @keyframes labTerminalBreath {
1117
+ 0%, 100% {
1118
+ box-shadow: 0 6px 16px -14px rgba(0, 0, 0, 0.35);
1119
+ transform: translateY(0);
1120
+ }
1121
+ 50% {
1122
+ box-shadow: 0 12px 24px -18px rgba(0, 0, 0, 0.45);
1123
+ transform: translateY(-1px);
1124
+ }
1125
+ }
1126
+
1127
+ @keyframes labTerminalDot {
1128
+ 0%, 100% {
1129
+ box-shadow: 0 0 0 0 rgba(196, 160, 102, 0.0);
1130
+ }
1131
+ 50% {
1132
+ box-shadow: 0 0 0 6px rgba(196, 160, 102, 0.25);
1133
+ }
1134
+ }
1135
+
1136
+ .lab-decision-filter {
1137
+ display: flex;
1138
+ flex-wrap: wrap;
1139
+ gap: 6px;
1140
+ }
1141
+
1142
+ .lab-decision-filter__chip {
1143
+ font-size: 10px;
1144
+ text-transform: uppercase;
1145
+ letter-spacing: 0.08em;
1146
+ padding: 4px 8px;
1147
+ border-radius: 999px;
1148
+ border: 1px solid var(--lab-border);
1149
+ background: transparent;
1150
+ color: var(--lab-text-secondary);
1151
+ cursor: pointer;
1152
+ }
1153
+
1154
+ .lab-decision-filter__chip.is-active {
1155
+ background: rgba(17, 17, 17, 0.9);
1156
+ color: #ffffff;
1157
+ border-color: rgba(17, 17, 17, 0.9);
1158
+ }
1159
+
1160
+ @keyframes labDecisionPulse {
1161
+ 0% {
1162
+ box-shadow: 0 0 0 0 rgba(196, 160, 102, 0.2);
1163
+ }
1164
+ 100% {
1165
+ box-shadow: 0 0 0 14px rgba(196, 160, 102, 0);
1166
+ }
1167
+ }
1168
+
1169
+ @keyframes labDecisionEmblemFloat {
1170
+ 0%,
1171
+ 100% {
1172
+ transform: translateY(0) rotate(0deg);
1173
+ }
1174
+ 50% {
1175
+ transform: translateY(-2px) rotate(-2deg);
1176
+ }
1177
+ }
1178
+
1179
+ @keyframes labOrbDrift {
1180
+ 0%,
1181
+ 100% {
1182
+ transform: translate3d(0, 0, 0);
1183
+ }
1184
+ 50% {
1185
+ transform: translate3d(18px, -12px, 0) scale(1.02);
1186
+ }
1187
+ }
1188
+
1189
+ @keyframes labCardMorph {
1190
+ 0%,
1191
+ 100% {
1192
+ transform: translateY(0) scale(1);
1193
+ border-radius: 18px;
1194
+ }
1195
+ 50% {
1196
+ transform: translateY(-3px) scale(1.01);
1197
+ border-radius: 24px;
1198
+ }
1199
+ }
1200
+
1201
+ @keyframes labDecisionCardMorph {
1202
+ 0%,
1203
+ 100% {
1204
+ transform: translateY(0) scale(1);
1205
+ border-radius: 10px;
1206
+ }
1207
+ 50% {
1208
+ transform: translateY(-2px) scale(1.01);
1209
+ border-radius: 14px;
1210
+ }
1211
+ }
1212
+
1213
+ @keyframes labHistoryReveal {
1214
+ 0% {
1215
+ opacity: 0;
1216
+ transform: translateY(6px) scale(0.98);
1217
+ }
1218
+ 100% {
1219
+ opacity: 1;
1220
+ transform: translateY(0) scale(1);
1221
+ }
1222
+ }
1223
+
1224
+ @keyframes labBlockedPulse {
1225
+ 0%, 100% {
1226
+ box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.0);
1227
+ }
1228
+ 50% {
1229
+ box-shadow: 0 0 0 8px rgba(0, 0, 0, 0.14);
1230
+ }
1231
+ }
1232
+
1233
+ @media (prefers-reduced-motion: reduce) {
1234
+ .lab-status-waiting .lab-avatar-ring {
1235
+ animation: none;
1236
+ }
1237
+ .lab-card-hover {
1238
+ transition: none;
1239
+ }
1240
+ .lab-root .animated-gradient-text .text-content {
1241
+ animation: none;
1242
+ }
1243
+ .lab-root .magicui-border-beam, .lab-root .magicui-grid-pattern, .lab-root .aceternity-moving-border {
1244
+ animation: none;
1245
+ }
1246
+ .lab-message-highlight {
1247
+ animation: none;
1248
+ }
1249
+ }
1250
+
1251
+ /* Quest Canvas + Details */
1252
+
1253
+ .lab-quest-canvas {
1254
+ position: relative;
1255
+ padding: 0;
1256
+ height: 100%;
1257
+ min-height: 0;
1258
+ overflow: hidden;
1259
+ background:
1260
+ radial-gradient(circle at top, rgba(83, 176, 174, 0.08), transparent 34%),
1261
+ var(--lab-surface-muted);
1262
+ }
1263
+
1264
+ .lab-quest-canvas--minimal {
1265
+ background: var(--lab-surface-muted);
1266
+ }
1267
+
1268
+ .lab-overview-canvas {
1269
+ position: relative;
1270
+ padding: 0;
1271
+ height: 100%;
1272
+ min-height: 0;
1273
+ overflow: hidden;
1274
+ background: var(--lab-surface-muted);
1275
+ }
1276
+
1277
+ .lab-overview-canvas--ops .lab-quest-graph-shell {
1278
+ filter: saturate(0.75) opacity(0.9);
1279
+ }
1280
+
1281
+ :is(.dark, [data-theme="dark"]) .lab-overview-canvas--ops .lab-quest-graph-shell {
1282
+ filter: saturate(0.7) opacity(0.92);
1283
+ }
1284
+
1285
+ .lab-quest-panel__header {
1286
+ display: flex;
1287
+ align-items: center;
1288
+ justify-content: space-between;
1289
+ gap: 12px;
1290
+ margin-bottom: 10px;
1291
+ }
1292
+
1293
+ .lab-quest-panel__subtitle {
1294
+ font-size: 12px;
1295
+ color: var(--lab-text-secondary);
1296
+ }
1297
+
1298
+ .lab-quest-panel__toggle {
1299
+ border: 0;
1300
+ background: rgba(255, 255, 255, 0.4);
1301
+ padding: 4px 8px;
1302
+ border-radius: 999px;
1303
+ font-size: 11px;
1304
+ color: var(--lab-text-secondary);
1305
+ }
1306
+
1307
+ :is(.dark, [data-theme="dark"]) .lab-quest-panel__toggle {
1308
+ background: rgba(24, 26, 32, 0.6);
1309
+ }
1310
+
1311
+ .lab-quest-search {
1312
+ margin-bottom: 10px;
1313
+ font-size: 12px;
1314
+ }
1315
+
1316
+ .lab-quest-buckets {
1317
+ display: grid;
1318
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1319
+ gap: 6px;
1320
+ margin-bottom: 10px;
1321
+ }
1322
+
1323
+ .lab-quest-bucket-item {
1324
+ border: 1px solid var(--lab-border);
1325
+ border-radius: 10px;
1326
+ padding: 6px 8px;
1327
+ background: rgba(255, 255, 255, 0.35);
1328
+ display: flex;
1329
+ align-items: center;
1330
+ justify-content: space-between;
1331
+ gap: 8px;
1332
+ font-size: 11px;
1333
+ color: var(--lab-text-secondary);
1334
+ }
1335
+
1336
+ .lab-quest-bucket-item strong {
1337
+ color: var(--lab-text-primary);
1338
+ font-size: 12px;
1339
+ }
1340
+
1341
+ :is(.dark, [data-theme="dark"]) .lab-quest-bucket-item {
1342
+ background: rgba(24, 26, 32, 0.58);
1343
+ }
1344
+
1345
+ .lab-quest-process-rail {
1346
+ display: flex;
1347
+ flex-direction: column;
1348
+ gap: 8px;
1349
+ border: 1px solid rgba(148, 163, 184, 0.18);
1350
+ border-radius: 16px;
1351
+ padding: 10px;
1352
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.74), rgba(248, 250, 252, 0.58));
1353
+ box-shadow: 0 14px 32px rgba(15, 23, 42, 0.06);
1354
+ }
1355
+
1356
+ .lab-quest-process-rail__header {
1357
+ display: flex;
1358
+ align-items: flex-start;
1359
+ justify-content: space-between;
1360
+ gap: 10px;
1361
+ }
1362
+
1363
+ .lab-quest-process-rail__title {
1364
+ font-size: 11px;
1365
+ font-weight: 700;
1366
+ letter-spacing: 0.08em;
1367
+ text-transform: uppercase;
1368
+ color: var(--lab-text-muted);
1369
+ }
1370
+
1371
+ .lab-quest-process-rail__subtitle {
1372
+ margin-top: 2px;
1373
+ font-size: 11px;
1374
+ color: var(--lab-text-secondary);
1375
+ }
1376
+
1377
+ .lab-quest-process-rail__stage {
1378
+ flex-shrink: 0;
1379
+ max-width: 130px;
1380
+ padding: 2px 8px;
1381
+ border-radius: 999px;
1382
+ border: 1px solid rgba(196, 160, 102, 0.45);
1383
+ background: rgba(196, 160, 102, 0.12);
1384
+ color: var(--lab-text-primary);
1385
+ font-size: 10px;
1386
+ font-weight: 600;
1387
+ text-align: center;
1388
+ white-space: nowrap;
1389
+ overflow: hidden;
1390
+ text-overflow: ellipsis;
1391
+ }
1392
+
1393
+ .lab-quest-process-rail__steps {
1394
+ display: grid;
1395
+ grid-auto-flow: column;
1396
+ grid-auto-columns: minmax(116px, 1fr);
1397
+ gap: 6px;
1398
+ overflow-x: auto;
1399
+ padding-bottom: 2px;
1400
+ }
1401
+
1402
+ .lab-quest-process-rail__step {
1403
+ display: flex;
1404
+ flex-direction: column;
1405
+ gap: 4px;
1406
+ border-radius: 10px;
1407
+ border: 1px solid var(--lab-border);
1408
+ background: rgba(255, 255, 255, 0.72);
1409
+ padding: 7px;
1410
+ min-height: 94px;
1411
+ }
1412
+
1413
+ .lab-quest-process-rail__step-head {
1414
+ display: flex;
1415
+ align-items: center;
1416
+ gap: 6px;
1417
+ min-width: 0;
1418
+ }
1419
+
1420
+ .lab-quest-process-rail__step-index {
1421
+ width: 16px;
1422
+ height: 16px;
1423
+ border-radius: 999px;
1424
+ border: 1px solid var(--lab-border-strong);
1425
+ font-size: 10px;
1426
+ font-weight: 700;
1427
+ color: var(--lab-text-secondary);
1428
+ display: inline-flex;
1429
+ align-items: center;
1430
+ justify-content: center;
1431
+ flex: 0 0 auto;
1432
+ }
1433
+
1434
+ .lab-quest-process-rail__step-title {
1435
+ min-width: 0;
1436
+ font-size: 11px;
1437
+ font-weight: 600;
1438
+ color: var(--lab-text-primary);
1439
+ white-space: nowrap;
1440
+ overflow: hidden;
1441
+ text-overflow: ellipsis;
1442
+ }
1443
+
1444
+ .lab-quest-process-rail__step-desc {
1445
+ font-size: 10px;
1446
+ line-height: 1.35;
1447
+ color: var(--lab-text-secondary);
1448
+ flex: 1;
1449
+ }
1450
+
1451
+ .lab-quest-process-rail__step-status {
1452
+ align-self: flex-start;
1453
+ padding: 1px 7px;
1454
+ border-radius: 999px;
1455
+ font-size: 10px;
1456
+ font-weight: 600;
1457
+ letter-spacing: 0.04em;
1458
+ text-transform: uppercase;
1459
+ color: var(--lab-text-secondary);
1460
+ border: 1px solid var(--lab-border);
1461
+ background: rgba(255, 255, 255, 0.75);
1462
+ }
1463
+
1464
+ .lab-quest-process-rail__step.is-done {
1465
+ border-color: rgba(83, 176, 174, 0.45);
1466
+ background: linear-gradient(160deg, rgba(213, 243, 239, 0.6), rgba(243, 251, 250, 0.6));
1467
+ }
1468
+
1469
+ .lab-quest-process-rail__step.is-done .lab-quest-process-rail__step-index {
1470
+ border-color: rgba(83, 176, 174, 0.68);
1471
+ background: rgba(83, 176, 174, 0.2);
1472
+ }
1473
+
1474
+ .lab-quest-process-rail__step.is-done .lab-quest-process-rail__step-status {
1475
+ color: #2d6e67;
1476
+ border-color: rgba(83, 176, 174, 0.45);
1477
+ background: rgba(83, 176, 174, 0.14);
1478
+ }
1479
+
1480
+ .lab-quest-process-rail__step.is-active {
1481
+ border-color: rgba(98, 136, 214, 0.46);
1482
+ background: linear-gradient(160deg, rgba(215, 228, 250, 0.65), rgba(248, 251, 255, 0.62));
1483
+ box-shadow: 0 0 0 1px rgba(98, 136, 214, 0.16);
1484
+ }
1485
+
1486
+ .lab-quest-process-rail__step.is-active .lab-quest-process-rail__step-index {
1487
+ border-color: rgba(98, 136, 214, 0.7);
1488
+ background: rgba(98, 136, 214, 0.18);
1489
+ }
1490
+
1491
+ .lab-quest-process-rail__step.is-active .lab-quest-process-rail__step-status {
1492
+ color: #36548f;
1493
+ border-color: rgba(98, 136, 214, 0.45);
1494
+ background: rgba(98, 136, 214, 0.14);
1495
+ }
1496
+
1497
+ .lab-quest-process-rail__recommended {
1498
+ display: grid;
1499
+ gap: 6px;
1500
+ border-top: 1px dashed var(--lab-border);
1501
+ padding-top: 7px;
1502
+ }
1503
+
1504
+ .lab-quest-process-rail__recommended-head {
1505
+ display: flex;
1506
+ align-items: center;
1507
+ justify-content: space-between;
1508
+ gap: 8px;
1509
+ }
1510
+
1511
+ .lab-quest-process-rail__recommended-title {
1512
+ font-size: 10px;
1513
+ font-weight: 700;
1514
+ letter-spacing: 0.06em;
1515
+ text-transform: uppercase;
1516
+ color: var(--lab-text-muted);
1517
+ }
1518
+
1519
+ .lab-quest-process-rail__recommended-trail {
1520
+ display: flex;
1521
+ align-items: center;
1522
+ flex-wrap: wrap;
1523
+ gap: 4px;
1524
+ }
1525
+
1526
+ .lab-quest-process-rail__recommended-chip {
1527
+ border: 1px solid var(--lab-border);
1528
+ border-radius: 999px;
1529
+ background: rgba(255, 255, 255, 0.72);
1530
+ color: var(--lab-text-secondary);
1531
+ font-size: 10px;
1532
+ font-weight: 600;
1533
+ padding: 2px 8px;
1534
+ }
1535
+
1536
+ .lab-quest-process-rail__recommended-chip.is-active {
1537
+ border-color: rgba(98, 136, 214, 0.46);
1538
+ background: rgba(98, 136, 214, 0.12);
1539
+ color: #36548f;
1540
+ }
1541
+
1542
+ .lab-quest-process-rail__recommended-arrow {
1543
+ font-size: 10px;
1544
+ color: var(--lab-text-muted);
1545
+ }
1546
+
1547
+ :is(.dark, [data-theme="dark"]) .lab-quest-process-rail {
1548
+ background: linear-gradient(150deg, rgba(24, 26, 32, 0.82), rgba(17, 19, 25, 0.72));
1549
+ }
1550
+
1551
+ :is(.dark, [data-theme="dark"]) .lab-quest-process-rail__stage {
1552
+ border-color: rgba(196, 160, 102, 0.58);
1553
+ background: rgba(196, 160, 102, 0.18);
1554
+ }
1555
+
1556
+ :is(.dark, [data-theme="dark"]) .lab-quest-process-rail__step {
1557
+ background: rgba(24, 26, 32, 0.8);
1558
+ }
1559
+
1560
+ :is(.dark, [data-theme="dark"]) .lab-quest-process-rail__step-status {
1561
+ background: rgba(24, 26, 32, 0.84);
1562
+ }
1563
+
1564
+ :is(.dark, [data-theme="dark"]) .lab-quest-process-rail__step.is-done {
1565
+ background: linear-gradient(160deg, rgba(23, 58, 56, 0.64), rgba(20, 34, 35, 0.72));
1566
+ }
1567
+
1568
+ :is(.dark, [data-theme="dark"]) .lab-quest-process-rail__step.is-done .lab-quest-process-rail__step-status {
1569
+ color: #99d5ce;
1570
+ }
1571
+
1572
+ :is(.dark, [data-theme="dark"]) .lab-quest-process-rail__step.is-active {
1573
+ background: linear-gradient(160deg, rgba(30, 45, 73, 0.7), rgba(23, 31, 50, 0.78));
1574
+ }
1575
+
1576
+ :is(.dark, [data-theme="dark"]) .lab-quest-process-rail__step.is-active .lab-quest-process-rail__step-status {
1577
+ color: #b8cbf2;
1578
+ }
1579
+
1580
+ :is(.dark, [data-theme="dark"]) .lab-quest-process-rail__recommended-chip {
1581
+ background: rgba(24, 26, 32, 0.84);
1582
+ }
1583
+
1584
+ .lab-quest-branch-list,
1585
+ .lab-quest-event-list {
1586
+ flex: 1 1 auto;
1587
+ min-height: 0;
1588
+ overflow: auto;
1589
+ display: flex;
1590
+ flex-direction: column;
1591
+ gap: 8px;
1592
+ }
1593
+
1594
+ .lab-quest-branch-item {
1595
+ text-align: left;
1596
+ border: 0;
1597
+ background: transparent;
1598
+ border-radius: 0;
1599
+ padding: 10px 0;
1600
+ display: flex;
1601
+ flex-direction: column;
1602
+ gap: 4px;
1603
+ border-top: 1px solid rgba(47, 52, 55, 0.08);
1604
+ transition: background 150ms ease, color 150ms ease;
1605
+ }
1606
+
1607
+ .lab-quest-branch-item.is-active {
1608
+ background: rgba(47, 52, 55, 0.035);
1609
+ }
1610
+
1611
+ :is(.dark, [data-theme="dark"]) .lab-quest-branch-item {
1612
+ border-top-color: rgba(255, 255, 255, 0.08);
1613
+ }
1614
+
1615
+ :is(.dark, [data-theme="dark"]) .lab-quest-branch-item.is-active {
1616
+ background: rgba(255, 255, 255, 0.04);
1617
+ }
1618
+
1619
+ .lab-quest-branch-item__title {
1620
+ font-size: 13px;
1621
+ font-weight: 600;
1622
+ color: var(--lab-text-primary);
1623
+ line-height: 1.45;
1624
+ }
1625
+
1626
+ .lab-quest-branch-item__meta {
1627
+ font-size: 11px;
1628
+ color: var(--lab-text-secondary);
1629
+ display: flex;
1630
+ gap: 6px;
1631
+ flex-wrap: wrap;
1632
+ text-transform: lowercase;
1633
+ }
1634
+
1635
+ .lab-quest-branch-item__line {
1636
+ display: grid;
1637
+ grid-template-columns: 44px minmax(0, 1fr);
1638
+ gap: 6px;
1639
+ font-size: 11px;
1640
+ color: var(--lab-text-secondary);
1641
+ align-items: start;
1642
+ }
1643
+
1644
+ .lab-quest-branch-item__line--meta {
1645
+ grid-template-columns: 1fr;
1646
+ justify-items: end;
1647
+ color: var(--lab-text-muted);
1648
+ }
1649
+
1650
+ .lab-quest-branch-item__label {
1651
+ font-weight: 600;
1652
+ color: var(--lab-text-muted);
1653
+ text-transform: uppercase;
1654
+ letter-spacing: 0.08em;
1655
+ }
1656
+
1657
+ .lab-quest-graph-shell {
1658
+ position: relative;
1659
+ height: 100%;
1660
+ width: 100%;
1661
+ border: 0;
1662
+ border-radius: 0;
1663
+ background: var(--lab-surface-muted);
1664
+ overflow: hidden;
1665
+ }
1666
+
1667
+ :is(.dark, [data-theme="dark"]) .lab-quest-graph-shell {
1668
+ background: var(--lab-surface-muted);
1669
+ }
1670
+
1671
+ .lab-quest-graph-shell--full {
1672
+ position: absolute;
1673
+ inset: 0;
1674
+ }
1675
+
1676
+ .lab-quest-graph-shell--minimal .react-flow__attribution {
1677
+ display: none;
1678
+ }
1679
+
1680
+ .lab-floating-panel {
1681
+ position: absolute;
1682
+ left: 0;
1683
+ top: 0;
1684
+ will-change: transform;
1685
+ width: 320px;
1686
+ max-width: calc(100% - 24px);
1687
+ height: 520px;
1688
+ max-height: calc(100% - 24px);
1689
+ display: flex;
1690
+ flex-direction: column;
1691
+ border-radius: 16px;
1692
+ border: 1px solid var(--lab-border);
1693
+ background: rgba(255, 255, 255, 0.82);
1694
+ backdrop-filter: blur(12px);
1695
+ box-shadow: 0 18px 44px rgba(0, 0, 0, 0.08);
1696
+ overflow: hidden;
1697
+ }
1698
+
1699
+ :is(.dark, [data-theme="dark"]) .lab-floating-panel {
1700
+ background: rgba(24, 26, 32, 0.82);
1701
+ box-shadow: 0 22px 52px rgba(0, 0, 0, 0.35);
1702
+ }
1703
+
1704
+ .lab-floating-panel--events {
1705
+ width: 340px;
1706
+ height: 460px;
1707
+ }
1708
+
1709
+ .lab-floating-panel--papers {
1710
+ width: 320px;
1711
+ height: 420px;
1712
+ }
1713
+
1714
+ .lab-overview-panel--action {
1715
+ width: 420px;
1716
+ height: 600px;
1717
+ }
1718
+
1719
+ .lab-overview-panel--overview {
1720
+ width: 420px;
1721
+ height: 520px;
1722
+ }
1723
+
1724
+ .lab-floating-panel__header {
1725
+ display: flex;
1726
+ align-items: center;
1727
+ justify-content: space-between;
1728
+ gap: 12px;
1729
+ padding: 10px 10px 8px;
1730
+ border-bottom: 1px solid var(--lab-border);
1731
+ cursor: grab;
1732
+ -webkit-user-select: none;
1733
+ -moz-user-select: none;
1734
+ user-select: none;
1735
+ color: var(--lab-text-primary);
1736
+ }
1737
+
1738
+ .lab-floating-panel__header:active {
1739
+ cursor: grabbing;
1740
+ }
1741
+
1742
+ .lab-floating-panel__title {
1743
+ display: flex;
1744
+ align-items: center;
1745
+ gap: 8px;
1746
+ font-size: 12px;
1747
+ font-weight: 600;
1748
+ }
1749
+
1750
+ .lab-floating-panel__icon {
1751
+ display: flex;
1752
+ align-items: center;
1753
+ justify-content: center;
1754
+ width: 28px;
1755
+ height: 28px;
1756
+ border-radius: 999px;
1757
+ border: 1px solid var(--lab-border);
1758
+ background: rgba(255, 255, 255, 0.55);
1759
+ }
1760
+
1761
+ :is(.dark, [data-theme="dark"]) .lab-floating-panel__icon {
1762
+ background: rgba(24, 26, 32, 0.7);
1763
+ }
1764
+
1765
+ .lab-floating-panel__collapse {
1766
+ width: 32px;
1767
+ height: 32px;
1768
+ border-radius: 999px;
1769
+ border: 1px solid var(--lab-border);
1770
+ background: rgba(255, 255, 255, 0.55);
1771
+ color: var(--lab-text-secondary);
1772
+ display: flex;
1773
+ align-items: center;
1774
+ justify-content: center;
1775
+ transition: background 150ms ease, color 150ms ease;
1776
+ }
1777
+
1778
+ .lab-floating-panel__collapse:hover {
1779
+ background: rgba(255, 255, 255, 0.78);
1780
+ color: var(--lab-text-primary);
1781
+ }
1782
+
1783
+ :is(.dark, [data-theme="dark"]) .lab-floating-panel__collapse {
1784
+ background: rgba(24, 26, 32, 0.7);
1785
+ }
1786
+
1787
+ .lab-floating-panel__content {
1788
+ flex: 1 1 auto;
1789
+ min-height: 0;
1790
+ overflow: hidden;
1791
+ padding: 10px 10px 12px;
1792
+ display: flex;
1793
+ flex-direction: column;
1794
+ gap: 10px;
1795
+ }
1796
+
1797
+ .lab-floating-panel__footer {
1798
+ border-top: 1px solid var(--lab-border);
1799
+ padding-top: 10px;
1800
+ }
1801
+
1802
+ .lab-floating-orb {
1803
+ position: absolute;
1804
+ left: 0;
1805
+ top: 0;
1806
+ will-change: transform;
1807
+ width: 44px;
1808
+ height: 44px;
1809
+ border-radius: 999px;
1810
+ border: 1px solid var(--lab-border);
1811
+ background: rgba(255, 255, 255, 0.82);
1812
+ backdrop-filter: blur(12px);
1813
+ box-shadow: 0 18px 44px rgba(0, 0, 0, 0.08);
1814
+ display: flex;
1815
+ align-items: center;
1816
+ justify-content: center;
1817
+ color: var(--lab-text-primary);
1818
+ cursor: grab;
1819
+ }
1820
+
1821
+ .lab-floating-orb:active {
1822
+ cursor: grabbing;
1823
+ }
1824
+
1825
+ :is(.dark, [data-theme="dark"]) .lab-floating-orb {
1826
+ background: rgba(24, 26, 32, 0.82);
1827
+ box-shadow: 0 22px 52px rgba(0, 0, 0, 0.35);
1828
+ }
1829
+
1830
+ .lab-quest-graph-overlay {
1831
+ position: absolute;
1832
+ inset: 0;
1833
+ display: flex;
1834
+ align-items: center;
1835
+ justify-content: center;
1836
+ pointer-events: none;
1837
+ }
1838
+
1839
+ .lab-quest-graph-controls {
1840
+ display: flex;
1841
+ gap: 6px;
1842
+ }
1843
+
1844
+ .lab-quest-time-filter {
1845
+ border: 1px solid var(--lab-border);
1846
+ background: var(--lab-surface);
1847
+ color: var(--lab-text-primary);
1848
+ border-radius: 8px;
1849
+ font-size: 11px;
1850
+ padding: 4px 8px;
1851
+ }
1852
+
1853
+ .lab-quest-time-filter:focus {
1854
+ outline: 2px solid rgba(83, 176, 174, 0.5);
1855
+ outline-offset: 2px;
1856
+ }
1857
+
1858
+ .lab-quest-graph-node {
1859
+ min-width: 176px;
1860
+ max-width: 228px;
1861
+ padding: 12px 14px;
1862
+ border-radius: 16px;
1863
+ border: 1px solid rgba(148, 163, 184, 0.2);
1864
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.92), rgba(248, 250, 252, 0.84));
1865
+ backdrop-filter: blur(10px);
1866
+ box-shadow: 0 14px 34px rgba(15, 23, 42, 0.09);
1867
+ color: var(--lab-text-primary);
1868
+ transition: transform 150ms ease, box-shadow 150ms ease, border-color 150ms ease;
1869
+ }
1870
+
1871
+ .lab-quest-graph-node:hover {
1872
+ transform: translateY(-1px);
1873
+ box-shadow: 0 20px 38px rgba(15, 23, 42, 0.12);
1874
+ }
1875
+
1876
+ .lab-quest-graph-node__eyebrow {
1877
+ display: flex;
1878
+ align-items: center;
1879
+ justify-content: space-between;
1880
+ gap: 8px;
1881
+ margin-bottom: 6px;
1882
+ }
1883
+
1884
+ .lab-quest-graph-node__kind {
1885
+ display: inline-flex;
1886
+ align-items: center;
1887
+ min-height: 20px;
1888
+ padding: 0 8px;
1889
+ border-radius: 999px;
1890
+ border: 1px solid rgba(148, 163, 184, 0.22);
1891
+ background: rgba(255, 255, 255, 0.72);
1892
+ font-size: 10px;
1893
+ font-weight: 600;
1894
+ color: var(--lab-text-secondary);
1895
+ }
1896
+
1897
+ .lab-quest-agent-node {
1898
+ min-width: 140px;
1899
+ padding: 10px 12px;
1900
+ border-radius: 14px;
1901
+ border: 1px solid rgba(148, 163, 184, 0.18);
1902
+ background: rgba(255, 255, 255, 0.76);
1903
+ color: var(--lab-text-primary);
1904
+ box-shadow: 0 10px 24px rgba(15, 23, 42, 0.06);
1905
+ }
1906
+
1907
+ .lab-quest-agent-node__title {
1908
+ font-size: 12px;
1909
+ font-weight: 600;
1910
+ color: var(--lab-text-primary);
1911
+ white-space: nowrap;
1912
+ overflow: hidden;
1913
+ text-overflow: ellipsis;
1914
+ }
1915
+
1916
+ .lab-quest-agent-node__meta {
1917
+ margin-top: 4px;
1918
+ font-size: 11px;
1919
+ color: var(--lab-text-secondary);
1920
+ }
1921
+
1922
+ .lab-quest-agent-node__status {
1923
+ margin-top: 4px;
1924
+ font-size: 10px;
1925
+ color: var(--lab-text-secondary);
1926
+ letter-spacing: 0.08em;
1927
+ text-transform: uppercase;
1928
+ }
1929
+
1930
+ .lab-overview-quest-node {
1931
+ min-width: 210px;
1932
+ padding: 12px 14px;
1933
+ border-radius: 14px;
1934
+ border: 1px solid var(--lab-border);
1935
+ background: rgba(255, 255, 255, 0.82);
1936
+ backdrop-filter: blur(10px);
1937
+ box-shadow: 0 14px 34px rgba(0, 0, 0, 0.08);
1938
+ color: var(--lab-text-primary);
1939
+ }
1940
+
1941
+ :is(.dark, [data-theme="dark"]) .lab-overview-quest-node {
1942
+ background: rgba(24, 26, 32, 0.82);
1943
+ box-shadow: 0 22px 52px rgba(0, 0, 0, 0.35);
1944
+ }
1945
+
1946
+ .lab-overview-quest-node.is-active {
1947
+ box-shadow: 0 0 0 1px rgba(196, 160, 102, 0.22), 0 14px 34px rgba(0, 0, 0, 0.12);
1948
+ }
1949
+
1950
+ .lab-overview-quest-node__title {
1951
+ font-size: 13px;
1952
+ font-weight: 600;
1953
+ color: var(--lab-text-primary);
1954
+ white-space: nowrap;
1955
+ overflow: hidden;
1956
+ text-overflow: ellipsis;
1957
+ }
1958
+
1959
+ .lab-overview-quest-node__meta {
1960
+ margin-top: 6px;
1961
+ font-size: 11px;
1962
+ color: var(--lab-text-secondary);
1963
+ display: flex;
1964
+ gap: 10px;
1965
+ flex-wrap: wrap;
1966
+ }
1967
+
1968
+ .lab-overview-quest-node__chips {
1969
+ margin-top: 8px;
1970
+ display: flex;
1971
+ flex-wrap: wrap;
1972
+ gap: 6px;
1973
+ }
1974
+
1975
+ .lab-overview-quest-chip {
1976
+ display: inline-flex;
1977
+ align-items: center;
1978
+ height: 20px;
1979
+ padding: 0 8px;
1980
+ border-radius: 999px;
1981
+ border: 1px solid var(--lab-border);
1982
+ background: var(--lab-surface-muted);
1983
+ color: var(--lab-text-secondary);
1984
+ font-size: 10px;
1985
+ line-height: 1;
1986
+ }
1987
+
1988
+ .lab-overview-quest-chip--attention {
1989
+ border-color: rgba(196, 160, 102, 0.48);
1990
+ color: var(--lab-text-primary);
1991
+ background: rgba(196, 160, 102, 0.12);
1992
+ }
1993
+
1994
+ :is(.dark, [data-theme="dark"]) .lab-overview-quest-chip--attention {
1995
+ border-color: rgba(196, 160, 102, 0.62);
1996
+ background: rgba(196, 160, 102, 0.16);
1997
+ }
1998
+
1999
+ .lab-overview-agent-node {
2000
+ min-width: 200px;
2001
+ max-width: 240px;
2002
+ padding: 10px 12px;
2003
+ border-radius: 14px;
2004
+ border: 1px solid var(--lab-border);
2005
+ background: rgba(255, 255, 255, 0.88);
2006
+ backdrop-filter: blur(10px);
2007
+ box-shadow: 0 12px 28px rgba(0, 0, 0, 0.08);
2008
+ color: var(--lab-text-primary);
2009
+ display: flex;
2010
+ align-items: center;
2011
+ gap: 10px;
2012
+ }
2013
+
2014
+ :is(.dark, [data-theme="dark"]) .lab-overview-agent-node {
2015
+ background: rgba(24, 26, 32, 0.88);
2016
+ box-shadow: 0 20px 46px rgba(0, 0, 0, 0.35);
2017
+ }
2018
+
2019
+ .lab-overview-agent-node__meta {
2020
+ min-width: 0;
2021
+ display: flex;
2022
+ flex-direction: column;
2023
+ gap: 4px;
2024
+ }
2025
+
2026
+ .lab-overview-agent-node__name {
2027
+ font-size: 12px;
2028
+ font-weight: 600;
2029
+ color: var(--lab-text-primary);
2030
+ white-space: nowrap;
2031
+ overflow: hidden;
2032
+ text-overflow: ellipsis;
2033
+ }
2034
+
2035
+ .lab-overview-agent-node__status {
2036
+ display: inline-flex;
2037
+ align-items: center;
2038
+ gap: 6px;
2039
+ font-size: 10px;
2040
+ color: var(--lab-text-secondary);
2041
+ }
2042
+
2043
+ .lab-overview-agent-node__status-label {
2044
+ white-space: nowrap;
2045
+ }
2046
+
2047
+ .lab-flow-handle {
2048
+ opacity: 0;
2049
+ width: 1px;
2050
+ height: 1px;
2051
+ border: 0;
2052
+ background: transparent;
2053
+ pointer-events: none;
2054
+ }
2055
+
2056
+ .lab-overview-quest-node__title-row {
2057
+ display: flex;
2058
+ align-items: center;
2059
+ gap: 10px;
2060
+ }
2061
+
2062
+ .lab-overview-quest-node__title-row .lab-overview-quest-node__title {
2063
+ flex: 1 1 auto;
2064
+ min-width: 0;
2065
+ }
2066
+
2067
+ .lab-overview-pi-chip {
2068
+ display: inline-flex;
2069
+ align-items: center;
2070
+ gap: 6px;
2071
+ height: 26px;
2072
+ padding: 0 10px 0 6px;
2073
+ border-radius: 999px;
2074
+ border: 1px solid rgba(196, 160, 102, 0.5);
2075
+ background: rgba(255, 255, 255, 0.62);
2076
+ color: var(--lab-text-secondary);
2077
+ max-width: 180px;
2078
+ }
2079
+
2080
+ :is(.dark, [data-theme="dark"]) .lab-overview-pi-chip {
2081
+ background: rgba(20, 22, 28, 0.7);
2082
+ }
2083
+
2084
+ .lab-overview-pi-avatar {
2085
+ width: 18px;
2086
+ height: 18px;
2087
+ border-radius: 999px;
2088
+ border: 1px solid var(--lab-accent);
2089
+ overflow: hidden;
2090
+ display: inline-flex;
2091
+ align-items: center;
2092
+ justify-content: center;
2093
+ background: rgba(255, 255, 255, 0.62);
2094
+ flex: 0 0 auto;
2095
+ }
2096
+
2097
+ :is(.dark, [data-theme="dark"]) .lab-overview-pi-avatar {
2098
+ background: rgba(24, 26, 32, 0.7);
2099
+ }
2100
+
2101
+ .lab-overview-pi-avatar img {
2102
+ display: block;
2103
+ width: 100%;
2104
+ height: 100%;
2105
+ -o-object-fit: cover;
2106
+ object-fit: cover;
2107
+ }
2108
+
2109
+ .lab-overview-pi-avatar__fallback {
2110
+ font-size: 9px;
2111
+ font-weight: 700;
2112
+ letter-spacing: 0.04em;
2113
+ color: var(--lab-text-secondary);
2114
+ }
2115
+
2116
+ .lab-overview-pi-label {
2117
+ min-width: 0;
2118
+ overflow: hidden;
2119
+ text-overflow: ellipsis;
2120
+ white-space: nowrap;
2121
+ font-size: 11px;
2122
+ font-weight: 600;
2123
+ color: var(--lab-text-primary);
2124
+ }
2125
+
2126
+ .lab-overview-pending-node {
2127
+ width: 100%;
2128
+ height: 100%;
2129
+ border-radius: 16px;
2130
+ border: 1px solid var(--lab-border);
2131
+ background: rgba(255, 255, 255, 0.86);
2132
+ backdrop-filter: blur(10px);
2133
+ box-shadow: 0 16px 36px rgba(0, 0, 0, 0.08);
2134
+ display: flex;
2135
+ flex-direction: column;
2136
+ overflow: hidden;
2137
+ color: var(--lab-text-primary);
2138
+ }
2139
+
2140
+ :is(.dark, [data-theme="dark"]) .lab-overview-pending-node {
2141
+ background: rgba(24, 26, 32, 0.86);
2142
+ box-shadow: 0 22px 52px rgba(0, 0, 0, 0.35);
2143
+ }
2144
+
2145
+ .lab-overview-pending-node__header {
2146
+ display: flex;
2147
+ align-items: center;
2148
+ justify-content: space-between;
2149
+ gap: 12px;
2150
+ padding: 10px 14px;
2151
+ border-bottom: 1px solid var(--lab-border);
2152
+ cursor: grab;
2153
+ -webkit-user-select: none;
2154
+ -moz-user-select: none;
2155
+ user-select: none;
2156
+ }
2157
+
2158
+ .lab-overview-pending-node__header:active {
2159
+ cursor: grabbing;
2160
+ }
2161
+
2162
+ .lab-overview-pending-node__title {
2163
+ font-size: 11px;
2164
+ font-weight: 700;
2165
+ letter-spacing: 0.08em;
2166
+ text-transform: uppercase;
2167
+ color: var(--lab-text-secondary);
2168
+ }
2169
+
2170
+ .lab-overview-pending-node__subtitle {
2171
+ font-size: 12px;
2172
+ color: var(--lab-text-secondary);
2173
+ }
2174
+
2175
+ .lab-overview-pending-node__count {
2176
+ display: inline-flex;
2177
+ align-items: center;
2178
+ justify-content: center;
2179
+ min-width: 26px;
2180
+ height: 26px;
2181
+ border-radius: 999px;
2182
+ border: 1px solid var(--lab-border-strong);
2183
+ background: rgba(196, 160, 102, 0.16);
2184
+ color: var(--lab-text-primary);
2185
+ font-size: 12px;
2186
+ font-weight: 700;
2187
+ }
2188
+
2189
+ .lab-overview-pending-node__content {
2190
+ flex: 1;
2191
+ min-height: 0;
2192
+ overflow: auto;
2193
+ padding: 8px 10px 12px;
2194
+ }
2195
+
2196
+ :is(.dark, [data-theme="dark"]) .lab-quest-graph-node {
2197
+ border-color: rgba(255, 255, 255, 0.08);
2198
+ background: linear-gradient(160deg, rgba(27, 29, 34, 0.92), rgba(18, 20, 25, 0.88));
2199
+ box-shadow: 0 16px 36px rgba(0, 0, 0, 0.32);
2200
+ }
2201
+
2202
+ :is(.dark, [data-theme="dark"]) .lab-quest-graph-node__kind {
2203
+ background: rgba(24, 26, 32, 0.72);
2204
+ border-color: rgba(255, 255, 255, 0.08);
2205
+ }
2206
+
2207
+ :is(.dark, [data-theme="dark"]) .lab-quest-agent-node {
2208
+ background: rgba(24, 26, 32, 0.7);
2209
+ border-color: rgba(255, 255, 255, 0.18);
2210
+ }
2211
+
2212
+ .lab-quest-graph-node.is-head {
2213
+ box-shadow: 0 0 0 1px rgba(196, 160, 102, 0.22), 0 12px 26px rgba(0, 0, 0, 0.12);
2214
+ }
2215
+
2216
+ .lab-quest-graph-node.is-positive {
2217
+ box-shadow: 0 0 0 1px rgba(74, 222, 128, 0.2), 0 14px 30px rgba(22, 101, 52, 0.12);
2218
+ }
2219
+
2220
+ .lab-quest-graph-node.is-root {
2221
+ min-width: 200px;
2222
+ padding: 14px 16px;
2223
+ z-index: 2;
2224
+ box-shadow: 0 18px 34px rgba(0, 0, 0, 0.14);
2225
+ }
2226
+
2227
+ .lab-quest-graph-node.is-root .lab-quest-graph-node__title {
2228
+ font-size: 13px;
2229
+ }
2230
+
2231
+ .lab-quest-graph-node.is-placeholder {
2232
+ border-style: dashed;
2233
+ border-color: rgba(155, 131, 82, 0.46);
2234
+ background: linear-gradient(180deg, rgba(255, 252, 247, 0.96), rgba(246, 240, 232, 0.88));
2235
+ box-shadow: 0 12px 28px rgba(155, 131, 82, 0.12);
2236
+ }
2237
+
2238
+ .lab-quest-graph-node.is-waived {
2239
+ border-color: rgba(148, 163, 184, 0.3);
2240
+ background: linear-gradient(180deg, rgba(246, 248, 250, 0.92), rgba(237, 242, 247, 0.88));
2241
+ }
2242
+
2243
+ .lab-quest-graph-node.is-selected {
2244
+ outline: 2px solid rgba(83, 176, 174, 0.45);
2245
+ box-shadow: 0 0 0 4px rgba(83, 176, 174, 0.12), 0 20px 38px rgba(15, 23, 42, 0.12);
2246
+ }
2247
+
2248
+ .lab-quest-graph-node.is-event {
2249
+ background: linear-gradient(140deg, rgba(244, 246, 247, 0.92), rgba(232, 236, 240, 0.86));
2250
+ }
2251
+
2252
+ :is(.dark, [data-theme="dark"]) .lab-quest-graph-node.is-event {
2253
+ background: linear-gradient(140deg, rgba(34, 36, 42, 0.92), rgba(24, 26, 32, 0.9));
2254
+ }
2255
+
2256
+ :is(.dark, [data-theme="dark"]) .lab-quest-graph-node.is-placeholder {
2257
+ border-color: rgba(196, 160, 102, 0.45);
2258
+ background: linear-gradient(160deg, rgba(45, 40, 32, 0.92), rgba(28, 24, 20, 0.88));
2259
+ }
2260
+
2261
+ :is(.dark, [data-theme="dark"]) .lab-quest-graph-node.is-waived {
2262
+ background: linear-gradient(160deg, rgba(30, 33, 38, 0.92), rgba(22, 24, 29, 0.9));
2263
+ }
2264
+
2265
+ .lab-quest-graph-node.is-decision {
2266
+ border-style: solid;
2267
+ padding: 12px 14px;
2268
+ text-align: left;
2269
+ }
2270
+
2271
+ .lab-quest-graph-node.is-decision .lab-quest-graph-node__title {
2272
+ justify-content: flex-start;
2273
+ }
2274
+
2275
+ .lab-quest-graph-node.is-decision .lab-quest-graph-node__meta {
2276
+ justify-content: flex-start;
2277
+ }
2278
+
2279
+ .lab-quest-graph-node__decision-target {
2280
+ font-size: 10px;
2281
+ color: var(--lab-text-muted);
2282
+ margin-top: 4px;
2283
+ }
2284
+
2285
+ .lab-quest-graph-node.decision-explore {
2286
+ background: linear-gradient(140deg, rgba(187, 221, 228, 0.95), rgba(168, 204, 216, 0.9));
2287
+ }
2288
+
2289
+ .lab-quest-graph-node.decision-evolve {
2290
+ background: linear-gradient(140deg, rgba(191, 214, 241, 0.95), rgba(167, 195, 228, 0.9));
2291
+ }
2292
+
2293
+ .lab-quest-graph-node.decision-pivot {
2294
+ background: linear-gradient(140deg, rgba(246, 205, 190, 0.95), rgba(231, 181, 165, 0.9));
2295
+ }
2296
+
2297
+ .lab-quest-graph-node.decision-validate,
2298
+ .lab-quest-graph-node.decision-go {
2299
+ background: linear-gradient(140deg, rgba(192, 229, 207, 0.95), rgba(174, 214, 191, 0.9));
2300
+ }
2301
+
2302
+ .lab-quest-graph-node.decision-hold {
2303
+ background: linear-gradient(140deg, rgba(237, 230, 197, 0.95), rgba(223, 213, 175, 0.9));
2304
+ }
2305
+
2306
+ .lab-quest-graph-node.decision-drop {
2307
+ background: linear-gradient(140deg, rgba(232, 198, 198, 0.95), rgba(217, 175, 175, 0.9));
2308
+ }
2309
+
2310
+ .lab-quest-graph-node__title {
2311
+ font-size: 13px;
2312
+ font-weight: 600;
2313
+ display: block;
2314
+ line-height: 1.35;
2315
+ }
2316
+
2317
+ .lab-quest-graph-node__subtitle {
2318
+ font-size: 11px;
2319
+ color: var(--lab-text-secondary);
2320
+ margin-top: 4px;
2321
+ white-space: nowrap;
2322
+ overflow: hidden;
2323
+ text-overflow: ellipsis;
2324
+ }
2325
+
2326
+ .lab-quest-graph-node__meta {
2327
+ font-size: 10px;
2328
+ color: var(--lab-text-muted);
2329
+ margin-top: 6px;
2330
+ display: flex;
2331
+ gap: 6px;
2332
+ flex-wrap: wrap;
2333
+ align-items: center;
2334
+ }
2335
+
2336
+ .lab-quest-graph-node__summary {
2337
+ font-size: 11px;
2338
+ color: var(--lab-text-secondary);
2339
+ margin-top: 6px;
2340
+ line-height: 1.35;
2341
+ display: -webkit-box;
2342
+ -webkit-line-clamp: 2;
2343
+ -webkit-box-orient: vertical;
2344
+ overflow: hidden;
2345
+ }
2346
+
2347
+ .lab-quest-graph-node__memory {
2348
+ margin-top: 8px;
2349
+ border-radius: 12px;
2350
+ border: 1px solid rgba(83, 176, 174, 0.18);
2351
+ background: linear-gradient(180deg, rgba(83, 176, 174, 0.12), rgba(83, 176, 174, 0.05));
2352
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.45);
2353
+ padding: 8px 9px;
2354
+ }
2355
+
2356
+ .lab-quest-graph-node__memory-header {
2357
+ display: flex;
2358
+ align-items: center;
2359
+ gap: 6px;
2360
+ }
2361
+
2362
+ .lab-quest-graph-node__memory-dot {
2363
+ width: 7px;
2364
+ height: 7px;
2365
+ flex: 0 0 auto;
2366
+ border-radius: 999px;
2367
+ background: linear-gradient(180deg, rgba(83, 176, 174, 1), rgba(38, 139, 136, 0.92));
2368
+ box-shadow: 0 0 0 3px rgba(83, 176, 174, 0.12);
2369
+ }
2370
+
2371
+ .lab-quest-graph-node__memory-label {
2372
+ min-width: 0;
2373
+ font-size: 10px;
2374
+ font-weight: 600;
2375
+ line-height: 1.35;
2376
+ color: #0f766e;
2377
+ }
2378
+
2379
+ .lab-quest-graph-node__memory-summary {
2380
+ margin-top: 4px;
2381
+ font-size: 10px;
2382
+ line-height: 1.45;
2383
+ color: var(--lab-text-secondary);
2384
+ display: -webkit-box;
2385
+ -webkit-line-clamp: 2;
2386
+ -webkit-box-orient: vertical;
2387
+ overflow: hidden;
2388
+ }
2389
+
2390
+ .lab-quest-graph-node__signal {
2391
+ display: inline-flex;
2392
+ align-items: center;
2393
+ height: 18px;
2394
+ padding: 0 7px;
2395
+ border-radius: 999px;
2396
+ background: rgba(34, 197, 94, 0.12);
2397
+ color: #15803d;
2398
+ font-weight: 600;
2399
+ letter-spacing: 0.01em;
2400
+ }
2401
+
2402
+ .lab-quest-graph-node__delta {
2403
+ font-weight: 600;
2404
+ color: var(--lab-accent-strong);
2405
+ }
2406
+
2407
+ .lab-quest-sparkline {
2408
+ margin-top: 6px;
2409
+ }
2410
+
2411
+ .lab-quest-hover-card {
2412
+ position: absolute;
2413
+ z-index: 35;
2414
+ width: min(320px, calc(100% - 32px));
2415
+ pointer-events: none;
2416
+ border-radius: 16px;
2417
+ border: 1px solid rgba(148, 163, 184, 0.22);
2418
+ background: rgba(255, 255, 255, 0.9);
2419
+ backdrop-filter: blur(14px);
2420
+ box-shadow: 0 18px 40px rgba(15, 23, 42, 0.16);
2421
+ padding: 12px 14px;
2422
+ }
2423
+
2424
+ .lab-quest-hover-card.is-positive {
2425
+ border-color: rgba(34, 197, 94, 0.25);
2426
+ }
2427
+
2428
+ .lab-quest-hover-card.is-overlay {
2429
+ border-color: rgba(83, 176, 174, 0.32);
2430
+ }
2431
+
2432
+ .lab-quest-hover-card__header {
2433
+ display: flex;
2434
+ align-items: flex-start;
2435
+ justify-content: space-between;
2436
+ gap: 10px;
2437
+ }
2438
+
2439
+ .lab-quest-hover-card__title {
2440
+ font-size: 12px;
2441
+ font-weight: 700;
2442
+ color: var(--lab-text-primary);
2443
+ line-height: 1.35;
2444
+ }
2445
+
2446
+ .lab-quest-hover-card__badge {
2447
+ display: inline-flex;
2448
+ align-items: center;
2449
+ height: 20px;
2450
+ padding: 0 8px;
2451
+ border-radius: 999px;
2452
+ background: rgba(83, 176, 174, 0.1);
2453
+ color: var(--lab-text-primary);
2454
+ font-size: 10px;
2455
+ font-weight: 600;
2456
+ white-space: nowrap;
2457
+ }
2458
+
2459
+ .lab-quest-hover-card__subtitle {
2460
+ margin-top: 6px;
2461
+ font-size: 11px;
2462
+ color: var(--lab-text-secondary);
2463
+ line-height: 1.45;
2464
+ }
2465
+
2466
+ .lab-quest-hover-card__lines {
2467
+ margin-top: 10px;
2468
+ display: grid;
2469
+ gap: 7px;
2470
+ }
2471
+
2472
+ .lab-quest-hover-card__line {
2473
+ display: grid;
2474
+ grid-template-columns: 64px minmax(0, 1fr);
2475
+ gap: 8px;
2476
+ font-size: 10px;
2477
+ line-height: 1.4;
2478
+ color: var(--lab-text-secondary);
2479
+ }
2480
+
2481
+ .lab-quest-hover-card__line span:first-child {
2482
+ color: var(--lab-text-primary);
2483
+ font-weight: 600;
2484
+ }
2485
+
2486
+ .lab-quest-hover-card__footer {
2487
+ margin-top: 10px;
2488
+ padding-top: 8px;
2489
+ border-top: 1px dashed rgba(148, 163, 184, 0.24);
2490
+ font-size: 10px;
2491
+ color: var(--lab-text-muted);
2492
+ }
2493
+
2494
+ :is(.dark, [data-theme="dark"]) .lab-quest-hover-card {
2495
+ border-color: rgba(255, 255, 255, 0.08);
2496
+ background: rgba(22, 24, 29, 0.9);
2497
+ box-shadow: 0 22px 46px rgba(0, 0, 0, 0.38);
2498
+ }
2499
+
2500
+ :is(.dark, [data-theme="dark"]) .lab-quest-graph-node__memory {
2501
+ border-color: rgba(94, 234, 212, 0.18);
2502
+ background: linear-gradient(180deg, rgba(45, 212, 191, 0.14), rgba(45, 212, 191, 0.05));
2503
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);
2504
+ }
2505
+
2506
+ :is(.dark, [data-theme="dark"]) .lab-quest-graph-node__memory-dot {
2507
+ box-shadow: 0 0 0 3px rgba(45, 212, 191, 0.12);
2508
+ }
2509
+
2510
+ :is(.dark, [data-theme="dark"]) .lab-quest-graph-node__memory-label {
2511
+ color: #8be4db;
2512
+ }
2513
+
2514
+ :is(.dark, [data-theme="dark"]) .lab-quest-graph-node__signal {
2515
+ background: rgba(34, 197, 94, 0.18);
2516
+ color: #86efac;
2517
+ }
2518
+
2519
+ .lab-quest-curve {
2520
+ position: relative;
2521
+ width: 100%;
2522
+ height: 42px;
2523
+ border-radius: 8px;
2524
+ border: 1px solid rgba(102, 198, 189, 0.25);
2525
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.52), rgba(246, 250, 255, 0.28));
2526
+ overflow: hidden;
2527
+ }
2528
+
2529
+ .lab-quest-curve.is-expanded {
2530
+ height: 96px;
2531
+ border-radius: 10px;
2532
+ }
2533
+
2534
+ .lab-quest-curve__svg {
2535
+ width: 100%;
2536
+ height: 100%;
2537
+ display: block;
2538
+ }
2539
+
2540
+ .lab-quest-curve__guide {
2541
+ stroke: rgba(0, 0, 0, 0.07);
2542
+ stroke-width: 1;
2543
+ stroke-dasharray: 2 4;
2544
+ }
2545
+
2546
+ .lab-quest-curve__area {
2547
+ opacity: 0.95;
2548
+ }
2549
+
2550
+ .lab-quest-curve__line {
2551
+ fill: none;
2552
+ stroke-width: 2.4;
2553
+ stroke-linecap: round;
2554
+ stroke-linejoin: round;
2555
+ filter: drop-shadow(0 2px 6px rgba(78, 135, 210, 0.24));
2556
+ }
2557
+
2558
+ .lab-quest-curve__dot {
2559
+ fill: #e6fbf8;
2560
+ stroke: #54bbb1;
2561
+ stroke-width: 1.4;
2562
+ }
2563
+
2564
+ :is(.dark, [data-theme="dark"]) .lab-quest-curve {
2565
+ border-color: rgba(102, 198, 189, 0.3);
2566
+ background: linear-gradient(180deg, rgba(24, 26, 32, 0.82), rgba(19, 21, 28, 0.7));
2567
+ }
2568
+
2569
+ :is(.dark, [data-theme="dark"]) .lab-quest-curve__guide {
2570
+ stroke: rgba(255, 255, 255, 0.12);
2571
+ }
2572
+
2573
+ :is(.dark, [data-theme="dark"]) .lab-quest-curve__line {
2574
+ filter: drop-shadow(0 2px 7px rgba(44, 119, 210, 0.32));
2575
+ }
2576
+
2577
+ :is(.dark, [data-theme="dark"]) .lab-quest-curve__dot {
2578
+ fill: #1a2629;
2579
+ stroke: #73d4ca;
2580
+ }
2581
+
2582
+ .lab-quest-graph-node__verdict {
2583
+ font-size: 10px;
2584
+ padding: 2px 6px;
2585
+ border-radius: 999px;
2586
+ text-transform: uppercase;
2587
+ }
2588
+
2589
+ .lab-quest-graph-node__verdict.is-good {
2590
+ background: rgba(130, 188, 160, 0.2);
2591
+ color: #3e6b55;
2592
+ }
2593
+
2594
+ .lab-quest-graph-node__verdict.is-bad {
2595
+ background: rgba(201, 122, 122, 0.2);
2596
+ color: #7b4242;
2597
+ }
2598
+
2599
+ .lab-quest-graph-node__verdict.is-neutral {
2600
+ background: rgba(196, 160, 102, 0.18);
2601
+ color: #7d5b2e;
2602
+ }
2603
+
2604
+ .lab-quest-event-item {
2605
+ text-align: left;
2606
+ border: 0;
2607
+ background: rgba(255, 255, 255, 0.45);
2608
+ border-radius: 12px;
2609
+ padding: 10px 12px;
2610
+ display: flex;
2611
+ flex-direction: column;
2612
+ gap: 4px;
2613
+ }
2614
+
2615
+ :is(.dark, [data-theme="dark"]) .lab-quest-event-item {
2616
+ background: rgba(24, 26, 32, 0.7);
2617
+ }
2618
+
2619
+ .lab-quest-minimap {
2620
+ border-radius: 10px;
2621
+ border: 0;
2622
+ background: rgba(255, 255, 255, 0.55);
2623
+ box-shadow: 0 10px 24px rgba(0, 0, 0, 0.08);
2624
+ }
2625
+
2626
+ :is(.dark, [data-theme="dark"]) .lab-quest-minimap {
2627
+ background: rgba(20, 22, 28, 0.8);
2628
+ }
2629
+
2630
+ .lab-quest-event-item__title {
2631
+ font-size: 12px;
2632
+ font-weight: 600;
2633
+ color: var(--lab-text-primary);
2634
+ }
2635
+
2636
+ .lab-quest-event-item__meta {
2637
+ font-size: 11px;
2638
+ color: var(--lab-text-secondary);
2639
+ display: flex;
2640
+ gap: 8px;
2641
+ }
2642
+
2643
+ .lab-quest-event-item__summary {
2644
+ font-size: 11px;
2645
+ color: var(--lab-text-secondary);
2646
+ }
2647
+
2648
+ .lab-quest-section {
2649
+ border-top: 1px dashed var(--lab-border);
2650
+ padding-top: 8px;
2651
+ }
2652
+
2653
+ .lab-quest-section__title {
2654
+ font-size: 11px;
2655
+ font-weight: 600;
2656
+ color: var(--lab-text-secondary);
2657
+ margin-bottom: 6px;
2658
+ text-transform: uppercase;
2659
+ letter-spacing: 0.04em;
2660
+ }
2661
+
2662
+ .lab-quest-empty {
2663
+ font-size: 12px;
2664
+ color: var(--lab-text-secondary);
2665
+ text-align: center;
2666
+ padding: 12px;
2667
+ }
2668
+
2669
+ /* Branch page */
2670
+
2671
+ .lab-quest-artifact {
2672
+ border: 1px solid rgba(148, 163, 184, 0.18);
2673
+ border-radius: 16px;
2674
+ padding: 12px;
2675
+ background: var(--lab-surface);
2676
+ }
2677
+
2678
+ /* Snapshot */
2679
+ .lab-quest-snapshot {
2680
+ padding: 20px;
2681
+ height: 100%;
2682
+ overflow: auto;
2683
+ color: var(--lab-text-primary);
2684
+ }
2685
+
2686
+ /* Memory */
2687
+
2688
+ @media (max-width: 640px) {
2689
+ .lab-floating-panel {
2690
+ width: calc(100% - 24px);
2691
+ }
2692
+ .lab-floating-panel--events {
2693
+ width: calc(100% - 24px);
2694
+ }
2695
+ .lab-floating-panel--papers {
2696
+ width: calc(100% - 24px);
2697
+ }
2698
+ }