@steipete/summarize 0.8.2 → 0.10.0

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 (284) hide show
  1. package/CHANGELOG.md +114 -1
  2. package/LICENSE +1 -1
  3. package/README.md +309 -182
  4. package/dist/cli.js +1 -1
  5. package/dist/esm/cache.js +72 -4
  6. package/dist/esm/cache.js.map +1 -1
  7. package/dist/esm/config.js +197 -1
  8. package/dist/esm/config.js.map +1 -1
  9. package/dist/esm/content/asset.js +75 -2
  10. package/dist/esm/content/asset.js.map +1 -1
  11. package/dist/esm/daemon/agent.js +547 -0
  12. package/dist/esm/daemon/agent.js.map +1 -0
  13. package/dist/esm/daemon/chat.js +97 -0
  14. package/dist/esm/daemon/chat.js.map +1 -0
  15. package/dist/esm/daemon/cli.js +105 -10
  16. package/dist/esm/daemon/cli.js.map +1 -1
  17. package/dist/esm/daemon/env-snapshot.js +3 -0
  18. package/dist/esm/daemon/env-snapshot.js.map +1 -1
  19. package/dist/esm/daemon/flow-context.js +53 -28
  20. package/dist/esm/daemon/flow-context.js.map +1 -1
  21. package/dist/esm/daemon/launchd.js +27 -0
  22. package/dist/esm/daemon/launchd.js.map +1 -1
  23. package/dist/esm/daemon/process-registry.js +206 -0
  24. package/dist/esm/daemon/process-registry.js.map +1 -0
  25. package/dist/esm/daemon/schtasks.js +64 -0
  26. package/dist/esm/daemon/schtasks.js.map +1 -1
  27. package/dist/esm/daemon/server.js +1034 -52
  28. package/dist/esm/daemon/server.js.map +1 -1
  29. package/dist/esm/daemon/summarize.js +66 -18
  30. package/dist/esm/daemon/summarize.js.map +1 -1
  31. package/dist/esm/daemon/systemd.js +61 -0
  32. package/dist/esm/daemon/systemd.js.map +1 -1
  33. package/dist/esm/flags.js +24 -0
  34. package/dist/esm/flags.js.map +1 -1
  35. package/dist/esm/llm/attachments.js +2 -0
  36. package/dist/esm/llm/attachments.js.map +1 -0
  37. package/dist/esm/llm/errors.js +6 -0
  38. package/dist/esm/llm/errors.js.map +1 -0
  39. package/dist/esm/llm/generate-text.js +206 -356
  40. package/dist/esm/llm/generate-text.js.map +1 -1
  41. package/dist/esm/llm/html-to-markdown.js +1 -2
  42. package/dist/esm/llm/html-to-markdown.js.map +1 -1
  43. package/dist/esm/llm/prompt.js.map +1 -1
  44. package/dist/esm/llm/providers/anthropic.js +126 -0
  45. package/dist/esm/llm/providers/anthropic.js.map +1 -0
  46. package/dist/esm/llm/providers/google.js +78 -0
  47. package/dist/esm/llm/providers/google.js.map +1 -0
  48. package/dist/esm/llm/providers/models.js +111 -0
  49. package/dist/esm/llm/providers/models.js.map +1 -0
  50. package/dist/esm/llm/providers/openai.js +150 -0
  51. package/dist/esm/llm/providers/openai.js.map +1 -0
  52. package/dist/esm/llm/providers/shared.js +48 -0
  53. package/dist/esm/llm/providers/shared.js.map +1 -0
  54. package/dist/esm/llm/providers/types.js +2 -0
  55. package/dist/esm/llm/providers/types.js.map +1 -0
  56. package/dist/esm/llm/transcript-to-markdown.js +1 -2
  57. package/dist/esm/llm/transcript-to-markdown.js.map +1 -1
  58. package/dist/esm/llm/types.js +2 -0
  59. package/dist/esm/llm/types.js.map +1 -0
  60. package/dist/esm/llm/usage.js +69 -0
  61. package/dist/esm/llm/usage.js.map +1 -0
  62. package/dist/esm/logging/daemon.js +124 -0
  63. package/dist/esm/logging/daemon.js.map +1 -0
  64. package/dist/esm/logging/ring-file.js +66 -0
  65. package/dist/esm/logging/ring-file.js.map +1 -0
  66. package/dist/esm/media-cache.js +251 -0
  67. package/dist/esm/media-cache.js.map +1 -0
  68. package/dist/esm/model-auto.js +103 -5
  69. package/dist/esm/model-auto.js.map +1 -1
  70. package/dist/esm/processes.js +2 -0
  71. package/dist/esm/processes.js.map +1 -0
  72. package/dist/esm/refresh-free.js +3 -3
  73. package/dist/esm/refresh-free.js.map +1 -1
  74. package/dist/esm/run/attachments.js +8 -4
  75. package/dist/esm/run/attachments.js.map +1 -1
  76. package/dist/esm/run/bird.js +118 -5
  77. package/dist/esm/run/bird.js.map +1 -1
  78. package/dist/esm/run/cache-state.js +3 -2
  79. package/dist/esm/run/cache-state.js.map +1 -1
  80. package/dist/esm/run/cli-preflight.js +19 -1
  81. package/dist/esm/run/cli-preflight.js.map +1 -1
  82. package/dist/esm/run/constants.js +0 -7
  83. package/dist/esm/run/constants.js.map +1 -1
  84. package/dist/esm/run/finish-line.js +58 -11
  85. package/dist/esm/run/finish-line.js.map +1 -1
  86. package/dist/esm/run/flows/asset/extract.js +70 -0
  87. package/dist/esm/run/flows/asset/extract.js.map +1 -0
  88. package/dist/esm/run/flows/asset/input.js +209 -25
  89. package/dist/esm/run/flows/asset/input.js.map +1 -1
  90. package/dist/esm/run/flows/asset/media-policy.js +3 -0
  91. package/dist/esm/run/flows/asset/media-policy.js.map +1 -0
  92. package/dist/esm/run/flows/asset/media.js +224 -0
  93. package/dist/esm/run/flows/asset/media.js.map +1 -0
  94. package/dist/esm/run/flows/asset/output.js +98 -0
  95. package/dist/esm/run/flows/asset/output.js.map +1 -0
  96. package/dist/esm/run/flows/asset/preprocess.js +92 -16
  97. package/dist/esm/run/flows/asset/preprocess.js.map +1 -1
  98. package/dist/esm/run/flows/asset/summary.js +165 -11
  99. package/dist/esm/run/flows/asset/summary.js.map +1 -1
  100. package/dist/esm/run/flows/url/extract.js +6 -6
  101. package/dist/esm/run/flows/url/extract.js.map +1 -1
  102. package/dist/esm/run/flows/url/flow.js +338 -36
  103. package/dist/esm/run/flows/url/flow.js.map +1 -1
  104. package/dist/esm/run/flows/url/markdown.js +6 -1
  105. package/dist/esm/run/flows/url/markdown.js.map +1 -1
  106. package/dist/esm/run/flows/url/slides-output.js +485 -0
  107. package/dist/esm/run/flows/url/slides-output.js.map +1 -0
  108. package/dist/esm/run/flows/url/slides-text.js +628 -0
  109. package/dist/esm/run/flows/url/slides-text.js.map +1 -0
  110. package/dist/esm/run/flows/url/summary.js +358 -83
  111. package/dist/esm/run/flows/url/summary.js.map +1 -1
  112. package/dist/esm/run/help.js +94 -5
  113. package/dist/esm/run/help.js.map +1 -1
  114. package/dist/esm/run/logging.js +12 -4
  115. package/dist/esm/run/logging.js.map +1 -1
  116. package/dist/esm/run/media-cache-state.js +33 -0
  117. package/dist/esm/run/media-cache-state.js.map +1 -0
  118. package/dist/esm/run/progress.js +19 -1
  119. package/dist/esm/run/progress.js.map +1 -1
  120. package/dist/esm/run/run-context.js +19 -0
  121. package/dist/esm/run/run-context.js.map +1 -0
  122. package/dist/esm/run/run-output.js +1 -1
  123. package/dist/esm/run/run-output.js.map +1 -1
  124. package/dist/esm/run/run-settings.js +182 -0
  125. package/dist/esm/run/run-settings.js.map +1 -0
  126. package/dist/esm/run/runner.js +225 -32
  127. package/dist/esm/run/runner.js.map +1 -1
  128. package/dist/esm/run/slides-cli.js +225 -0
  129. package/dist/esm/run/slides-cli.js.map +1 -0
  130. package/dist/esm/run/slides-render.js +163 -0
  131. package/dist/esm/run/slides-render.js.map +1 -0
  132. package/dist/esm/run/stream-output.js +63 -0
  133. package/dist/esm/run/stream-output.js.map +1 -0
  134. package/dist/esm/run/streaming.js +16 -43
  135. package/dist/esm/run/streaming.js.map +1 -1
  136. package/dist/esm/run/summary-engine.js +59 -41
  137. package/dist/esm/run/summary-engine.js.map +1 -1
  138. package/dist/esm/run/transcriber-cli.js +148 -0
  139. package/dist/esm/run/transcriber-cli.js.map +1 -0
  140. package/dist/esm/shared/sse-events.js +26 -0
  141. package/dist/esm/shared/sse-events.js.map +1 -0
  142. package/dist/esm/shared/streaming-merge.js +44 -0
  143. package/dist/esm/shared/streaming-merge.js.map +1 -0
  144. package/dist/esm/slides/extract.js +1942 -0
  145. package/dist/esm/slides/extract.js.map +1 -0
  146. package/dist/esm/slides/index.js +4 -0
  147. package/dist/esm/slides/index.js.map +1 -0
  148. package/dist/esm/slides/settings.js +73 -0
  149. package/dist/esm/slides/settings.js.map +1 -0
  150. package/dist/esm/slides/store.js +111 -0
  151. package/dist/esm/slides/store.js.map +1 -0
  152. package/dist/esm/slides/types.js +2 -0
  153. package/dist/esm/slides/types.js.map +1 -0
  154. package/dist/esm/tty/osc-progress.js +21 -1
  155. package/dist/esm/tty/osc-progress.js.map +1 -1
  156. package/dist/esm/tty/progress/fetch-html.js +8 -4
  157. package/dist/esm/tty/progress/fetch-html.js.map +1 -1
  158. package/dist/esm/tty/progress/transcript.js +82 -31
  159. package/dist/esm/tty/progress/transcript.js.map +1 -1
  160. package/dist/esm/tty/spinner.js +2 -2
  161. package/dist/esm/tty/spinner.js.map +1 -1
  162. package/dist/esm/tty/theme.js +189 -0
  163. package/dist/esm/tty/theme.js.map +1 -0
  164. package/dist/esm/tty/website-progress.js +17 -13
  165. package/dist/esm/tty/website-progress.js.map +1 -1
  166. package/dist/esm/version.js +1 -1
  167. package/dist/esm/version.js.map +1 -1
  168. package/dist/types/cache.d.ts +14 -2
  169. package/dist/types/config.d.ts +34 -0
  170. package/dist/types/daemon/agent.d.ts +25 -0
  171. package/dist/types/daemon/chat.d.ts +27 -0
  172. package/dist/types/daemon/env-snapshot.d.ts +1 -1
  173. package/dist/types/daemon/flow-context.d.ts +24 -3
  174. package/dist/types/daemon/launchd.d.ts +4 -0
  175. package/dist/types/daemon/process-registry.d.ts +73 -0
  176. package/dist/types/daemon/schtasks.d.ts +4 -0
  177. package/dist/types/daemon/server.d.ts +7 -1
  178. package/dist/types/daemon/summarize.d.ts +47 -5
  179. package/dist/types/daemon/systemd.d.ts +4 -0
  180. package/dist/types/flags.d.ts +1 -0
  181. package/dist/types/llm/attachments.d.ts +6 -0
  182. package/dist/types/llm/errors.d.ts +1 -0
  183. package/dist/types/llm/generate-text.d.ts +29 -13
  184. package/dist/types/llm/prompt.d.ts +7 -2
  185. package/dist/types/llm/providers/anthropic.d.ts +30 -0
  186. package/dist/types/llm/providers/google.d.ts +29 -0
  187. package/dist/types/llm/providers/models.d.ts +27 -0
  188. package/dist/types/llm/providers/openai.d.ts +38 -0
  189. package/dist/types/llm/providers/shared.d.ts +14 -0
  190. package/dist/types/llm/providers/types.d.ts +6 -0
  191. package/dist/types/llm/types.d.ts +5 -0
  192. package/dist/types/llm/usage.d.ts +5 -0
  193. package/dist/types/logging/daemon.d.ts +26 -0
  194. package/dist/types/logging/ring-file.d.ts +10 -0
  195. package/dist/types/media-cache.d.ts +22 -0
  196. package/dist/types/model-auto.d.ts +1 -0
  197. package/dist/types/processes.d.ts +1 -0
  198. package/dist/types/run/attachments.d.ts +9 -6
  199. package/dist/types/run/bird.d.ts +7 -0
  200. package/dist/types/run/constants.d.ts +0 -2
  201. package/dist/types/run/finish-line.d.ts +59 -1
  202. package/dist/types/run/flows/asset/extract.d.ts +18 -0
  203. package/dist/types/run/flows/asset/input.d.ts +12 -2
  204. package/dist/types/run/flows/asset/media-policy.d.ts +2 -0
  205. package/dist/types/run/flows/asset/media.d.ts +21 -0
  206. package/dist/types/run/flows/asset/output.d.ts +42 -0
  207. package/dist/types/run/flows/asset/preprocess.d.ts +22 -2
  208. package/dist/types/run/flows/asset/summary.d.ts +6 -0
  209. package/dist/types/run/flows/url/extract.d.ts +2 -1
  210. package/dist/types/run/flows/url/slides-output.d.ts +66 -0
  211. package/dist/types/run/flows/url/slides-text.d.ts +87 -0
  212. package/dist/types/run/flows/url/summary.d.ts +11 -3
  213. package/dist/types/run/flows/url/types.d.ts +29 -2
  214. package/dist/types/run/help.d.ts +3 -0
  215. package/dist/types/run/logging.d.ts +3 -2
  216. package/dist/types/run/media-cache-state.d.ts +7 -0
  217. package/dist/types/run/progress.d.ts +2 -1
  218. package/dist/types/run/run-context.d.ts +44 -0
  219. package/dist/types/run/run-settings.d.ts +62 -0
  220. package/dist/types/run/slides-cli.d.ts +9 -0
  221. package/dist/types/run/slides-render.d.ts +30 -0
  222. package/dist/types/run/stream-output.d.ts +12 -0
  223. package/dist/types/run/streaming.d.ts +10 -4
  224. package/dist/types/run/summary-engine.d.ts +15 -3
  225. package/dist/types/run/summary-llm.d.ts +2 -2
  226. package/dist/types/run/transcriber-cli.d.ts +8 -0
  227. package/dist/types/shared/sse-events.d.ts +64 -0
  228. package/dist/types/shared/streaming-merge.d.ts +4 -0
  229. package/dist/types/slides/extract.d.ts +42 -0
  230. package/dist/types/slides/index.d.ts +5 -0
  231. package/dist/types/slides/settings.d.ts +20 -0
  232. package/dist/types/slides/store.d.ts +15 -0
  233. package/dist/types/slides/types.d.ts +40 -0
  234. package/dist/types/tty/osc-progress.d.ts +2 -2
  235. package/dist/types/tty/progress/fetch-html.d.ts +3 -1
  236. package/dist/types/tty/progress/transcript.d.ts +3 -1
  237. package/dist/types/tty/spinner.d.ts +3 -1
  238. package/dist/types/tty/theme.d.ts +44 -0
  239. package/dist/types/tty/website-progress.d.ts +3 -1
  240. package/dist/types/version.d.ts +1 -1
  241. package/docs/README.md +13 -8
  242. package/docs/_config.yml +26 -0
  243. package/docs/_layouts/default.html +60 -0
  244. package/docs/agent.md +333 -0
  245. package/docs/assets/site.css +748 -0
  246. package/docs/assets/site.js +72 -0
  247. package/docs/assets/summarize-cli.png +0 -0
  248. package/docs/assets/summarize-extension.png +0 -0
  249. package/docs/assets/youtube-slides.png +0 -0
  250. package/docs/cache.md +29 -3
  251. package/docs/chrome-extension.md +85 -7
  252. package/docs/config.md +74 -2
  253. package/docs/extract-only.md +10 -2
  254. package/docs/index.html +205 -0
  255. package/docs/index.md +25 -0
  256. package/docs/language.md +1 -1
  257. package/docs/llm.md +17 -1
  258. package/docs/manual-tests.md +2 -0
  259. package/docs/media.md +37 -0
  260. package/docs/model-auto.md +2 -1
  261. package/docs/nvidia-onnx-transcription.md +55 -0
  262. package/docs/openai.md +5 -0
  263. package/docs/releasing.md +26 -0
  264. package/docs/site/assets/site.css +399 -228
  265. package/docs/site/assets/summarize-cli.png +0 -0
  266. package/docs/site/assets/summarize-extension.png +0 -0
  267. package/docs/site/docs/chrome-extension.html +89 -0
  268. package/docs/site/docs/config.html +1 -0
  269. package/docs/site/docs/extract-only.html +1 -0
  270. package/docs/site/docs/firecrawl.html +1 -0
  271. package/docs/site/docs/index.html +5 -0
  272. package/docs/site/docs/llm.html +1 -0
  273. package/docs/site/docs/openai.html +1 -0
  274. package/docs/site/docs/website.html +1 -0
  275. package/docs/site/docs/youtube.html +1 -0
  276. package/docs/site/index.html +148 -84
  277. package/docs/slides.md +74 -0
  278. package/docs/timestamps.md +103 -0
  279. package/docs/website.md +13 -0
  280. package/docs/youtube.md +16 -0
  281. package/package.json +22 -18
  282. package/dist/esm/daemon/request-settings.js +0 -91
  283. package/dist/esm/daemon/request-settings.js.map +0 -1
  284. package/dist/types/daemon/request-settings.d.ts +0 -27
@@ -1,91 +1,98 @@
1
1
  :root {
2
- --bg0: #07090d;
3
- --bg1: #0b1018;
4
- --paper: #f2efe6;
5
- --ink: #0d1117;
6
- --fg0: rgba(242, 239, 230, 0.92);
7
- --fg1: rgba(242, 239, 230, 0.74);
8
- --fg2: rgba(242, 239, 230, 0.54);
9
- --line: rgba(242, 239, 230, 0.14);
10
- --shadow: 0 24px 80px rgba(0, 0, 0, 0.52);
11
- --shadow2: 0 10px 34px rgba(0, 0, 0, 0.38);
12
-
13
- --accent: #b7ff3c;
14
- --accent2: #ff3d8e;
15
- --accent3: #54b8ff;
2
+ --bg0: #0b0f12;
3
+ --bg1: #101722;
4
+ --panel: rgba(16, 22, 30, 0.9);
5
+ --paper: #f7f2e7;
6
+ --ink: #0b0f12;
7
+ --fg0: rgba(247, 242, 231, 0.96);
8
+ --fg1: rgba(247, 242, 231, 0.72);
9
+ --fg2: rgba(247, 242, 231, 0.52);
10
+ --line: rgba(247, 242, 231, 0.12);
11
+ --shadow: 0 36px 90px rgba(0, 0, 0, 0.5);
12
+ --shadow2: 0 14px 40px rgba(0, 0, 0, 0.35);
13
+
14
+ --accent: #b8ff5a;
15
+ --accent2: #ff9b35;
16
+ --accent3: #36c9b9;
16
17
 
17
18
  --r: 18px;
18
- --r2: 26px;
19
- --max: 1080px;
19
+ --r2: 28px;
20
+ --max: 1120px;
20
21
 
22
+ --display: "Fraunces", "Iowan Old Style", "Palatino Linotype", serif;
23
+ --body: "IBM Plex Sans", "Segoe UI", sans-serif;
21
24
  --mono:
22
- "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
23
- "Courier New", monospace;
24
-
25
- --body: var(--mono);
26
- --serif: var(--mono);
25
+ "IBM Plex Mono", "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
26
+ "Liberation Mono", "Courier New", monospace;
27
27
  }
28
28
 
29
29
  @media (prefers-color-scheme: light) {
30
30
  :root {
31
- --bg0: #fbf7ec;
32
- --bg1: #f2efe6;
33
- --paper: #0d1117;
34
- --ink: #07090d;
35
- --fg0: rgba(10, 15, 22, 0.9);
36
- --fg1: rgba(10, 15, 22, 0.7);
37
- --fg2: rgba(10, 15, 22, 0.52);
38
- --line: rgba(10, 15, 22, 0.14);
39
- --shadow: 0 24px 80px rgba(0, 0, 0, 0.12);
40
- --shadow2: 0 10px 34px rgba(0, 0, 0, 0.1);
31
+ --bg0: #fbf6eb;
32
+ --bg1: #f1ecdf;
33
+ --panel: rgba(255, 255, 255, 0.86);
34
+ --paper: #0b0f12;
35
+ --ink: #0b0f12;
36
+ --fg0: rgba(9, 12, 16, 0.92);
37
+ --fg1: rgba(9, 12, 16, 0.7);
38
+ --fg2: rgba(9, 12, 16, 0.5);
39
+ --line: rgba(9, 12, 16, 0.14);
40
+ --shadow: 0 26px 70px rgba(9, 12, 16, 0.12);
41
+ --shadow2: 0 10px 26px rgba(9, 12, 16, 0.1);
41
42
  }
42
43
  }
43
44
 
44
45
  * {
45
46
  box-sizing: border-box;
46
47
  }
48
+
47
49
  html,
48
50
  body {
49
51
  height: 100%;
50
52
  }
53
+
51
54
  body {
52
55
  margin: 0;
53
56
  color: var(--fg0);
54
57
  background:
55
- radial-gradient(1200px 700px at 10% -10%, rgba(183, 255, 60, 0.22), transparent 60%),
56
- radial-gradient(1000px 680px at 94% 12%, rgba(255, 61, 142, 0.16), transparent 65%),
57
- radial-gradient(880px 560px at 75% 95%, rgba(84, 184, 255, 0.16), transparent 55%),
58
+ radial-gradient(800px 520px at 10% -20%, rgba(184, 255, 90, 0.2), transparent 60%),
59
+ radial-gradient(740px 520px at 100% 0%, rgba(255, 155, 53, 0.18), transparent 60%),
60
+ radial-gradient(900px 600px at 80% 100%, rgba(54, 201, 185, 0.18), transparent 55%),
58
61
  linear-gradient(180deg, var(--bg0), var(--bg1));
59
62
  font-family: var(--body);
60
63
  letter-spacing: 0.01em;
61
- line-height: 1.45;
64
+ line-height: 1.6;
65
+ }
66
+
67
+ body::before {
68
+ content: "";
69
+ position: fixed;
70
+ inset: 0;
71
+ pointer-events: none;
72
+ opacity: 0.18;
73
+ background-image:
74
+ linear-gradient(rgba(255, 255, 255, 0.04) 1px, transparent 1px),
75
+ linear-gradient(90deg, rgba(255, 255, 255, 0.04) 1px, transparent 1px);
76
+ background-size: 40px 40px;
77
+ mix-blend-mode: soft-light;
62
78
  }
63
79
 
64
80
  a {
65
81
  color: inherit;
66
82
  text-decoration: none;
67
83
  }
84
+
68
85
  a:hover {
69
86
  text-decoration: underline;
70
87
  text-decoration-thickness: 2px;
71
- text-underline-offset: 3px;
88
+ text-underline-offset: 4px;
72
89
  }
73
90
 
74
91
  .shell {
75
92
  position: relative;
76
93
  margin: 0 auto;
77
94
  max-width: var(--max);
78
- padding: 26px 18px 70px;
79
- }
80
-
81
- .shell::before {
82
- content: "";
83
- position: absolute;
84
- inset: 0;
85
- pointer-events: none;
86
- opacity: 0.25;
87
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='128' height='128'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='128' height='128' filter='url(%23n)' opacity='.35'/%3E%3C/svg%3E");
88
- mix-blend-mode: overlay;
95
+ padding: 30px 18px 80px;
89
96
  }
90
97
 
91
98
  .top {
@@ -93,7 +100,7 @@ a:hover {
93
100
  align-items: center;
94
101
  justify-content: space-between;
95
102
  gap: 12px;
96
- padding: 10px 6px 14px;
103
+ padding: 10px 6px 16px;
97
104
  }
98
105
 
99
106
  .brand {
@@ -108,30 +115,26 @@ a:hover {
108
115
  }
109
116
 
110
117
  .brand__mark {
111
- width: 32px;
112
- height: 32px;
118
+ width: 34px;
119
+ height: 34px;
113
120
  border-radius: 12px;
114
121
  display: grid;
115
122
  place-items: center;
116
123
  background:
117
- radial-gradient(
118
- circle at 30% 30%,
119
- rgba(183, 255, 60, 0.88),
120
- rgba(183, 255, 60, 0.12) 55%,
121
- transparent 70%
122
- ), radial-gradient(circle at 80% 10%, rgba(255, 61, 142, 0.66), transparent 55%),
123
- radial-gradient(circle at 20% 85%, rgba(84, 184, 255, 0.56), transparent 55%),
124
- rgba(255, 255, 255, 0.06);
124
+ radial-gradient(circle at 30% 30%, rgba(184, 255, 90, 0.92), transparent 60%),
125
+ radial-gradient(circle at 70% 20%, rgba(255, 155, 53, 0.7), transparent 60%),
126
+ radial-gradient(circle at 20% 80%, rgba(54, 201, 185, 0.65), transparent 60%),
127
+ rgba(255, 255, 255, 0.08);
125
128
  border: 1px solid var(--line);
126
129
  box-shadow: var(--shadow2);
127
- font-family: var(--serif);
130
+ font-family: var(--display);
128
131
  font-weight: 700;
129
132
  letter-spacing: -0.02em;
130
133
  }
131
134
 
132
135
  .brand__word {
133
- font-family: var(--serif);
134
- font-weight: 600;
136
+ font-family: var(--display);
137
+ font-weight: 700;
135
138
  letter-spacing: 0.02em;
136
139
  font-size: 18px;
137
140
  }
@@ -139,11 +142,11 @@ a:hover {
139
142
  .nav {
140
143
  display: flex;
141
144
  align-items: center;
142
- gap: 12px;
145
+ gap: 10px;
143
146
  }
144
147
 
145
148
  .nav a {
146
- padding: 8px 10px;
149
+ padding: 8px 12px;
147
150
  border-radius: 999px;
148
151
  border: 1px solid transparent;
149
152
  color: var(--fg1);
@@ -157,82 +160,68 @@ a:hover {
157
160
  text-decoration: none;
158
161
  color: var(--fg0);
159
162
  border-color: var(--line);
160
- background: rgba(255, 255, 255, 0.04);
163
+ background: rgba(255, 255, 255, 0.05);
161
164
  }
162
165
 
163
166
  .nav a[aria-current="page"] {
164
167
  color: var(--fg0);
165
- border-color: rgba(183, 255, 60, 0.35);
166
- background: rgba(183, 255, 60, 0.08);
168
+ border-color: rgba(184, 255, 90, 0.5);
169
+ background: rgba(184, 255, 90, 0.1);
167
170
  }
168
171
 
169
172
  .hero {
170
- padding: 18px 6px 6px;
171
- }
172
-
173
- .hero__grid {
174
- display: grid;
175
- grid-template-columns: 1.15fr 0.85fr;
176
- gap: 18px;
177
- }
178
-
179
- @media (max-width: 900px) {
180
- .hero__grid {
181
- grid-template-columns: 1fr;
182
- }
173
+ padding: 10px 6px 0;
183
174
  }
184
175
 
185
- .hero__card {
176
+ .hero__frame {
186
177
  position: relative;
187
178
  border-radius: var(--r2);
188
179
  border: 1px solid var(--line);
189
- background:
190
- radial-gradient(1100px 700px at 0% 0%, rgba(183, 255, 60, 0.1), transparent 50%),
191
- radial-gradient(800px 500px at 100% 20%, rgba(255, 61, 142, 0.08), transparent 60%),
192
- rgba(255, 255, 255, 0.04);
180
+ background: var(--panel);
193
181
  box-shadow: var(--shadow);
194
182
  overflow: hidden;
183
+ display: grid;
184
+ grid-template-columns: 1.1fr 0.9fr;
185
+ gap: 20px;
186
+ padding: 26px;
195
187
  }
196
188
 
197
- .hero__card::after {
189
+ .hero__frame::after {
198
190
  content: "";
199
191
  position: absolute;
200
- inset: -1px;
201
- background:
202
- linear-gradient(180deg, rgba(255, 255, 255, 0.08), transparent 55%),
203
- linear-gradient(90deg, rgba(255, 255, 255, 0.06), transparent 42%, rgba(255, 255, 255, 0.06));
192
+ inset: 0;
193
+ background: linear-gradient(140deg, rgba(184, 255, 90, 0.08), transparent 40%);
204
194
  pointer-events: none;
205
- opacity: 0.6;
206
195
  }
207
196
 
208
- .hero__inner {
197
+ .hero__copy {
209
198
  position: relative;
210
- padding: 22px 20px 18px;
199
+ z-index: 1;
211
200
  }
212
201
 
213
202
  .kicker {
214
- margin: 0 0 10px;
203
+ margin: 0 0 12px;
215
204
  color: var(--fg2);
216
205
  font-family: var(--mono);
217
206
  font-size: 12px;
218
- letter-spacing: 0.12em;
207
+ letter-spacing: 0.18em;
219
208
  text-transform: uppercase;
220
209
  }
221
210
 
222
211
  .title {
223
212
  margin: 0;
224
- font-family: var(--serif);
225
- font-size: clamp(30px, 4.2vw, 46px);
213
+ font-family: var(--display);
214
+ font-size: clamp(32px, 5vw, 52px);
226
215
  font-weight: 700;
227
216
  letter-spacing: -0.015em;
228
- line-height: 1.02;
217
+ line-height: 1.05;
229
218
  }
230
219
 
231
220
  .lede {
232
- margin: 12px 0 0;
221
+ margin: 14px 0 0;
233
222
  color: var(--fg1);
234
223
  font-size: 18px;
235
- max-width: 60ch;
224
+ max-width: 58ch;
236
225
  }
237
226
 
238
227
  .lede strong {
@@ -240,34 +229,6 @@ a:hover {
240
229
  font-weight: 600;
241
230
  }
242
231
 
243
- .pillRow {
244
- display: flex;
245
- flex-wrap: wrap;
246
- gap: 10px;
247
- margin-top: 16px;
248
- }
249
-
250
- .pill {
251
- display: inline-flex;
252
- align-items: center;
253
- gap: 8px;
254
- padding: 10px 12px;
255
- border: 1px solid var(--line);
256
- border-radius: 999px;
257
- color: var(--fg1);
258
- background: rgba(255, 255, 255, 0.03);
259
- font-family: var(--mono);
260
- font-size: 12px;
261
- }
262
-
263
- .pill__dot {
264
- width: 8px;
265
- height: 8px;
266
- border-radius: 999px;
267
- background: var(--accent);
268
- box-shadow: 0 0 0 4px rgba(183, 255, 60, 0.16);
269
- }
270
-
271
232
  .ctaRow {
272
233
  display: flex;
273
234
  flex-wrap: wrap;
@@ -280,10 +241,10 @@ a:hover {
280
241
  align-items: center;
281
242
  justify-content: center;
282
243
  gap: 10px;
283
- padding: 11px 14px;
244
+ padding: 11px 16px;
284
245
  border-radius: 14px;
285
246
  border: 1px solid var(--line);
286
- background: rgba(255, 255, 255, 0.03);
247
+ background: rgba(255, 255, 255, 0.04);
287
248
  color: var(--fg0);
288
249
  font-family: var(--mono);
289
250
  font-size: 12px;
@@ -294,80 +255,171 @@ a:hover {
294
255
 
295
256
  .btn:hover {
296
257
  text-decoration: none;
297
- background: rgba(255, 255, 255, 0.06);
258
+ background: rgba(255, 255, 255, 0.08);
298
259
  }
299
260
 
300
261
  .btn--primary {
301
- border-color: rgba(183, 255, 60, 0.42);
302
- background:
303
- radial-gradient(circle at 20% 10%, rgba(183, 255, 60, 0.26), transparent 60%),
304
- rgba(183, 255, 60, 0.08);
262
+ border-color: rgba(184, 255, 90, 0.5);
263
+ background: rgba(184, 255, 90, 0.12);
305
264
  }
306
265
 
307
- .btn--primary:hover {
308
- background:
309
- radial-gradient(circle at 20% 10%, rgba(183, 255, 60, 0.32), transparent 60%),
310
- rgba(183, 255, 60, 0.12);
266
+ .btn--ghost {
267
+ border-color: rgba(255, 155, 53, 0.5);
268
+ background: rgba(255, 155, 53, 0.12);
311
269
  }
312
270
 
313
- .btn__icon {
314
- width: 16px;
315
- height: 16px;
316
- opacity: 0.9;
271
+ .quickRow {
272
+ margin-top: 22px;
273
+ padding: 14px;
274
+ border-radius: 16px;
275
+ border: 1px solid var(--line);
276
+ background: rgba(0, 0, 0, 0.2);
277
+ display: grid;
278
+ gap: 10px;
317
279
  }
318
280
 
319
- .codeCard {
320
- position: relative;
321
- padding: 18px 18px 16px;
322
- border-left: 1px solid var(--line);
323
- background:
324
- linear-gradient(180deg, rgba(0, 0, 0, 0.18), transparent 40%), rgba(255, 255, 255, 0.03);
281
+ .quickRow__label {
282
+ font-family: var(--mono);
283
+ font-size: 12px;
284
+ letter-spacing: 0.12em;
285
+ text-transform: uppercase;
286
+ color: var(--fg2);
325
287
  }
326
288
 
327
- @media (max-width: 900px) {
328
- .codeCard {
329
- border-left: none;
330
- border-top: 1px solid var(--line);
331
- }
289
+ .quickRow__code {
290
+ display: grid;
291
+ gap: 6px;
292
+ font-family: var(--mono);
293
+ font-size: 13px;
294
+ color: var(--fg0);
332
295
  }
333
296
 
334
- .terminal {
335
- border-radius: var(--r);
336
- border: 1px solid rgba(255, 255, 255, 0.14);
297
+ .quickRow__code code {
298
+ display: block;
299
+ padding: 8px 10px;
300
+ border-radius: 12px;
337
301
  background: rgba(0, 0, 0, 0.35);
338
- overflow: hidden;
302
+ border: 1px solid rgba(255, 255, 255, 0.08);
339
303
  }
340
304
 
341
- .terminal__bar {
305
+ .quickRow__actions {
342
306
  display: flex;
343
- gap: 6px;
307
+ flex-wrap: wrap;
308
+ gap: 8px;
309
+ }
310
+
311
+ .hero__visual {
312
+ position: relative;
313
+ z-index: 1;
314
+ display: grid;
315
+ gap: 14px;
316
+ }
317
+
318
+ .shot {
319
+ margin: 0;
320
+ border-radius: 20px;
321
+ border: 1px solid rgba(255, 255, 255, 0.12);
322
+ background: rgba(0, 0, 0, 0.24);
323
+ overflow: hidden;
324
+ box-shadow: var(--shadow2);
325
+ }
326
+
327
+ .shot img {
328
+ display: block;
329
+ width: 100%;
330
+ height: auto;
331
+ }
332
+
333
+ .shot figcaption {
344
334
  padding: 10px 12px;
345
- border-bottom: 1px solid rgba(255, 255, 255, 0.12);
346
- background: rgba(255, 255, 255, 0.04);
335
+ font-family: var(--mono);
336
+ font-size: 12px;
337
+ color: var(--fg2);
338
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
339
+ }
340
+
341
+ .shot--ext {
342
+ transform: translateX(18px);
343
+ }
344
+
345
+ .productGrid {
346
+ display: grid;
347
+ grid-template-columns: repeat(2, minmax(0, 1fr));
348
+ gap: 18px;
349
+ margin-top: 24px;
350
+ padding: 0 6px;
351
+ }
352
+
353
+ .productCard {
354
+ border-radius: var(--r2);
355
+ border: 1px solid var(--line);
356
+ background: rgba(255, 255, 255, 0.03);
357
+ padding: 20px 18px;
358
+ box-shadow: var(--shadow2);
347
359
  }
348
- .terminal__dot {
349
- width: 10px;
350
- height: 10px;
360
+
361
+ .productCard__head {
362
+ display: grid;
363
+ gap: 10px;
364
+ margin-bottom: 12px;
365
+ }
366
+
367
+ .productCard h2 {
368
+ margin: 0;
369
+ font-family: var(--display);
370
+ font-weight: 700;
371
+ letter-spacing: -0.01em;
372
+ font-size: 22px;
373
+ }
374
+
375
+ .productCard p {
376
+ margin: 0;
377
+ color: var(--fg1);
378
+ }
379
+
380
+ .badge {
381
+ align-self: start;
382
+ display: inline-flex;
383
+ align-items: center;
384
+ gap: 8px;
385
+ padding: 6px 10px;
351
386
  border-radius: 999px;
352
- background: rgba(255, 255, 255, 0.18);
387
+ border: 1px solid rgba(184, 255, 90, 0.4);
388
+ background: rgba(184, 255, 90, 0.14);
389
+ font-family: var(--mono);
390
+ font-size: 11px;
391
+ letter-spacing: 0.1em;
392
+ text-transform: uppercase;
353
393
  }
354
- .terminal__dot--a {
355
- background: rgba(255, 61, 142, 0.65);
394
+
395
+ .badge--alt {
396
+ border-color: rgba(255, 155, 53, 0.5);
397
+ background: rgba(255, 155, 53, 0.14);
356
398
  }
357
- .terminal__dot--b {
358
- background: rgba(183, 255, 60, 0.6);
399
+
400
+ .list {
401
+ margin: 12px 0 0 16px;
402
+ color: var(--fg1);
359
403
  }
360
- .terminal__dot--c {
361
- background: rgba(84, 184, 255, 0.6);
404
+
405
+ .list li {
406
+ margin: 6px 0;
407
+ }
408
+
409
+ .cardCode {
410
+ margin-top: 14px;
411
+ border-radius: 16px;
412
+ border: 1px solid rgba(255, 255, 255, 0.1);
413
+ background: rgba(0, 0, 0, 0.35);
362
414
  }
363
415
 
364
416
  pre {
365
417
  margin: 0;
366
418
  padding: 14px 14px 12px;
367
- color: rgba(242, 239, 230, 0.94);
419
+ color: rgba(247, 242, 231, 0.94);
368
420
  font-family: var(--mono);
369
- font-size: 13px;
370
- line-height: 1.55;
421
+ font-size: 12.5px;
422
+ line-height: 1.6;
371
423
  overflow-x: auto;
372
424
  }
373
425
 
@@ -375,62 +427,154 @@ code {
375
427
  font-family: var(--mono);
376
428
  }
377
429
 
378
- .copyRow {
379
- display: flex;
380
- align-items: center;
381
- justify-content: space-between;
382
- gap: 12px;
383
- margin-top: 12px;
430
+ .steps {
431
+ margin: 12px 0 0 18px;
432
+ color: var(--fg1);
384
433
  }
385
434
 
386
- .hint {
387
- color: var(--fg2);
388
- font-family: var(--mono);
389
- font-size: 12px;
435
+ .steps li {
436
+ margin: 6px 0;
437
+ }
438
+
439
+ .callout {
440
+ margin-top: 12px;
441
+ padding: 12px;
442
+ border-radius: 14px;
443
+ border: 1px dashed rgba(54, 201, 185, 0.5);
444
+ background: rgba(54, 201, 185, 0.08);
445
+ color: var(--fg1);
390
446
  }
391
447
 
392
- .grid {
448
+ .capGrid {
393
449
  display: grid;
394
- grid-template-columns: repeat(12, 1fr);
450
+ grid-template-columns: repeat(4, minmax(0, 1fr));
395
451
  gap: 14px;
396
- margin-top: 18px;
452
+ margin-top: 22px;
397
453
  padding: 0 6px;
398
454
  }
399
455
 
400
- .card {
401
- grid-column: span 6;
402
- border-radius: var(--r2);
456
+ .capCard {
457
+ border-radius: 18px;
403
458
  border: 1px solid var(--line);
404
459
  background: rgba(255, 255, 255, 0.03);
405
- padding: 18px 16px 16px;
460
+ padding: 16px;
406
461
  box-shadow: var(--shadow2);
407
462
  }
408
463
 
409
- @media (max-width: 900px) {
410
- .card {
411
- grid-column: span 12;
412
- }
464
+ .capCard__eyebrow {
465
+ font-family: var(--mono);
466
+ font-size: 11px;
467
+ letter-spacing: 0.18em;
468
+ text-transform: uppercase;
469
+ color: var(--fg2);
413
470
  }
414
471
 
415
- .card h2 {
416
- margin: 0 0 8px;
417
- font-family: var(--serif);
418
- font-weight: 650;
419
- letter-spacing: -0.01em;
472
+ .capCard h3 {
473
+ margin: 8px 0 6px;
474
+ font-family: var(--display);
420
475
  font-size: 18px;
421
476
  }
422
477
 
423
- .card p {
478
+ .capCard p {
424
479
  margin: 0;
425
480
  color: var(--fg1);
426
481
  }
427
482
 
428
- .card .small {
429
- margin-top: 10px;
483
+ .flow {
484
+ margin-top: 24px;
485
+ padding: 0 6px;
486
+ }
487
+
488
+ .flow__card {
489
+ border-radius: var(--r2);
490
+ border: 1px solid var(--line);
491
+ background: rgba(255, 255, 255, 0.03);
492
+ padding: 20px;
493
+ box-shadow: var(--shadow2);
494
+ }
495
+
496
+ .flow__card h2 {
497
+ margin: 0 0 16px;
498
+ font-family: var(--display);
499
+ font-size: 24px;
500
+ }
501
+
502
+ .flow__steps {
503
+ display: grid;
504
+ gap: 12px;
505
+ }
506
+
507
+ .flowStep {
508
+ display: grid;
509
+ grid-template-columns: 48px 1fr;
510
+ gap: 12px;
511
+ align-items: start;
512
+ padding: 12px;
513
+ border-radius: 16px;
514
+ border: 1px solid rgba(255, 255, 255, 0.08);
515
+ background: rgba(0, 0, 0, 0.2);
516
+ }
517
+
518
+ .flowStep__num {
519
+ font-family: var(--mono);
520
+ font-size: 16px;
521
+ letter-spacing: 0.12em;
430
522
  color: var(--fg2);
523
+ }
524
+
525
+ .flowStep h4 {
526
+ margin: 0 0 4px;
527
+ font-family: var(--display);
528
+ font-size: 18px;
529
+ }
530
+
531
+ .flowStep p {
532
+ margin: 0;
533
+ color: var(--fg1);
534
+ }
535
+
536
+ .more {
537
+ margin-top: 24px;
538
+ padding: 0 6px;
539
+ }
540
+
541
+ .more__card {
542
+ border-radius: var(--r2);
543
+ border: 1px solid var(--line);
544
+ background: rgba(255, 255, 255, 0.03);
545
+ padding: 20px;
546
+ box-shadow: var(--shadow2);
547
+ }
548
+
549
+ .more__card h2 {
550
+ margin: 0 0 14px;
551
+ font-family: var(--display);
552
+ font-size: 22px;
553
+ }
554
+
555
+ .more__grid {
556
+ display: grid;
557
+ grid-template-columns: repeat(3, minmax(0, 1fr));
558
+ gap: 10px;
559
+ }
560
+
561
+ .moreLink {
562
+ display: block;
563
+ padding: 10px 12px;
564
+ border-radius: 12px;
565
+ border: 1px solid rgba(255, 255, 255, 0.1);
566
+ background: rgba(0, 0, 0, 0.2);
431
567
  font-family: var(--mono);
432
568
  font-size: 12px;
433
569
  letter-spacing: 0.06em;
570
+ text-transform: uppercase;
571
+ color: var(--fg1);
572
+ }
573
+
574
+ .moreLink:hover {
575
+ text-decoration: none;
576
+ color: var(--fg0);
577
+ border-color: rgba(184, 255, 90, 0.4);
434
578
  }
435
579
 
436
580
  .footer {
@@ -453,8 +597,9 @@ code {
453
597
 
454
598
  .reveal {
455
599
  opacity: 0;
456
- transform: translateY(10px);
600
+ transform: translateY(14px);
457
601
  }
602
+
458
603
  .reveal.is-on {
459
604
  opacity: 1;
460
605
  transform: translateY(0);
@@ -463,13 +608,10 @@ code {
463
608
  transform 700ms cubic-bezier(0.2, 0.9, 0.2, 1);
464
609
  }
465
610
 
466
- .hero--compact .hero__card {
467
- max-width: 720px;
611
+ .hero--compact .hero__frame {
612
+ max-width: 760px;
468
613
  margin: 30px auto 0;
469
- }
470
- .hero--compact .hero__inner,
471
- .hero--compact .hero__card {
472
- padding: 22px;
614
+ grid-template-columns: 1fr;
473
615
  }
474
616
 
475
617
  .docShell {
@@ -478,11 +620,6 @@ code {
478
620
  gap: 18px;
479
621
  padding: 10px 6px 0;
480
622
  }
481
- @media (max-width: 900px) {
482
- .docShell {
483
- grid-template-columns: 1fr;
484
- }
485
- }
486
623
 
487
624
  .side {
488
625
  position: sticky;
@@ -495,12 +632,6 @@ code {
495
632
  box-shadow: var(--shadow2);
496
633
  }
497
634
 
498
- @media (max-width: 900px) {
499
- .side {
500
- position: static;
501
- }
502
- }
503
-
504
635
  .side h2 {
505
636
  margin: 0 0 10px;
506
637
  font-family: var(--mono);
@@ -526,9 +657,10 @@ code {
526
657
  background: rgba(255, 255, 255, 0.04);
527
658
  color: var(--fg0);
528
659
  }
660
+
529
661
  .side a[aria-current="page"] {
530
- border-color: rgba(183, 255, 60, 0.35);
531
- background: rgba(183, 255, 60, 0.08);
662
+ border-color: rgba(184, 255, 90, 0.4);
663
+ background: rgba(184, 255, 90, 0.1);
532
664
  color: var(--fg0);
533
665
  }
534
666
 
@@ -542,7 +674,7 @@ code {
542
674
 
543
675
  .doc h1 {
544
676
  margin: 0 0 10px;
545
- font-family: var(--serif);
677
+ font-family: var(--display);
546
678
  font-weight: 700;
547
679
  letter-spacing: -0.015em;
548
680
  font-size: 30px;
@@ -550,28 +682,67 @@ code {
550
682
 
551
683
  .doc h2 {
552
684
  margin: 18px 0 8px;
553
- font-family: var(--serif);
685
+ font-family: var(--display);
554
686
  font-weight: 650;
555
687
  letter-spacing: -0.01em;
556
- font-size: 18px;
688
+ font-size: 20px;
557
689
  }
558
690
 
559
691
  .doc ul {
560
692
  margin: 8px 0 0 18px;
561
693
  color: var(--fg1);
562
694
  }
695
+
563
696
  .doc li {
564
697
  margin: 6px 0;
565
698
  }
699
+
566
700
  .doc p {
567
701
  margin: 10px 0 0;
568
702
  color: var(--fg1);
569
703
  }
704
+
570
705
  .doc .note {
571
706
  margin-top: 14px;
572
707
  padding: 12px 12px;
573
708
  border-radius: 14px;
574
- border: 1px dashed rgba(183, 255, 60, 0.35);
575
- background: rgba(183, 255, 60, 0.06);
709
+ border: 1px dashed rgba(184, 255, 90, 0.45);
710
+ background: rgba(184, 255, 90, 0.08);
576
711
  color: var(--fg1);
577
712
  }
713
+
714
+ @media (max-width: 980px) {
715
+ .hero__frame {
716
+ grid-template-columns: 1fr;
717
+ }
718
+ .shot--ext {
719
+ transform: none;
720
+ }
721
+ .productGrid {
722
+ grid-template-columns: 1fr;
723
+ }
724
+ .capGrid {
725
+ grid-template-columns: 1fr 1fr;
726
+ }
727
+ .more__grid {
728
+ grid-template-columns: 1fr 1fr;
729
+ }
730
+ .docShell {
731
+ grid-template-columns: 1fr;
732
+ }
733
+ .side {
734
+ position: static;
735
+ }
736
+ }
737
+
738
+ @media (max-width: 640px) {
739
+ .capGrid {
740
+ grid-template-columns: 1fr;
741
+ }
742
+ .more__grid {
743
+ grid-template-columns: 1fr;
744
+ }
745
+ .flowStep {
746
+ grid-template-columns: 1fr;
747
+ }
748
+ }