rdstudio 0.2.0__py3-none-any.whl

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 (251) hide show
  1. rdstudio/__init__.py +3 -0
  2. rdstudio/_node/rdstudio.mjs +59351 -0
  3. rdstudio/brief.py +46 -0
  4. rdstudio/build.py +218 -0
  5. rdstudio/classify.py +131 -0
  6. rdstudio/cli.py +369 -0
  7. rdstudio/config.py +115 -0
  8. rdstudio/gitlog.py +92 -0
  9. rdstudio/launcher.py +63 -0
  10. rdstudio/learner.py +187 -0
  11. rdstudio/mcp_server.py +313 -0
  12. rdstudio/okf.py +775 -0
  13. rdstudio/procedures.py +233 -0
  14. rdstudio/references.py +228 -0
  15. rdstudio/reports.py +75 -0
  16. rdstudio/scaffold.py +227 -0
  17. rdstudio/scopes.py +162 -0
  18. rdstudio/search.py +149 -0
  19. rdstudio/serve.py +214 -0
  20. rdstudio/store.py +161 -0
  21. rdstudio/templates/agents/critic.md +20 -0
  22. rdstudio/templates/agents/librarian.md +21 -0
  23. rdstudio/templates/agents/searcher.md +21 -0
  24. rdstudio/templates/agents_section.md +31 -0
  25. rdstudio/templates/claude_section.md +3 -0
  26. rdstudio/templates/knowledge/overview.md +20 -0
  27. rdstudio/templates/knowledge/tasks/bootstrap-knowledge-base.md +45 -0
  28. rdstudio/templates/skills/decision/SKILL.md +47 -0
  29. rdstudio/templates/skills/handoff/SKILL.md +18 -0
  30. rdstudio/templates/skills/ingest-ref/SKILL.md +32 -0
  31. rdstudio/templates/skills/lint-okf/SKILL.md +15 -0
  32. rdstudio/templates/skills/promote/SKILL.md +25 -0
  33. rdstudio/templates/skills/question/SKILL.md +33 -0
  34. rdstudio/templates/skills/record-okf/SKILL.md +61 -0
  35. rdstudio/templates/skills/report/SKILL.md +46 -0
  36. rdstudio/templates/skills/report/template.html +74 -0
  37. rdstudio/templates/skills/search-okf/SKILL.md +36 -0
  38. rdstudio/templates/skills/task/SKILL.md +51 -0
  39. rdstudio/web/app.js +140 -0
  40. rdstudio/web/fonts.css +48 -0
  41. rdstudio/web/icon-192.png +0 -0
  42. rdstudio/web/icon-512.png +0 -0
  43. rdstudio/web/index.html +109 -0
  44. rdstudio/web/js/data.js +125 -0
  45. rdstudio/web/js/diagrams.js +116 -0
  46. rdstudio/web/js/graph.js +396 -0
  47. rdstudio/web/js/knowledge.js +212 -0
  48. rdstudio/web/js/layout-worker.js +15 -0
  49. rdstudio/web/js/layout.js +226 -0
  50. rdstudio/web/js/learn.js +83 -0
  51. rdstudio/web/js/map.js +1293 -0
  52. rdstudio/web/js/markdown.js +173 -0
  53. rdstudio/web/js/pages.js +219 -0
  54. rdstudio/web/js/procedures.js +262 -0
  55. rdstudio/web/js/settings.js +95 -0
  56. rdstudio/web/js/util.js +99 -0
  57. rdstudio/web/report.css +35 -0
  58. rdstudio/web/report.js +104 -0
  59. rdstudio/web/style.css +566 -0
  60. rdstudio/web/sw.js +166 -0
  61. rdstudio/web/themes/cyber.css +139 -0
  62. rdstudio/web/themes/map.css +133 -0
  63. rdstudio/web/themes/notebook.css +134 -0
  64. rdstudio/web/themes/space.css +135 -0
  65. rdstudio/web/themes/studio.css +110 -0
  66. rdstudio/web/vendor/d3.min.js +2 -0
  67. rdstudio/web/vendor/fonts/atkinson-hyperlegible-next-latin-ext-wght-italic.woff2 +0 -0
  68. rdstudio/web/vendor/fonts/atkinson-hyperlegible-next-latin-ext-wght-normal.woff2 +0 -0
  69. rdstudio/web/vendor/fonts/atkinson-hyperlegible-next-latin-wght-italic.woff2 +0 -0
  70. rdstudio/web/vendor/fonts/atkinson-hyperlegible-next-latin-wght-normal.woff2 +0 -0
  71. rdstudio/web/vendor/fonts/caveat-latin-wght-normal.woff2 +0 -0
  72. rdstudio/web/vendor/fonts/ibm-plex-mono-latin-400-normal.woff2 +0 -0
  73. rdstudio/web/vendor/fonts/ibm-plex-mono-latin-600-normal.woff2 +0 -0
  74. rdstudio/web/vendor/fonts/ibm-plex-sans-latin-wght-italic.woff2 +0 -0
  75. rdstudio/web/vendor/fonts/ibm-plex-sans-latin-wght-normal.woff2 +0 -0
  76. rdstudio/web/vendor/fonts/inter-latin-opsz-italic.woff2 +0 -0
  77. rdstudio/web/vendor/fonts/inter-latin-opsz-normal.woff2 +0 -0
  78. rdstudio/web/vendor/fonts/jetbrains-mono-latin-wght-italic.woff2 +0 -0
  79. rdstudio/web/vendor/fonts/jetbrains-mono-latin-wght-normal.woff2 +0 -0
  80. rdstudio/web/vendor/fonts/literata-latin-ext-opsz-italic.woff2 +0 -0
  81. rdstudio/web/vendor/fonts/literata-latin-ext-opsz-normal.woff2 +0 -0
  82. rdstudio/web/vendor/fonts/literata-latin-opsz-italic.woff2 +0 -0
  83. rdstudio/web/vendor/fonts/literata-latin-opsz-normal.woff2 +0 -0
  84. rdstudio/web/vendor/fonts/source-sans-3-latin-wght-italic.woff2 +0 -0
  85. rdstudio/web/vendor/fonts/source-sans-3-latin-wght-normal.woff2 +0 -0
  86. rdstudio/web/vendor/fonts/source-serif-4-latin-opsz-italic.woff2 +0 -0
  87. rdstudio/web/vendor/fonts/source-serif-4-latin-opsz-normal.woff2 +0 -0
  88. rdstudio/web/vendor/hljs/github-dark.min.css +10 -0
  89. rdstudio/web/vendor/hljs/github.min.css +10 -0
  90. rdstudio/web/vendor/hljs/highlight.min.js +1262 -0
  91. rdstudio/web/vendor/hljs/julia.min.js +18 -0
  92. rdstudio/web/vendor/hljs/latex.min.js +33 -0
  93. rdstudio/web/vendor/hljs/matlab.min.js +15 -0
  94. rdstudio/web/vendor/katex/auto-render.min.js +1 -0
  95. rdstudio/web/vendor/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  96. rdstudio/web/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  97. rdstudio/web/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  98. rdstudio/web/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  99. rdstudio/web/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  100. rdstudio/web/vendor/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
  101. rdstudio/web/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  102. rdstudio/web/vendor/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
  103. rdstudio/web/vendor/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
  104. rdstudio/web/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  105. rdstudio/web/vendor/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
  106. rdstudio/web/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  107. rdstudio/web/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  108. rdstudio/web/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  109. rdstudio/web/vendor/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
  110. rdstudio/web/vendor/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  111. rdstudio/web/vendor/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  112. rdstudio/web/vendor/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  113. rdstudio/web/vendor/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  114. rdstudio/web/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  115. rdstudio/web/vendor/katex/katex.min.css +1 -0
  116. rdstudio/web/vendor/katex/katex.min.js +1 -0
  117. rdstudio/web/vendor/licenses/atkinson-hyperlegible-next-OFL.txt +93 -0
  118. rdstudio/web/vendor/licenses/caveat-OFL.txt +93 -0
  119. rdstudio/web/vendor/licenses/d3-7.9.0.txt +13 -0
  120. rdstudio/web/vendor/licenses/highlightjs-cdn-assets-11.12.0.txt +29 -0
  121. rdstudio/web/vendor/licenses/ibm-plex-mono-OFL.txt +93 -0
  122. rdstudio/web/vendor/licenses/ibm-plex-sans-OFL.txt +93 -0
  123. rdstudio/web/vendor/licenses/inter-OFL.txt +93 -0
  124. rdstudio/web/vendor/licenses/jetbrains-mono-OFL.txt +93 -0
  125. rdstudio/web/vendor/licenses/katex-0.18.7.txt +21 -0
  126. rdstudio/web/vendor/licenses/literata-OFL.txt +93 -0
  127. rdstudio/web/vendor/licenses/markdown-it-15.0.2.txt +22 -0
  128. rdstudio/web/vendor/licenses/markdown-it-footnote-4.0.0.txt +22 -0
  129. rdstudio/web/vendor/licenses/markdown-it-texmath-1.0.0.txt +21 -0
  130. rdstudio/web/vendor/licenses/mermaid-12.0.0.txt +21 -0
  131. rdstudio/web/vendor/licenses/source-sans-3-OFL.txt +93 -0
  132. rdstudio/web/vendor/licenses/source-serif-4-OFL.txt +93 -0
  133. rdstudio/web/vendor/licenses/vega-6.4.0.txt +27 -0
  134. rdstudio/web/vendor/licenses/vega-embed-7.2.0.txt +27 -0
  135. rdstudio/web/vendor/licenses/vega-lite-6.4.3.txt +27 -0
  136. rdstudio/web/vendor/markdown-it-footnote.min.js +2 -0
  137. rdstudio/web/vendor/markdown-it.min.js +14 -0
  138. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/abnfDiagram-DGLNOSUI.mjs +1 -0
  139. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/architecture-7GRP2DOG-HF4J73XS.mjs +1 -0
  140. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/architectureDiagram-IU6H5EVY.mjs +36 -0
  141. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/blockDiagram-FSX6DT2V.mjs +140 -0
  142. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/c4Diagram-YNRVYILN.mjs +38 -0
  143. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-22SYA5HA.mjs +1 -0
  144. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-2FTYKNOQ.mjs +1 -0
  145. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-36VM3LGA.mjs +1 -0
  146. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-3SEI7E7V.mjs +1 -0
  147. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-3T2MNPEU.mjs +1 -0
  148. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-44AU3KAP.mjs +174 -0
  149. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-4MZOTL6B.mjs +1 -0
  150. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-52IMQVNL.mjs +1 -0
  151. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-5NYYYZGL.mjs +1 -0
  152. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-BOZ75642.mjs +15 -0
  153. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-CVBX6EWK.mjs +1 -0
  154. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-D36F7FYG.mjs +14 -0
  155. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-DEGLBX6O.mjs +213 -0
  156. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-F6PIGZHG.mjs +1 -0
  157. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-FE53TMRB.mjs +133 -0
  158. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-FNR2RGIF.mjs +1 -0
  159. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-GDOATIN3.mjs +32 -0
  160. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-H7BX327W.mjs +2 -0
  161. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-HI3EPXIC.mjs +2 -0
  162. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-JCBDXJ5W.mjs +1 -0
  163. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-JGXDHUYS.mjs +1 -0
  164. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-L2B47AAZ.mjs +1 -0
  165. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-LIEGGFIX.mjs +1 -0
  166. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-LLWYPJEZ.mjs +1 -0
  167. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-MFYRHTYG.mjs +1 -0
  168. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-MIE3LDYP.mjs +1 -0
  169. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-MLQVGYRW.mjs +1 -0
  170. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-MNT3HHAC.mjs +1 -0
  171. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-NRRTYJAG.mjs +1 -0
  172. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-OCMJQKYE.mjs +10 -0
  173. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-PKJCTQEK.mjs +339 -0
  174. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-QADHU5CF.mjs +2 -0
  175. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-QVIEFLGF.mjs +1 -0
  176. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-QX7LGXZU.mjs +1 -0
  177. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-R2KH53MI.mjs +1 -0
  178. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-RXM7Z7NK.mjs +2 -0
  179. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-S4TE5DX6.mjs +1 -0
  180. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-SDIBIOXT.mjs +1 -0
  181. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-TDFULVG6.mjs +1 -0
  182. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-TECWHJ6D.mjs +62 -0
  183. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-TINYC7RT.mjs +70 -0
  184. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-V3KJR4XU.mjs +1 -0
  185. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-VTMXW4ES.mjs +1 -0
  186. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-Y5NT6LW5.mjs +88 -0
  187. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-Y5O5OPKC.mjs +3 -0
  188. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-YZG4BXY6.mjs +1 -0
  189. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-ZZ52EIBP.mjs +1 -0
  190. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/classDiagram-v2-VV4INRHB.mjs +217 -0
  191. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/cose-bilkent-MSIMRU2B.mjs +1 -0
  192. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/cynefin-OW5HDTMX-KMPDV6GS.mjs +1 -0
  193. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/cynefinDiagram-KTGLXFXK.mjs +62 -0
  194. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/dagre-QJJCSHY4.mjs +4 -0
  195. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/diagram-2ZIM67RP.mjs +3 -0
  196. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/diagram-FYHH5O6R.mjs +24 -0
  197. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/diagram-LYLDACMS.mjs +200 -0
  198. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/diagram-TYT3HRBC.mjs +24 -0
  199. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/diagram-XVIN6YVD.mjs +30 -0
  200. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/diagram-ZO2NLLYC.mjs +41 -0
  201. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/ebnfDiagram-TU3FGH35.mjs +1 -0
  202. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/elk-GHAXNSLK.mjs +27 -0
  203. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/erDiagram-XID3VV23.mjs +99 -0
  204. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/eventmodeling-NTZA5JFV-P5QJSWSK.mjs +1 -0
  205. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/flowDiagram-WPHQAKTU.mjs +1 -0
  206. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/ganttDiagram-QACGSKG6.mjs +292 -0
  207. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/gitGraph-4MIJSDKK-V5NEQQYP.mjs +1 -0
  208. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/gitGraphDiagram-EB76O4HC.mjs +106 -0
  209. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/info-A6RAGUB7-IGBHH2L7.mjs +1 -0
  210. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/infoDiagram-343ZKIDN.mjs +2 -0
  211. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/ishikawaDiagram-UEEU5D75.mjs +70 -0
  212. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/journeyDiagram-4QTZOVLF.mjs +139 -0
  213. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/kanban-definition-VEJL4RG2.mjs +89 -0
  214. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/katex-QVRI4OIV.mjs +257 -0
  215. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/mindmap-definition-C5K5ZT7T.mjs +96 -0
  216. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/packet-AYTQ26CC-PJTKDECJ.mjs +1 -0
  217. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/pegDiagram-FHIILVJB.mjs +1 -0
  218. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/pie-WAS4IAKB-U3JFQXZN.mjs +1 -0
  219. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/pieDiagram-S76BU6V7.mjs +39 -0
  220. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/quadrantDiagram-HZBLWUZE.mjs +7 -0
  221. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/radar-RG4KPBEZ-7T2UW32D.mjs +1 -0
  222. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/railroad-74A4TZTK-DZY7ARDL.mjs +1 -0
  223. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/railroad-abnf-HS5TGJTU-LWS535ZK.mjs +1 -0
  224. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/railroad-ebnf-LZEXJU2U-EA3S4ZFM.mjs +1 -0
  225. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/railroad-peg-WCYAUIDC-DUKZONPX.mjs +1 -0
  226. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/railroadDiagram-R6RP3MQ2.mjs +1 -0
  227. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/requirementDiagram-SGBABQV6.mjs +84 -0
  228. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/sankeyDiagram-IM6M5BOW.mjs +40 -0
  229. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/sequenceDiagram-FGJOIFJ2.mjs +169 -0
  230. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/sizeCapture-ERV5D3W5.mjs +1 -0
  231. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/stateDiagram-v2-6KDGCZ5J.mjs +291 -0
  232. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/swimlanes-OJBUSBEF.mjs +1 -0
  233. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/swimlanesDiagram-LNXYTHDW.mjs +8 -0
  234. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/timeline-definition-7G6YQRTY.mjs +120 -0
  235. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/treeView-Q6P3EWNA-AABPVERA.mjs +1 -0
  236. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/treemap-WGGIJYW6-F2JSY3V3.mjs +1 -0
  237. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/usecaseDiagram-6Y6TMLBO.mjs +383 -0
  238. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/vennDiagram-6RODYPCK.mjs +34 -0
  239. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/wardley-WFR3VGLG-EIT5NWVN.mjs +1 -0
  240. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/wardleyDiagram-RFZKLAPA.mjs +78 -0
  241. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/xychartDiagram-TWWI2QJZ.mjs +7 -0
  242. rdstudio/web/vendor/mermaid/mermaid.esm.min.mjs +14 -0
  243. rdstudio/web/vendor/texmath.js +368 -0
  244. rdstudio/web/vendor/vega/vega-embed.min.js +7 -0
  245. rdstudio/web/vendor/vega/vega-lite.min.js +2 -0
  246. rdstudio/web/vendor/vega/vega.min.js +1 -0
  247. rdstudio-0.2.0.dist-info/METADATA +201 -0
  248. rdstudio-0.2.0.dist-info/RECORD +251 -0
  249. rdstudio-0.2.0.dist-info/WHEEL +4 -0
  250. rdstudio-0.2.0.dist-info/entry_points.txt +3 -0
  251. rdstudio-0.2.0.dist-info/licenses/LICENSE +21 -0
rdstudio/web/sw.js ADDED
@@ -0,0 +1,166 @@
1
+ // Service worker: the dashboard opens at once and can be read offline.
2
+ //
3
+ // - App files (HTML, scripts, styles, fonts, libraries) come from a cache named
4
+ // after them, so a new rdstudio replaces it; the build fills in SHELL.
5
+ // - Data is cached per data version (data/version.json, a hash of the content):
6
+ // opening the dashboard costs one small request for the version, and only a
7
+ // new version fetches data again. Offline, the newest copy is used.
8
+ // - The learner record (api/) and anything unknown go to the network as usual.
9
+
10
+ const SHELL = "__SHELL__";
11
+ const SHELL_CACHE = "rd-shell-" + SHELL;
12
+ const DATA = "rd-data-"; // one cache per data version
13
+ const META = "rd-meta"; // which data versions exist, newest first
14
+ const KEEP_VERSIONS = 2;
15
+ const VERSION_TTL_MS = 3000; // how long a fetched version is trusted
16
+ const TIMEOUT_MS = 4000; // then assume offline and use what is cached
17
+
18
+ const scope = new URL(self.registration.scope);
19
+
20
+ self.addEventListener("install", () => self.skipWaiting());
21
+
22
+ self.addEventListener("activate", (event) => {
23
+ event.waitUntil((async () => {
24
+ for (const name of await caches.keys()) {
25
+ if (name.startsWith("rd-shell-") && name !== SHELL_CACHE) await caches.delete(name);
26
+ }
27
+ await self.clients.claim();
28
+ })());
29
+ });
30
+
31
+ self.addEventListener("fetch", (event) => {
32
+ const req = event.request;
33
+ const url = new URL(req.url);
34
+ if (req.method !== "GET" || url.origin !== scope.origin || !url.pathname.startsWith(scope.pathname)) return;
35
+ const path = url.pathname.slice(scope.pathname.length);
36
+ if (path.startsWith("api/")) return;
37
+ if (path === "data/version.json") event.respondWith(versionResponse(req));
38
+ else if (path.startsWith("data/")) event.respondWith(data(req));
39
+ else if (path.startsWith("reports/") || path === "manifest.webmanifest") event.respondWith(networkFirst(req));
40
+ else event.respondWith(shell(req));
41
+ });
42
+
43
+ // The page sends what it loaded before this worker was in control, so the
44
+ // next visit is already served from the cache.
45
+ self.addEventListener("message", (event) => {
46
+ const urls = event.data?.warm;
47
+ if (!Array.isArray(urls)) return;
48
+ event.waitUntil(Promise.allSettled(urls.map((u) => {
49
+ const url = new URL(u, scope);
50
+ if (url.origin !== scope.origin || !url.pathname.startsWith(scope.pathname)) return null;
51
+ const path = url.pathname.slice(scope.pathname.length);
52
+ if (path.startsWith("api/") || path === "data/version.json" || path.startsWith("reports/")) return null;
53
+ return path.startsWith("data/") ? data(new Request(url)) : shell(new Request(url));
54
+ })));
55
+ });
56
+
57
+ // Tunnels (a VS Code dev tunnel, say) sometimes drop a request with a 502, 503
58
+ // or 504, or fail outright. Try again a couple of times before giving up.
59
+ const RETRY_MS = [400, 1500];
60
+ async function fetchRetry(req) {
61
+ for (let attempt = 0; ; attempt++) {
62
+ try {
63
+ const res = await fetch(req);
64
+ if (![502, 503, 504].includes(res.status) || attempt >= RETRY_MS.length) return res;
65
+ } catch (err) {
66
+ if (attempt >= RETRY_MS.length) throw err;
67
+ }
68
+ await new Promise((r) => setTimeout(r, RETRY_MS[attempt]));
69
+ }
70
+ }
71
+
72
+ function timeout(promise) {
73
+ return Promise.race([promise, new Promise((_, reject) => setTimeout(() => reject(new Error("timeout")), TIMEOUT_MS))]);
74
+ }
75
+
76
+ // ------------------------------------------------------------------ shell
77
+
78
+ async function shell(req) {
79
+ const cache = await caches.open(SHELL_CACHE);
80
+ const page = req.mode === "navigate";
81
+ const key = page ? scope.href : req; // every page load is the one app page
82
+ const hit = await cache.match(key, { ignoreSearch: page });
83
+ if (hit) return hit;
84
+ const res = await fetchRetry(req);
85
+ if (res.ok && res.type === "basic") cache.put(key, res.clone());
86
+ return res;
87
+ }
88
+
89
+ async function networkFirst(req) {
90
+ const cache = await caches.open(SHELL_CACHE);
91
+ try {
92
+ const res = await timeout(fetchRetry(req));
93
+ if (res.ok) cache.put(req, res.clone());
94
+ return res;
95
+ } catch (err) {
96
+ const hit = await cache.match(req);
97
+ if (hit) return hit;
98
+ throw err;
99
+ }
100
+ }
101
+
102
+ // ------------------------------------------------------------------ data
103
+
104
+ let known = null; // { version, at }
105
+ let asking = null;
106
+
107
+ async function versions() {
108
+ const res = await (await caches.open(META)).match("versions");
109
+ return res ? res.json() : [];
110
+ }
111
+
112
+ async function noteVersion(version) {
113
+ const list = [version, ...(await versions()).filter((v) => v !== version)];
114
+ await (await caches.open(META)).put("versions", new Response(JSON.stringify(list.slice(0, KEEP_VERSIONS))));
115
+ for (const old of list.slice(KEEP_VERSIONS)) await caches.delete(DATA + old);
116
+ }
117
+
118
+ // The server's data version, asked at most every few seconds; offline, the
119
+ // newest version cached.
120
+ async function currentVersion() {
121
+ if (known && Date.now() - known.at < VERSION_TTL_MS) return known.version;
122
+ asking ||= (async () => {
123
+ try {
124
+ const res = await timeout(fetch(scope.href + "data/version.json", { cache: "no-store" }));
125
+ const { version } = await res.clone().json();
126
+ known = { version, at: Date.now() };
127
+ await (await caches.open(META)).put("version.json", res);
128
+ await noteVersion(version);
129
+ return version;
130
+ } catch {
131
+ return (await versions())[0] ?? null;
132
+ } finally {
133
+ asking = null;
134
+ }
135
+ })();
136
+ return asking;
137
+ }
138
+
139
+ // The page polls this to notice changes and to show whether it is live, so it
140
+ // always asks the server, and fails when the server cannot be reached.
141
+ async function versionResponse() {
142
+ known = null;
143
+ await currentVersion();
144
+ if (!known) return Response.error();
145
+ return (await (await caches.open(META)).match("version.json")) || Response.error();
146
+ }
147
+
148
+ async function data(req) {
149
+ const version = await currentVersion();
150
+ if (version) {
151
+ const cache = await caches.open(DATA + version);
152
+ const hit = await cache.match(req, { ignoreSearch: true });
153
+ if (hit) return hit;
154
+ }
155
+ try {
156
+ const res = await fetchRetry(req);
157
+ if (res.ok && version) await (await caches.open(DATA + version)).put(req, res.clone());
158
+ return res;
159
+ } catch (err) {
160
+ for (const v of await versions()) { // offline: the newest copy there is
161
+ const hit = await (await caches.open(DATA + v)).match(req, { ignoreSearch: true });
162
+ if (hit) return hit;
163
+ }
164
+ throw err;
165
+ }
166
+ }
@@ -0,0 +1,139 @@
1
+ /* Cyber: neon on black over a grid with scanlines, glowing routes, square corners and a monospace interface. Light is a hard-edged daylight version. */
2
+
3
+ :root {
4
+ --font-text: "IBM Plex Sans", "Segoe UI", system-ui, sans-serif;
5
+ --font-ui: "JetBrains Mono", ui-monospace, monospace;
6
+ --font-mono: "JetBrains Mono", ui-monospace, monospace;
7
+ --font-heading: "JetBrains Mono", ui-monospace, monospace;
8
+ --h1-size: 28px;
9
+ --h1-doc-size: 31px;
10
+ --h2-size: 19px;
11
+ --brand-size: 16px;
12
+ --text-size: 17px;
13
+ --radius: 0px;
14
+ --map-image: var(--cybergrid);
15
+ --territory-font: "JetBrains Mono", monospace;
16
+ --territory-weight: 600;
17
+ --territory-spacing: 0.16em;
18
+ --territory-size: 12.5px;
19
+ --place-font: "JetBrains Mono", monospace;
20
+ --place-size: 11.5px;
21
+ --paper: #f1f3f6;
22
+ --paper-raised: #ffffff;
23
+ --paper-sunk: #e4e8ee;
24
+ --ink: #0a0f1a;
25
+ --ink-soft: #3b4658;
26
+ --ink-faint: #7a8597;
27
+ --rule: #c9d1dc;
28
+ --grid: #dde3ea;
29
+ --accent: #0068e0;
30
+ --accent-soft: #dbe9ff;
31
+ --cybergrid: linear-gradient(rgb(0 119 255 / .08) 1px, transparent 1px), linear-gradient(90deg, rgb(0 119 255 / .08) 1px, transparent 1px);
32
+ --map-canvas: #eef1f5;
33
+ --map-size: 28px 28px;
34
+ --region-open-alpha: .03;
35
+ --region-closed-alpha: .10;
36
+ --route-from: #0068e0;
37
+ --route-to: #d4007a;
38
+ --route-both: #7a8597;
39
+ color-scheme: light;
40
+ --reviewed: #2e7a58;
41
+ --machine: #5b6b7a;
42
+ --unverified: #a86f12;
43
+ --stale: #b0413e;
44
+ --cat-knowledge: #0068e0;
45
+ --cat-code: #d4007a;
46
+ --cat-reports: #e0470b;
47
+ --cat-agent: #00917a;
48
+ --cat-other: #56657a;
49
+ --g0: #0068e0;
50
+ --g1: #d4007a;
51
+ --g2: #b07800;
52
+ --g3: #e0470b;
53
+ --g4: #6a3fe0;
54
+ --g5: #00917a;
55
+ --g6: #d4003a;
56
+ --g7: #56657a;
57
+ }
58
+
59
+ :root[data-mode="dark"] {
60
+ --paper: #070a10;
61
+ --paper-raised: #0c111b;
62
+ --paper-sunk: #05080d;
63
+ --ink: #d7fbff;
64
+ --ink-soft: #7fb8c4;
65
+ --ink-faint: #4d7480;
66
+ --rule: #13303a;
67
+ --grid: #0d1e25;
68
+ --accent: #19e6ff;
69
+ --accent-soft: #06323b;
70
+ --cybergrid: repeating-linear-gradient(0deg, rgb(0 0 0 / .18) 0 1px, transparent 1px 3px), linear-gradient(rgb(25 230 255 / .07) 1px, transparent 1px), linear-gradient(90deg, rgb(25 230 255 / .07) 1px, transparent 1px);
71
+ --map-canvas: #04060a;
72
+ --map-size: auto, 32px 32px, 32px 32px;
73
+ --region-open-alpha: .03;
74
+ --region-closed-alpha: .10;
75
+ --route-from: #19e6ff;
76
+ --route-to: #ff2bd6;
77
+ --route-both: #5f7f88;
78
+ --territory-ink: #19e6ff;
79
+ color-scheme: dark;
80
+ --reviewed: #5fbf8f;
81
+ --machine: #93a4b3;
82
+ --unverified: #e0a847;
83
+ --stale: #ec7a73;
84
+ --cat-knowledge: #19e6ff;
85
+ --cat-code: #ff2bd6;
86
+ --cat-reports: #ff6b2b;
87
+ --cat-agent: #2bff9e;
88
+ --cat-other: #8fa8b3;
89
+ --g0: #19e6ff;
90
+ --g1: #ff2bd6;
91
+ --g2: #ffe600;
92
+ --g3: #ff6b2b;
93
+ --g4: #9c7cff;
94
+ --g5: #2bff9e;
95
+ --g6: #ff2b5e;
96
+ --g7: #8fa8b3;
97
+ }
98
+
99
+ @media (prefers-color-scheme: dark) {
100
+ :root:not([data-mode="light"]):not([data-mode="dark"]) {
101
+ --paper: #070a10;
102
+ --paper-raised: #0c111b;
103
+ --paper-sunk: #05080d;
104
+ --ink: #d7fbff;
105
+ --ink-soft: #7fb8c4;
106
+ --ink-faint: #4d7480;
107
+ --rule: #13303a;
108
+ --grid: #0d1e25;
109
+ --accent: #19e6ff;
110
+ --accent-soft: #06323b;
111
+ --cybergrid: repeating-linear-gradient(0deg, rgb(0 0 0 / .18) 0 1px, transparent 1px 3px), linear-gradient(rgb(25 230 255 / .07) 1px, transparent 1px), linear-gradient(90deg, rgb(25 230 255 / .07) 1px, transparent 1px);
112
+ --map-canvas: #04060a;
113
+ --map-size: auto, 32px 32px, 32px 32px;
114
+ --region-open-alpha: .03;
115
+ --region-closed-alpha: .10;
116
+ --route-from: #19e6ff;
117
+ --route-to: #ff2bd6;
118
+ --route-both: #5f7f88;
119
+ --territory-ink: #19e6ff;
120
+ color-scheme: dark;
121
+ --reviewed: #5fbf8f;
122
+ --machine: #93a4b3;
123
+ --unverified: #e0a847;
124
+ --stale: #ec7a73;
125
+ --cat-knowledge: #19e6ff;
126
+ --cat-code: #ff2bd6;
127
+ --cat-reports: #ff6b2b;
128
+ --cat-agent: #2bff9e;
129
+ --cat-other: #8fa8b3;
130
+ --g0: #19e6ff;
131
+ --g1: #ff2bd6;
132
+ --g2: #ffe600;
133
+ --g3: #ff6b2b;
134
+ --g4: #9c7cff;
135
+ --g5: #2bff9e;
136
+ --g6: #ff2b5e;
137
+ --g7: #8fa8b3;
138
+ }
139
+ }
@@ -0,0 +1,133 @@
1
+ /* Map: a topographic chart. Folders are tinted land with dash-dot borders on a sea of contours, notes are town dots, routes are cased roads. Dark is a night navigation chart. */
2
+
3
+ :root {
4
+ --font-text: "Source Serif 4", Georgia, serif;
5
+ --font-ui: "Source Sans 3", "Segoe UI", system-ui, sans-serif;
6
+ --font-mono: "IBM Plex Mono", ui-monospace, monospace;
7
+ --text-size: 18px;
8
+ --radius: 2px;
9
+ --map-image: var(--contours);
10
+ --region-open-alpha: .28;
11
+ --region-closed-alpha: .45;
12
+ --region-dash: 7 3 1.5 3;
13
+ --territory-font: "Source Serif 4", Georgia, serif;
14
+ --territory-style: italic;
15
+ --territory-weight: 600;
16
+ --territory-spacing: 0.12em;
17
+ --territory-size: 15px;
18
+ --place-font: "Source Sans 3", sans-serif;
19
+ --route-opacity: .85;
20
+ --paper: #f3f5f0;
21
+ --paper-raised: #fbfcf9;
22
+ --paper-sunk: #e6ebe3;
23
+ --ink: #23291f;
24
+ --ink-soft: #4f5a4a;
25
+ --ink-faint: #838d7f;
26
+ --rule: #d3dbcf;
27
+ --grid: #e1e8dd;
28
+ --accent: #1d4e89;
29
+ --accent-soft: #dde7f3;
30
+ --contours: repeating-radial-gradient(circle at 18% 22%, transparent 0 22px, rgb(70 120 140 / .10) 22px 23px), repeating-radial-gradient(circle at 82% 78%, transparent 0 30px, rgb(70 120 140 / .08) 30px 31px);
31
+ --map-canvas: #d9e7ec;
32
+ --place-fill: #26302a;
33
+ --route-from: #1d4e89;
34
+ --route-to: #b8321f;
35
+ --route-both: #6c7466;
36
+ --territory-ink: #3d4a39;
37
+ color-scheme: light;
38
+ --reviewed: #2e7a58;
39
+ --machine: #5b6b7a;
40
+ --unverified: #a86f12;
41
+ --stale: #b0413e;
42
+ --cat-knowledge: #1d4e89;
43
+ --cat-code: #2f6b3a;
44
+ --cat-reports: #9a5a14;
45
+ --cat-agent: #6b5a1a;
46
+ --cat-other: #6c7466;
47
+ --g0: #8fb573;
48
+ --g1: #d8bf78;
49
+ --g2: #c79a8c;
50
+ --g3: #a9c28e;
51
+ --g4: #cdb38f;
52
+ --g5: #c2cc8a;
53
+ --g6: #d1a878;
54
+ --g7: #b8b08f;
55
+ }
56
+
57
+ :root[data-mode="dark"] {
58
+ --paper: #0f1822;
59
+ --paper-raised: #15212d;
60
+ --paper-sunk: #0b131b;
61
+ --ink: #e6edf2;
62
+ --ink-soft: #9fb3c2;
63
+ --ink-faint: #6d8292;
64
+ --rule: #233443;
65
+ --grid: #172533;
66
+ --accent: #f0b429;
67
+ --accent-soft: #3a2f12;
68
+ --contours: repeating-radial-gradient(circle at 18% 22%, transparent 0 22px, rgb(120 170 200 / .07) 22px 23px), repeating-radial-gradient(circle at 82% 78%, transparent 0 30px, rgb(120 170 200 / .05) 30px 31px);
69
+ --map-canvas: #0a1520;
70
+ --place-fill: #f3e7c4;
71
+ --route-from: #5fb3f0;
72
+ --route-to: #f07a5f;
73
+ --route-both: #7f93a3;
74
+ --territory-ink: #c9d6df;
75
+ color-scheme: dark;
76
+ --reviewed: #5fbf8f;
77
+ --machine: #93a4b3;
78
+ --unverified: #e0a847;
79
+ --stale: #ec7a73;
80
+ --cat-knowledge: #8fc1f0;
81
+ --cat-code: #8fd19e;
82
+ --cat-reports: #f0b429;
83
+ --cat-agent: #d8c27a;
84
+ --cat-other: #9fb3c2;
85
+ --g0: #3f6b4a;
86
+ --g1: #6b6040;
87
+ --g2: #6b4a45;
88
+ --g3: #4f5f3a;
89
+ --g4: #5d4c3a;
90
+ --g5: #5c6638;
91
+ --g6: #6e5638;
92
+ --g7: #57553f;
93
+ }
94
+
95
+ @media (prefers-color-scheme: dark) {
96
+ :root:not([data-mode="light"]):not([data-mode="dark"]) {
97
+ --paper: #0f1822;
98
+ --paper-raised: #15212d;
99
+ --paper-sunk: #0b131b;
100
+ --ink: #e6edf2;
101
+ --ink-soft: #9fb3c2;
102
+ --ink-faint: #6d8292;
103
+ --rule: #233443;
104
+ --grid: #172533;
105
+ --accent: #f0b429;
106
+ --accent-soft: #3a2f12;
107
+ --contours: repeating-radial-gradient(circle at 18% 22%, transparent 0 22px, rgb(120 170 200 / .07) 22px 23px), repeating-radial-gradient(circle at 82% 78%, transparent 0 30px, rgb(120 170 200 / .05) 30px 31px);
108
+ --map-canvas: #0a1520;
109
+ --place-fill: #f3e7c4;
110
+ --route-from: #5fb3f0;
111
+ --route-to: #f07a5f;
112
+ --route-both: #7f93a3;
113
+ --territory-ink: #c9d6df;
114
+ color-scheme: dark;
115
+ --reviewed: #5fbf8f;
116
+ --machine: #93a4b3;
117
+ --unverified: #e0a847;
118
+ --stale: #ec7a73;
119
+ --cat-knowledge: #8fc1f0;
120
+ --cat-code: #8fd19e;
121
+ --cat-reports: #f0b429;
122
+ --cat-agent: #d8c27a;
123
+ --cat-other: #9fb3c2;
124
+ --g0: #3f6b4a;
125
+ --g1: #6b6040;
126
+ --g2: #6b4a45;
127
+ --g3: #4f5f3a;
128
+ --g4: #5d4c3a;
129
+ --g5: #5c6638;
130
+ --g6: #6e5638;
131
+ --g7: #57553f;
132
+ }
133
+ }
@@ -0,0 +1,134 @@
1
+ /* Notebook: an exercise book. Ruled paper, handwritten headings and map labels (Caveat), pencil-rough lines. Dark is a chalkboard. */
2
+
3
+ :root {
4
+ --font-text: "Literata", Georgia, serif;
5
+ --font-ui: "Atkinson", "Segoe UI", system-ui, sans-serif;
6
+ --font-mono: "JetBrains Mono", ui-monospace, monospace;
7
+ --font-heading: "Caveat", "Segoe Print", cursive;
8
+ --h1-size: 40px;
9
+ --h1-doc-size: 44px;
10
+ --h2-size: 28px;
11
+ --brand-size: 25px;
12
+ --text-size: 18px;
13
+ --radius: 3px;
14
+ --map-image: var(--ruled);
15
+ --map-size: auto;
16
+ --region-open-alpha: 0;
17
+ --region-closed-alpha: .07;
18
+ --region-dash: 22 2.5 9 1.5 14 2;
19
+ --territory-font: "Caveat", cursive;
20
+ --territory-size: 22px;
21
+ --territory-weight: 700;
22
+ --territory-spacing: 0.01em;
23
+ --place-font: "Atkinson", sans-serif;
24
+ --paper: #fcfcf9;
25
+ --paper-raised: #ffffff;
26
+ --paper-sunk: #f1f3f6;
27
+ --ink: #1e2a4a;
28
+ --ink-soft: #4b5875;
29
+ --ink-faint: #8a93a8;
30
+ --rule: #d8e0ea;
31
+ --grid: #e4ebf3;
32
+ --accent: #2748b8;
33
+ --accent-soft: #e3e9fb;
34
+ --ruled: linear-gradient(90deg, transparent 63px, #f0b4b0 63px, #f0b4b0 65px, transparent 65px), repeating-linear-gradient(0deg, transparent 0 27px, #d3e2ef 27px 28px);
35
+ --map-canvas: #fcfcf9;
36
+ --route-from: #2748b8;
37
+ --route-to: #c0392b;
38
+ --route-both: #7d8494;
39
+ --territory-ink: #2748b8;
40
+ color-scheme: light;
41
+ --reviewed: #2e7a58;
42
+ --machine: #5b6b7a;
43
+ --unverified: #a86f12;
44
+ --stale: #b0413e;
45
+ --cat-knowledge: #2748b8;
46
+ --cat-code: #1f7a5c;
47
+ --cat-reports: #7a3fa0;
48
+ --cat-agent: #c2366b;
49
+ --cat-other: #5b6273;
50
+ --g0: #2748b8;
51
+ --g1: #1f7a5c;
52
+ --g2: #b5461f;
53
+ --g3: #7a3fa0;
54
+ --g4: #9a7a12;
55
+ --g5: #c2366b;
56
+ --g6: #3c6e8f;
57
+ --g7: #5b6273;
58
+ }
59
+
60
+ :root[data-mode="dark"] {
61
+ --paper: #1f2a26;
62
+ --paper-raised: #26332e;
63
+ --paper-sunk: #19221f;
64
+ --ink: #ecefe6;
65
+ --ink-soft: #b9c2b6;
66
+ --ink-faint: #86917f;
67
+ --rule: #34443d;
68
+ --grid: #2a3732;
69
+ --accent: #f4d35e;
70
+ --accent-soft: #3b3a26;
71
+ --ruled: linear-gradient(90deg, transparent 63px, #6b4a4a 63px, #6b4a4a 65px, transparent 65px), repeating-linear-gradient(0deg, transparent 0 27px, #2c3b35 27px 28px);
72
+ --map-canvas: #1f2a26;
73
+ --route-from: #8fd3c8;
74
+ --route-to: #f29e9e;
75
+ --route-both: #a9b0a4;
76
+ --territory-ink: #f4d35e;
77
+ color-scheme: dark;
78
+ --reviewed: #5fbf8f;
79
+ --machine: #93a4b3;
80
+ --unverified: #e0a847;
81
+ --stale: #ec7a73;
82
+ --cat-knowledge: #f4d35e;
83
+ --cat-code: #8fd3c8;
84
+ --cat-reports: #b8a4e8;
85
+ --cat-agent: #f6b77c;
86
+ --cat-other: #c9ccc4;
87
+ --g0: #f4d35e;
88
+ --g1: #8fd3c8;
89
+ --g2: #f29e9e;
90
+ --g3: #b8a4e8;
91
+ --g4: #a8d88a;
92
+ --g5: #f6b77c;
93
+ --g6: #9ec5f0;
94
+ --g7: #c9ccc4;
95
+ }
96
+
97
+ @media (prefers-color-scheme: dark) {
98
+ :root:not([data-mode="light"]):not([data-mode="dark"]) {
99
+ --paper: #1f2a26;
100
+ --paper-raised: #26332e;
101
+ --paper-sunk: #19221f;
102
+ --ink: #ecefe6;
103
+ --ink-soft: #b9c2b6;
104
+ --ink-faint: #86917f;
105
+ --rule: #34443d;
106
+ --grid: #2a3732;
107
+ --accent: #f4d35e;
108
+ --accent-soft: #3b3a26;
109
+ --ruled: linear-gradient(90deg, transparent 63px, #6b4a4a 63px, #6b4a4a 65px, transparent 65px), repeating-linear-gradient(0deg, transparent 0 27px, #2c3b35 27px 28px);
110
+ --map-canvas: #1f2a26;
111
+ --route-from: #8fd3c8;
112
+ --route-to: #f29e9e;
113
+ --route-both: #a9b0a4;
114
+ --territory-ink: #f4d35e;
115
+ color-scheme: dark;
116
+ --reviewed: #5fbf8f;
117
+ --machine: #93a4b3;
118
+ --unverified: #e0a847;
119
+ --stale: #ec7a73;
120
+ --cat-knowledge: #f4d35e;
121
+ --cat-code: #8fd3c8;
122
+ --cat-reports: #b8a4e8;
123
+ --cat-agent: #f6b77c;
124
+ --cat-other: #c9ccc4;
125
+ --g0: #f4d35e;
126
+ --g1: #8fd3c8;
127
+ --g2: #f29e9e;
128
+ --g3: #b8a4e8;
129
+ --g4: #a8d88a;
130
+ --g5: #f6b77c;
131
+ --g6: #9ec5f0;
132
+ --g7: #c9ccc4;
133
+ }
134
+ }
@@ -0,0 +1,135 @@
1
+ /* Space: a star field. Folders are soft-edged nebulae, notes glowing stars, links faint constellation lines. Light is a celestial atlas. */
2
+
3
+ :root {
4
+ --font-text: "IBM Plex Sans", "Segoe UI", system-ui, sans-serif;
5
+ --font-ui: "IBM Plex Sans", "Segoe UI", system-ui, sans-serif;
6
+ --font-mono: "IBM Plex Mono", ui-monospace, monospace;
7
+ --text-size: 17px;
8
+ --radius: 10px;
9
+ --map-image: var(--stars);
10
+ --map-size: 260px 260px, 310px 310px, 370px 370px, 230px 230px, 410px 410px, 290px 290px, 100% 100%, 100% 100%;
11
+ --page-image: var(--page-stars, none);
12
+ --page-size: 260px 260px, 310px 310px, 370px 370px, 230px 230px;
13
+ --territory-font: "IBM Plex Mono", monospace;
14
+ --territory-weight: 500;
15
+ --territory-spacing: 0.22em;
16
+ --territory-size: 13px;
17
+ --place-font: "IBM Plex Sans", sans-serif;
18
+ --paper: #f6f7fb;
19
+ --paper-raised: #ffffff;
20
+ --paper-sunk: #eceff7;
21
+ --ink: #141b33;
22
+ --ink-soft: #46507a;
23
+ --ink-faint: #7f88a8;
24
+ --rule: #d9deed;
25
+ --grid: #e6e9f3;
26
+ --accent: #2b3a8f;
27
+ --accent-soft: #e2e6f7;
28
+ --stars: radial-gradient(1px 1px at 12% 18%, #2b3a8f55 50%, transparent 51%), radial-gradient(1px 1px at 72% 34%, #2b3a8f44 50%, transparent 51%), radial-gradient(1.5px 1.5px at 38% 76%, #2b3a8f55 50%, transparent 51%), radial-gradient(1px 1px at 88% 82%, #2b3a8f33 50%, transparent 51%), repeating-radial-gradient(circle at 50% 50%, transparent 0 119px, rgb(43 58 143 / .08) 119px 120px);
29
+ --map-canvas: #f1f3fa;
30
+ --region-open-alpha: .05;
31
+ --region-closed-alpha: .12;
32
+ --route-from: #2b3a8f;
33
+ --route-to: #c2410c;
34
+ --route-both: #8c93ad;
35
+ color-scheme: light;
36
+ --reviewed: #2e7a58;
37
+ --machine: #5b6b7a;
38
+ --unverified: #a86f12;
39
+ --stale: #b0413e;
40
+ --cat-knowledge: #3b2fb0;
41
+ --cat-code: #1673b8;
42
+ --cat-reports: #a8660b;
43
+ --cat-agent: #6c3fb0;
44
+ --cat-other: #4a5578;
45
+ --g0: #3b2fb0;
46
+ --g1: #1673b8;
47
+ --g2: #b0306a;
48
+ --g3: #a8660b;
49
+ --g4: #138a6b;
50
+ --g5: #6c3fb0;
51
+ --g6: #b5461f;
52
+ --g7: #4a5578;
53
+ }
54
+
55
+ :root[data-mode="dark"] {
56
+ --paper: #0a0e1a;
57
+ --paper-raised: #10162a;
58
+ --paper-sunk: #070a14;
59
+ --ink: #e6e9f5;
60
+ --ink-soft: #a8b0cc;
61
+ --ink-faint: #6c7596;
62
+ --rule: #1e2640;
63
+ --grid: #111831;
64
+ --accent: #8ab4ff;
65
+ --accent-soft: #1a2548;
66
+ --stars: radial-gradient(1px 1px at 12% 18%, #ffffffcc 50%, transparent 51%), radial-gradient(1px 1px at 72% 34%, #ffffffaa 50%, transparent 51%), radial-gradient(1.5px 1.5px at 38% 76%, #cfe0ff 50%, transparent 51%), radial-gradient(1px 1px at 88% 82%, #ffffff99 50%, transparent 51%), radial-gradient(1px 1px at 55% 8%, #ffe9c7aa 50%, transparent 51%), radial-gradient(1px 1px at 24% 52%, #ffffff77 50%, transparent 51%), radial-gradient(ellipse at 70% 30%, rgb(90 70 200 / .10), transparent 60%), radial-gradient(ellipse at 20% 80%, rgb(40 140 220 / .08), transparent 55%);
67
+ --map-canvas: #05070f;
68
+ --page-stars: radial-gradient(1px 1px at 12% 18%, #ffffffcc 50%, transparent 51%), radial-gradient(1px 1px at 72% 34%, #ffffffaa 50%, transparent 51%), radial-gradient(1.5px 1.5px at 38% 76%, #cfe0ff 50%, transparent 51%), radial-gradient(1px 1px at 88% 82%, #ffffff99 50%, transparent 51%), radial-gradient(1px 1px at 55% 8%, #ffe9c7aa 50%, transparent 51%), radial-gradient(1px 1px at 24% 52%, #ffffff77 50%, transparent 51%);
69
+ --region-open-alpha: .10;
70
+ --region-closed-alpha: .22;
71
+ --route-from: #8ab4ff;
72
+ --route-to: #ffcf6b;
73
+ --route-both: #7a86a8;
74
+ --territory-ink: #c6cdea;
75
+ color-scheme: dark;
76
+ --reviewed: #5fbf8f;
77
+ --machine: #93a4b3;
78
+ --unverified: #e0a847;
79
+ --stale: #ec7a73;
80
+ --cat-knowledge: #7c5cff;
81
+ --cat-code: #3fb8ff;
82
+ --cat-reports: #ffb84d;
83
+ --cat-agent: #b07cff;
84
+ --cat-other: #9aa4c2;
85
+ --g0: #7c5cff;
86
+ --g1: #3fb8ff;
87
+ --g2: #ff5c9a;
88
+ --g3: #ffb84d;
89
+ --g4: #41e0b0;
90
+ --g5: #b07cff;
91
+ --g6: #ff7a45;
92
+ --g7: #9aa4c2;
93
+ }
94
+
95
+ @media (prefers-color-scheme: dark) {
96
+ :root:not([data-mode="light"]):not([data-mode="dark"]) {
97
+ --paper: #0a0e1a;
98
+ --paper-raised: #10162a;
99
+ --paper-sunk: #070a14;
100
+ --ink: #e6e9f5;
101
+ --ink-soft: #a8b0cc;
102
+ --ink-faint: #6c7596;
103
+ --rule: #1e2640;
104
+ --grid: #111831;
105
+ --accent: #8ab4ff;
106
+ --accent-soft: #1a2548;
107
+ --stars: radial-gradient(1px 1px at 12% 18%, #ffffffcc 50%, transparent 51%), radial-gradient(1px 1px at 72% 34%, #ffffffaa 50%, transparent 51%), radial-gradient(1.5px 1.5px at 38% 76%, #cfe0ff 50%, transparent 51%), radial-gradient(1px 1px at 88% 82%, #ffffff99 50%, transparent 51%), radial-gradient(1px 1px at 55% 8%, #ffe9c7aa 50%, transparent 51%), radial-gradient(1px 1px at 24% 52%, #ffffff77 50%, transparent 51%), radial-gradient(ellipse at 70% 30%, rgb(90 70 200 / .10), transparent 60%), radial-gradient(ellipse at 20% 80%, rgb(40 140 220 / .08), transparent 55%);
108
+ --map-canvas: #05070f;
109
+ --page-stars: radial-gradient(1px 1px at 12% 18%, #ffffffcc 50%, transparent 51%), radial-gradient(1px 1px at 72% 34%, #ffffffaa 50%, transparent 51%), radial-gradient(1.5px 1.5px at 38% 76%, #cfe0ff 50%, transparent 51%), radial-gradient(1px 1px at 88% 82%, #ffffff99 50%, transparent 51%), radial-gradient(1px 1px at 55% 8%, #ffe9c7aa 50%, transparent 51%), radial-gradient(1px 1px at 24% 52%, #ffffff77 50%, transparent 51%);
110
+ --region-open-alpha: .10;
111
+ --region-closed-alpha: .22;
112
+ --route-from: #8ab4ff;
113
+ --route-to: #ffcf6b;
114
+ --route-both: #7a86a8;
115
+ --territory-ink: #c6cdea;
116
+ color-scheme: dark;
117
+ --reviewed: #5fbf8f;
118
+ --machine: #93a4b3;
119
+ --unverified: #e0a847;
120
+ --stale: #ec7a73;
121
+ --cat-knowledge: #7c5cff;
122
+ --cat-code: #3fb8ff;
123
+ --cat-reports: #ffb84d;
124
+ --cat-agent: #b07cff;
125
+ --cat-other: #9aa4c2;
126
+ --g0: #7c5cff;
127
+ --g1: #3fb8ff;
128
+ --g2: #ff5c9a;
129
+ --g3: #ffb84d;
130
+ --g4: #41e0b0;
131
+ --g5: #b07cff;
132
+ --g6: #ff7a45;
133
+ --g7: #9aa4c2;
134
+ }
135
+ }