@researai/deepscientist 1.5.15 → 1.5.17

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 (202) hide show
  1. package/README.md +385 -104
  2. package/bin/ds.js +1241 -110
  3. package/docs/en/00_QUICK_START.md +100 -19
  4. package/docs/en/01_SETTINGS_REFERENCE.md +34 -1
  5. package/docs/en/02_START_RESEARCH_GUIDE.md +7 -0
  6. package/docs/en/05_TUI_GUIDE.md +6 -0
  7. package/docs/en/06_RUNTIME_AND_CANVAS.md +4 -3
  8. package/docs/en/09_DOCTOR.md +25 -8
  9. package/docs/en/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +63 -13
  10. package/docs/en/15_CODEX_PROVIDER_SETUP.md +37 -11
  11. package/docs/en/19_EXTERNAL_CONTROLLER_GUIDE.md +226 -0
  12. package/docs/en/19_LOCAL_BROWSER_AUTH.md +70 -0
  13. package/docs/en/20_WORKSPACE_MODES_GUIDE.md +250 -0
  14. package/docs/en/21_LOCAL_MODEL_BACKENDS_GUIDE.md +283 -0
  15. package/docs/en/91_DEVELOPMENT.md +237 -0
  16. package/docs/en/README.md +24 -2
  17. package/docs/zh/00_QUICK_START.md +89 -19
  18. package/docs/zh/01_SETTINGS_REFERENCE.md +34 -1
  19. package/docs/zh/02_START_RESEARCH_GUIDE.md +7 -0
  20. package/docs/zh/05_TUI_GUIDE.md +6 -0
  21. package/docs/zh/09_DOCTOR.md +26 -9
  22. package/docs/zh/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +63 -13
  23. package/docs/zh/15_CODEX_PROVIDER_SETUP.md +37 -11
  24. package/docs/zh/19_EXTERNAL_CONTROLLER_GUIDE.md +226 -0
  25. package/docs/zh/19_LOCAL_BROWSER_AUTH.md +68 -0
  26. package/docs/zh/20_WORKSPACE_MODES_GUIDE.md +251 -0
  27. package/docs/zh/21_LOCAL_MODEL_BACKENDS_GUIDE.md +281 -0
  28. package/docs/zh/README.md +24 -2
  29. package/install.sh +46 -4
  30. package/package.json +2 -1
  31. package/pyproject.toml +1 -1
  32. package/src/deepscientist/__init__.py +1 -1
  33. package/src/deepscientist/acp/envelope.py +6 -0
  34. package/src/deepscientist/artifact/service.py +647 -22
  35. package/src/deepscientist/bash_exec/service.py +234 -9
  36. package/src/deepscientist/bridges/connectors.py +8 -2
  37. package/src/deepscientist/cli.py +115 -19
  38. package/src/deepscientist/codex_cli_compat.py +367 -22
  39. package/src/deepscientist/config/models.py +2 -1
  40. package/src/deepscientist/config/service.py +183 -13
  41. package/src/deepscientist/daemon/api/handlers.py +255 -31
  42. package/src/deepscientist/daemon/api/router.py +9 -0
  43. package/src/deepscientist/daemon/app.py +1146 -105
  44. package/src/deepscientist/diagnostics/__init__.py +6 -0
  45. package/src/deepscientist/diagnostics/runner_failures.py +130 -0
  46. package/src/deepscientist/doctor.py +207 -3
  47. package/src/deepscientist/gitops/__init__.py +10 -1
  48. package/src/deepscientist/gitops/diff.py +129 -0
  49. package/src/deepscientist/gitops/service.py +4 -1
  50. package/src/deepscientist/mcp/server.py +39 -0
  51. package/src/deepscientist/prompts/builder.py +275 -34
  52. package/src/deepscientist/quest/layout.py +15 -2
  53. package/src/deepscientist/quest/service.py +707 -55
  54. package/src/deepscientist/quest/stage_views.py +6 -1
  55. package/src/deepscientist/runners/codex.py +143 -43
  56. package/src/deepscientist/shared.py +19 -0
  57. package/src/deepscientist/skills/__init__.py +2 -2
  58. package/src/deepscientist/skills/installer.py +196 -5
  59. package/src/deepscientist/skills/registry.py +66 -0
  60. package/src/prompts/connectors/qq.md +18 -8
  61. package/src/prompts/connectors/weixin.md +16 -6
  62. package/src/prompts/contracts/shared_interaction.md +14 -2
  63. package/src/prompts/system.md +23 -5
  64. package/src/prompts/system_copilot.md +56 -0
  65. package/src/skills/analysis-campaign/SKILL.md +1 -0
  66. package/src/skills/baseline/SKILL.md +8 -0
  67. package/src/skills/decision/SKILL.md +8 -0
  68. package/src/skills/experiment/SKILL.md +8 -0
  69. package/src/skills/figure-polish/SKILL.md +1 -0
  70. package/src/skills/finalize/SKILL.md +1 -0
  71. package/src/skills/idea/SKILL.md +1 -0
  72. package/src/skills/intake-audit/SKILL.md +8 -0
  73. package/src/skills/mentor/SKILL.md +217 -0
  74. package/src/skills/mentor/references/correction-rules.md +210 -0
  75. package/src/skills/mentor/references/knowledge-profile.md +91 -0
  76. package/src/skills/mentor/references/persona-profile.md +138 -0
  77. package/src/skills/mentor/references/taste-profile.md +128 -0
  78. package/src/skills/mentor/references/thought-style-profile.md +138 -0
  79. package/src/skills/mentor/references/work-profile.md +289 -0
  80. package/src/skills/mentor/references/workflow-profile.md +240 -0
  81. package/src/skills/optimize/SKILL.md +1 -0
  82. package/src/skills/rebuttal/SKILL.md +1 -0
  83. package/src/skills/review/SKILL.md +1 -0
  84. package/src/skills/scout/SKILL.md +8 -0
  85. package/src/skills/write/SKILL.md +1 -0
  86. package/src/tui/dist/app/AppContainer.js +19 -11
  87. package/src/tui/dist/index.js +4 -1
  88. package/src/tui/dist/lib/api.js +33 -3
  89. package/src/tui/package.json +1 -1
  90. package/src/ui/dist/assets/AiManusChatView-Bv-Z8YpU.js +204 -0
  91. package/src/ui/dist/assets/AnalysisPlugin-BCKAfjba.js +1 -0
  92. package/src/ui/dist/assets/CliPlugin-BCKcpc35.js +109 -0
  93. package/src/ui/dist/assets/CodeEditorPlugin-DbOfSJ8K.js +2 -0
  94. package/src/ui/dist/assets/CodeViewerPlugin-CbaFRrUU.js +270 -0
  95. package/src/ui/dist/assets/DocViewerPlugin-DAjLVeQD.js +7 -0
  96. package/src/ui/dist/assets/GitCommitViewerPlugin-CIUqbUDO.js +1 -0
  97. package/src/ui/dist/assets/GitDiffViewerPlugin-CQACjoAA.js +6 -0
  98. package/src/ui/dist/assets/GitSnapshotViewer-0r4nLPke.js +30 -0
  99. package/src/ui/dist/assets/ImageViewerPlugin-nBOmI2v_.js +26 -0
  100. package/src/ui/dist/assets/LabCopilotPanel-BHxOxF4z.js +14 -0
  101. package/src/ui/dist/assets/LabPlugin-BKoZGs95.js +22 -0
  102. package/src/ui/dist/assets/LatexPlugin-ZwtV8pIp.js +25 -0
  103. package/src/ui/dist/assets/MarkdownViewerPlugin-DKqVfKyW.js +128 -0
  104. package/src/ui/dist/assets/MarketplacePlugin-BwxStZ9D.js +13 -0
  105. package/src/ui/dist/assets/NotebookEditor-BEQhaQbt.js +81 -0
  106. package/src/ui/dist/assets/{NotebookEditor-CccQYZjX.css → NotebookEditor-BHH8rdGj.css} +1 -1
  107. package/src/ui/dist/assets/NotebookEditor-BOr3x3Ej.css +1 -0
  108. package/src/ui/dist/assets/NotebookEditor-DB9N_T9q.js +361 -0
  109. package/src/ui/dist/assets/PdfLoader-Cy5jtWrr.css +1 -0
  110. package/src/ui/dist/assets/PdfLoader-eWBONbQP.js +16 -0
  111. package/src/ui/dist/assets/PdfMarkdownPlugin-D22YOZL3.js +1 -0
  112. package/src/ui/dist/assets/PdfViewerPlugin-c-RK9DLM.js +17 -0
  113. package/src/ui/dist/assets/PdfViewerPlugin-nwwE-fjJ.css +1 -0
  114. package/src/ui/dist/assets/SearchPlugin-CxF9ytAx.js +16 -0
  115. package/src/ui/dist/assets/SearchPlugin-DA4en4hK.css +1 -0
  116. package/src/ui/dist/assets/TextViewerPlugin-C5xqeeUH.js +54 -0
  117. package/src/ui/dist/assets/VNCViewer-BoLGLnHz.js +11 -0
  118. package/src/ui/dist/assets/bot-DREQOxzP.js +6 -0
  119. package/src/ui/dist/assets/browser-CTB2jwNe.js +8 -0
  120. package/src/ui/dist/assets/chevron-up-C9Qpx4DE.js +6 -0
  121. package/src/ui/dist/assets/code-WlFHE7z_.js +6 -0
  122. package/src/ui/dist/assets/file-content-BZMz3RYp.js +1 -0
  123. package/src/ui/dist/assets/file-diff-panel-CQhw0jS2.js +1 -0
  124. package/src/ui/dist/assets/file-jump-queue-DA-SdG__.js +1 -0
  125. package/src/ui/dist/assets/file-socket-CfQPKQKj.js +1 -0
  126. package/src/ui/dist/assets/git-commit-horizontal-DxZ8DCZh.js +6 -0
  127. package/src/ui/dist/assets/image-Bgl4VIyx.js +6 -0
  128. package/src/ui/dist/assets/index-BpV6lusQ.css +33 -0
  129. package/src/ui/dist/assets/index-CBNVuWcP.js +2496 -0
  130. package/src/ui/dist/assets/index-CwNu1aH4.js +11 -0
  131. package/src/ui/dist/assets/index-DrUnlf6K.js +1 -0
  132. package/src/ui/dist/assets/index-NW-h8VzN.js +1 -0
  133. package/src/ui/dist/assets/monaco-CiHMMNH_.js +1 -0
  134. package/src/ui/dist/assets/pdf-effect-queue-J8OnM0jE.js +6 -0
  135. package/src/ui/dist/assets/plugin-monaco-C8UgLomw.js +19 -0
  136. package/src/ui/dist/assets/plugin-notebook-HbW2K-1c.js +169 -0
  137. package/src/ui/dist/assets/plugin-pdf-CR8hgQBV.js +357 -0
  138. package/src/ui/dist/assets/plugin-terminal-MXFIPun8.js +227 -0
  139. package/src/ui/dist/assets/popover-CLc0pPP8.js +1 -0
  140. package/src/ui/dist/assets/project-sync-C9IdzdZW.js +1 -0
  141. package/src/ui/dist/assets/select-Cs2PmzwL.js +11 -0
  142. package/src/ui/dist/assets/sigma-ClKcHAXm.js +6 -0
  143. package/src/ui/dist/assets/trash-DwpbFr3w.js +11 -0
  144. package/src/ui/dist/assets/useCliAccess-NQ8m0Let.js +1 -0
  145. package/src/ui/dist/assets/useFileDiffOverlay-FuhcnKiw.js +1 -0
  146. package/src/ui/dist/assets/wrap-text-BC-Hltpd.js +11 -0
  147. package/src/ui/dist/assets/zoom-out-E_gaeAxL.js +11 -0
  148. package/src/ui/dist/index.html +5 -2
  149. package/src/ui/dist/assets/AiManusChatView-DDjbFnbt.js +0 -26597
  150. package/src/ui/dist/assets/AnalysisPlugin-Yb5IdmaU.js +0 -123
  151. package/src/ui/dist/assets/CliPlugin-e64sreyu.js +0 -31037
  152. package/src/ui/dist/assets/CodeEditorPlugin-C4D2TIkU.js +0 -427
  153. package/src/ui/dist/assets/CodeViewerPlugin-BVoNZIvC.js +0 -905
  154. package/src/ui/dist/assets/DocViewerPlugin-CLChbllo.js +0 -278
  155. package/src/ui/dist/assets/GitDiffViewerPlugin-C4xeFyFQ.js +0 -2661
  156. package/src/ui/dist/assets/ImageViewerPlugin-OiMUAcLi.js +0 -500
  157. package/src/ui/dist/assets/LabCopilotPanel-BjD2ThQF.js +0 -4104
  158. package/src/ui/dist/assets/LabPlugin-DQPg-NrB.js +0 -2677
  159. package/src/ui/dist/assets/LatexPlugin-CI05XAV9.js +0 -1792
  160. package/src/ui/dist/assets/MarkdownViewerPlugin-DpeBLYZf.js +0 -308
  161. package/src/ui/dist/assets/MarketplacePlugin-DolE58Q2.js +0 -413
  162. package/src/ui/dist/assets/NotebookEditor-7Qm2rSWD.js +0 -4214
  163. package/src/ui/dist/assets/NotebookEditor-C1kWaxKi.js +0 -84873
  164. package/src/ui/dist/assets/NotebookEditor-C3VQ7ylN.css +0 -1405
  165. package/src/ui/dist/assets/PdfLoader-BfOHw8Zw.js +0 -25468
  166. package/src/ui/dist/assets/PdfLoader-C-Y707R3.css +0 -49
  167. package/src/ui/dist/assets/PdfMarkdownPlugin-BulDREv1.js +0 -409
  168. package/src/ui/dist/assets/PdfViewerPlugin-C-daaOaL.js +0 -3095
  169. package/src/ui/dist/assets/PdfViewerPlugin-DQ11QcSf.css +0 -3627
  170. package/src/ui/dist/assets/SearchPlugin-CjpaiJ3A.js +0 -741
  171. package/src/ui/dist/assets/SearchPlugin-DDMrGDkh.css +0 -379
  172. package/src/ui/dist/assets/TextViewerPlugin-BxIyqPQC.js +0 -472
  173. package/src/ui/dist/assets/VNCViewer-HAg9mF7M.js +0 -18821
  174. package/src/ui/dist/assets/awareness-C0NPR2Dj.js +0 -292
  175. package/src/ui/dist/assets/bot-0DYntytV.js +0 -21
  176. package/src/ui/dist/assets/browser-BAcuE0Xj.js +0 -2895
  177. package/src/ui/dist/assets/code-B20Slj_w.js +0 -17
  178. package/src/ui/dist/assets/file-content-DT24KFma.js +0 -377
  179. package/src/ui/dist/assets/file-diff-panel-DK13YPql.js +0 -92
  180. package/src/ui/dist/assets/file-jump-queue-r5XKgJEV.js +0 -16
  181. package/src/ui/dist/assets/file-socket-B4T2o4nR.js +0 -58
  182. package/src/ui/dist/assets/function-B5QZkkHC.js +0 -1895
  183. package/src/ui/dist/assets/image-DSeR_sDS.js +0 -18
  184. package/src/ui/dist/assets/index-BrFje2Uk.js +0 -120
  185. package/src/ui/dist/assets/index-BwRJaoTl.js +0 -25
  186. package/src/ui/dist/assets/index-D_E4281X.js +0 -221322
  187. package/src/ui/dist/assets/index-DnYB3xb1.js +0 -159
  188. package/src/ui/dist/assets/index-G7AcWcMu.css +0 -12594
  189. package/src/ui/dist/assets/monaco-LExaAN3Y.js +0 -623
  190. package/src/ui/dist/assets/pdf-effect-queue-BJk5okWJ.js +0 -47
  191. package/src/ui/dist/assets/pdf_viewer-e0g1is2C.js +0 -8206
  192. package/src/ui/dist/assets/popover-D3Gg_FoV.js +0 -476
  193. package/src/ui/dist/assets/project-sync-C_ygLlVU.js +0 -297
  194. package/src/ui/dist/assets/select-CpAK6uWm.js +0 -1690
  195. package/src/ui/dist/assets/sigma-DEccaSgk.js +0 -22
  196. package/src/ui/dist/assets/square-check-big-uUfyVsbD.js +0 -17
  197. package/src/ui/dist/assets/trash-CXvwwSe8.js +0 -32
  198. package/src/ui/dist/assets/useCliAccess-Bnop4mgR.js +0 -957
  199. package/src/ui/dist/assets/useFileDiffOverlay-B8eUAX0I.js +0 -53
  200. package/src/ui/dist/assets/wrap-text-9vbOBpkW.js +0 -35
  201. package/src/ui/dist/assets/yjs-DncrqiZ8.js +0 -11243
  202. package/src/ui/dist/assets/zoom-out-BgVMmOW4.js +0 -34
@@ -1,1405 +0,0 @@
1
- ._verified_lvyh0_1 {
2
- margin-left: 0.125rem;
3
- max-width: 20px;
4
- max-height: 20px;
5
- height: 1.25em;
6
- fill: currentColor;
7
- -webkit-user-select: none;
8
- -moz-user-select: none;
9
- user-select: none;
10
- vertical-align: text-bottom;
11
- }
12
- ._root_98iqw_1 {
13
- width: 100%;
14
- min-width: 250px;
15
- max-width: 550px;
16
- overflow: hidden;
17
- /* Base font styles */
18
- color: var(--tweet-font-color);
19
- font-family: var(--tweet-font-family);
20
- font-weight: 400;
21
- box-sizing: border-box;
22
- border: var(--tweet-border);
23
- border-radius: 12px;
24
- margin: var(--tweet-container-margin);
25
- background-color: var(--tweet-bg-color);
26
- transition-property: background-color, box-shadow;
27
- transition-duration: 0.2s;
28
- }
29
- ._root_98iqw_1:hover {
30
- background-color: var(--tweet-bg-color-hover);
31
- }
32
- ._article_98iqw_21 {
33
- position: relative;
34
- box-sizing: inherit;
35
- padding: 0.75rem 1rem;
36
- }
37
- .react-tweet-theme {
38
- --tweet-container-margin: 1.5rem 0;
39
-
40
- /* Header */
41
- --tweet-header-font-size: 0.9375rem;
42
- --tweet-header-line-height: 1.25rem;
43
-
44
- /* Text */
45
- --tweet-body-font-size: 1.25rem;
46
- --tweet-body-font-weight: 400;
47
- --tweet-body-line-height: 1.5rem;
48
- --tweet-body-margin: 0;
49
-
50
- /* Quoted Tweet */
51
- --tweet-quoted-container-margin: 0.75rem 0;
52
- --tweet-quoted-body-font-size: 0.938rem;
53
- --tweet-quoted-body-font-weight: 400;
54
- --tweet-quoted-body-line-height: 1.25rem;
55
- --tweet-quoted-body-margin: 0.25rem 0 0.75rem 0;
56
-
57
- /* Info */
58
- --tweet-info-font-size: 0.9375rem;
59
- --tweet-info-line-height: 1.25rem;
60
-
61
- /* Actions like the like, reply and copy buttons */
62
- --tweet-actions-font-size: 0.875rem;
63
- --tweet-actions-line-height: 1rem;
64
- --tweet-actions-font-weight: 700;
65
- --tweet-actions-icon-size: 1.25em;
66
- --tweet-actions-icon-wrapper-size: calc(
67
- var(--tweet-actions-icon-size) + 0.75em
68
- );
69
-
70
- /* Reply button */
71
- --tweet-replies-font-size: 0.875rem;
72
- --tweet-replies-line-height: 1rem;
73
- --tweet-replies-font-weight: 700;
74
- }
75
-
76
- :where(.react-tweet-theme) * {
77
- margin: 0;
78
- padding: 0;
79
- box-sizing: border-box;
80
- }
81
-
82
- :is([data-theme='light'], .light) :where(.react-tweet-theme),
83
- :where(.react-tweet-theme) {
84
- --tweet-skeleton-gradient: linear-gradient(
85
- 270deg,
86
- #fafafa,
87
- #eaeaea,
88
- #eaeaea,
89
- #fafafa
90
- );
91
- --tweet-border: 1px solid rgb(207, 217, 222);
92
- --tweet-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
93
- Helvetica, Arial, sans-serif;
94
- --tweet-font-color: rgb(15, 20, 25);
95
- --tweet-font-color-secondary: rgb(83, 100, 113);
96
- --tweet-bg-color: #fff;
97
- --tweet-bg-color-hover: rgb(247, 249, 249);
98
- --tweet-quoted-bg-color-hover: rgba(0, 0, 0, 0.03);
99
- --tweet-color-blue-primary: rgb(29, 155, 240);
100
- --tweet-color-blue-primary-hover: rgb(26, 140, 216);
101
- --tweet-color-blue-secondary: rgb(0, 111, 214);
102
- --tweet-color-blue-secondary-hover: rgba(0, 111, 214, 0.1);
103
- --tweet-color-red-primary: rgb(249, 24, 128);
104
- --tweet-color-red-primary-hover: rgba(249, 24, 128, 0.1);
105
- --tweet-color-green-primary: rgb(0, 186, 124);
106
- --tweet-color-green-primary-hover: rgba(0, 186, 124, 0.1);
107
- --tweet-twitter-icon-color: var(--tweet-font-color);
108
- --tweet-verified-old-color: rgb(130, 154, 171);
109
- --tweet-verified-blue-color: var(--tweet-color-blue-primary);
110
- }
111
-
112
- :is([data-theme='dark'], .dark) :where(.react-tweet-theme) {
113
- --tweet-skeleton-gradient: linear-gradient(
114
- 270deg,
115
- #15202b,
116
- rgb(30, 39, 50),
117
- rgb(30, 39, 50),
118
- rgb(21, 32, 43)
119
- );
120
- --tweet-border: 1px solid rgb(66, 83, 100);
121
- --tweet-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
122
- Helvetica, Arial, sans-serif;
123
- --tweet-font-color: rgb(247, 249, 249);
124
- --tweet-font-color-secondary: rgb(139, 152, 165);
125
- --tweet-bg-color: rgb(21, 32, 43);
126
- --tweet-bg-color-hover: rgb(30, 39, 50);
127
- --tweet-quoted-bg-color-hover: rgba(255, 255, 255, 0.03);
128
- --tweet-color-blue-primary: rgb(29, 155, 240);
129
- --tweet-color-blue-primary-hover: rgb(26, 140, 216);
130
- --tweet-color-blue-secondary: rgb(107, 201, 251);
131
- --tweet-color-blue-secondary-hover: rgba(107, 201, 251, 0.1);
132
- --tweet-color-red-primary: rgb(249, 24, 128);
133
- --tweet-color-red-primary-hover: rgba(249, 24, 128, 0.1);
134
- --tweet-color-green-primary: rgb(0, 186, 124);
135
- --tweet-color-green-primary-hover: rgba(0, 186, 124, 0.1);
136
- --tweet-twitter-icon-color: var(--tweet-font-color);
137
- --tweet-verified-old-color: rgb(130, 154, 171);
138
- --tweet-verified-blue-color: #fff;
139
- }
140
-
141
- @media (prefers-color-scheme: dark) {
142
- :where(.react-tweet-theme) {
143
- --tweet-skeleton-gradient: linear-gradient(
144
- 270deg,
145
- #15202b,
146
- rgb(30, 39, 50),
147
- rgb(30, 39, 50),
148
- rgb(21, 32, 43)
149
- );
150
- --tweet-border: 1px solid rgb(66, 83, 100);
151
- --tweet-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
152
- Helvetica, Arial, sans-serif;
153
- --tweet-font-color: rgb(247, 249, 249);
154
- --tweet-font-color-secondary: rgb(139, 152, 165);
155
- --tweet-bg-color: rgb(21, 32, 43);
156
- --tweet-bg-color-hover: rgb(30, 39, 50);
157
- --tweet-color-blue-primary: rgb(29, 155, 240);
158
- --tweet-color-blue-primary-hover: rgb(26, 140, 216);
159
- --tweet-color-blue-secondary: rgb(107, 201, 251);
160
- --tweet-color-blue-secondary-hover: rgba(107, 201, 251, 0.1);
161
- --tweet-color-red-primary: rgb(249, 24, 128);
162
- --tweet-color-red-primary-hover: rgba(249, 24, 128, 0.1);
163
- --tweet-color-green-primary: rgb(0, 186, 124);
164
- --tweet-color-green-primary-hover: rgba(0, 186, 124, 0.1);
165
- --tweet-twitter-icon-color: var(--tweet-font-color);
166
- --tweet-verified-old-color: rgb(130, 154, 171);
167
- --tweet-verified-blue-color: #fff;
168
- }
169
- }
170
- ._verifiedOld_lcna5_1 {
171
- color: var(--tweet-verified-old-color);
172
- }
173
- ._verifiedBlue_lcna5_4 {
174
- color: var(--tweet-verified-blue-color);
175
- }
176
- ._verifiedGovernment_lcna5_7 {
177
- /* color: var(--tweet-verified-government-color); */
178
- color: rgb(130, 154, 171);
179
- }
180
- ._label_36ucz_1 {
181
- display: flex;
182
- height: calc(1.0625em);
183
- width: calc(1.0625em);
184
- max-width: 17px;
185
- max-height: 17px;
186
- margin-left: 4px;
187
- margin-right: 2px;
188
- border: var(--tweet-border);
189
- border-radius: 2px;
190
- }
191
-
192
- ._label_36ucz_1 > img {
193
- width: 100%;
194
- height: 100%;
195
- }
196
- ._header_nqq4j_1 {
197
- display: flex;
198
- padding-bottom: 0.75rem;
199
- line-height: var(--tweet-header-line-height);
200
- font-size: var(--tweet-header-font-size);
201
- white-space: nowrap;
202
- overflow-wrap: break-word;
203
- overflow: hidden;
204
- }
205
-
206
- ._avatar_nqq4j_11 {
207
- position: relative;
208
- height: 48px;
209
- width: 48px;
210
- }
211
- ._avatarOverflow_nqq4j_16 {
212
- height: 100%;
213
- width: 100%;
214
- position: absolute;
215
- overflow: hidden;
216
- border-radius: 9999px;
217
- }
218
- ._avatarSquare_nqq4j_23 {
219
- border-radius: 4px;
220
- }
221
- ._avatarShadow_nqq4j_26 {
222
- height: 100%;
223
- width: 100%;
224
- transition-property: background-color;
225
- transition-duration: 0.2s;
226
- box-shadow: rgb(0 0 0 / 3%) 0px 0px 2px inset;
227
- }
228
- ._avatarShadow_nqq4j_26:hover {
229
- background-color: rgba(26, 26, 26, 0.15);
230
- }
231
-
232
- ._author_nqq4j_37 {
233
- max-width: calc(100% - 84px);
234
- display: flex;
235
- flex-direction: column;
236
- justify-content: center;
237
- margin: 0 0.5rem;
238
- }
239
- ._authorLink_nqq4j_44 {
240
- text-decoration: none;
241
- color: inherit;
242
- display: flex;
243
- align-items: center;
244
- }
245
- ._authorLink_nqq4j_44:hover {
246
- text-decoration-line: underline;
247
- }
248
- ._authorVerified_nqq4j_53 {
249
- display: inline-flex;
250
- }
251
- ._authorLinkText_nqq4j_56 {
252
- font-weight: 700;
253
- text-overflow: ellipsis;
254
- overflow: hidden;
255
- white-space: nowrap;
256
- }
257
-
258
- ._authorMeta_nqq4j_63 {
259
- display: flex;
260
- }
261
- ._authorFollow_nqq4j_66 {
262
- display: flex;
263
- }
264
- ._username_nqq4j_69 {
265
- color: var(--tweet-font-color-secondary);
266
- text-decoration: none;
267
- text-overflow: ellipsis;
268
- }
269
- ._follow_nqq4j_74 {
270
- color: var(--tweet-color-blue-secondary);
271
- text-decoration: none;
272
- font-weight: 700;
273
- }
274
- ._follow_nqq4j_74:hover {
275
- text-decoration-line: underline;
276
- }
277
- ._separator_nqq4j_82 {
278
- padding: 0 0.25rem;
279
- }
280
-
281
- ._brand_nqq4j_86 {
282
- margin-inline-start: auto;
283
- }
284
-
285
- ._twitterIcon_nqq4j_90 {
286
- width: 23.75px;
287
- height: 23.75px;
288
- color: var(--tweet-twitter-icon-color);
289
- fill: currentColor;
290
- -webkit-user-select: none;
291
- -moz-user-select: none;
292
- user-select: none;
293
- }
294
- ._root_1ec15_1 {
295
- text-decoration: none;
296
- color: var(--tweet-font-color-secondary);
297
- font-size: 0.9375rem;
298
- line-height: 1.25rem;
299
- margin-bottom: 0.25rem;
300
- overflow-wrap: break-word;
301
- white-space: pre-wrap;
302
- }
303
- ._root_1ec15_1:hover {
304
- text-decoration-thickness: 1px;
305
- text-decoration-line: underline;
306
- }
307
- ._root_eihfa_1 {
308
- font-weight: inherit;
309
- color: var(--tweet-color-blue-secondary);
310
- text-decoration: none;
311
- cursor: pointer;
312
- }
313
- ._root_eihfa_1:hover {
314
- text-decoration-thickness: 1px;
315
- text-decoration-line: underline;
316
- }
317
- ._root_1xq52_1 {
318
- font-size: var(--tweet-body-font-size);
319
- font-weight: var(--tweet-body-font-weight);
320
- line-height: var(--tweet-body-line-height);
321
- margin: var(--tweet-body-margin);
322
- overflow-wrap: break-word;
323
- white-space: pre-wrap;
324
- }
325
- ._root_g9tkv_1 {
326
- margin-top: 0.75rem;
327
- overflow: hidden;
328
- position: relative;
329
- }
330
- ._rounded_g9tkv_6 {
331
- border: var(--tweet-border);
332
- border-radius: 12px;
333
- }
334
- ._mediaWrapper_g9tkv_10 {
335
- display: grid;
336
- grid-auto-rows: 1fr;
337
- gap: 2px;
338
- height: 100%;
339
- width: 100%;
340
- }
341
- ._grid2Columns_g9tkv_17 {
342
- grid-template-columns: repeat(2, 1fr);
343
- }
344
- ._grid3_g9tkv_20 > a:first-child {
345
- grid-row: span 2;
346
- }
347
- ._grid2x2_g9tkv_23 {
348
- grid-template-rows: repeat(2, 1fr);
349
- }
350
- ._mediaContainer_g9tkv_26 {
351
- position: relative;
352
- height: 100%;
353
- width: 100%;
354
- display: flex;
355
- align-items: center;
356
- justify-content: center;
357
- }
358
- ._mediaLink_g9tkv_34 {
359
- text-decoration: none;
360
- outline-style: none;
361
- }
362
- ._skeleton_g9tkv_38 {
363
- padding-bottom: 56.25%;
364
- width: 100%;
365
- display: block;
366
- }
367
- ._image_g9tkv_43 {
368
- position: absolute;
369
- top: 0px;
370
- left: 0px;
371
- bottom: 0px;
372
- height: 100%;
373
- width: 100%;
374
- margin: 0;
375
- -o-object-fit: cover;
376
- object-fit: cover;
377
- -o-object-position: center;
378
- object-position: center;
379
- }
380
- ._anchor_fp31d_1 {
381
- display: flex;
382
- align-items: center;
383
- color: white;
384
- padding: 0 1rem;
385
- border: 1px solid transparent;
386
- border-radius: 9999px;
387
- font-weight: 700;
388
- transition: background-color 0.2s;
389
- cursor: pointer;
390
- -webkit-user-select: none;
391
- -moz-user-select: none;
392
- user-select: none;
393
- outline-style: none;
394
- text-decoration: none;
395
- text-overflow: ellipsis;
396
- white-space: nowrap;
397
- }
398
- ._videoButton_fp31d_17 {
399
- position: relative;
400
- height: 67px;
401
- width: 67px;
402
- display: flex;
403
- align-items: center;
404
- justify-content: center;
405
- background-color: var(--tweet-color-blue-primary);
406
- transition-property: background-color;
407
- transition-duration: 0.2s;
408
- border: 4px solid #fff;
409
- border-radius: 9999px;
410
- cursor: pointer;
411
- }
412
- ._videoButton_fp31d_17:hover,
413
- ._videoButton_fp31d_17:focus-visible {
414
- background-color: var(--tweet-color-blue-primary-hover);
415
- }
416
- ._videoButtonIcon_fp31d_35 {
417
- margin-left: 3px;
418
- width: calc(50% + 4px);
419
- height: calc(50% + 4px);
420
- max-width: 100%;
421
- color: #fff;
422
- fill: currentColor;
423
- -webkit-user-select: none;
424
- -moz-user-select: none;
425
- user-select: none;
426
- }
427
- ._watchOnTwitter_fp31d_44 {
428
- position: absolute;
429
- top: 12px;
430
- right: 8px;
431
- }
432
- ._watchOnTwitter_fp31d_44 > a {
433
- min-width: 2rem;
434
- min-height: 2rem;
435
- font-size: 0.875rem;
436
- line-height: 1rem;
437
- backdrop-filter: blur(4px);
438
- background-color: rgba(15, 20, 25, 0.75);
439
- }
440
- ._watchOnTwitter_fp31d_44 > a:hover {
441
- background-color: rgba(39, 44, 48, 0.75);
442
- }
443
- ._viewReplies_fp31d_60 {
444
- position: relative;
445
- min-height: 2rem;
446
- background-color: var(--tweet-color-blue-primary);
447
- border-color: var(--tweet-color-blue-primary);
448
- font-size: 0.9375rem;
449
- line-height: 1.25rem;
450
- }
451
- ._viewReplies_fp31d_60:hover {
452
- background-color: var(--tweet-color-blue-primary-hover);
453
- }
454
- ._root_i24yn_1 {
455
- color: inherit;
456
- text-decoration: none;
457
- font-size: var(--tweet-info-font-size);
458
- line-height: var(--tweet-info-line-height);
459
- }
460
- ._root_i24yn_1:hover {
461
- text-decoration-thickness: 1px;
462
- text-decoration-line: underline;
463
- }
464
- ._info_19qcj_1 {
465
- display: flex;
466
- align-items: center;
467
- color: var(--tweet-font-color-secondary);
468
- margin-top: 0.125rem;
469
- overflow-wrap: break-word;
470
- white-space: nowrap;
471
- text-overflow: ellipsis;
472
- }
473
- ._infoLink_19qcj_10 {
474
- color: inherit;
475
- text-decoration: none;
476
- height: var(--tweet-actions-icon-wrapper-size);
477
- width: var(--tweet-actions-icon-wrapper-size);
478
- font: inherit;
479
- margin-left: auto;
480
- display: flex;
481
- justify-content: center;
482
- align-items: center;
483
- margin-right: -4px;
484
- border-radius: 9999px;
485
- transition-property: background-color;
486
- transition-duration: 0.2s;
487
- }
488
- ._infoLink_19qcj_10:hover {
489
- background-color: var(--tweet-color-blue-secondary-hover);
490
- }
491
- ._infoIcon_19qcj_30 {
492
- color: inherit;
493
- fill: currentColor;
494
- height: var(--tweet-actions-icon-size);
495
- -webkit-user-select: none;
496
- -moz-user-select: none;
497
- user-select: none;
498
- }
499
- ._infoLink_19qcj_10:hover > ._infoIcon_19qcj_30 {
500
- color: var(--tweet-color-blue-secondary);
501
- }
502
- ._actions_n2anf_1 {
503
- display: flex;
504
- align-items: center;
505
- color: var(--tweet-font-color-secondary);
506
- padding-top: 0.25rem;
507
- margin-top: 0.25rem;
508
- border-top: var(--tweet-border);
509
- overflow-wrap: break-word;
510
- white-space: nowrap;
511
- text-overflow: ellipsis;
512
- }
513
-
514
- ._like_n2anf_13,
515
- ._reply_n2anf_14,
516
- ._copy_n2anf_15 {
517
- text-decoration: none;
518
- color: inherit;
519
- display: flex;
520
- align-items: center;
521
- margin-right: 1.25rem;
522
- }
523
- ._like_n2anf_13:hover,
524
- ._reply_n2anf_14:hover,
525
- ._copy_n2anf_15:hover {
526
- background-color: rgba(0, 0, 0, 0);
527
- }
528
- ._like_n2anf_13:hover > ._likeIconWrapper_n2anf_27 {
529
- background-color: var(--tweet-color-red-primary-hover);
530
- }
531
- ._like_n2anf_13:hover > ._likeCount_n2anf_30 {
532
- color: var(--tweet-color-red-primary);
533
- text-decoration-line: underline;
534
- }
535
- ._likeIconWrapper_n2anf_27,
536
- ._replyIconWrapper_n2anf_35,
537
- ._copyIconWrapper_n2anf_36 {
538
- width: var(--tweet-actions-icon-wrapper-size);
539
- height: var(--tweet-actions-icon-wrapper-size);
540
- display: flex;
541
- justify-content: center;
542
- align-items: center;
543
- margin-left: -0.25rem;
544
- border-radius: 9999px;
545
- }
546
- ._likeIcon_n2anf_27,
547
- ._replyIcon_n2anf_35,
548
- ._copyIcon_n2anf_36 {
549
- height: var(--tweet-actions-icon-size);
550
- fill: currentColor;
551
- -webkit-user-select: none;
552
- -moz-user-select: none;
553
- user-select: none;
554
- }
555
- ._likeIcon_n2anf_27 {
556
- color: var(--tweet-color-red-primary);
557
- }
558
- ._likeCount_n2anf_30,
559
- ._replyText_n2anf_56,
560
- ._copyText_n2anf_57 {
561
- font-size: var(--tweet-actions-font-size);
562
- font-weight: var(--tweet-actions-font-weight);
563
- line-height: var(--tweet-actions-line-height);
564
- margin-left: 0.25rem;
565
- }
566
-
567
- ._reply_n2anf_14:hover > ._replyIconWrapper_n2anf_35 {
568
- background-color: var(--tweet-color-blue-secondary-hover);
569
- }
570
- ._reply_n2anf_14:hover > ._replyText_n2anf_56 {
571
- color: var(--tweet-color-blue-secondary);
572
- text-decoration-line: underline;
573
- }
574
- ._replyIcon_n2anf_35 {
575
- color: var(--tweet-color-blue-primary);
576
- }
577
-
578
- ._copy_n2anf_15 {
579
- font: inherit;
580
- background: none;
581
- border: none;
582
- cursor: pointer;
583
- }
584
- ._copy_n2anf_15:hover > ._copyIconWrapper_n2anf_36 {
585
- background-color: var(--tweet-color-green-primary-hover);
586
- }
587
- ._copy_n2anf_15:hover ._copyIcon_n2anf_36 {
588
- color: var(--tweet-color-green-primary);
589
- }
590
- ._copy_n2anf_15:hover > ._copyText_n2anf_57 {
591
- color: var(--tweet-color-green-primary);
592
- text-decoration-line: underline;
593
- }
594
- ._replies_1cutb_1 {
595
- padding: 0.25rem 0;
596
- }
597
- ._link_1cutb_4 {
598
- text-decoration: none;
599
- color: var(--tweet-color-blue-secondary);
600
- display: flex;
601
- align-items: center;
602
- justify-content: center;
603
- min-width: 32px;
604
- min-height: 32px;
605
- -webkit-user-select: none;
606
- -moz-user-select: none;
607
- user-select: none;
608
- outline-style: none;
609
- transition-property: background-color;
610
- transition-duration: 0.2s;
611
- padding: 0 1rem;
612
- border: var(--tweet-border);
613
- border-radius: 9999px;
614
- }
615
- ._link_1cutb_4:hover {
616
- background-color: var(--tweet-color-blue-secondary-hover);
617
- }
618
- ._text_1cutb_23 {
619
- font-weight: var(--tweet-replies-font-weight);
620
- font-size: var(--tweet-replies-font-size);
621
- line-height: var(--tweet-replies-line-height);
622
- overflow-wrap: break-word;
623
- white-space: nowrap;
624
- text-overflow: ellipsis;
625
- overflow: hidden;
626
- }
627
- ._root_q5799_1 {
628
- width: 100%;
629
- overflow: hidden;
630
- border: var(--tweet-border);
631
- border-radius: 12px;
632
- margin: var(--tweet-quoted-container-margin);
633
- transition-property: background-color, box-shadow;
634
- transition-duration: 0.2s;
635
- cursor: pointer;
636
- }
637
-
638
- ._root_q5799_1:hover {
639
- background-color: var(--tweet-quoted-bg-color-hover);
640
- }
641
-
642
- ._article_q5799_16 {
643
- position: relative;
644
- box-sizing: inherit;
645
- }
646
- ._header_f00ab_1 {
647
- display: flex;
648
- padding: 0.75rem 0.75rem 0 0.75rem;
649
- line-height: var(--tweet-header-line-height);
650
- font-size: var(--tweet-header-font-size);
651
- white-space: nowrap;
652
- overflow-wrap: break-word;
653
- overflow: hidden;
654
- }
655
-
656
- ._avatar_f00ab_11 {
657
- position: relative;
658
- height: 20px;
659
- width: 20px;
660
- }
661
- ._avatarOverflow_f00ab_16 {
662
- height: 100%;
663
- width: 100%;
664
- position: absolute;
665
- overflow: hidden;
666
- border-radius: 9999px;
667
- }
668
- ._avatarSquare_f00ab_23 {
669
- border-radius: 4px;
670
- }
671
-
672
- ._author_f00ab_27 {
673
- display: flex;
674
- margin: 0 0.5rem;
675
- align-items: center;
676
- }
677
-
678
- ._authorText_f00ab_33 {
679
- font-weight: 700;
680
- text-overflow: ellipsis;
681
- overflow: hidden;
682
- white-space: nowrap;
683
- }
684
-
685
- ._username_f00ab_40 {
686
- color: var(--tweet-font-color-secondary);
687
- text-decoration: none;
688
- text-overflow: ellipsis;
689
- margin-left: 0.125rem;
690
- }
691
- ._root_175ot_1 {
692
- font-size: var(--tweet-quoted-body-font-size);
693
- font-weight: var(--tweet-quoted-body-font-weight);
694
- line-height: var(--tweet-quoted-body-line-height);
695
- margin: var(--tweet-quoted-body-margin);
696
- overflow-wrap: break-word;
697
- white-space: pre-wrap;
698
- padding: 0 0.75rem;
699
- }
700
- ._root_16yxa_1 {
701
- display: flex;
702
- flex-direction: column;
703
- align-items: center;
704
- padding-bottom: 0.75rem;
705
- }
706
- ._root_16yxa_1 > h3 {
707
- font-size: 1.25rem;
708
- margin-bottom: 0.5rem;
709
- }
710
- ._skeleton_oi7hr_1 {
711
- display: block;
712
- width: 100%;
713
- border-radius: 5px;
714
- background-image: var(--tweet-skeleton-gradient);
715
- background-size: 400% 100%;
716
- animation: _loading_oi7hr_1 8s ease-in-out infinite;
717
- }
718
-
719
- @media (prefers-reduced-motion: reduce) {
720
- ._skeleton_oi7hr_1 {
721
- animation: none;
722
- background-position: 200% 0;
723
- }
724
- }
725
-
726
- @keyframes _loading_oi7hr_1 {
727
- 0% {
728
- background-position: 200% 0;
729
- }
730
- 100% {
731
- background-position: -200% 0;
732
- }
733
- }
734
- ._root_17qqv_1 {
735
- pointer-events: none;
736
- padding-bottom: 0.25rem;
737
- }
738
- /**
739
- * NotebookEditor Styles (Novel)
740
- *
741
- * @ds/plugin-notebook
742
- *
743
- * CSS variables and styles for the Novel editor integration.
744
- */
745
-
746
- /* Novel CSS Variables */
747
- :root {
748
- /* Text colors */
749
- --novel-black: hsl(0, 0%, 0%);
750
- --novel-white: hsl(0, 0%, 100%);
751
-
752
- /* Highlight colors for color selector */
753
- --novel-highlight-default: #ffffff;
754
- --novel-highlight-purple: #f6f3f8;
755
- --novel-highlight-red: #fdebeb;
756
- --novel-highlight-yellow: #fbf4a2;
757
- --novel-highlight-blue: #c1ecf9;
758
- --novel-highlight-green: #acf79f;
759
- --novel-highlight-orange: #faebdd;
760
- --novel-highlight-pink: #faf1f5;
761
- --novel-highlight-gray: #f1f1ef;
762
-
763
- /* Stone colors for loading spinner and drag handle */
764
- --novel-stone-100: #f5f5f4;
765
- --novel-stone-200: #e5e7eb;
766
- --novel-stone-800: #1f2937;
767
- }
768
-
769
- /* Dark mode highlight colors */
770
- .dark {
771
- --novel-black: hsl(0, 0%, 100%);
772
- --novel-white: hsl(0, 0%, 0%);
773
-
774
- --novel-highlight-default: transparent;
775
- --novel-highlight-purple: #3f2c4d;
776
- --novel-highlight-red: #4d2c2c;
777
- --novel-highlight-yellow: #4d4a2c;
778
- --novel-highlight-blue: #2c3d4d;
779
- --novel-highlight-green: #2c4d3a;
780
- --novel-highlight-orange: #4d3d2c;
781
- --novel-highlight-pink: #4d2c3d;
782
- --novel-highlight-gray: #3d3d3d;
783
-
784
- --novel-stone-100: #3f3f46;
785
- --novel-stone-200: #374151;
786
- --novel-stone-800: #e5e7eb;
787
- }
788
-
789
- /* Base editor container */
790
- .notebook-editor {
791
- position: relative;
792
- flex: 1;
793
- min-height: 0;
794
- width: 100%;
795
- min-width: 0;
796
- background: var(--ds-background, hsl(0 0% 100%));
797
- --notebook-font-scale: 0.8;
798
- }
799
-
800
- .notebook-editor-container {
801
- flex: 1;
802
- min-height: 0;
803
- width: 100%;
804
- min-width: 0;
805
- overflow: hidden;
806
- display: flex;
807
- flex-direction: column;
808
- }
809
-
810
- /* ProseMirror base - adjusted padding for rounded container */
811
- .notebook-editor-container .ProseMirror {
812
- padding: 20pt;
813
- font-size: calc(1rem * var(--notebook-font-scale));
814
- min-height: 100%;
815
- }
816
-
817
- .notebook-editor .text-xs {
818
- font-size: calc(0.75rem * var(--notebook-font-scale));
819
- line-height: calc(1rem * var(--notebook-font-scale));
820
- }
821
-
822
- .notebook-editor .text-sm {
823
- font-size: calc(0.875rem * var(--notebook-font-scale));
824
- line-height: calc(1.25rem * var(--notebook-font-scale));
825
- }
826
-
827
- .notebook-editor .text-base {
828
- font-size: calc(1rem * var(--notebook-font-scale));
829
- line-height: calc(1.5rem * var(--notebook-font-scale));
830
- }
831
-
832
- .notebook-editor .text-lg {
833
- font-size: calc(1.125rem * var(--notebook-font-scale));
834
- line-height: calc(1.75rem * var(--notebook-font-scale));
835
- }
836
-
837
- .notebook-editor .text-xl {
838
- font-size: calc(1.25rem * var(--notebook-font-scale));
839
- line-height: calc(1.75rem * var(--notebook-font-scale));
840
- }
841
-
842
- .notebook-editor .text-2xl {
843
- font-size: calc(1.5rem * var(--notebook-font-scale));
844
- line-height: calc(2rem * var(--notebook-font-scale));
845
- }
846
-
847
- .notebook-editor .text-3xl {
848
- font-size: calc(1.875rem * var(--notebook-font-scale));
849
- line-height: calc(2.25rem * var(--notebook-font-scale));
850
- }
851
-
852
- /* Ensure prose content respects the rounded container */
853
- .notebook-editor-container .notebook-doc-editor {
854
- border-radius: inherit;
855
- }
856
-
857
- /* Placeholder styles */
858
- .notebook-editor-container .ProseMirror :is(p, h1, h2, h3, h4, h5, h6).is-editor-empty:first-child::before,
859
- .notebook-editor-container .ProseMirror :is(p, h1, h2, h3, h4, h5, h6).is-empty::before {
860
- content: attr(data-placeholder);
861
- float: left;
862
- color: hsl(var(--muted-foreground));
863
- pointer-events: none;
864
- height: 0;
865
- }
866
-
867
- /* Heading placeholder specific styles */
868
- .notebook-editor-container .ProseMirror h1.is-empty::before,
869
- .notebook-editor-container .ProseMirror h2.is-empty::before,
870
- .notebook-editor-container .ProseMirror h3.is-empty::before {
871
- color: hsl(var(--muted-foreground) / 0.6);
872
- }
873
-
874
- /* Image styles */
875
- .notebook-editor-container .ProseMirror img {
876
- transition: filter 0.1s ease-in-out;
877
- }
878
-
879
- .notebook-editor-container .ProseMirror img:hover {
880
- cursor: pointer;
881
- filter: brightness(90%);
882
- }
883
-
884
- .notebook-editor-container .ProseMirror img.ProseMirror-selectednode {
885
- outline: 3px solid #5abbf7;
886
- filter: brightness(90%);
887
- }
888
-
889
- .notebook-editor-container .ProseMirror video {
890
- display: block;
891
- width: 100%;
892
- max-width: 100%;
893
- border-radius: 0.5rem;
894
- border: 1px solid hsl(var(--border));
895
- background: hsl(var(--muted));
896
- }
897
-
898
- .notebook-editor-container .ProseMirror video.ProseMirror-selectednode {
899
- outline: 3px solid #5abbf7;
900
- }
901
-
902
- /* Image upload placeholder with spinner */
903
- .img-placeholder {
904
- position: relative;
905
- }
906
-
907
- .img-placeholder::before {
908
- content: "";
909
- box-sizing: border-box;
910
- position: absolute;
911
- top: 50%;
912
- left: 50%;
913
- width: 36px;
914
- height: 36px;
915
- border-radius: 50%;
916
- border: 3px solid var(--novel-stone-200);
917
- border-top-color: var(--novel-stone-800);
918
- animation: spinning 0.6s linear infinite;
919
- }
920
-
921
- @keyframes spinning {
922
- to {
923
- transform: rotate(360deg);
924
- }
925
- }
926
-
927
- /* Task list styles */
928
- ul[data-type="taskList"] li > label {
929
- margin-right: 0.2rem;
930
- -webkit-user-select: none;
931
- -moz-user-select: none;
932
- user-select: none;
933
- }
934
-
935
- @media screen and (max-width: 768px) {
936
- ul[data-type="taskList"] li > label {
937
- margin-right: 0.5rem;
938
- }
939
- }
940
-
941
- ul[data-type="taskList"] li > label input[type="checkbox"] {
942
- -webkit-appearance: none;
943
- -moz-appearance: none;
944
- appearance: none;
945
- background-color: hsl(var(--background));
946
- margin: 0;
947
- cursor: pointer;
948
- width: 1.2em;
949
- height: 1.2em;
950
- position: relative;
951
- top: 5px;
952
- border: 2px solid hsl(var(--border));
953
- margin-right: 0.3rem;
954
- display: grid;
955
- place-content: center;
956
- border-radius: 2px;
957
- }
958
-
959
- ul[data-type="taskList"] li > label input[type="checkbox"]:hover,
960
- ul[data-type="taskList"] li > label input[type="checkbox"]:active {
961
- background-color: hsl(var(--accent));
962
- }
963
-
964
- ul[data-type="taskList"] li > label input[type="checkbox"]::before {
965
- content: "";
966
- width: 0.65em;
967
- height: 0.65em;
968
- transform: scale(0);
969
- transition: 120ms transform ease-in-out;
970
- box-shadow: inset 1em 1em;
971
- transform-origin: center;
972
- clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%);
973
- }
974
-
975
- ul[data-type="taskList"] li > label input[type="checkbox"]:checked {
976
- background-color: hsl(var(--primary));
977
- border-color: hsl(var(--primary));
978
- }
979
-
980
- ul[data-type="taskList"] li > label input[type="checkbox"]:checked::before {
981
- transform: scale(1);
982
- color: hsl(var(--primary-foreground));
983
- }
984
-
985
- ul[data-type="taskList"] li[data-checked="true"] > div > p {
986
- color: var(--muted-foreground);
987
- text-decoration: line-through;
988
- text-decoration-thickness: 2px;
989
- }
990
-
991
- /* Inline code */
992
- .notebook-editor-container .ProseMirror code {
993
- background: hsl(var(--muted));
994
- border-radius: 0.25rem;
995
- padding: 0.125rem 0.375rem;
996
- font-family: var(--font-mono), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
997
- font-size: 0.875em;
998
- }
999
-
1000
- /* Blockquote */
1001
- .notebook-editor-container .ProseMirror blockquote {
1002
- border-left: 4px solid hsl(var(--primary));
1003
- padding-left: 1rem;
1004
- margin-left: 0;
1005
- font-style: italic;
1006
- }
1007
-
1008
- /* Horizontal rule */
1009
- .notebook-editor-container .ProseMirror hr {
1010
- border: none;
1011
- border-top: 1px solid hsl(var(--border));
1012
- margin: 2rem 0;
1013
- }
1014
-
1015
- /* Math/LaTeX styles */
1016
- .notebook-editor-container .ProseMirror .math-node {
1017
- display: inline-block;
1018
- padding: 0.125rem 0.25rem;
1019
- border-radius: 0.25rem;
1020
- cursor: pointer;
1021
- transition: background-color 0.15s ease;
1022
- }
1023
-
1024
- .notebook-editor-container .ProseMirror .math-node:hover {
1025
- background-color: hsl(var(--accent));
1026
- }
1027
-
1028
- .notebook-editor-container .ProseMirror .math-node.ProseMirror-selectednode {
1029
- background-color: hsl(var(--accent));
1030
- outline: 2px solid hsl(var(--primary));
1031
- }
1032
-
1033
- /* Lists */
1034
- .notebook-editor-container .ProseMirror ul,
1035
- .notebook-editor-container .ProseMirror ol {
1036
- padding-left: 1.5rem;
1037
- }
1038
-
1039
- .notebook-editor-container .ProseMirror ul {
1040
- list-style-type: disc;
1041
- }
1042
-
1043
- .notebook-editor-container .ProseMirror ol {
1044
- list-style-type: decimal;
1045
- }
1046
-
1047
- .notebook-editor-container .ProseMirror li {
1048
- margin: 0.25rem 0;
1049
- }
1050
-
1051
- /* Links */
1052
- .notebook-editor-container .ProseMirror a {
1053
- color: hsl(var(--primary));
1054
- text-decoration: underline;
1055
- text-underline-offset: 2px;
1056
- }
1057
-
1058
- .notebook-editor-container .ProseMirror a:hover {
1059
- color: hsl(var(--primary) / 0.8);
1060
- }
1061
-
1062
- /* Selection highlight */
1063
- .notebook-editor-container .ProseMirror ::-moz-selection {
1064
- background: hsl(var(--primary) / 0.2);
1065
- }
1066
- .notebook-editor-container .ProseMirror ::selection {
1067
- background: hsl(var(--primary) / 0.2);
1068
- }
1069
-
1070
- /* Drag handle styles (GlobalDragHandle extension) */
1071
- .drag-handle {
1072
- position: fixed;
1073
- opacity: 1;
1074
- transition: opacity ease-in 0.2s;
1075
- border-radius: 0.25rem;
1076
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10' style='fill: rgba(0, 0, 0, 0.5)'%3E%3Cpath d='M3,2 C2.44771525,2 2,1.55228475 2,1 C2,0.44771525 2.44771525,0 3,0 C3.55228475,0 4,0.44771525 4,1 C4,1.55228475 3.55228475,2 3,2 Z M3,6 C2.44771525,6 2,5.55228475 2,5 C2,4.44771525 2.44771525,4 3,4 C3.55228475,4 4,4.44771525 4,5 C4,5.55228475 3.55228475,6 3,6 Z M3,10 C2.44771525,10 2,9.55228475 2,9 C2,8.44771525 2.44771525,8 3,8 C3.55228475,8 4,8.44771525 4,9 C4,9.55228475 3.55228475,10 3,10 Z M7,2 C6.44771525,2 6,1.55228475 6,1 C6,0.44771525 6.44771525,0 7,0 C7.55228475,0 8,0.44771525 8,1 C8,1.55228475 7.55228475,2 7,2 Z M7,6 C6.44771525,6 6,5.55228475 6,5 C6,4.44771525 6.44771525,4 7,4 C7.55228475,4 8,4.44771525 8,5 C8,5.55228475 7.55228475,6 7,6 Z M7,10 C6.44771525,10 6,9.55228475 6,9 C6,8.44771525 6.44771525,8 7,8 C7.55228475,8 8,8.44771525 8,9 C8,9.55228475 7.55228475,10 7,10 Z'%3E%3C/path%3E%3C/svg%3E");
1077
- background-size: calc(0.5em + 0.375rem) calc(0.5em + 0.375rem);
1078
- background-repeat: no-repeat;
1079
- background-position: center;
1080
- width: 1.2rem;
1081
- height: 1.5rem;
1082
- z-index: 50;
1083
- cursor: grab;
1084
- }
1085
-
1086
- .drag-handle:hover {
1087
- background-color: var(--novel-stone-100);
1088
- transition: background-color 0.2s;
1089
- }
1090
-
1091
- .drag-handle:active {
1092
- background-color: var(--novel-stone-200);
1093
- transition: background-color 0.2s;
1094
- cursor: grabbing;
1095
- }
1096
-
1097
- .drag-handle.hide {
1098
- opacity: 0;
1099
- pointer-events: none;
1100
- }
1101
-
1102
- .dark .drag-handle {
1103
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10' style='fill: rgba(255, 255, 255, 0.5)'%3E%3Cpath d='M3,2 C2.44771525,2 2,1.55228475 2,1 C2,0.44771525 2.44771525,0 3,0 C3.55228475,0 4,0.44771525 4,1 C4,1.55228475 3.55228475,2 3,2 Z M3,6 C2.44771525,6 2,5.55228475 2,5 C2,4.44771525 2.44771525,4 3,4 C3.55228475,4 4,4.44771525 4,5 C4,5.55228475 3.55228475,6 3,6 Z M3,10 C2.44771525,10 2,9.55228475 2,9 C2,8.44771525 2.44771525,8 3,8 C3.55228475,8 4,8.44771525 4,9 C4,9.55228475 3.55228475,10 3,10 Z M7,2 C6.44771525,2 6,1.55228475 6,1 C6,0.44771525 6.44771525,0 7,0 C7.55228475,0 8,0.44771525 8,1 C8,1.55228475 7.55228475,2 7,2 Z M7,6 C6.44771525,6 6,5.55228475 6,5 C6,4.44771525 6.44771525,4 7,4 C7.55228475,4 8,4.44771525 8,5 C8,5.55228475 7.55228475,6 7,6 Z M7,10 C6.44771525,10 6,9.55228475 6,9 C6,8.44771525 6.44771525,8 7,8 C7.55228475,8 8,8.44771525 8,9 C8,9.55228475 7.55228475,10 7,10 Z'%3E%3C/path%3E%3C/svg%3E");
1104
- }
1105
-
1106
- @media screen and (max-width: 600px) {
1107
- .drag-handle {
1108
- display: none;
1109
- pointer-events: none;
1110
- }
1111
- }
1112
-
1113
- /* Selected node highlight */
1114
- .ProseMirror:not(.dragging) .ProseMirror-selectednode {
1115
- outline: none !important;
1116
- background-color: var(--novel-highlight-blue);
1117
- transition: background-color 0.2s;
1118
- box-shadow: none;
1119
- }
1120
-
1121
- /* Tippy menu styling - remove default thick border */
1122
- .tippy-box,
1123
- .tippy-box[data-state="visible"],
1124
- .tippy-box[data-state="hidden"] {
1125
- max-width: 400px !important;
1126
- background: transparent !important;
1127
- background-color: transparent !important;
1128
- border: none !important;
1129
- border-width: 0 !important;
1130
- box-shadow: none !important;
1131
- outline: none !important;
1132
- color: inherit !important;
1133
- }
1134
-
1135
- .tippy-box[data-theme~='novel'],
1136
- .tippy-box[data-theme~='light'],
1137
- .tippy-box[data-theme~='dark'] {
1138
- background: transparent !important;
1139
- background-color: transparent !important;
1140
- border: none !important;
1141
- border-width: 0 !important;
1142
- }
1143
-
1144
- .tippy-content {
1145
- padding: 0 !important;
1146
- background: transparent !important;
1147
- background-color: transparent !important;
1148
- color: inherit !important;
1149
- }
1150
-
1151
- /* Remove tippy arrow */
1152
- .tippy-arrow {
1153
- display: none !important;
1154
- }
1155
-
1156
- /* Ensure EditorCommand has proper styling */
1157
- .notebook-editor-container [cmdk-root] {
1158
- background: hsl(var(--background));
1159
- border: 1px solid hsl(var(--muted));
1160
- border-radius: 0.375rem;
1161
- box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
1162
- color: hsl(var(--foreground));
1163
- }
1164
-
1165
- .notebook-editor-container [cmdk-item] svg {
1166
- color: currentColor;
1167
- }
1168
-
1169
- /* EditorCommand specific styling */
1170
- .notebook-editor-container [data-novel-command] {
1171
- border: 1px solid hsl(var(--muted)) !important;
1172
- }
1173
-
1174
- /* Prose enhancements */
1175
- .notebook-editor-container .prose {
1176
- max-width: none;
1177
- }
1178
-
1179
- /* Focus outline removal for editor */
1180
- .notebook-editor-container .ProseMirror:focus {
1181
- outline: none;
1182
- }
1183
-
1184
- /* Collaboration cursor styles (for future use) */
1185
- .notebook-editor-container .collaboration-cursor__caret {
1186
- border-left: 1px solid;
1187
- border-right: 1px solid;
1188
- margin-left: -1px;
1189
- margin-right: -1px;
1190
- pointer-events: none;
1191
- position: relative;
1192
- word-break: normal;
1193
- }
1194
-
1195
- .notebook-editor-container .collaboration-cursor__label {
1196
- border-radius: 3px 3px 3px 0;
1197
- color: white;
1198
- font-size: 12px;
1199
- font-style: normal;
1200
- font-weight: 600;
1201
- left: -1px;
1202
- line-height: normal;
1203
- padding: 0.1rem 0.3rem;
1204
- position: absolute;
1205
- top: -1.4em;
1206
- -webkit-user-select: none;
1207
- -moz-user-select: none;
1208
- user-select: none;
1209
- white-space: nowrap;
1210
- }
1211
-
1212
- /* Syntax highlighting for code blocks (lowlight/highlight.js) */
1213
- .notebook-editor-container .ProseMirror pre {
1214
- background: #0d0d0d;
1215
- border-radius: 0.5rem;
1216
- color: #fff;
1217
- font-family: var(--font-mono), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1218
- padding: 0.75rem 1rem;
1219
- }
1220
-
1221
- .notebook-editor-container .ProseMirror pre code {
1222
- background: none;
1223
- color: inherit;
1224
- font-size: 0.8rem;
1225
- padding: 0;
1226
- }
1227
-
1228
- .hljs-comment,
1229
- .hljs-quote {
1230
- color: #616161;
1231
- }
1232
-
1233
- .hljs-variable,
1234
- .hljs-template-variable,
1235
- .hljs-attribute,
1236
- .hljs-tag,
1237
- .hljs-name,
1238
- .hljs-regexp,
1239
- .hljs-link,
1240
- .hljs-selector-id,
1241
- .hljs-selector-class {
1242
- color: #f98181;
1243
- }
1244
-
1245
- .hljs-number,
1246
- .hljs-meta,
1247
- .hljs-built_in,
1248
- .hljs-builtin-name,
1249
- .hljs-literal,
1250
- .hljs-type,
1251
- .hljs-params {
1252
- color: #fbbc88;
1253
- }
1254
-
1255
- .hljs-string,
1256
- .hljs-symbol,
1257
- .hljs-bullet {
1258
- color: #b9f18d;
1259
- }
1260
-
1261
- .hljs-title,
1262
- .hljs-section {
1263
- color: #faf594;
1264
- }
1265
-
1266
- .hljs-keyword,
1267
- .hljs-selector-tag {
1268
- color: #70cff8;
1269
- }
1270
-
1271
- .hljs-emphasis {
1272
- font-style: italic;
1273
- }
1274
-
1275
- .hljs-strong {
1276
- font-weight: 700;
1277
- }
1278
-
1279
- /* CSS for bold coloring and highlighting issue */
1280
- span[style] > strong {
1281
- color: inherit;
1282
- }
1283
-
1284
- mark[style] > strong {
1285
- color: inherit;
1286
- }
1287
-
1288
- /* Youtube embeds */
1289
- iframe {
1290
- border: 8px solid #ffd00027;
1291
- border-radius: 4px;
1292
- min-width: 200px;
1293
- min-height: 200px;
1294
- display: block;
1295
- outline: 0px solid transparent;
1296
- }
1297
-
1298
- div[data-youtube-video] > iframe {
1299
- cursor: move;
1300
- aspect-ratio: 16 / 9;
1301
- width: 100%;
1302
- }
1303
-
1304
- .ProseMirror-selectednode iframe {
1305
- transition: outline 0.15s;
1306
- outline: 6px solid #fbbf24;
1307
- }
1308
-
1309
- @media only screen and (max-width: 480px) {
1310
- div[data-youtube-video] > iframe {
1311
- max-height: 50px;
1312
- }
1313
- }
1314
-
1315
- @media only screen and (max-width: 720px) {
1316
- div[data-youtube-video] > iframe {
1317
- max-height: 100px;
1318
- }
1319
- }
1320
-
1321
- /* Table styles */
1322
- .notebook-editor-container .ProseMirror .tableWrapper {
1323
- overflow-x: auto;
1324
- margin: 1rem 0;
1325
- }
1326
-
1327
- .notebook-editor-container .ProseMirror table {
1328
- width: 100%;
1329
- border-collapse: collapse;
1330
- border: 1px solid hsl(var(--border));
1331
- border-radius: 0.375rem;
1332
- background: hsl(var(--background));
1333
- table-layout: fixed;
1334
- }
1335
-
1336
- .notebook-editor-container .ProseMirror th,
1337
- .notebook-editor-container .ProseMirror td {
1338
- padding: 0.5rem 0.75rem;
1339
- border-right: 1px solid hsl(var(--border));
1340
- border-bottom: 1px solid hsl(var(--border));
1341
- vertical-align: top;
1342
- min-width: 120px;
1343
- }
1344
-
1345
- .notebook-editor-container .ProseMirror th:last-child,
1346
- .notebook-editor-container .ProseMirror td:last-child {
1347
- border-right: none;
1348
- }
1349
-
1350
- .notebook-editor-container .ProseMirror tr:last-child td {
1351
- border-bottom: none;
1352
- }
1353
-
1354
- .notebook-editor-container .ProseMirror th {
1355
- font-weight: 600;
1356
- text-align: left;
1357
- background-color: hsl(var(--muted));
1358
- }
1359
-
1360
- .notebook-editor-container .ProseMirror tbody tr:nth-child(2n) td {
1361
- background-color: hsl(var(--muted) / 0.4);
1362
- }
1363
-
1364
- .notebook-editor-container .ProseMirror td > p,
1365
- .notebook-editor-container .ProseMirror th > p {
1366
- margin: 0;
1367
- }
1368
-
1369
- .notebook-editor-container .ProseMirror td.selectedCell,
1370
- .notebook-editor-container .ProseMirror th.selectedCell {
1371
- background-color: hsl(var(--primary) / 0.1);
1372
- }
1373
-
1374
- .notebook-editor-container .ProseMirror td.selectedCell::after,
1375
- .notebook-editor-container .ProseMirror th.selectedCell::after {
1376
- content: "";
1377
- position: absolute;
1378
- inset: 0;
1379
- border: 2px solid hsl(var(--primary));
1380
- pointer-events: none;
1381
- }
1382
-
1383
- .notebook-editor-container .ProseMirror .column-resize-handle {
1384
- position: absolute;
1385
- right: -2px;
1386
- top: 0;
1387
- bottom: 0;
1388
- width: 4px;
1389
- background-color: hsl(var(--primary));
1390
- pointer-events: none;
1391
- z-index: 10;
1392
- }
1393
-
1394
- .notebook-editor-container .ProseMirror.resize-cursor {
1395
- cursor: col-resize;
1396
- }
1397
-
1398
- .notebook-editor-container .ProseMirror table.ProseMirror-selectednode {
1399
- outline: 2px solid hsl(var(--primary));
1400
- outline-offset: 2px;
1401
- }
1402
-
1403
- .dark .notebook-editor-container .ProseMirror th {
1404
- background-color: hsl(var(--muted) / 0.8);
1405
- }