secondbrain-py 0.2.1__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 (273) hide show
  1. brain/__init__.py +0 -0
  2. brain/__main__.py +18 -0
  3. brain/_capture_command.py +445 -0
  4. brain/_compose.py +52 -0
  5. brain/activity.py +206 -0
  6. brain/ask.py +631 -0
  7. brain/audio.py +591 -0
  8. brain/backfill/__init__.py +12 -0
  9. brain/backfill/search_extras.py +141 -0
  10. brain/backfill/source_rows.py +101 -0
  11. brain/bin/__init__.py +1 -0
  12. brain/bin/_launcher.py +107 -0
  13. brain/bin/down.py +8 -0
  14. brain/bin/launchd.py +268 -0
  15. brain/bin/monitor.py +570 -0
  16. brain/bin/rebuild.py +8 -0
  17. brain/bin/status.py +8 -0
  18. brain/bin/up.py +8 -0
  19. brain/brief.py +272 -0
  20. brain/capture.py +49 -0
  21. brain/chat.py +293 -0
  22. brain/cli.py +9760 -0
  23. brain/cli_claude.py +81 -0
  24. brain/cli_connect.py +285 -0
  25. brain/cli_demo.py +266 -0
  26. brain/config.py +1949 -0
  27. brain/connect.py +925 -0
  28. brain/db.py +540 -0
  29. brain/demo/__init__.py +452 -0
  30. brain/demo/corpus/manifest.json +403 -0
  31. brain/demo/embedder.py +74 -0
  32. brain/durations.py +84 -0
  33. brain/edit_session.py +156 -0
  34. brain/editor.py +67 -0
  35. brain/elicit/__init__.py +16 -0
  36. brain/elicit/detectors.py +250 -0
  37. brain/elicit/drafter.py +70 -0
  38. brain/elicit/queue.py +220 -0
  39. brain/elicit/schema.py +48 -0
  40. brain/elicit/session.py +445 -0
  41. brain/embedding_targets.py +54 -0
  42. brain/embeddings.py +424 -0
  43. brain/enrichment.py +808 -0
  44. brain/errors.py +357 -0
  45. brain/eval/__init__.py +129 -0
  46. brain/eval/answer_eval.py +281 -0
  47. brain/eval/baseline.py +265 -0
  48. brain/eval/concept_extraction.py +378 -0
  49. brain/eval/corpus.py +152 -0
  50. brain/eval/errors.py +19 -0
  51. brain/eval/graph_baseline.py +226 -0
  52. brain/eval/graph_retrieval.py +202 -0
  53. brain/eval/graph_runner.py +319 -0
  54. brain/eval/metrics.py +101 -0
  55. brain/eval/runner.py +223 -0
  56. brain/format.py +783 -0
  57. brain/gaps.py +390 -0
  58. brain/graph_rag/__init__.py +94 -0
  59. brain/graph_rag/_retrieval_common.py +113 -0
  60. brain/graph_rag/aggregates.py +303 -0
  61. brain/graph_rag/aliases/__init__.py +583 -0
  62. brain/graph_rag/backends/__init__.py +10 -0
  63. brain/graph_rag/backends/_age_helpers.py +473 -0
  64. brain/graph_rag/backends/age.py +782 -0
  65. brain/graph_rag/backends/base.py +272 -0
  66. brain/graph_rag/build.py +344 -0
  67. brain/graph_rag/communities.py +644 -0
  68. brain/graph_rag/communities_summary.py +437 -0
  69. brain/graph_rag/concepts.py +202 -0
  70. brain/graph_rag/cooccur.py +193 -0
  71. brain/graph_rag/cross_type.py +312 -0
  72. brain/graph_rag/extract.py +885 -0
  73. brain/graph_rag/fuse.py +371 -0
  74. brain/graph_rag/global_.py +412 -0
  75. brain/graph_rag/grouping.py +372 -0
  76. brain/graph_rag/person_resolver.py +167 -0
  77. brain/graph_rag/reconcile.py +792 -0
  78. brain/graph_rag/relational.py +353 -0
  79. brain/graph_rag/retrieve.py +526 -0
  80. brain/graph_rag/router.py +288 -0
  81. brain/graph_rag/schema.py +320 -0
  82. brain/graph_rag/sync.py +237 -0
  83. brain/graph_rag/tenancy.py +43 -0
  84. brain/graph_rag/themes.py +501 -0
  85. brain/graph_rag/weighting.py +202 -0
  86. brain/ingest/__init__.py +1926 -0
  87. brain/ingest/chunker.py +249 -0
  88. brain/ingest/docx.py +40 -0
  89. brain/ingest/gmail.py +621 -0
  90. brain/ingest/markdown.py +37 -0
  91. brain/ingest/pdf.py +61 -0
  92. brain/ingest/stdin.py +22 -0
  93. brain/ingest/sub_tokens.py +91 -0
  94. brain/ingest/text.py +16 -0
  95. brain/interactions.py +205 -0
  96. brain/maintenance.py +355 -0
  97. brain/mcp_server.py +3405 -0
  98. brain/migrations/001_init.sql +43 -0
  99. brain/migrations/002_qwen3_embedding.sql +17 -0
  100. brain/migrations/003_vault_model.sql +41 -0
  101. brain/migrations/004_relax_content_hash_uniqueness.sql +18 -0
  102. brain/migrations/005_derived_links.sql +67 -0
  103. brain/migrations/006_dedup_file_by_source_path.sql +25 -0
  104. brain/migrations/007_email_thread_and_draft.sql +15 -0
  105. brain/migrations/008_gmail_thread_unique.sql +11 -0
  106. brain/migrations/009_chunks_weighted_tsv.sql +28 -0
  107. brain/migrations/010_interactions.sql +30 -0
  108. brain/migrations/011_documents_summary.sql +23 -0
  109. brain/migrations/012_graphrag.sql +171 -0
  110. brain/migrations/013_graphrag_communities.sql +125 -0
  111. brain/migrations/014_graphrag_community_summary_hash.sql +33 -0
  112. brain/migrations/015_interactions_graph_targets.sql +89 -0
  113. brain/migrations/016_index_hygiene.sql +61 -0
  114. brain/migrations/017_elicit.sql +30 -0
  115. brain/migrations/018_review_gap_signal_kinds.sql +40 -0
  116. brain/migrations/019_search_queries.sql +35 -0
  117. brain/migrations/020_link_suggestions.sql +40 -0
  118. brain/migrations/021_timeline_doc_date.sql +34 -0
  119. brain/migrations/022_link_suggestions_undirected.sql +84 -0
  120. brain/migrations/023_search_queries_fts_count.sql +28 -0
  121. brain/quartz_overrides/__init__.py +8 -0
  122. brain/quartz_overrides/quartz/bootstrap-cli.mjs +65 -0
  123. brain/quartz_overrides/quartz/build.ts +568 -0
  124. brain/quartz_overrides/quartz/cli/args.js +152 -0
  125. brain/quartz_overrides/quartz/cli/build_partial_handler.js +544 -0
  126. brain/quartz_overrides/quartz/cli/handlers.js +636 -0
  127. brain/quartz_overrides/quartz/components/CommandPalette.tsx +172 -0
  128. brain/quartz_overrides/quartz/components/Explorer.tsx +198 -0
  129. brain/quartz_overrides/quartz/components/Footer.tsx +27 -0
  130. brain/quartz_overrides/quartz/components/Graph.tsx +468 -0
  131. brain/quartz_overrides/quartz/components/PageTitle.tsx +72 -0
  132. brain/quartz_overrides/quartz/components/RelatedDocs.tsx +38 -0
  133. brain/quartz_overrides/quartz/components/Search.tsx +161 -0
  134. brain/quartz_overrides/quartz/components/SummaryLede.tsx +72 -0
  135. brain/quartz_overrides/quartz/components/index.ts +92 -0
  136. brain/quartz_overrides/quartz/components/pages/TagContent.tsx +272 -0
  137. brain/quartz_overrides/quartz/components/scripts/commandPalette.inline.ts +665 -0
  138. brain/quartz_overrides/quartz/components/scripts/explorer.inline.ts +768 -0
  139. brain/quartz_overrides/quartz/components/scripts/graph.inline.ts +2302 -0
  140. brain/quartz_overrides/quartz/components/scripts/relatedDocs.inline.ts +163 -0
  141. brain/quartz_overrides/quartz/components/scripts/search.inline.ts +1011 -0
  142. brain/quartz_overrides/quartz/plugins/emitters/contentIndex.ts +546 -0
  143. brain/quartz_overrides/quartz/plugins/transformers/codeCopy.ts +94 -0
  144. brain/quartz_overrides/quartz/plugins/transformers/derivedFenceMark.ts +302 -0
  145. brain/quartz_overrides/quartz/plugins/transformers/emailThread.ts +148 -0
  146. brain/quartz_overrides/quartz/plugins/transformers/emptyDoorFilter.ts +213 -0
  147. brain/quartz_overrides/quartz/plugins/transformers/index.ts +114 -0
  148. brain/quartz_overrides/quartz/plugins/transformers/linkKindMark.ts +205 -0
  149. brain/quartz_overrides/quartz/plugins/transformers/linkSourceTag.ts +104 -0
  150. brain/quartz_overrides/quartz/plugins/transformers/relativeDate.ts +100 -0
  151. brain/quartz_overrides/quartz/plugins/transformers/reloadSignal.ts +131 -0
  152. brain/quartz_overrides/quartz/processors/parse.ts +371 -0
  153. brain/quartz_overrides/quartz/processors/parser_cache.ts +78 -0
  154. brain/quartz_overrides/quartz/static/brain-logo-dark.png +0 -0
  155. brain/quartz_overrides/quartz/static/brain-logo-light.png +0 -0
  156. brain/quartz_overrides/quartz/static/codeCopy.js +196 -0
  157. brain/quartz_overrides/quartz/static/emailThread.js +334 -0
  158. brain/quartz_overrides/quartz/static/favicon.ico +0 -0
  159. brain/quartz_overrides/quartz/static/icon.png +0 -0
  160. brain/quartz_overrides/quartz/static/linkSourceTag.js +104 -0
  161. brain/quartz_overrides/quartz/static/relativeDate.js +142 -0
  162. brain/quartz_overrides/quartz/static/reload.js +168 -0
  163. brain/quartz_overrides/quartz/styles/brain/_article.scss +252 -0
  164. brain/quartz_overrides/quartz/styles/brain/_atmosphere.scss +113 -0
  165. brain/quartz_overrides/quartz/styles/brain/_callouts.scss +180 -0
  166. brain/quartz_overrides/quartz/styles/brain/_cmdk.scss +7 -0
  167. brain/quartz_overrides/quartz/styles/brain/_code.scss +208 -0
  168. brain/quartz_overrides/quartz/styles/brain/_command_palette.scss +369 -0
  169. brain/quartz_overrides/quartz/styles/brain/_email_thread.scss +228 -0
  170. brain/quartz_overrides/quartz/styles/brain/_explorer.scss +142 -0
  171. brain/quartz_overrides/quartz/styles/brain/_home.scss +182 -0
  172. brain/quartz_overrides/quartz/styles/brain/_links.scss +322 -0
  173. brain/quartz_overrides/quartz/styles/brain/_marginalia.scss +117 -0
  174. brain/quartz_overrides/quartz/styles/brain/_motion.scss +175 -0
  175. brain/quartz_overrides/quartz/styles/brain/_people_hub.scss +100 -0
  176. brain/quartz_overrides/quartz/styles/brain/_related_docs.scss +137 -0
  177. brain/quartz_overrides/quartz/styles/brain/_search.scss +252 -0
  178. brain/quartz_overrides/quartz/styles/brain/_sidebar.scss +468 -0
  179. brain/quartz_overrides/quartz/styles/brain/_summary_lede.scss +56 -0
  180. brain/quartz_overrides/quartz/styles/brain/_surface.scss +43 -0
  181. brain/quartz_overrides/quartz/styles/brain/_tag_content.scss +118 -0
  182. brain/quartz_overrides/quartz/styles/brain/_tokens.scss +197 -0
  183. brain/quartz_overrides/quartz/styles/brain/_typography.scss +92 -0
  184. brain/quartz_overrides/quartz/styles/custom.scss +89 -0
  185. brain/quartz_overrides/quartz/styles/graph.scss +505 -0
  186. brain/quartz_overrides/quartz/util/ctx.ts +92 -0
  187. brain/quartz_overrides/quartz/util/fastpath_manifest.ts +608 -0
  188. brain/quartz_overrides/quartz/util/path.ts +358 -0
  189. brain/quartz_overrides/quartz/util/sourceIcons.ts +55 -0
  190. brain/quartz_overrides/quartz.config.ts +270 -0
  191. brain/quartz_overrides/quartz.layout.ts +314 -0
  192. brain/queries.py +1188 -0
  193. brain/rank_fusion.py +8 -0
  194. brain/resurface.py +210 -0
  195. brain/review/__init__.py +26 -0
  196. brain/review/emit.py +27 -0
  197. brain/review/queries.py +436 -0
  198. brain/review/render.py +196 -0
  199. brain/review/scans.py +355 -0
  200. brain/review/weekly.py +413 -0
  201. brain/search.py +704 -0
  202. brain/set_similarity.py +15 -0
  203. brain/setup.py +1205 -0
  204. brain/tags.py +56 -0
  205. brain/templates/Caddyfile.j2 +9 -0
  206. brain/templates/__init__.py +1 -0
  207. brain/templates/bin/__init__.py +1 -0
  208. brain/templates/bin/_brain-brief-fg.sh +25 -0
  209. brain/templates/bin/_brain-build-fg.sh +53 -0
  210. brain/templates/bin/_brain-watcher-fg.sh +65 -0
  211. brain/templates/bin/brain-down.sh +89 -0
  212. brain/templates/bin/brain-status.sh +83 -0
  213. brain/templates/bin/brain-up.sh +221 -0
  214. brain/templates/docker/age/Dockerfile +79 -0
  215. brain/templates/docker-compose.stock.yml.j2 +26 -0
  216. brain/templates/docker-compose.yml.j2 +34 -0
  217. brain/templates/env.example +190 -0
  218. brain/templates/launchd/__init__.py +1 -0
  219. brain/templates/launchd/com.brain.brief.plist.j2 +45 -0
  220. brain/templates/launchd/com.brain.build.plist.j2 +46 -0
  221. brain/templates/launchd/com.brain.watcher.plist.j2 +46 -0
  222. brain/templates/skill/SKILL.md +63 -0
  223. brain/templates/skill/__init__.py +1 -0
  224. brain/timeline.py +834 -0
  225. brain/todo.py +124 -0
  226. brain/uninstall.py +185 -0
  227. brain/vault/__init__.py +115 -0
  228. brain/vault/_atomic.py +25 -0
  229. brain/vault/daily_index.py +228 -0
  230. brain/vault/derived_links/__init__.py +50 -0
  231. brain/vault/derived_links/directory.py +683 -0
  232. brain/vault/derived_links/fence.py +408 -0
  233. brain/vault/derived_links/gws.py +64 -0
  234. brain/vault/derived_links/participants.py +143 -0
  235. brain/vault/derived_links/pass_runner.py +362 -0
  236. brain/vault/derived_links/rules.py +137 -0
  237. brain/vault/export.py +683 -0
  238. brain/vault/frontmatter.py +165 -0
  239. brain/vault/graph.py +620 -0
  240. brain/vault/graph_format.py +388 -0
  241. brain/vault/link_rewrite.py +235 -0
  242. brain/vault/links.py +260 -0
  243. brain/vault/note_builder.py +211 -0
  244. brain/vault/paths.py +55 -0
  245. brain/vault/quartz_overlay.py +236 -0
  246. brain/vault/rename.py +591 -0
  247. brain/vault/resolver.py +304 -0
  248. brain/vault/slug.py +127 -0
  249. brain/vault/sync.py +1513 -0
  250. brain/vault/sync_summaries.py +264 -0
  251. brain/vault/templates.py +145 -0
  252. brain/vault/watch.py +1052 -0
  253. brain/wiki/__init__.py +6 -0
  254. brain/wiki/_github_slugger.py +76 -0
  255. brain/wiki/_person_name.py +314 -0
  256. brain/wiki/build_homepage.py +541 -0
  257. brain/wiki/build_partial.py +273 -0
  258. brain/wiki/build_people.py +934 -0
  259. brain/wiki/build_related.py +758 -0
  260. brain/wiki/build_swap.py +585 -0
  261. brain/wiki/build_watcher.py +975 -0
  262. brain/wiki/edit_classifier.py +215 -0
  263. brain/wiki/errors.py +10 -0
  264. brain/wiki/fastpath_manifest.py +475 -0
  265. brain/wiki/fastpath_state.py +174 -0
  266. brain/wiki/install.py +296 -0
  267. brain/wiki/slug.py +111 -0
  268. secondbrain_py-0.2.1.dist-info/METADATA +195 -0
  269. secondbrain_py-0.2.1.dist-info/RECORD +273 -0
  270. secondbrain_py-0.2.1.dist-info/WHEEL +5 -0
  271. secondbrain_py-0.2.1.dist-info/entry_points.txt +11 -0
  272. secondbrain_py-0.2.1.dist-info/licenses/LICENSE +21 -0
  273. secondbrain_py-0.2.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,197 @@
1
+ // Brain design tokens — the single source of truth for the redesign.
2
+ //
3
+ // Defined as CSS custom properties on `:root` and `:root[saved-theme="dark"]`
4
+ // (Quartz toggles dark mode by setting the `saved-theme` attribute on
5
+ // `<html>` — see `quartz/components/scripts/darkmode.inline.ts`).
6
+ //
7
+ // What lives here:
8
+ // * Surface tiers (`--surface-0/1/2`) — page bg, card/sidebar bg,
9
+ // inline-code/popover bg.
10
+ // * Ink scale (`--ink-0/1/2`) — primary / secondary / muted text.
11
+ // Aliased to Quartz's `--dark` / `--darkgray` / `--gray` so the
12
+ // scale stays in sync with `theme.colors`.
13
+ // * Accent aliases (`--accent-soft`, `--accent-strong`) — the
14
+ // softened (12% alpha) and full-strength terracotta. Aliased to
15
+ // Quartz's `--highlight` and `--secondary` respectively.
16
+ // * Hairline rule color (`--rule`) — used for column rules,
17
+ // callout borders, indent guides.
18
+ // * Shadow tiers (`--shadow-sm`, `--shadow-md`) — subtle depth
19
+ // for cards and pre-blocks. Dark mode swaps to outline-shadows
20
+ // because alpha shadows on near-black bg lose depth.
21
+ // * Modular type scale (`--fs-xs … --fs-4xl`) — major-third (1.250)
22
+ // scale; consumed by `typography.scss` and `article.scss`.
23
+ // * Motion timings (`--motion-fast/mid/slow`) + shared easing
24
+ // (`--motion-easing`) — used by `links.scss`, `motion.scss`,
25
+ // and the Lane D Cmd-K modal.
26
+ // * Source palette (`--brain-source-*`) + tier palette
27
+ // (`--brain-tier-*`) — moved from `graph.scss` so the graph and
28
+ // ingested-link styles share one source of truth (Lane B reads
29
+ // `--brain-source-*` for `[kind=ingested]` left-rail color).
30
+ //
31
+ // What does NOT live here:
32
+ // * `--light`, `--lightgray`, `--gray`, `--darkgray`, `--dark`,
33
+ // `--secondary`, `--tertiary`, `--highlight`, `--textHighlight`,
34
+ // `--bodyFont`, `--headerFont`, `--codeFont`, `--titleFont` —
35
+ // these are emitted by `quartz/util/theme.ts::joinStyles()` from
36
+ // `quartz.config.ts` `theme.colors` / `theme.typography`. Don't
37
+ // re-declare them here; alias them when useful.
38
+
39
+ :root {
40
+ // Surface tiers (light mode). Pure-neutral zinc tiers — Linear-style
41
+ // pure white on top of progressively-tinted near-whites. Reads as
42
+ // tech-forward chrome, not paper.
43
+ --surface-0: #ffffff; // page bg (matches `--light`)
44
+ --surface-1: #fafafa; // cards, sidebars (zinc-50)
45
+ --surface-2: #f4f4f5; // inline code, popovers (zinc-100)
46
+
47
+ // Ink scale (light mode). Aliased to Quartz tokens so future
48
+ // palette tweaks in `quartz.config.ts` propagate without hunting.
49
+ --ink-0: var(--dark); // primary text (deepest)
50
+ --ink-1: var(--darkgray); // secondary text / body running color
51
+ --ink-2: var(--gray); // muted text, metadata, dingbats
52
+
53
+ // Accent aliases. Lane B (`links.scss`) consumes these heavily.
54
+ --accent-soft: var(--highlight); // 12%-alpha indigo-violet
55
+ --accent-strong: var(--secondary); // full-saturation indigo-violet
56
+
57
+ // Semantic font alias. Quartz emits `--headerFont` / `--bodyFont` /
58
+ // `--codeFont` / `--titleFont` from `quartz.config.ts`; the redesign
59
+ // plan and downstream Lane B/C/D code refer to the *role*
60
+ // (`--displayFont`) rather than Quartz's internal naming. One alias
61
+ // keeps the plan's selectors verbatim across all four lanes.
62
+ --displayFont: var(--headerFont);
63
+
64
+ // Hairline rule. zinc-200, matches `--lightgray` for a clean
65
+ // tech-forward hairline.
66
+ --rule: #e4e4e7;
67
+
68
+ // Scrim — backdrop tint for modal overlays (Cmd-K, future modals).
69
+ // Solid neutral 60% black; tech aesthetic prefers an honest neutral
70
+ // scrim over a warm-tinted one.
71
+ --scrim: rgba(0, 0, 0, 0.6);
72
+
73
+ // Shadow tiers. Tech-forward subtle elevation — a hairline top edge
74
+ // (1px) plus a slightly larger downward drop. Linear's exact recipe.
75
+ --shadow-sm: 0 1px 0 rgba(0, 0, 0, 0.04), 0 1px 2px rgba(0, 0, 0, 0.06);
76
+ --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08);
77
+
78
+ // Modular scale (1.250 — major third). Single ratio across
79
+ // headings, metadata, body, and pull-quotes; keeps the page in
80
+ // visual rhythm without per-element fine-tuning.
81
+ --fs-xs: 0.75rem;
82
+ --fs-sm: 0.875rem;
83
+ --fs-base: 1rem;
84
+ --fs-md: 1.125rem;
85
+ --fs-lg: 1.25rem;
86
+ --fs-xl: 1.563rem;
87
+ --fs-2xl: 1.953rem;
88
+ --fs-3xl: 2.441rem;
89
+ --fs-4xl: 3.052rem;
90
+
91
+ // Motion timings. Easing is a smooth-out-quint
92
+ // (`cubic-bezier(0.2, 0.8, 0.2, 1)`) — overshoots the midpoint
93
+ // briefly then eases in, which feels paper-like and confident
94
+ // rather than bouncy. Defined as a named token so transition
95
+ // declarations stay short: `transition: opacity var(--motion-fast) var(--motion-easing)`.
96
+ --motion-fast: 150ms;
97
+ --motion-mid: 250ms;
98
+ --motion-slow: 400ms;
99
+ --motion-easing: cubic-bezier(0.2, 0.8, 0.2, 1);
100
+
101
+ // Stagger delays for the page-load reveal sequence (Lane D —
102
+ // `_motion.scss`). Sequence-relative — each step is one
103
+ // `--motion-fast` (150ms) apart, starting at one half-step (50ms)
104
+ // so the cascade reads as a smooth flow rather than three separate
105
+ // animations. Theme-agnostic; no dark-mode counterpart needed.
106
+ --motion-stagger-1: 50ms;
107
+ --motion-stagger-2: 150ms;
108
+ --motion-stagger-3: 250ms;
109
+
110
+ // Tier palette (moved from `graph.scss`). `vault` covers authored
111
+ // notes (Phase A/B/C); `ingested` covers `_ingested/` notes that
112
+ // came from external sources via `brain ingest*`. Terracotta vs
113
+ // sage gives a strong cluster cue without clashing with the
114
+ // default Quartz body palette.
115
+ --brain-tier-vault: #b85427;
116
+ --brain-tier-ingested: #7a8a6b;
117
+
118
+ // Source palette (moved from `graph.scss`). Each `brain ingest
119
+ // --source <name>` value gets a distinct hue so a quick eye-scan
120
+ // over the graph clusters krisp / slack / gmail / manual zones
121
+ // at a glance. Hues picked to be perceptually distinct in light
122
+ // mode and to keep contrast against the cream `--surface-0` bg.
123
+ // Lane B reads these for the ingested-link source-tint left rail.
124
+ --brain-source-krisp: #8b6cab;
125
+ --brain-source-slack: #4a9eba;
126
+ --brain-source-gmail: #d4956a;
127
+ --brain-source-manual: #5c5340;
128
+
129
+ // Callout palette (Lane C, Linear variant). Tech-forward Tailwind-500
130
+ // hues against pure-white surfaces. Consumed by `_callouts.scss` to
131
+ // retint stock chrome via the `--type-color` pattern, and by
132
+ // `_code.scss` for the success-state copy-button flash.
133
+ --callout-note: var(--accent-strong); // indigo-violet (Linear accent)
134
+ --callout-info: #0ea5e9; // sky-500
135
+ --callout-abstract: #06b6d4; // cyan-500
136
+ --callout-tip: #10b981; // emerald-500
137
+ --callout-success: #22c55e; // green-500
138
+ --callout-question: #eab308; // yellow-500
139
+ --callout-warning: #f59e0b; // amber-500
140
+ --callout-danger: #ef4444; // red-500
141
+ --callout-failure: #ef4444; // shared with danger
142
+ --callout-bug: #ec4899; // pink-500
143
+ --callout-example: #8b5cf6; // violet-500
144
+ --callout-quote: var(--ink-2); // muted ink — quote reads as soft
145
+ }
146
+
147
+ // Dark mode. Quartz toggles via `<html saved-theme="dark">` (see
148
+ // `darkmode.inline.ts` line 3 + the matching `:root[saved-theme="dark"]`
149
+ // declarations in `quartz/util/theme.ts`). The legacy graph.scss block
150
+ // uses `[data-theme="dark"]` which never matches — preserved here as
151
+ // the correct selector so source palette swaps actually fire in dark mode.
152
+ :root[saved-theme="dark"] {
153
+ // Charcoal surface tiers. Linear-style near-black on top of slightly
154
+ // lifted neutral charcoals — the headline mode for the tech-forward
155
+ // variant.
156
+ --surface-0: #0a0a0a;
157
+ --surface-1: #161618;
158
+ --surface-2: #1f1f23;
159
+
160
+ --rule: #27272a;
161
+
162
+ // Scrim — solid neutral black at 60% so the scrim doesn't pull warm
163
+ // at the edges. Matches light-mode's neutral treatment.
164
+ --scrim: rgba(0, 0, 0, 0.6);
165
+
166
+ // Outline shadows replace alpha shadows in dark mode. Alpha-on-near-
167
+ // black loses all visible elevation; a 1px hairline outline reads as
168
+ // depth without darkening the surface further.
169
+ --shadow-sm: 0 0 0 1px var(--rule);
170
+ --shadow-md: 0 0 0 1px var(--rule), 0 4px 16px rgba(0, 0, 0, 0.4);
171
+
172
+ // Tier + source palette (lifted lightness, muted saturation for
173
+ // dark-bg legibility). Same hue dimensions as light mode.
174
+ --brain-tier-vault: #e08552;
175
+ --brain-tier-ingested: #c5cda1;
176
+
177
+ --brain-source-krisp: #b491cf;
178
+ --brain-source-slack: #76c1d9;
179
+ --brain-source-gmail: #e8b385;
180
+ --brain-source-manual: #8a7e63;
181
+
182
+ // Callout palette — dark variant (Linear). Lifted ~30% lightness from
183
+ // the light-mode Tailwind-500 hues into Tailwind-400 territory so
184
+ // the chips read on charcoal without being too aggressive.
185
+ --callout-note: var(--accent-strong); // brighter indigo (already lifted via theme.colors)
186
+ --callout-info: #38bdf8; // sky-400
187
+ --callout-abstract: #22d3ee; // cyan-400
188
+ --callout-tip: #34d399; // emerald-400
189
+ --callout-success: #4ade80; // green-400
190
+ --callout-question: #facc15; // yellow-400
191
+ --callout-warning: #fbbf24; // amber-400
192
+ --callout-danger: #f87171; // red-400
193
+ --callout-failure: #f87171;
194
+ --callout-bug: #f472b6; // pink-400
195
+ --callout-example: #a78bfa; // violet-400
196
+ --callout-quote: var(--ink-2);
197
+ }
@@ -0,0 +1,92 @@
1
+ // Brain typography system — Linear-style variant of the 2026 redesign.
2
+ //
3
+ // `quartz.config.ts` `theme.typography` sets:
4
+ // header → Geist (var(--headerFont) / var(--titleFont))
5
+ // body → Geist (var(--bodyFont))
6
+ // code → Geist Mono (var(--codeFont))
7
+ //
8
+ // This file:
9
+ // * Locks the modular scale onto `body` defaults + h1–h4.
10
+ // * Tightens leading + tracking to Geist's intended slight tightness.
11
+ // * Stays on lining proportional numerals — the tech aesthetic
12
+ // prefers clean digits everywhere; tabular contexts (`th`, `td`)
13
+ // still switch to tabular-nums for column alignment.
14
+ //
15
+ // Order note: this file `@use`s nothing — relies on `_tokens.scss`
16
+ // having been imported earlier in `custom.scss` so `--fs-*` resolve.
17
+
18
+ html {
19
+ // Anchor the rem scale at 16px on the root so `--fs-base: 1rem`
20
+ // lands at exactly 16px regardless of any user-agent tweaks Quartz's
21
+ // base.scss might inherit. Geist at 16px is its body sweet spot.
22
+ font-size: 100%;
23
+ }
24
+
25
+ body {
26
+ // Body running text: Geist, lining numerals, slightly negative
27
+ // tracking (Geist's intended baseline tightness).
28
+ font-family: var(--bodyFont);
29
+ font-size: var(--fs-base);
30
+ line-height: 1.6;
31
+ letter-spacing: -0.011em;
32
+
33
+ // Lining proportional numerals + standard kerning/ligatures. Geist
34
+ // doesn't ship oldstyle numerals; lining numerals are correct for
35
+ // the tech aesthetic anyway.
36
+ font-feature-settings: "kern", "liga";
37
+ font-variant-numeric: lining-nums proportional-nums;
38
+ }
39
+
40
+ // Display headings — Geist semibold. Tighter tracking than body
41
+ // because grotesk display faces sit visually loose at large sizes
42
+ // without negative tracking. Weight 600 (semibold) reads more
43
+ // confident than 700 against grotesk body.
44
+ h1,
45
+ h2,
46
+ h3,
47
+ h4,
48
+ h5,
49
+ h6 {
50
+ font-family: var(--headerFont);
51
+ font-weight: 600;
52
+ line-height: 1.15;
53
+ letter-spacing: -0.022em;
54
+ font-variant-numeric: lining-nums proportional-nums;
55
+ }
56
+
57
+ h1 {
58
+ font-size: var(--fs-3xl);
59
+ }
60
+ h2 {
61
+ font-size: var(--fs-2xl);
62
+ }
63
+ h3 {
64
+ font-size: var(--fs-xl);
65
+ }
66
+ h4 {
67
+ font-size: var(--fs-lg);
68
+ }
69
+ h5 {
70
+ font-size: var(--fs-md);
71
+ }
72
+ h6 {
73
+ font-size: var(--fs-base);
74
+ }
75
+
76
+ // Tabular data switches to tabular widths so columns of numbers align
77
+ // under each other.
78
+ th,
79
+ td {
80
+ font-variant-numeric: lining-nums tabular-nums;
81
+ font-feature-settings: "tnum", "kern";
82
+ }
83
+
84
+ // Code paths stay on Geist Mono. base.scss already wires `code`,
85
+ // `pre code`, `kbd` to `var(--codeFont)`; we just lock numerals to
86
+ // tabular so column-aligned snippets read cleanly.
87
+ code,
88
+ kbd,
89
+ pre,
90
+ samp {
91
+ font-variant-numeric: tabular-nums;
92
+ }
@@ -0,0 +1,89 @@
1
+ // Brain wiki global styles — entry point for the 2026 redesign.
2
+ //
3
+ // This file is installed at `<vault>/.quartz/quartz/styles/custom.scss`
4
+ // by `brain vault render --overlay` and is Quartz's intended seam for
5
+ // global customizations (stock content is just `@use "./base.scss"`).
6
+ //
7
+ // Layering order (top-to-bottom = first-loaded → last-loaded):
8
+ //
9
+ // 1. base.scss — Quartz's stock chrome + variables (must come
10
+ // first; everything below cascades over it).
11
+ // 2. brain/tokens — design tokens: colors, fonts, sizes, motion.
12
+ // Defines the vars consumed everywhere else.
13
+ // 3. brain/typography — modular type scale + Newsreader / Fraunces /
14
+ // JetBrains Mono application + numerals.
15
+ // 4. brain/surface — page / card / inline-code surface tiers +
16
+ // shadows.
17
+ // 5. brain/atmosphere — Lane D — paper grain, hairline rules,
18
+ // dingbat section breaks.
19
+ // 6. brain/motion — Lane D — page-load reveal animations and
20
+ // shared timing/easing tokens consumers use.
21
+ // 7. brain/links — Lane B — link-kind underline + tag chip +
22
+ // source-tinted ingested-tier rules.
23
+ // 8. brain/sidebar — Lane C — left/right sidebar layout polish.
24
+ // 8a. brain/command_palette — Lane C/P5.3 — Cmd/Ctrl-P palette modal visuals.
25
+ // Listed between sidebar and article so the
26
+ // modal chrome inherits the surface scale
27
+ // but doesn't interfere with article rules.
28
+ // 8b. brain/search — P3.2 — search popover: chip rail, source-
29
+ // icon result rows, lazy preview pane. Loaded
30
+ // after sidebar so the chip rail can layer on
31
+ // top of the sticky search header without the
32
+ // sidebar's bottom hairline painting through.
33
+ // 9. brain/article — Lane C — article column measure + heading
34
+ // rhythm + blockquote + meta typography.
35
+ // 10. brain/marginalia — Lane D — backlinks-as-figure-margin notes
36
+ // on wide viewports.
37
+ // 11. brain/callouts — Lane C — refreshed callout palette + chrome.
38
+ // 12. brain/code — Lane C — pre/inline code surface + copy
39
+ // button styling.
40
+ // 13. brain/home — Lane C — index card grid override.
41
+ // 14. brain/tag_content — P3.3 — per-tag listing rows.
42
+ // 15. brain/explorer — P4.2 — Explorer "Show ingested" toggle pill.
43
+ // 16. brain/email_thread — P4.4 — email-thread reading mode:
44
+ // per-message <details> chrome + "Show only
45
+ // my replies" filter button + visibility
46
+ // rule. Loaded after `article` so the
47
+ // section card chrome cascades over the
48
+ // base article-level <details> styling
49
+ // (none in stock Quartz, but defensively
50
+ // ordered).
51
+ // 17. brain/related_docs — P5.2 — semantic-related right-sidebar
52
+ // panel fed by `/static/related/<slug>.json`.
53
+ // 18. brain/people_hub — 2026-05-07 People Hub — `kind: people`
54
+ // page-kind styling for `<vault>/people/<slug>.md`
55
+ // + the `/people/index` directory landing page.
56
+ // 19. brain/summary_lede — Wave Q2-SUMMARY-WIKI — soft TL;DR card
57
+ // above the article body. Reads
58
+ // `frontmatter.summary` (sourced from Q1-D
59
+ // `documents.summary`). Loaded last so the
60
+ // card rules cascade over earlier article /
61
+ // callout chrome.
62
+ //
63
+ // Lane A (this PR) ships only `tokens`, `typography`, `surface`. Lanes
64
+ // B/C/D files exist as one-line placeholder stubs so SCSS can resolve
65
+ // every `@use` import — without the stubs, dart-sass aborts the
66
+ // build with "Can't find stylesheet to import." Subsequent lanes
67
+ // fill the placeholders in place.
68
+
69
+ @use "./base.scss";
70
+ @use "./brain/tokens";
71
+ @use "./brain/typography";
72
+ @use "./brain/surface";
73
+ @use "./brain/atmosphere"; // Lane D
74
+ @use "./brain/motion"; // Lane D
75
+ @use "./brain/links";
76
+ @use "./brain/sidebar";
77
+ @use "./brain/related_docs"; // P5.2 — semantic-related right-sidebar panel
78
+ @use "./brain/command_palette"; // P5.3 — Cmd-P quick-open modal visuals
79
+ @use "./brain/search"; // P3.2 — Search popover: chips, rows, preview
80
+ @use "./brain/article";
81
+ @use "./brain/marginalia"; // Lane D
82
+ @use "./brain/callouts";
83
+ @use "./brain/code";
84
+ @use "./brain/home";
85
+ @use "./brain/tag_content"; // P3.3 — per-tag listing rows (icon + title + date + snippet + footer)
86
+ @use "./brain/explorer"; // P4.2 — Explorer "Show ingested" toggle pill
87
+ @use "./brain/email_thread"; // P4.4 — Email-thread reading mode (collapsibles + replies-only filter)
88
+ @use "./brain/people_hub"; // 2026-05-07 People Hub — `kind: people` page styling for `<vault>/people/`
89
+ @use "./brain/summary_lede"; // Wave Q2-SUMMARY-WIKI — TL;DR lede above article body