chapterhouse 0.7.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/agents/korg.agent.md +65 -0
  2. package/dist/api/korg.js +34 -0
  3. package/dist/api/korg.test.js +42 -0
  4. package/dist/api/server.js +238 -2
  5. package/dist/api/server.test.js +199 -0
  6. package/dist/config.js +28 -0
  7. package/dist/config.test.js +20 -0
  8. package/dist/copilot/agents.js +3 -4
  9. package/dist/copilot/agents.test.js +12 -1
  10. package/dist/copilot/orchestrator.js +12 -1
  11. package/dist/copilot/orchestrator.test.js +3 -7
  12. package/dist/copilot/system-message.js +12 -10
  13. package/dist/copilot/system-message.test.js +6 -1
  14. package/dist/copilot/tools.js +193 -375
  15. package/dist/copilot/tools.memory.test.js +32 -0
  16. package/dist/copilot/tools.wiki.test.js +80 -59
  17. package/dist/copilot/turn-event-log-env.test.js +11 -15
  18. package/dist/daemon.js +19 -0
  19. package/dist/memory/decisions.js +6 -5
  20. package/dist/memory/entities.js +20 -9
  21. package/dist/memory/eot.js +30 -8
  22. package/dist/memory/eot.test.js +220 -6
  23. package/dist/memory/hooks.js +151 -0
  24. package/dist/memory/hooks.test.js +325 -0
  25. package/dist/memory/hot-tier.js +37 -0
  26. package/dist/memory/hot-tier.test.js +30 -0
  27. package/dist/memory/housekeeping-scheduler.js +35 -0
  28. package/dist/memory/housekeeping-scheduler.test.js +50 -0
  29. package/dist/memory/inbox.js +10 -0
  30. package/dist/memory/index.js +3 -1
  31. package/dist/memory/migration.js +244 -0
  32. package/dist/memory/migration.test.js +108 -0
  33. package/dist/memory/reflect.js +273 -0
  34. package/dist/memory/reflect.test.js +254 -0
  35. package/dist/paths.js +31 -11
  36. package/dist/store/db.js +187 -4
  37. package/dist/store/db.test.js +66 -2
  38. package/dist/test/helpers/reset-singletons.js +8 -0
  39. package/dist/test/helpers/reset-singletons.test.js +37 -0
  40. package/dist/test/setup-env.js +9 -1
  41. package/dist/wiki/consolidation.js +641 -0
  42. package/dist/wiki/consolidation.test.js +143 -0
  43. package/dist/wiki/frontmatter.js +48 -0
  44. package/dist/wiki/frontmatter.test.js +42 -0
  45. package/dist/wiki/fs.js +22 -13
  46. package/dist/wiki/index-manager.js +305 -330
  47. package/dist/wiki/index-manager.test.js +265 -144
  48. package/dist/wiki/ingest.js +347 -0
  49. package/dist/wiki/ingest.test.js +111 -0
  50. package/dist/wiki/links.js +151 -0
  51. package/dist/wiki/links.test.js +176 -0
  52. package/dist/wiki/log-manager.js +8 -5
  53. package/dist/wiki/log-manager.test.js +4 -0
  54. package/dist/wiki/migrate-topics.test.js +16 -6
  55. package/dist/wiki/scheduler.js +118 -0
  56. package/dist/wiki/scheduler.test.js +64 -0
  57. package/dist/wiki/timeline.js +51 -0
  58. package/dist/wiki/timeline.test.js +65 -0
  59. package/dist/wiki/topic-structure.js +1 -1
  60. package/package.json +1 -1
  61. package/skills/pkb-ideas/SKILL.md +78 -0
  62. package/skills/pkb-ideas/_meta.json +4 -0
  63. package/skills/pkb-org/SKILL.md +82 -0
  64. package/skills/pkb-org/_meta.json +4 -0
  65. package/skills/pkb-people/SKILL.md +74 -0
  66. package/skills/pkb-people/_meta.json +4 -0
  67. package/skills/pkb-research/SKILL.md +83 -0
  68. package/skills/pkb-research/_meta.json +4 -0
  69. package/skills/pkb-source/SKILL.md +38 -0
  70. package/skills/pkb-source/_meta.json +4 -0
  71. package/skills/wiki-conventions/SKILL.md +5 -5
  72. package/web/dist/assets/{index-DuKYxMIR.css → index-5kz9aRU9.css} +1 -1
  73. package/web/dist/assets/{index-DytB69KC.js → index-BbX9RKf3.js} +91 -89
  74. package/web/dist/assets/index-BbX9RKf3.js.map +1 -0
  75. package/web/dist/index.html +2 -2
  76. package/dist/wiki/context.js +0 -138
  77. package/dist/wiki/fix.js +0 -335
  78. package/dist/wiki/fix.test.js +0 -350
  79. package/dist/wiki/lint.js +0 -451
  80. package/dist/wiki/lint.test.js +0 -329
  81. package/web/dist/assets/index-DytB69KC.js.map +0 -1
@@ -0,0 +1,78 @@
1
+ ---
2
+ name: pkb-ideas
3
+ description: Lightweight idea capture in the PKB. Creates pages/ideas/<slug>.md with a status lifecycle (seed → germinating → mature → archived) and links to related topics.
4
+ when_to_load: When the user wants to capture a new idea, hypothesis, or proposal to develop over time.
5
+ related_skills:
6
+ - wiki-conventions
7
+ ---
8
+
9
+ # PKB Idea Capture
10
+
11
+ Use this skill to record and develop ideas in the wiki. Ideas live as flat pages (not topic directories) under `pages/ideas/`.
12
+
13
+ ## Page Location
14
+
15
+ `pages/ideas/<slug>.md`
16
+
17
+ - Slug is lowercase kebab-case from the idea title (e.g. `async-wiki-sync`, `personal-memory-tiering`).
18
+ - Ideas are flat pages, not directories — no sub-facets.
19
+
20
+ ## Frontmatter Template
21
+
22
+ ```yaml
23
+ ---
24
+ title: <Idea Title>
25
+ entity_type: idea
26
+ status: seed
27
+ summary: <One sentence capturing the core hypothesis or proposal>
28
+ tags: [<topic-tag>]
29
+ related:
30
+ - pages/topics/<topic-slug>/index.md
31
+ updated: <YYYY-MM-DD>
32
+ ---
33
+ ```
34
+
35
+ ## Status Lifecycle
36
+
37
+ | Status | Meaning |
38
+ |--------|---------|
39
+ | `seed` | Just captured — raw, unvalidated |
40
+ | `germinating` | Actively exploring — some evidence or development |
41
+ | `mature` | Well-developed — ready to act on or publish |
42
+ | `archived` | Abandoned or superseded — kept for reference |
43
+
44
+ Progress the status forward as the idea develops. Move `archived` ideas to `pages/_archive/ideas/<slug>.md`.
45
+
46
+ ## Page Structure
47
+
48
+ ```markdown
49
+ ## Hypothesis
50
+
51
+ <Core claim or proposal — what would be true if this idea is right?>
52
+
53
+ ## Evidence / Notes
54
+
55
+ - <Supporting observation, date>
56
+ - <Counter-evidence or open question>
57
+
58
+ ## Next Steps
59
+
60
+ - [ ] <Concrete action to develop this idea>
61
+
62
+ ## Related
63
+
64
+ - [[<Topic or Project>]] — <connection>
65
+ ```
66
+
67
+ ## Workflow
68
+
69
+ 1. Run `wiki_search` for the idea topic to check for existing related ideas or pages.
70
+ 2. Create the page with `wiki_update` using the template above.
71
+ 3. Set `status: seed` for fresh captures.
72
+ 4. Link to relevant topic pages in `related:` frontmatter.
73
+ 5. When returning to an idea, update the status and append new evidence or notes.
74
+
75
+ ## Link Conventions
76
+
77
+ - Add `related:` links to topic pages (`pages/topics/<slug>/index.md`) that this idea draws from.
78
+ - When an idea matures into a decision or project, add a `related:` link to the decision or project page and set status to `archived`.
@@ -0,0 +1,4 @@
1
+ {
2
+ "slug": "pkb-ideas",
3
+ "version": "1.0.0"
4
+ }
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: pkb-org
3
+ description: Capture and maintain organization knowledge in the PKB. Creates or updates pages/orgs/<slug>/index.md with compiled truth, interaction timeline, and bidirectional links to people, projects, and topics.
4
+ when_to_load: When the user mentions an organization, company, team, or employer and wants it recorded or updated in the wiki.
5
+ related_skills:
6
+ - wiki-conventions
7
+ ---
8
+
9
+ # PKB Organization Capture
10
+
11
+ Use this skill when capturing or updating knowledge about an organization (company, team, consortium, employer) in the wiki.
12
+
13
+ ## Page Location
14
+
15
+ Organization pages live at `pages/orgs/<slug>/index.md`.
16
+
17
+ - Slug is lowercase kebab-case from the org name (e.g. `acme-corp`, `rust-foundation`).
18
+ - Create `pages/orgs/<slug>/` as a topic directory; `index.md` is the compiled truth overview.
19
+
20
+ ## Frontmatter Template
21
+
22
+ ```yaml
23
+ ---
24
+ title: <Org Name>
25
+ entity_type: org
26
+ summary: <One sentence describing what this org does>
27
+ tags: [<industry-tag>, <tech-tag>]
28
+ related:
29
+ - pages/people/<person-slug>/index.md
30
+ - pages/projects/<project-slug>/index.md
31
+ - pages/topics/<topic-slug>/index.md
32
+ updated: <YYYY-MM-DD>
33
+ ---
34
+ ```
35
+
36
+ ## Page Structure
37
+
38
+ ```markdown
39
+ ## Overview
40
+
41
+ <Compiled truth: 2–4 sentences about the org — mission, size, domain, key products.>
42
+
43
+ ## People
44
+
45
+ - [[<Person Name>]] — <role>
46
+
47
+ ## Projects
48
+
49
+ - [[<Project Name>]] — <brief description>
50
+
51
+ ## Topics
52
+
53
+ - [[<Topic>]] — <relevance>
54
+
55
+ ## Timeline
56
+
57
+ - _(<YYYY-MM-DD>)_ <What happened in this interaction or what was learned>
58
+ ```
59
+
60
+ ## Workflow
61
+
62
+ 1. Run `wiki_search` for the org name to check if a page exists.
63
+ 2. If it exists, read it with `wiki_read`. If not, create it with the template above.
64
+ 3. Append a new timeline entry with today's date.
65
+ 4. Update compiled truth (Overview section) if materially new facts emerged.
66
+ 5. Add or update `related` frontmatter with links to people/projects/topics.
67
+ 6. Write with `wiki_update`.
68
+
69
+ ## Link Conventions
70
+
71
+ - Bidirectional: after writing the org page, check linked person/project pages and add `related:` back-links where they're missing.
72
+ - Use `[[Page Name]]` for inline cross-references in body text.
73
+ - Keep `related:` frontmatter in sync with `[[...]]` body links.
74
+
75
+ ## Status Lifecycle
76
+
77
+ Add a `status` field in frontmatter when relevant:
78
+
79
+ - `active` — current engagement or known ongoing relationship
80
+ - `past` — former employer, closed project, ended relationship
81
+ - `prospect` — potential future engagement
82
+ - `archived` — org no longer relevant; move page to `pages/_archive/orgs/<slug>/`
@@ -0,0 +1,4 @@
1
+ {
2
+ "slug": "pkb-org",
3
+ "version": "1.0.0"
4
+ }
@@ -0,0 +1,74 @@
1
+ ---
2
+ name: pkb-people
3
+ description: Capture and maintain a PKB profile for a person — compiled truth, interaction timeline, and follow-up extraction.
4
+ ---
5
+
6
+ # PKB People Capture
7
+
8
+ Creates and maintains wiki profiles for people in the Personal Knowledge Base.
9
+
10
+ ## When to Use
11
+
12
+ - User mentions a person they've interacted with
13
+ - User says "add {name} to my PKB", "capture notes about {name}", "I met with {name}"
14
+ - User wants to update someone's profile with new information
15
+ - After meetings, calls, or interactions where a person is central
16
+
17
+ ## Person Page Structure
18
+
19
+ Page path: `pages/people/{slug}/index.md`
20
+
21
+ Sections:
22
+ 1. **Frontmatter** — title, summary, updated, tags
23
+ 2. **## Summary** — compiled truth: role, affiliation, key facts, relationship to user (rewritten on updates)
24
+ 3. **## Timeline** — append-only record of interactions and observations
25
+
26
+ ## Steps
27
+
28
+ ### 1. Find or Create Profile
29
+
30
+ Search first:
31
+ ```
32
+ wiki_search("{person name}")
33
+ ```
34
+
35
+ If no profile exists, create one:
36
+ ```
37
+ wiki_update(
38
+ path="pages/people/{slug}/index.md",
39
+ title="{Person Name}",
40
+ summary="{one-line description of who this person is}",
41
+ content="---\ntitle: {Person Name}\nsummary: {description}\nupdated: {today}\ntags: [person]\nmetadata:\n entity_type: person\n---\n\n# {Person Name}\n\n## Summary\n\n{Compiled truth about this person: role, org, relationship to user, key facts}\n\n## Timeline\n"
42
+ )
43
+ ```
44
+
45
+ ### 2. Add Interaction to Timeline
46
+
47
+ ```
48
+ wiki_append_timeline(
49
+ page="pages/people/{slug}/index.md",
50
+ entry="{Description of interaction, meeting, or observation}\n\n{Key points discussed or observed}"
51
+ )
52
+ ```
53
+
54
+ ### 3. Update Compiled Truth
55
+
56
+ After significant new information, rewrite the `## Summary` section via `wiki_update` to reflect current understanding. Keep it factual and concise (3–8 bullet points).
57
+
58
+ ### 4. Extract Follow-ups
59
+
60
+ If the interaction produced action items or follow-ups, propose them to memory:
61
+ ```
62
+ memory_propose(kind="action_item", payload={
63
+ title: "Follow up with {name} on {topic}",
64
+ detail: "{context from interaction}",
65
+ due_at: "{date if mentioned}"
66
+ })
67
+ ```
68
+
69
+ ## Notes
70
+
71
+ - Always rewrite the summary after new interactions — don't let it become stale
72
+ - Timeline entries get their own `### {ISO timestamp}` heading automatically
73
+ - Use `wiki_ingest_source` with `type: "text"` to ingest meeting notes or email text
74
+ - Keep summaries under 200 chars for the frontmatter field; use the `## Summary` section for detail
@@ -0,0 +1,4 @@
1
+ {
2
+ "slug": "pkb-people",
3
+ "version": "1.0.0"
4
+ }
@@ -0,0 +1,83 @@
1
+ ---
2
+ name: pkb-research
3
+ description: Manage a PKB research session — create a research hub, ingest sources, maintain a living synthesis document.
4
+ ---
5
+
6
+ # PKB Research Session
7
+
8
+ Manages a structured research session in the Personal Knowledge Base.
9
+
10
+ ## When to Use
11
+
12
+ - User wants to research a topic deeply using multiple sources
13
+ - User says "start a research session on X", "help me research X", "I'm researching X"
14
+ - User wants a synthesis document that stays updated as they add sources
15
+
16
+ ## Session Structure
17
+
18
+ For a research topic `{slug}` (derived from the topic name):
19
+
20
+ - **Hub page**: `pages/research/{slug}/index.md` — overview, links, and timeline
21
+ - **Synthesis**: `pages/research/{slug}/synthesis.md` — compiled truth, rewritten after each source
22
+
23
+ ## Steps
24
+
25
+ ### 1. Open the Session
26
+
27
+ Create the hub page if it doesn't exist:
28
+ ```
29
+ wiki_update(
30
+ path="pages/research/{slug}/index.md",
31
+ title="{Topic Name} Research",
32
+ summary="Research hub for {topic}",
33
+ content="---\ntitle: {Topic Name} Research\nsummary: Research hub for {topic}\nupdated: {today}\ntags: [research]\n---\n\n# {Topic Name} Research\n\n## Sources\n\n_(none yet)_\n\n## Timeline\n"
34
+ )
35
+ ```
36
+
37
+ Then open a timeline entry:
38
+ ```
39
+ wiki_append_timeline(page="pages/research/{slug}/index.md", entry="Research session opened.")
40
+ ```
41
+
42
+ ### 2. Ingest Each Source
43
+
44
+ For each source the user provides:
45
+ ```
46
+ wiki_ingest_source(source="{url_or_text}", topic="{slug}")
47
+ ```
48
+
49
+ Then update the synthesis:
50
+ ```
51
+ wiki_update(
52
+ path="pages/research/{slug}/synthesis.md",
53
+ title="{Topic Name} Synthesis",
54
+ summary="Compiled synthesis for {topic} research",
55
+ content="... rewritten synthesis based on all sources so far ..."
56
+ )
57
+ ```
58
+
59
+ Append to hub timeline:
60
+ ```
61
+ wiki_append_timeline(
62
+ page="pages/research/{slug}/index.md",
63
+ entry="Source ingested: {title}\n\nKey takeaways: {1-2 sentences}",
64
+ source_id="{source_id from ingest result}"
65
+ )
66
+ ```
67
+
68
+ ### 3. Close the Session
69
+
70
+ When the user is done:
71
+ ```
72
+ wiki_append_timeline(
73
+ page="pages/research/{slug}/index.md",
74
+ entry="Research session closed. Final synthesis written to pages/research/{slug}/synthesis.md"
75
+ )
76
+ ```
77
+
78
+ ## Notes
79
+
80
+ - The synthesis document is rewritten (not appended) after each new source
81
+ - The hub timeline is always append-only
82
+ - Provide the user a brief summary after each source ingestion
83
+ - If a source was already ingested, note it and skip synthesis update
@@ -0,0 +1,4 @@
1
+ {
2
+ "slug": "pkb-research",
3
+ "version": "1.0.0"
4
+ }
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: pkb-source
3
+ description: Ingest a source (URL, PDF, repo, or text) into the PKB wiki and get a summary of pages created or updated.
4
+ ---
5
+
6
+ # PKB Source Ingestion
7
+
8
+ Accepts a URL, PDF file path, Git repo URL, or raw text and ingests it into the Personal Knowledge Base.
9
+
10
+ ## When to Use
11
+
12
+ - User shares a URL they want saved to their PKB
13
+ - User wants to ingest a PDF, Git repo, or raw text
14
+ - User says "add this to my PKB", "save this source", "ingest this"
15
+
16
+ ## Steps
17
+
18
+ 1. **Determine source type** — if not specified, auto-detect:
19
+ - `http://` or `https://` URL → `url` (or `repo` for GitHub/GitLab)
20
+ - Path ending in `.pdf` → `pdf`
21
+ - Everything else → `text`
22
+
23
+ 2. **Call `wiki_ingest_source`**:
24
+ ```
25
+ wiki_ingest_source(source="{source}", type="{type}", topic="{optional topic hint}")
26
+ ```
27
+
28
+ 3. **Report results** to the user:
29
+ - Number of pages created/updated
30
+ - List of entity pages (names and paths)
31
+ - Source ID for future reference
32
+ - If `already_existed: true`, tell the user it was already in the PKB
33
+
34
+ ## Notes
35
+
36
+ - Ingestion is idempotent — the same source will not be duplicated
37
+ - Entity extraction uses LLM; it may miss entities for very short or unstructured content
38
+ - For raw text >10KB, consider splitting into multiple topical ingestions with `topic` hints
@@ -0,0 +1,4 @@
1
+ {
2
+ "slug": "pkb-source",
3
+ "version": "1.0.0"
4
+ }
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: wiki-conventions
3
3
  description: Use when creating, editing, linting, restructuring, or reviewing Chapterhouse wiki content.
4
- when_to_load: Wiki tools, remember/forget workflows, or direct edits under the Chapterhouse wiki.
4
+ when_to_load: Wiki tools, wiki_update/wiki_ingest_source workflows, or direct edits under the Chapterhouse wiki.
5
5
  related_skills:
6
6
  - squad
7
7
  ---
@@ -12,7 +12,7 @@ Use this skill before creating, editing, linting, restructuring, archiving, or r
12
12
 
13
13
  ## Orientation Ritual — Mandatory Before Any Wiki Write
14
14
 
15
- Perform this checklist before using `wiki_update`, `remember`, `forget`, `wiki_ingest`, `wiki_lint`, or `wiki_rebuild_index`:
15
+ Perform this checklist before using `wiki_update`, `wiki_append_timeline`, or `wiki_ingest_source`:
16
16
 
17
17
  1. Read `pages/index.md` with `wiki_read`.
18
18
  2. Scan the last 20-30 entries of `pages/_meta/log.md` to see recent edits, archives, and reorganizations.
@@ -52,8 +52,8 @@ Do not skip the ritual because the task feels small. The point is to avoid dupli
52
52
 
53
53
  ## Decision Recording Protocol
54
54
 
55
- - With `remember`, use `category: "decision"` plus both `about` and `entity`.
56
55
  - Record the decision against the actual entity that owns it.
56
+ - Use `wiki_update` to write to that entity's canonical `decisions.md` page.
57
57
  - Keep decision facets canonical; prefer `decisions.md` over inventing one-off decision page names.
58
58
 
59
59
  ## Cross-Reference Standards
@@ -139,7 +139,7 @@ Use `autostub: true` only for genuine stubs that are intentionally thin and expe
139
139
 
140
140
  - A durable fact about a named project, tool, person, org, topic, or area -> `pages/<category>/<slug>/index.md`
141
141
  - A durable subtopic of an existing entity -> `pages/<category>/<slug>/<facet>.md`
142
- - A decision about an entity -> `remember` with `category: "decision"`, `about`, and `entity`, or write to that entity's `decisions.md`
142
+ - A decision about an entity -> write to that entity's `decisions.md` with `wiki_update`
143
143
  - A user preference or routine -> the corresponding flat category page
144
- - Source material you want preserved before synthesis -> `wiki_ingest`
144
+ - Source material you want preserved before synthesis -> `wiki_ingest_source`
145
145
  - A passing mention with no durable value yet -> do not create a new page; add it to existing context or leave it out
@@ -7,4 +7,4 @@ pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5p
7
7
 
8
8
  Outdated base version: https://github.com/primer/github-syntax-dark
9
9
  Current colors taken from GitHub's CSS
10
- */.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#79c0ff}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-comment,.hljs-code,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}:root{color-scheme:dark;--bg: #0e1116;--bg-elev: #161b22;--bg-elev-2: #21262d;--fg: #e6edf3;--fg-dim: #8b949e;--border: #30363d;--accent: #3b82f6;--accent-fg: #ffffff;--danger: #f87171;--user-bubble: #1e293b}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--fg);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,sans-serif;font-size:14px;line-height:1.5}a,.link{color:var(--accent);text-decoration:none}a:hover,.link:hover{text-decoration:underline}button,input,textarea,select{font:inherit}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:2px}code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.9em;background:var(--bg-elev-2);padding:1px 5px;border-radius:4px}.dim{color:var(--fg-dim)}.small{font-size:12px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:absolute;left:16px;top:-48px;z-index:10;padding:10px 14px;border-radius:8px;background:var(--accent);color:var(--accent-fg)}.skip-link:focus{top:16px}.layout{display:grid;grid-template-columns:220px 1fr;height:100%}.sidebar{background:var(--bg-elev);border-right:1px solid var(--border);padding:16px 0;display:flex;flex-direction:column}.sidebar-brand{display:flex;align-items:center;gap:10px;padding:0 18px 18px;font-weight:600;font-size:16px;border-bottom:1px solid var(--border);margin-bottom:12px}.sidebar nav{display:flex;flex-direction:column}.channel-rail{border-bottom:1px solid var(--border);margin-bottom:12px;padding:0 0 12px}.sidebar-section-label{padding:0 18px 6px;color:var(--fg-dim);font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.channel-link{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;background:transparent;border:0;border-left:2px solid transparent;color:var(--fg);cursor:pointer;padding:7px 18px;text-align:left}.channel-link:hover{background:var(--bg-elev-2)}.channel-link.active{background:color-mix(in srgb,var(--accent) 14%,var(--bg-elev-2));border-left-color:var(--accent)}.channel-scope{color:var(--fg-dim);font-size:11px}.sidebar-error{color:var(--danger);padding:4px 18px 0}.nav-link{padding:9px 18px;color:var(--fg);border-left:2px solid transparent}.nav-link:hover{background:var(--bg-elev-2);text-decoration:none}.nav-link.active{background:var(--bg-elev-2);border-left-color:var(--accent);color:var(--fg)}.nav-group{display:flex;flex-direction:column}.nav-group-row{display:flex;align-items:stretch}.nav-group-label{flex:1}.nav-group-toggle{background:none;border:none;cursor:pointer;padding:0 14px 0 4px;color:var(--fg-muted, var(--fg));display:flex;align-items:center;justify-content:center;border-left:2px solid transparent}.nav-group-toggle:hover{background:var(--bg-elev-2)}.nav-chevron{display:inline-block;font-size:18px;line-height:1;transition:transform .18s ease;transform:rotate(0)}.nav-chevron-open{transform:rotate(90deg)}.nav-recents{list-style:none;margin:0;padding:0}.nav-recent-link{display:flex;align-items:baseline;justify-content:space-between;gap:6px;width:100%;background:none;border:none;border-left:2px solid transparent;padding:6px 18px 6px 28px;cursor:pointer;color:var(--fg);text-align:left;font-size:13px}.nav-recent-link:hover{background:var(--bg-elev-2);text-decoration:none;border-left-color:var(--accent)}.nav-recent-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.nav-recent-hint{font-size:11px;flex-shrink:0;opacity:.6}.nav-recents-empty{padding:4px 28px 6px;font-size:12px;margin:0}.main{overflow:hidden;display:flex;flex-direction:column}.app-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 24px;border-bottom:1px solid var(--border);background:var(--bg-elev)}.app-header-title{font-size:16px;font-weight:600;margin:0}.app-header-title-row{display:inline-flex;align-items:center;gap:10px}.app-header-user{color:var(--fg-dim);font-size:13px}.mode-badge{display:inline-flex;align-items:center;border-radius:999px;padding:3px 10px;font-size:12px;font-weight:600;line-height:1;border:1px solid transparent}.mode-standalone{background:var(--bg-elev-2);border-color:var(--border);color:var(--fg-dim)}.mode-team{background:color-mix(in srgb,var(--accent) 14%,transparent);border-color:color-mix(in srgb,var(--accent) 35%,var(--border));color:var(--accent)}.sse-badge{display:inline-flex;align-items:center;gap:6px;border-radius:999px;padding:3px 10px;font-size:12px;font-weight:600;line-height:1;border:1px solid transparent}.sse-badge__dot{display:inline-block;width:7px;height:7px;border-radius:50%;flex-shrink:0}.sse-badge--connected{background:color-mix(in srgb,#22c55e 12%,transparent);border-color:color-mix(in srgb,#22c55e 35%,var(--border));color:#15803d}.sse-badge--connected .sse-badge__dot{background:#22c55e}.sse-badge--idle{background:color-mix(in srgb,var(--panel) 65%,transparent);border-color:var(--border);color:var(--text-muted)}.sse-badge--idle .sse-badge__dot{background:var(--text-muted)}.sse-badge--reconnecting{background:color-mix(in srgb,#f59e0b 12%,transparent);border-color:color-mix(in srgb,#f59e0b 35%,var(--border));color:#b45309}.sse-badge--reconnecting .sse-badge__dot{background:#f59e0b;animation:sse-pulse 1.2s ease-in-out infinite}.sse-badge--disconnected{background:color-mix(in srgb,#ef4444 12%,transparent);border-color:color-mix(in srgb,#ef4444 35%,var(--border));color:#b91c1c}.sse-badge--disconnected .sse-badge__dot{background:#ef4444}.sse-badge__reconnect-btn{background:none;border:none;padding:0;margin-left:4px;font-size:12px;font-weight:600;color:inherit;cursor:pointer;text-decoration:underline;text-underline-offset:2px}.sse-badge__reconnect-btn:hover{opacity:.8}@keyframes sse-pulse{0%,to{opacity:1}50%{opacity:.35}}.connection-banner{border:1px solid transparent;border-radius:10px;font-size:13px;font-weight:600;margin-bottom:16px;padding:10px 14px}.connection-banner--reconnecting{background:color-mix(in srgb,#f59e0b 14%,var(--bg-elev));border-color:color-mix(in srgb,#f59e0b 35%,var(--border));color:#fbbf24}.connection-banner--disconnected{background:color-mix(in srgb,#ef4444 14%,var(--bg-elev));border-color:color-mix(in srgb,#ef4444 35%,var(--border));color:#fca5a5}.page-shell{max-width:760px;margin:0 auto;padding:32px}.loading,.empty-state{padding:32px;color:var(--fg-dim)}.empty-state h2{color:var(--fg);margin-top:0;margin-bottom:8px}.empty-state p{margin:0 0 12px}.empty-state-icon{font-size:28px;margin-bottom:8px;line-height:1}.empty-state-action{margin-top:4px}.auth-screen{min-height:100%;display:grid;place-items:center;padding:32px}.auth-card{width:min(420px,100%);background:var(--bg-elev);border:1px solid var(--border);border-radius:12px;padding:24px}.auth-card h1{margin-top:0;margin-bottom:8px}.auth-card p{margin-top:0;margin-bottom:20px;color:var(--fg-dim)}.page{padding:24px 32px;overflow:auto;flex:1;min-width:0}.page-header{margin-bottom:16px}.page-header h1{margin:0 0 4px;font-size:22px}.projects-table-wrap{overflow-x:auto}.projects-table{width:100%;border-collapse:collapse;background:var(--bg-elev);border:1px solid var(--border);border-radius:12px;overflow:hidden}.projects-table th,.projects-table td{padding:12px 14px;border-bottom:1px solid var(--border);text-align:left;vertical-align:top}.projects-table thead th{background:var(--bg-elev-2);font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--fg-dim)}.projects-table tbody tr:last-child th,.projects-table tbody tr:last-child td{border-bottom:0}.agents-sort-button{width:100%;display:inline-flex;align-items:center;justify-content:space-between;gap:8px;padding:0;border:0;background:transparent;color:inherit;font:inherit;text-transform:inherit;letter-spacing:inherit;cursor:pointer}.agents-sort-indicator,.tag-builtin{color:var(--fg-dim)}.tag-custom{color:var(--accent)}.project-detail-backlink{display:inline-flex;align-items:center;gap:6px;margin-bottom:12px;font-size:13px}.project-detail-summary{margin:0;color:var(--fg-dim)}.agent-detail-header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.agent-detail-summary{margin:0;color:var(--fg-dim)}.agent-detail-banner{margin-bottom:16px;padding:12px 14px;border:1px solid var(--border);border-radius:10px;background:var(--bg-elev);color:var(--fg-dim)}.project-detail-layout{display:grid;gap:16px}.project-detail-card{background:var(--bg-elev);border:1px solid var(--border);border-radius:12px;padding:18px}.project-detail-card h2{margin:0 0 14px;font-size:16px}.project-detail-meta{display:grid;grid-template-columns:minmax(120px,180px) 1fr;gap:10px 16px;margin:0}.project-detail-meta dt{color:var(--fg-dim);font-weight:600}.project-detail-meta dd{margin:0}.project-detail-actions{display:flex;justify-content:flex-end;margin-top:16px}.project-hard-rules{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin:0}.project-hard-rule{background:var(--bg-elev-2);border:1px solid var(--border);border-radius:8px;padding:12px 14px}.project-hard-rule dt{color:var(--fg-dim);font-size:12px;font-weight:600;letter-spacing:.03em;text-transform:uppercase}.project-hard-rule dd{margin:6px 0 0;font-size:14px}.project-hard-rules-form{display:grid;gap:14px}.project-hard-rule-input{display:grid;gap:10px;align-content:start}.project-hard-rule-label{color:var(--fg-dim);font-size:12px;font-weight:600;letter-spacing:.03em;text-transform:uppercase}.project-hard-rule input[type=checkbox]{width:16px;height:16px}.project-hard-rule-text-input{background:var(--bg-elev);border:1px solid var(--border);border-radius:6px;color:var(--fg);font-size:13px;padding:6px 10px;width:100%}.project-hard-rule-text-input:focus{outline:none;border-color:var(--accent)}.project-soft-rules-form{display:grid;gap:12px}.project-soft-rules-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));align-items:start}.project-soft-rules-editor,.project-soft-rules-preview-card{min-width:0}.project-soft-rules-label{color:var(--fg-dim);font-size:12px;font-weight:600;letter-spacing:.03em;text-transform:uppercase}.project-soft-rules-input{background:var(--bg-elev);border:1px solid var(--border);border-radius:6px;color:var(--fg);font-size:13px;line-height:1.5;min-height:140px;padding:10px 12px;resize:vertical;width:100%}.project-soft-rules-input:focus{outline:none;border-color:var(--accent)}.project-soft-rules-hint{color:var(--fg-dim);font-size:12px;margin:0}.project-soft-rules-preview-card{background:var(--bg-elev-2);border:1px solid var(--border);border-radius:8px;padding:12px 14px}.project-soft-rules-preview-title{margin:0 0 10px;color:var(--fg-dim);font-size:12px;font-weight:600;letter-spacing:.03em;text-transform:uppercase}.project-soft-rules-preview{min-height:140px}.project-soft-rules-preview .md>:first-child{margin-top:0}.project-soft-rules-preview .md>:last-child{margin-bottom:0}.agent-detail-markdown .md>:first-child{margin-top:0}.agent-detail-markdown .md>:last-child{margin-bottom:0}.project-save-feedback{margin:0;font-size:12px}.project-save-feedback-success{color:#4ade80}.project-save-feedback-error{color:var(--danger)}.project-detail-empty{padding:0}.projects-count{width:120px}.error-notice{background:#f871711a;border:1px solid var(--danger);color:var(--danger);padding:12px 14px;border-radius:8px;margin-bottom:16px}.error-notice.inline{margin-bottom:12px}.error-notice-title{margin:0 0 4px;font-size:16px}.error-notice-message{margin:0}.error-notice-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.error-details{background:var(--bg-elev-2);padding:12px;border-radius:8px;overflow:auto}.loading-state{display:flex;align-items:flex-start;gap:12px;padding:16px 0;color:var(--fg-dim)}.loading-state.inline{padding:10px 0}.loading-state.centered{justify-content:center;padding:48px 32px}.loading-spinner{width:18px;height:18px;border:2px solid rgba(59,130,246,.25);border-top-color:var(--accent);border-radius:999px;flex:none;margin-top:2px;animation:spin .9s linear infinite}.loading-state-label{color:var(--fg);font-weight:500}.loading-state-detail{margin-top:2px}.skeleton-state{display:flex;flex-direction:column;gap:14px;padding:12px 0}.skeleton-chat-row{display:flex}.skeleton-chat-row--user{justify-content:flex-end}.skeleton-chat-row--assistant{justify-content:flex-start}.skeleton-chat-bubble,.skeleton-wiki-sheet{background:var(--bg-elev);border:1px solid var(--border);border-radius:12px;padding:14px}.skeleton-chat-bubble{display:flex;flex-direction:column;gap:10px;max-width:min(100%,42rem);width:min(100%,42rem)}.skeleton-chat-bubble--user{background:color-mix(in srgb,var(--user-bubble) 80%,var(--bg-elev))}.skeleton-chat-bubble--assistant{background:color-mix(in srgb,var(--bg-elev) 70%,var(--bg-elev-2))}.skeleton-chat-bubble--narrow{width:min(100%,30rem)}.skeleton-wiki-sheet{display:flex;flex-direction:column;gap:12px;max-width:76ch;margin:24px 22px 32px}.skeleton-line{display:block;height:12px;width:100%;border-radius:999px;background:linear-gradient(90deg,color-mix(in srgb,var(--bg-elev-2) 88%,transparent) 25%,color-mix(in srgb,var(--fg-dim) 20%,var(--bg-elev-2)),color-mix(in srgb,var(--bg-elev-2) 88%,transparent) 75%);background-size:220% 100%;animation:skeleton-shimmer 1.2s ease-in-out infinite}.skeleton-line--title{height:18px}.skeleton-line--25{width:25%}.skeleton-line--30{width:30%}.skeleton-line--35{width:35%}.skeleton-line--45{width:45%}.skeleton-line--55{width:55%}.skeleton-line--60{width:60%}.skeleton-line--70{width:70%}.skeleton-line--80{width:80%}.skeleton-line--85{width:85%}.skeleton-line--90{width:90%}.skeleton-line--95{width:95%}.skeleton-line--100{width:100%}.btn{background:var(--bg-elev-2);color:var(--fg);border:1px solid var(--border);border-radius:6px;padding:6px 14px;font-size:13px;cursor:pointer}.btn:hover{background:var(--bg-elev)}.btn.primary{background:var(--accent);color:var(--accent-fg);border-color:var(--accent)}.btn.primary:hover{filter:brightness(1.1)}.btn.danger{border-color:var(--danger);color:var(--danger)}.btn.cancel{background:var(--danger);border-color:var(--danger);color:var(--accent-fg)}.chat{display:flex;flex:1 1 auto;flex-direction:column;min-height:0}.channel-header{display:flex;align-items:center;justify-content:space-between;gap:16px;border-bottom:1px solid var(--border);background:#0e1116b8;padding:14px 32px}.channel-header-title{font-size:16px;font-weight:700}.channel-header-description{color:var(--fg-dim);font-size:12px}.channel-header-scope{border:1px solid color-mix(in srgb,var(--accent) 35%,var(--border));border-radius:999px;color:var(--fg-dim);font-size:12px;padding:3px 9px;white-space:nowrap}.chat-scroll{flex:1;min-height:0;overflow:auto;padding:24px 32px 0}.chat-log{display:flex;flex-direction:column}.turn-wrapper{margin-bottom:18px}.turn-wrapper+.turn-wrapper:not(.has-separator) .bubble{border-top:1px solid var(--border);padding-top:14px}.turn-header{display:flex;align-items:center;gap:8px;margin-bottom:6px;font-size:12px}.turn-header--user{justify-content:flex-end}.turn-actor-badge{display:inline-flex;align-items:center;gap:4px;background:var(--bg-elev);border:1px solid var(--border);border-radius:999px;padding:2px 8px;font-size:11px;font-weight:500;-webkit-user-select:none;user-select:none}.turn-header--agent .turn-actor-badge{background:color-mix(in srgb,var(--accent) 10%,var(--bg-elev));border-color:color-mix(in srgb,var(--accent) 35%,var(--border))}.turn-actor-icon{font-size:11px;line-height:1}.turn-agent-slug{color:var(--accent);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10px;font-weight:600}.turn-ts{font-size:11px;color:var(--fg-dim);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;cursor:default;-webkit-user-select:none;user-select:none}.time-separator{display:flex;align-items:center;gap:10px;margin:16px 0 10px;color:var(--fg-dim);font-size:11px;font-style:italic;-webkit-user-select:none;user-select:none}.time-separator-line{flex:1;height:1px;background:var(--border);opacity:.5}.time-separator-label{white-space:nowrap;opacity:.7;letter-spacing:.02em}.bubble{max-width:800px}.bubble.user{margin-left:auto;text-align:right}.bubble--agent-activity{opacity:.88;border-left:2px solid var(--accent, #6366f1);padding-left:10px}.bubble.user .user-text{display:inline-block;background:var(--user-bubble);border:1px solid var(--border);padding:8px 14px;border-radius:14px;white-space:pre-wrap;text-align:left;margin:0}.route-tag{font-size:11px;color:var(--fg-dim);margin-top:4px}.assistant-turn-status{display:inline-flex;align-items:center;gap:8px;margin:0 0 8px;color:var(--fg-dim);font-size:12px;line-height:1.4}.assistant-turn-status-dots{display:inline-flex;align-items:center;gap:4px}.assistant-turn-status-dot{width:6px;height:6px;border-radius:999px;background:currentColor;opacity:.35;animation:pulse 1.1s ease-in-out infinite}.assistant-turn-status-dot:nth-child(2){animation-delay:.15s}.assistant-turn-status-dot:nth-child(3){animation-delay:.3s}@media (prefers-reduced-motion: reduce){.assistant-turn-status-dot{animation:none;opacity:.7}}.copy-btn-wrap{position:relative}.copy-btn{position:absolute;top:6px;right:6px;display:flex;align-items:center;justify-content:center;padding:4px;background:var(--bg-elev);border:1px solid var(--border);border-radius:6px;color:var(--fg-dim);cursor:pointer;z-index:1;line-height:0;transition:color .15s,background .15s}.copy-btn:hover{background:var(--bg-elev-2);color:var(--fg)}.copy-btn--copied{color:#4ade80;border-color:#4ade80}@media (hover: hover){.copy-btn{opacity:0;pointer-events:none;transition:opacity .15s,color .15s,background .15s}.copy-btn-wrap:hover .copy-btn,.copy-btn-wrap:focus-within .copy-btn{opacity:1;pointer-events:auto}}.copy-btn--code{top:8px;right:8px}.activity-heartbeat{display:flex;align-items:center;gap:6px;padding:4px 8px;margin:0 0 6px;border-radius:6px;border:1px solid rgba(59,130,246,.35);background:var(--bg-elev-2);font-size:12px;color:var(--fg);transition:opacity .3s}.activity-heartbeat.stale{opacity:.5;border-color:var(--border);color:var(--fg-dim)}.heartbeat-spinner{font-family:ui-monospace,monospace;font-size:11px;color:var(--accent);display:inline-block;animation:spin 1.4s linear infinite}.activity-heartbeat.stale .heartbeat-spinner{animation:none;color:var(--fg-dim)}.heartbeat-agent{font-weight:600}.heartbeat-sep{color:var(--fg-dim)}.heartbeat-action{color:var(--fg-dim);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.heartbeat-elapsed{font-family:ui-monospace,monospace;font-size:11px;color:var(--fg-dim);white-space:nowrap}.activity-strip{margin:0 0 8px;font-size:12px}.activity-summary{display:flex;flex-wrap:wrap;gap:6px}.activity-pill{display:inline-flex;align-items:center;gap:6px;background:var(--bg-elev);border:1px solid var(--border);color:var(--fg-dim);padding:3px 10px;border-radius:999px;cursor:pointer;font-size:12px}.activity-pill:hover{background:var(--bg-elev-2)}.activity-pill.running{color:var(--accent);border-color:#3b82f673}.activity-pill .glyph{font-family:ui-monospace,monospace;font-size:11px}.activity-pill.running .glyph{display:inline-block;animation:spin 1s linear infinite}.activity-pill .caret{color:var(--fg-dim);font-size:10px}.activity-headlines{display:flex;flex-direction:column;gap:2px;margin-top:6px}.activity-headline{display:inline-flex;align-items:center;gap:6px;padding:2px 4px;color:var(--fg-dim)}.activity-headline.status-running{color:var(--accent)}.activity-headline.status-failed{color:var(--danger)}.activity-headline .glyph{font-family:ui-monospace,monospace;font-size:11px;width:12px;text-align:center}.activity-headline.status-running .glyph{animation:spin 1s linear infinite}.agent-tag{font-size:10px;text-transform:lowercase;background:#3b82f629;color:#93c5fd;border:1px solid rgba(59,130,246,.35);padding:1px 6px;border-radius:4px;letter-spacing:.02em}.activity-thinking,.activity-details{margin-top:8px;padding:10px 12px;background:var(--bg-elev);border:1px solid var(--border);border-radius:6px}.activity-details{display:flex;flex-direction:column;gap:6px}.thinking-block{margin:0;padding:8px;background:var(--bg-elev-2);border-radius:4px;white-space:pre-wrap;font-size:12px;line-height:1.5;max-height:280px;overflow:auto}.activity-row{border:1px solid var(--border);border-radius:6px;background:var(--bg-elev-2)}.activity-row.status-running{border-color:#3b82f673}.activity-row.status-failed{border-color:var(--danger)}.activity-row-head{width:100%;display:flex;align-items:center;gap:8px;background:transparent;border:0;color:var(--fg);text-align:left;padding:6px 10px;cursor:pointer;font-size:12px}.activity-row.status-running .activity-row-head .glyph{animation:spin 1s linear infinite;color:var(--accent)}.activity-row.status-failed .activity-row-head .glyph{color:var(--danger)}.activity-row .glyph{font-family:ui-monospace,monospace;width:12px;text-align:center}.activity-row .caret{margin-left:auto;color:var(--fg-dim)}.activity-row-body{padding:0 10px 10px;display:flex;flex-direction:column;gap:6px}.row-label{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--fg-dim)}.composer{border-top:1px solid var(--border);background:var(--bg-elev);padding:14px 32px;display:flex;flex-direction:column;gap:8px}.composer textarea{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:8px;color:var(--fg);padding:10px;resize:vertical;transition:background .14s ease,opacity .14s ease,border-color .14s ease}.composer-textarea--disabled,.composer textarea:disabled{background:color-mix(in srgb,var(--bg-elev-2) 88%,black);border-color:color-mix(in srgb,var(--border) 80%,black);cursor:not-allowed;opacity:.5}.composer-help{margin-top:-2px}.composer-status{border:1px solid transparent;border-radius:8px;font-size:12px;font-weight:600;padding:8px 10px}.composer-status--reconnecting{background:color-mix(in srgb,#f59e0b 14%,transparent);border-color:color-mix(in srgb,#f59e0b 35%,var(--border));color:#fbbf24}.composer-status--disconnected{background:color-mix(in srgb,#ef4444 12%,transparent);border-color:color-mix(in srgb,#ef4444 35%,var(--border));color:#fca5a5}.composer-queued{align-items:center;border:1px solid transparent;border-radius:10px;color:var(--fg-dim);display:flex;font-size:12px;gap:10px;justify-content:space-between;padding:8px 10px;transition:background .18s ease,border-color .18s ease,box-shadow .18s ease}.composer-queued--highlight{background:color-mix(in srgb,#f59e0b 14%,transparent);border-color:color-mix(in srgb,#f59e0b 35%,var(--border));box-shadow:0 0 0 1px color-mix(in srgb,#f59e0b 22%,transparent)}.composer-queued-link{flex:0 0 auto;text-underline-offset:2px}.dreaming-indicator{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--fg-dim);padding:4px 0;animation:pulse 2s ease-in-out infinite}.dreaming-indicator-glyph{color:#c4b5fd}.composer-actions{display:flex;justify-content:flex-end;gap:6px}.composer-actions .btn:disabled{cursor:not-allowed;opacity:.55}.md{line-height:1.55}.md p:first-child{margin-top:0}.md p:last-child{margin-bottom:0}.md pre{background:var(--bg-elev-2);border-radius:6px;padding:12px;overflow:auto}.md pre code{background:transparent;padding:0}.md table{border-collapse:collapse;margin:1em 0}.md th,.md td{border:1px solid var(--border);padding:6px 10px}.workers-layout{display:grid;grid-template-columns:320px 1fr;gap:18px;align-items:start}.workers-list{display:flex;flex-direction:column;gap:6px}.worker-row{text-align:left;background:var(--bg-elev);border:1px solid var(--border);border-radius:8px;padding:10px 12px;cursor:pointer;color:var(--fg)}.worker-row.selected,.worker-row:hover{background:var(--bg-elev-2)}.worker-row-head{display:flex;justify-content:space-between;align-items:center}.worker-status{font-size:11px;font-weight:600;padding:2px 7px;border-radius:10px;text-transform:uppercase;letter-spacing:.04em}.worker-status--running{background:color-mix(in srgb,var(--accent) 15%,transparent);color:var(--accent)}.worker-status--completed{background:color-mix(in srgb,#4caf50 15%,transparent);color:#4caf50}.worker-status--error{background:color-mix(in srgb,#f44336 15%,transparent);color:#f44336}.worker-row-desc{margin-top:4px;font-size:13px;color:var(--fg)}.workers-detail{background:var(--bg-elev);border:1px solid var(--border);border-radius:8px;padding:18px}.worker-detail-description{margin:4px 0 8px;font-size:15px}.worker-detail-slug,.worker-detail-taskid{font-size:.75em;font-family:var(--font-mono, monospace)}.worker-detail-meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px;margin-bottom:8px}.worker-events{display:flex;flex-direction:column;gap:4px;max-height:320px;overflow-y:auto;background:var(--bg-elev-2);border-radius:6px;padding:10px 12px;margin-bottom:12px;font-size:12px;font-family:var(--font-mono, monospace)}.worker-event{display:flex;gap:8px;align-items:baseline;line-height:1.5}.worker-event-ts{color:var(--text-dim, #888);flex-shrink:0;font-size:11px}.worker-event-body{display:flex;gap:4px;align-items:baseline;flex-wrap:wrap;overflow:hidden}.worker-event-icon{flex-shrink:0}.worker-event--tool_complete .worker-event-icon{opacity:.7}.msg-queued-indicator{font-size:.8em;opacity:.6;vertical-align:middle;-webkit-user-select:none;user-select:none}.msg-queued-backend-indicator{display:inline-block;font-size:.78em;opacity:.75;margin-top:4px;color:var(--fg-dim);-webkit-user-select:none;user-select:none}.output{background:var(--bg-elev-2);padding:12px;border-radius:6px;overflow:auto;white-space:pre-wrap;font-size:13px}.projects-toolbar{margin-bottom:16px}.projects-register-form{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.projects-path-input{background:var(--bg-elev);border:1px solid var(--border);border-radius:6px;color:var(--fg);font-size:13px;padding:6px 10px;width:380px;max-width:100%}.projects-path-input:focus{outline:none;border-color:var(--accent)}.projects-register-error{font-size:12px}.projects-disabled{background:var(--bg-elev);border:1px solid var(--border);border-radius:8px;padding:18px}.projects-empty{padding:24px 0}.projects-list{display:flex;flex-direction:column;gap:8px}.project-row{background:var(--bg-elev);border:1px solid var(--border);border-radius:8px;padding:12px 16px;display:flex;align-items:center;justify-content:space-between;gap:12px}.project-row-info{display:flex;flex-direction:column;gap:4px;min-width:0}.project-root{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-meta{display:flex;gap:12px;font-size:12px;flex-wrap:wrap}.project-badge{background:var(--bg-elev-2);border:1px solid var(--border);border-radius:10px;padding:1px 8px;font-size:11px;color:var(--fg)}.project-row-actions{display:flex;gap:6px;flex-shrink:0}.project-chat-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 16px;background:color-mix(in srgb,var(--accent) 8%,var(--bg-elev));border-bottom:1px solid color-mix(in srgb,var(--accent) 20%,var(--border));flex-shrink:0}.project-chat-header-identity{display:flex;align-items:center;gap:8px;min-width:0;overflow:hidden}.project-chat-icon{font-size:16px;flex-shrink:0}.project-chat-title{font-size:14px;white-space:nowrap;flex-shrink:0}.project-chat-path{font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.wiki{display:flex;flex-direction:column;min-height:100%}.wiki-layout{display:grid;grid-template-columns:minmax(320px,360px) minmax(0,1fr);gap:20px;flex:1;min-height:0}.wiki-mobile-nav-bar{display:none}.wiki-sidebar,.wiki-main{min-height:0}.wiki-sidebar{display:flex;flex-direction:column;background:var(--bg-elev);border:1px solid var(--border);border-radius:12px;overflow:hidden}.wiki-sidebar-header{position:sticky;top:0;z-index:1;display:flex;flex-direction:column;gap:14px;padding:16px;border-bottom:1px solid var(--border);background:linear-gradient(180deg,var(--bg-elev) 0%,rgba(22,27,34,.98) 100%)}.wiki-sidebar-header-row{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.wiki-sidebar-header-row h2{margin:0 0 4px;font-size:16px}.wiki-sidebar-header-row p{margin:0}.wiki-search{display:flex;flex-direction:column;gap:12px}.wiki-search-field input,.wiki-filter select{width:100%;background:var(--bg);border:1px solid var(--border);color:var(--fg);padding:9px 10px;border-radius:8px}.wiki-filter{display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--fg-dim)}.wiki-search-meta,.wiki-shortcuts,.wiki-scope-legend{color:var(--fg-dim)}.wiki-scope-header-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.wiki-scope-header-row h1{margin:0}.wiki-shortcuts{border-top:1px solid var(--border);padding-top:12px}.wiki-scope-legend{display:flex;flex-wrap:wrap;gap:8px}.wiki-scope-legend>span{display:inline-flex;align-items:center;gap:4px}.wiki-sidebar-body{flex:1;min-height:0;overflow:auto;padding:12px}.wiki-tree,.wiki-tree-children{list-style:none;margin:0;padding:0}.wiki-tree-children{margin-top:4px}.wiki-node{margin:2px 0}.wiki-node-button{width:100%;display:flex;align-items:center;gap:8px;padding:7px 10px;background:transparent;border:1px solid transparent;border-radius:8px;color:var(--fg);text-align:left;cursor:pointer}.wiki-node-folder-button{color:var(--fg-dim)}.wiki-node-folder-button:hover,.wiki-node-folder-button.expanded,.wiki-node-page-button:hover{background:var(--bg-elev-2);border-color:var(--border);color:var(--fg)}.wiki-node-page-button{align-items:flex-start}.wiki-node-page-button.selected{background:#3b82f61f;border-color:#3b82f659;box-shadow:inset 2px 0 0 var(--accent)}.wiki-node-icon{width:14px;flex:none;text-align:center;color:var(--fg-dim)}.wiki-node-page-button.selected .wiki-node-icon{color:#93c5fd}.wiki-node-page-button.selected .wiki-node-scope-icon-personal{color:#ddd6fe}.wiki-node-page-button.selected .wiki-node-scope-icon-team{color:#a7f3d0}.wiki-node-content{min-width:0;display:flex;flex:1;flex-direction:column;gap:4px}.wiki-node-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wiki-node-meta{display:flex;flex-wrap:wrap;gap:6px;font-size:11px}.wiki-node-count{margin-left:auto;border:1px solid var(--border);border-radius:999px;padding:0 6px;font-size:11px;color:var(--fg-dim)}.wiki-main{min-width:0;display:flex;background:var(--bg-elev);border:1px solid var(--border);border-radius:12px;overflow:hidden}.wiki-main>.wiki-empty-state{width:100%}.wiki-document{width:100%;min-height:0;display:flex;flex-direction:column}.wiki-page-header{position:sticky;top:0;z-index:1;padding:18px 22px 16px;border-bottom:1px solid var(--border);background:linear-gradient(180deg,var(--bg-elev) 0%,rgba(22,27,34,.98) 100%)}.wiki-page-header-main{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.wiki-page-title-block{min-width:0}.wiki-page-title-block h2{margin:0;font-size:28px;line-height:1.2}.wiki-page-summary{margin:8px 0 0;max-width:72ch;color:var(--fg-dim)}.wiki-page-actions{display:flex;gap:8px;flex:none}.wiki-breadcrumbs ol{display:flex;flex-wrap:wrap;gap:8px;list-style:none;margin:0 0 12px;padding:0}.wiki-breadcrumbs li{display:flex;align-items:center;min-width:0}.wiki-breadcrumbs li+li:before{content:"/";margin-right:8px;color:var(--fg-dim)}.wiki-breadcrumb-button{display:inline-block;max-width:100%;overflow:hidden;padding:0;border:0;background:transparent;color:var(--fg-dim);text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.wiki-breadcrumbs [aria-current=page]{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wiki-breadcrumb-button:hover{color:var(--fg);text-decoration:underline}.wiki-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:14px;font-size:12px;color:var(--fg-dim)}.wiki-meta>*{max-width:100%}.wiki-badge,.wiki-tag,.wiki-meta-item{display:inline-flex;align-items:center;border:1px solid var(--border);border-radius:999px;padding:3px 8px;background:var(--bg-elev-2)}.wiki-badge{color:#93c5fd;border-color:#3b82f659}.wiki-scope-badge{display:inline-flex;align-items:center;gap:4px}.wiki-scope-badge-personal{color:#c4b5fd;border-color:#c4b5fd59;background:#c4b5fd14}.wiki-scope-badge-team{color:#6ee7b7;border-color:#6ee7b759;background:#6ee7b714}.wiki-node-scope-icon-personal{color:#c4b5fd}.wiki-node-scope-icon-team{color:#6ee7b7}.wiki-tag{color:var(--fg)}.wiki-meta-path{max-width:100%;overflow:auto;white-space:nowrap}.wiki-document-body{flex:1;min-height:0;overflow:auto}.wiki-article{box-sizing:border-box;width:100%;max-width:min(76ch,100%);padding:24px 22px 32px}.wiki-article .md{overflow-wrap:anywhere}.wiki-article .md img{max-width:100%;height:auto}.wiki-article .md table{display:block;width:max-content;max-width:100%;overflow-x:auto}.wiki-empty-state{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:12px;margin:auto;max-width:56ch;padding:32px}.wiki-empty-state.compact{margin:0;max-width:none;padding:20px 12px}.wiki-empty-state h2{margin:0;font-size:20px}.wiki-empty-state p{margin:0;color:var(--fg-dim)}.wiki-empty-state-actions{display:flex;flex-wrap:wrap;gap:8px}.wiki-mobile-sidebar-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30;display:flex;justify-content:flex-start}.wiki-mobile-sidebar-backdrop{flex:1;border:0;background:#0a0f19b8}.wiki-mobile-sidebar-panel{position:relative;z-index:1;display:flex;flex-direction:column;gap:12px;width:min(100%,24rem);min-width:0;padding:16px 12px 12px;background:#0a0f19fa;border-right:1px solid var(--border);box-shadow:0 20px 48px #00000059}.wiki-mobile-sidebar-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px}.wiki-mobile-sidebar-title{font-size:14px;font-weight:600}.wiki-mobile-sidebar-panel .wiki-sidebar{flex:1;min-height:0}@media (max-width: 960px){.wiki-layout{grid-template-columns:1fr}.wiki-sidebar{max-height:50vh}.wiki-page-header-main,.wiki-sidebar-header-row,.wiki-scope-legend{flex-direction:column}.wiki-page-actions{width:100%}.wiki-page-actions .btn{flex:1}}@media (max-width: 767px){.wiki{gap:16px}.wiki-mobile-nav-bar{display:flex;align-items:center;gap:12px;padding:12px 14px;background:var(--bg-elev);border:1px solid var(--border);border-radius:12px}.wiki-mobile-nav-bar .btn{flex:none}.wiki-mobile-nav-label{min-width:0;margin-left:auto;overflow:hidden;color:var(--fg-dim);text-align:right;text-overflow:ellipsis;white-space:nowrap}.wiki-main{min-height:0}.wiki-page-header{padding:16px}.wiki-page-title-block h2{font-size:24px}.wiki-meta{align-items:flex-start}.wiki-article{padding:18px 16px 24px}.wiki-mobile-sidebar-toolbar,.wiki-page-actions{flex-wrap:wrap}.wiki-page-actions .btn,.wiki-mobile-sidebar-toolbar .btn{flex:1 1 160px}}.wiki-edit .row{display:flex;gap:12px;margin-bottom:12px}.wiki-edit input[type=text]{flex:1;background:var(--bg);border:1px solid var(--border);color:var(--fg);padding:8px;border-radius:6px}.wiki-edit label{display:block;width:100%;font-size:12px;color:var(--fg-dim)}.wiki-editor{margin-bottom:16px}.agent-editor-form{display:flex;flex-direction:column;gap:16px}.agent-editor-card{display:flex;flex-direction:column;gap:12px;padding:16px;border:1px solid var(--border);border-radius:12px;background:var(--bg-elev)}.agent-editor-grid{display:grid;gap:16px}.agent-editor-meta-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin:0}.agent-editor-meta-list div{display:flex;flex-direction:column;gap:4px}.agent-editor-meta-list dt{font-size:12px;color:var(--fg-dim)}.agent-editor-meta-list dd{margin:0}.agent-editor-skills{display:flex;flex-direction:column;gap:10px}.agent-editor-skill-option{display:flex;align-items:center;gap:8px}.agent-editor-prompt{min-height:240px;font-family:var(--font-mono, "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace)}.agent-editor-toast{margin-bottom:12px}.skill-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}.skill-card{background:var(--bg-elev);border:1px solid var(--border);border-radius:8px;padding:14px}.skill-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.tag{font-size:10px;text-transform:uppercase;padding:2px 6px;border-radius:4px;letter-spacing:.05em;background:var(--bg-elev-2);color:var(--fg-dim)}.tag-bundled{color:#93c5fd}.tag-local{color:#86efac}.tag-global{color:#fcd34d}.settings section{margin-bottom:28px}.settings-field{display:flex;flex-direction:column;gap:6px}.settings-field-label{font-size:12px;color:var(--fg-dim)}.settings select{background:var(--bg);color:var(--fg);border:1px solid var(--border);border-radius:6px;padding:6px 10px}.row{display:flex;align-items:center;gap:8px}.settings-row{align-items:flex-end}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes skeleton-shimmer{0%{background-position:100% 50%}to{background-position:0 50%}}@keyframes pulse{0%,to{opacity:.4}50%{opacity:1}}.ralph{max-width:760px}.ralph-section{margin-top:24px}.ralph-section h2{font-size:15px;font-weight:600;margin-bottom:10px;color:var(--fg)}.ralph-status-card{background:var(--bg-elev);border:1px solid var(--border);border-radius:8px;padding:14px 16px;display:flex;flex-direction:column;gap:8px}.ralph-status-row{display:flex;align-items:center;gap:10px;font-size:14px}.ralph-status-label{min-width:90px;color:var(--text-dim, #888);font-size:12px;text-transform:uppercase;letter-spacing:.04em}.ralph-badge{font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px;text-transform:uppercase;letter-spacing:.04em}.ralph-badge--running{background:color-mix(in srgb,var(--accent) 15%,transparent);color:var(--accent)}.ralph-badge--stopped{background:color-mix(in srgb,#888 15%,transparent);color:#888}.ralph-mono{font-family:var(--font-mono, monospace);font-size:13px}.ralph-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:400px}.ralph-controls{background:var(--bg-elev);border:1px solid var(--border);border-radius:8px;padding:14px 16px;display:flex;flex-direction:column;gap:12px}.ralph-form-row{display:flex;align-items:center;gap:10px;font-size:14px}.ralph-form-row label{min-width:140px;color:var(--text-dim, #888);font-size:12px;text-transform:uppercase;letter-spacing:.04em}.ralph-select,.ralph-input{background:var(--bg-elev-2, var(--bg-elev));border:1px solid var(--border);border-radius:5px;color:var(--fg);font-size:13px;padding:5px 8px;min-width:240px}.ralph-input--narrow{min-width:80px;width:80px}.ralph-select:focus,.ralph-input:focus{outline:2px solid var(--accent);outline-offset:1px}.btn{border:none;border-radius:6px;font-size:13px;font-weight:600;padding:6px 14px;cursor:pointer;transition:opacity .1s;align-self:flex-start}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover:not(:disabled){opacity:.85}.btn-danger{background:#f44336;color:#fff}.btn-danger:hover:not(:disabled){opacity:.85}.ralph-queue-count{font-weight:400;color:var(--text-dim, #888);font-size:13px}.ralph-queue-source{margin-bottom:8px}.ralph-queue{display:flex;flex-direction:column;gap:6px}.ralph-issue{display:block;text-decoration:none;color:inherit;background:var(--bg-elev);border:1px solid var(--border);border-radius:8px;padding:10px 12px;transition:background .1s}.ralph-issue:hover{background:var(--bg-elev-2)}.ralph-issue-head{display:flex;align-items:baseline;gap:8px;margin-bottom:4px}.ralph-issue-number{font-family:var(--font-mono, monospace);font-size:12px;color:var(--text-dim, #888);flex-shrink:0}.ralph-issue-title{font-size:14px;font-weight:500}.ralph-issue-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.ralph-labels{display:flex;flex-wrap:wrap;gap:4px}.ralph-label{font-size:11px;padding:1px 6px;border-radius:8px;background:color-mix(in srgb,#888 12%,transparent);color:var(--fg)}.ralph-label--agent{background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent)}.ralph-label--triage{background:color-mix(in srgb,#9c27b0 12%,transparent);color:#9c27b0}.ralph-label--urgent{background:color-mix(in srgb,#f44336 12%,transparent);color:#f44336}.link-btn{background:none;border:none;color:var(--accent);font-size:inherit;cursor:pointer;padding:0;text-decoration:underline}
10
+ */.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#79c0ff}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-comment,.hljs-code,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}:root{color-scheme:dark;--bg: #0e1116;--bg-elev: #161b22;--bg-elev-2: #21262d;--fg: #e6edf3;--fg-dim: #8b949e;--border: #30363d;--accent: #3b82f6;--accent-fg: #ffffff;--danger: #f87171;--user-bubble: #1e293b}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--fg);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,sans-serif;font-size:14px;line-height:1.5}a,.link{color:var(--accent);text-decoration:none}a:hover,.link:hover{text-decoration:underline}button,input,textarea,select{font:inherit}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:2px}code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.9em;background:var(--bg-elev-2);padding:1px 5px;border-radius:4px}.dim{color:var(--fg-dim)}.small{font-size:12px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:absolute;left:16px;top:-48px;z-index:10;padding:10px 14px;border-radius:8px;background:var(--accent);color:var(--accent-fg)}.skip-link:focus{top:16px}.layout{display:grid;grid-template-columns:220px 1fr;height:100%}.sidebar{background:var(--bg-elev);border-right:1px solid var(--border);padding:16px 0;display:flex;flex-direction:column}.sidebar-brand{display:flex;align-items:center;gap:10px;padding:0 18px 18px;font-weight:600;font-size:16px;border-bottom:1px solid var(--border);margin-bottom:12px}.sidebar nav{display:flex;flex-direction:column}.channel-rail{border-bottom:1px solid var(--border);margin-bottom:12px;padding:0 0 12px}.sidebar-section-label{padding:0 18px 6px;color:var(--fg-dim);font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.channel-link{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;background:transparent;border:0;border-left:2px solid transparent;color:var(--fg);cursor:pointer;padding:7px 18px;text-align:left}.channel-link:hover{background:var(--bg-elev-2)}.channel-link.active{background:color-mix(in srgb,var(--accent) 14%,var(--bg-elev-2));border-left-color:var(--accent)}.channel-scope{color:var(--fg-dim);font-size:11px}.sidebar-error{color:var(--danger);padding:4px 18px 0}.nav-link{padding:9px 18px;color:var(--fg);border-left:2px solid transparent}.nav-link:hover{background:var(--bg-elev-2);text-decoration:none}.nav-link.active{background:var(--bg-elev-2);border-left-color:var(--accent);color:var(--fg)}.nav-group{display:flex;flex-direction:column}.nav-group-row{display:flex;align-items:stretch}.nav-group-label{flex:1}.nav-group-toggle{background:none;border:none;cursor:pointer;padding:0 14px 0 4px;color:var(--fg-muted, var(--fg));display:flex;align-items:center;justify-content:center;border-left:2px solid transparent}.nav-group-toggle:hover{background:var(--bg-elev-2)}.nav-chevron{display:inline-block;font-size:18px;line-height:1;transition:transform .18s ease;transform:rotate(0)}.nav-chevron-open{transform:rotate(90deg)}.nav-recents{list-style:none;margin:0;padding:0}.nav-recent-link{display:flex;align-items:baseline;justify-content:space-between;gap:6px;width:100%;background:none;border:none;border-left:2px solid transparent;padding:6px 18px 6px 28px;cursor:pointer;color:var(--fg);text-align:left;font-size:13px}.nav-recent-link:hover{background:var(--bg-elev-2);text-decoration:none;border-left-color:var(--accent)}.nav-recent-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.nav-recent-hint{font-size:11px;flex-shrink:0;opacity:.6}.nav-recents-empty{padding:4px 28px 6px;font-size:12px;margin:0}.main{overflow:hidden;display:flex;flex-direction:column}.app-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 24px;border-bottom:1px solid var(--border);background:var(--bg-elev)}.app-header-title{font-size:16px;font-weight:600;margin:0}.app-header-title-row{display:inline-flex;align-items:center;gap:10px}.app-header-user{color:var(--fg-dim);font-size:13px}.mode-badge{display:inline-flex;align-items:center;border-radius:999px;padding:3px 10px;font-size:12px;font-weight:600;line-height:1;border:1px solid transparent}.mode-standalone{background:var(--bg-elev-2);border-color:var(--border);color:var(--fg-dim)}.mode-team{background:color-mix(in srgb,var(--accent) 14%,transparent);border-color:color-mix(in srgb,var(--accent) 35%,var(--border));color:var(--accent)}.sse-badge{display:inline-flex;align-items:center;gap:6px;border-radius:999px;padding:3px 10px;font-size:12px;font-weight:600;line-height:1;border:1px solid transparent}.sse-badge__dot{display:inline-block;width:7px;height:7px;border-radius:50%;flex-shrink:0}.sse-badge--connected{background:color-mix(in srgb,#22c55e 12%,transparent);border-color:color-mix(in srgb,#22c55e 35%,var(--border));color:#15803d}.sse-badge--connected .sse-badge__dot{background:#22c55e}.sse-badge--idle{background:color-mix(in srgb,var(--panel) 65%,transparent);border-color:var(--border);color:var(--text-muted)}.sse-badge--idle .sse-badge__dot{background:var(--text-muted)}.sse-badge--reconnecting{background:color-mix(in srgb,#f59e0b 12%,transparent);border-color:color-mix(in srgb,#f59e0b 35%,var(--border));color:#b45309}.sse-badge--reconnecting .sse-badge__dot{background:#f59e0b;animation:sse-pulse 1.2s ease-in-out infinite}.sse-badge--disconnected{background:color-mix(in srgb,#ef4444 12%,transparent);border-color:color-mix(in srgb,#ef4444 35%,var(--border));color:#b91c1c}.sse-badge--disconnected .sse-badge__dot{background:#ef4444}.sse-badge__reconnect-btn{background:none;border:none;padding:0;margin-left:4px;font-size:12px;font-weight:600;color:inherit;cursor:pointer;text-decoration:underline;text-underline-offset:2px}.sse-badge__reconnect-btn:hover{opacity:.8}@keyframes sse-pulse{0%,to{opacity:1}50%{opacity:.35}}.connection-banner{border:1px solid transparent;border-radius:10px;font-size:13px;font-weight:600;margin-bottom:16px;padding:10px 14px}.connection-banner--reconnecting{background:color-mix(in srgb,#f59e0b 14%,var(--bg-elev));border-color:color-mix(in srgb,#f59e0b 35%,var(--border));color:#fbbf24}.connection-banner--disconnected{background:color-mix(in srgb,#ef4444 14%,var(--bg-elev));border-color:color-mix(in srgb,#ef4444 35%,var(--border));color:#fca5a5}.page-shell{max-width:760px;margin:0 auto;padding:32px}.loading,.empty-state{padding:32px;color:var(--fg-dim)}.empty-state h2{color:var(--fg);margin-top:0;margin-bottom:8px}.empty-state p{margin:0 0 12px}.empty-state-icon{font-size:28px;margin-bottom:8px;line-height:1}.empty-state-action{margin-top:4px}.auth-screen{min-height:100%;display:grid;place-items:center;padding:32px}.auth-card{width:min(420px,100%);background:var(--bg-elev);border:1px solid var(--border);border-radius:12px;padding:24px}.auth-card h1{margin-top:0;margin-bottom:8px}.auth-card p{margin-top:0;margin-bottom:20px;color:var(--fg-dim)}.page{padding:24px 32px;overflow:auto;flex:1;min-width:0}.page-header{margin-bottom:16px}.page-header h1{margin:0 0 4px;font-size:22px}.projects-table-wrap{overflow-x:auto}.projects-table{width:100%;border-collapse:collapse;background:var(--bg-elev);border:1px solid var(--border);border-radius:12px;overflow:hidden}.projects-table th,.projects-table td{padding:12px 14px;border-bottom:1px solid var(--border);text-align:left;vertical-align:top}.projects-table thead th{background:var(--bg-elev-2);font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--fg-dim)}.projects-table tbody tr:last-child th,.projects-table tbody tr:last-child td{border-bottom:0}.agents-sort-button{width:100%;display:inline-flex;align-items:center;justify-content:space-between;gap:8px;padding:0;border:0;background:transparent;color:inherit;font:inherit;text-transform:inherit;letter-spacing:inherit;cursor:pointer}.agents-sort-indicator,.tag-builtin{color:var(--fg-dim)}.tag-custom{color:var(--accent)}.project-detail-backlink{display:inline-flex;align-items:center;gap:6px;margin-bottom:12px;font-size:13px}.project-detail-summary{margin:0;color:var(--fg-dim)}.agent-detail-header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.agent-detail-summary{margin:0;color:var(--fg-dim)}.agent-detail-banner{margin-bottom:16px;padding:12px 14px;border:1px solid var(--border);border-radius:10px;background:var(--bg-elev);color:var(--fg-dim)}.project-detail-layout{display:grid;gap:16px}.project-detail-card{background:var(--bg-elev);border:1px solid var(--border);border-radius:12px;padding:18px}.project-detail-card h2{margin:0 0 14px;font-size:16px}.project-detail-meta{display:grid;grid-template-columns:minmax(120px,180px) 1fr;gap:10px 16px;margin:0}.project-detail-meta dt{color:var(--fg-dim);font-weight:600}.project-detail-meta dd{margin:0}.project-detail-actions{display:flex;justify-content:flex-end;margin-top:16px}.project-hard-rules{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin:0}.project-hard-rule{background:var(--bg-elev-2);border:1px solid var(--border);border-radius:8px;padding:12px 14px}.project-hard-rule dt{color:var(--fg-dim);font-size:12px;font-weight:600;letter-spacing:.03em;text-transform:uppercase}.project-hard-rule dd{margin:6px 0 0;font-size:14px}.project-hard-rules-form{display:grid;gap:14px}.project-hard-rule-input{display:grid;gap:10px;align-content:start}.project-hard-rule-label{color:var(--fg-dim);font-size:12px;font-weight:600;letter-spacing:.03em;text-transform:uppercase}.project-hard-rule input[type=checkbox]{width:16px;height:16px}.project-hard-rule-text-input{background:var(--bg-elev);border:1px solid var(--border);border-radius:6px;color:var(--fg);font-size:13px;padding:6px 10px;width:100%}.project-hard-rule-text-input:focus{outline:none;border-color:var(--accent)}.project-soft-rules-form{display:grid;gap:12px}.project-soft-rules-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));align-items:start}.project-soft-rules-editor,.project-soft-rules-preview-card{min-width:0}.project-soft-rules-label{color:var(--fg-dim);font-size:12px;font-weight:600;letter-spacing:.03em;text-transform:uppercase}.project-soft-rules-input{background:var(--bg-elev);border:1px solid var(--border);border-radius:6px;color:var(--fg);font-size:13px;line-height:1.5;min-height:140px;padding:10px 12px;resize:vertical;width:100%}.project-soft-rules-input:focus{outline:none;border-color:var(--accent)}.project-soft-rules-hint{color:var(--fg-dim);font-size:12px;margin:0}.project-soft-rules-preview-card{background:var(--bg-elev-2);border:1px solid var(--border);border-radius:8px;padding:12px 14px}.project-soft-rules-preview-title{margin:0 0 10px;color:var(--fg-dim);font-size:12px;font-weight:600;letter-spacing:.03em;text-transform:uppercase}.project-soft-rules-preview{min-height:140px}.project-soft-rules-preview .md>:first-child{margin-top:0}.project-soft-rules-preview .md>:last-child{margin-bottom:0}.agent-detail-markdown .md>:first-child{margin-top:0}.agent-detail-markdown .md>:last-child{margin-bottom:0}.project-save-feedback{margin:0;font-size:12px}.project-save-feedback-success{color:#4ade80}.project-save-feedback-error{color:var(--danger)}.project-detail-empty{padding:0}.projects-count{width:120px}.error-notice{background:#f871711a;border:1px solid var(--danger);color:var(--danger);padding:12px 14px;border-radius:8px;margin-bottom:16px}.error-notice.inline{margin-bottom:12px}.error-notice-title{margin:0 0 4px;font-size:16px}.error-notice-message{margin:0}.error-notice-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.error-details{background:var(--bg-elev-2);padding:12px;border-radius:8px;overflow:auto}.loading-state{display:flex;align-items:flex-start;gap:12px;padding:16px 0;color:var(--fg-dim)}.loading-state.inline{padding:10px 0}.loading-state.centered{justify-content:center;padding:48px 32px}.loading-spinner{width:18px;height:18px;border:2px solid rgba(59,130,246,.25);border-top-color:var(--accent);border-radius:999px;flex:none;margin-top:2px;animation:spin .9s linear infinite}.loading-state-label{color:var(--fg);font-weight:500}.loading-state-detail{margin-top:2px}.skeleton-state{display:flex;flex-direction:column;gap:14px;padding:12px 0}.skeleton-chat-row{display:flex}.skeleton-chat-row--user{justify-content:flex-end}.skeleton-chat-row--assistant{justify-content:flex-start}.skeleton-chat-bubble,.skeleton-wiki-sheet{background:var(--bg-elev);border:1px solid var(--border);border-radius:12px;padding:14px}.skeleton-chat-bubble{display:flex;flex-direction:column;gap:10px;max-width:min(100%,42rem);width:min(100%,42rem)}.skeleton-chat-bubble--user{background:color-mix(in srgb,var(--user-bubble) 80%,var(--bg-elev))}.skeleton-chat-bubble--assistant{background:color-mix(in srgb,var(--bg-elev) 70%,var(--bg-elev-2))}.skeleton-chat-bubble--narrow{width:min(100%,30rem)}.skeleton-wiki-sheet{display:flex;flex-direction:column;gap:12px;max-width:76ch;margin:24px 22px 32px}.skeleton-line{display:block;height:12px;width:100%;border-radius:999px;background:linear-gradient(90deg,color-mix(in srgb,var(--bg-elev-2) 88%,transparent) 25%,color-mix(in srgb,var(--fg-dim) 20%,var(--bg-elev-2)),color-mix(in srgb,var(--bg-elev-2) 88%,transparent) 75%);background-size:220% 100%;animation:skeleton-shimmer 1.2s ease-in-out infinite}.skeleton-line--title{height:18px}.skeleton-line--25{width:25%}.skeleton-line--30{width:30%}.skeleton-line--35{width:35%}.skeleton-line--45{width:45%}.skeleton-line--55{width:55%}.skeleton-line--60{width:60%}.skeleton-line--70{width:70%}.skeleton-line--80{width:80%}.skeleton-line--85{width:85%}.skeleton-line--90{width:90%}.skeleton-line--95{width:95%}.skeleton-line--100{width:100%}.btn{background:var(--bg-elev-2);color:var(--fg);border:1px solid var(--border);border-radius:6px;padding:6px 14px;font-size:13px;cursor:pointer}.btn:hover{background:var(--bg-elev)}.btn.primary{background:var(--accent);color:var(--accent-fg);border-color:var(--accent)}.btn.primary:hover{filter:brightness(1.1)}.btn.danger{border-color:var(--danger);color:var(--danger)}.btn.cancel{background:var(--danger);border-color:var(--danger);color:var(--accent-fg)}.chat{display:flex;flex:1 1 auto;flex-direction:column;min-height:0}.channel-header{display:flex;align-items:center;justify-content:space-between;gap:16px;border-bottom:1px solid var(--border);background:#0e1116b8;padding:14px 32px}.channel-header-title{font-size:16px;font-weight:700}.channel-header-description{color:var(--fg-dim);font-size:12px}.channel-header-scope{border:1px solid color-mix(in srgb,var(--accent) 35%,var(--border));border-radius:999px;color:var(--fg-dim);font-size:12px;padding:3px 9px;white-space:nowrap}.chat-scroll{flex:1;min-height:0;overflow:auto;padding:24px 32px 0}.chat-log{display:flex;flex-direction:column}.turn-wrapper{margin-bottom:18px}.turn-wrapper+.turn-wrapper:not(.has-separator) .bubble{border-top:1px solid var(--border);padding-top:14px}.turn-header{display:flex;align-items:center;gap:8px;margin-bottom:6px;font-size:12px}.turn-header--user{justify-content:flex-end}.turn-actor-badge{display:inline-flex;align-items:center;gap:4px;background:var(--bg-elev);border:1px solid var(--border);border-radius:999px;padding:2px 8px;font-size:11px;font-weight:500;-webkit-user-select:none;user-select:none}.turn-header--agent .turn-actor-badge{background:color-mix(in srgb,var(--accent) 10%,var(--bg-elev));border-color:color-mix(in srgb,var(--accent) 35%,var(--border))}.turn-actor-icon{font-size:11px;line-height:1}.turn-agent-slug{color:var(--accent);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10px;font-weight:600}.turn-ts{font-size:11px;color:var(--fg-dim);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;cursor:default;-webkit-user-select:none;user-select:none}.time-separator{display:flex;align-items:center;gap:10px;margin:16px 0 10px;color:var(--fg-dim);font-size:11px;font-style:italic;-webkit-user-select:none;user-select:none}.time-separator-line{flex:1;height:1px;background:var(--border);opacity:.5}.time-separator-label{white-space:nowrap;opacity:.7;letter-spacing:.02em}.bubble{max-width:800px}.bubble.user{margin-left:auto;text-align:right}.bubble--agent-activity{opacity:.88;border-left:2px solid var(--accent, #6366f1);padding-left:10px}.bubble.user .user-text{display:inline-block;background:var(--user-bubble);border:1px solid var(--border);padding:8px 14px;border-radius:14px;white-space:pre-wrap;text-align:left;margin:0}.route-tag{font-size:11px;color:var(--fg-dim);margin-top:4px}.assistant-turn-status{display:inline-flex;align-items:center;gap:8px;margin:0 0 8px;color:var(--fg-dim);font-size:12px;line-height:1.4}.assistant-turn-status-dots{display:inline-flex;align-items:center;gap:4px}.assistant-turn-status-dot{width:6px;height:6px;border-radius:999px;background:currentColor;opacity:.35;animation:pulse 1.1s ease-in-out infinite}.assistant-turn-status-dot:nth-child(2){animation-delay:.15s}.assistant-turn-status-dot:nth-child(3){animation-delay:.3s}@media (prefers-reduced-motion: reduce){.assistant-turn-status-dot{animation:none;opacity:.7}}.copy-btn-wrap{position:relative}.copy-btn{position:absolute;top:6px;right:6px;display:flex;align-items:center;justify-content:center;padding:4px;background:var(--bg-elev);border:1px solid var(--border);border-radius:6px;color:var(--fg-dim);cursor:pointer;z-index:1;line-height:0;transition:color .15s,background .15s}.copy-btn:hover{background:var(--bg-elev-2);color:var(--fg)}.copy-btn--copied{color:#4ade80;border-color:#4ade80}@media (hover: hover){.copy-btn{opacity:0;pointer-events:none;transition:opacity .15s,color .15s,background .15s}.copy-btn-wrap:hover .copy-btn,.copy-btn-wrap:focus-within .copy-btn{opacity:1;pointer-events:auto}}.copy-btn--code{top:8px;right:8px}.activity-heartbeat{display:flex;align-items:center;gap:6px;padding:4px 8px;margin:0 0 6px;border-radius:6px;border:1px solid rgba(59,130,246,.35);background:var(--bg-elev-2);font-size:12px;color:var(--fg);transition:opacity .3s}.activity-heartbeat.stale{opacity:.5;border-color:var(--border);color:var(--fg-dim)}.heartbeat-spinner{font-family:ui-monospace,monospace;font-size:11px;color:var(--accent);display:inline-block;animation:spin 1.4s linear infinite}.activity-heartbeat.stale .heartbeat-spinner{animation:none;color:var(--fg-dim)}.heartbeat-agent{font-weight:600}.heartbeat-sep{color:var(--fg-dim)}.heartbeat-action{color:var(--fg-dim);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.heartbeat-elapsed{font-family:ui-monospace,monospace;font-size:11px;color:var(--fg-dim);white-space:nowrap}.activity-strip{margin:0 0 8px;font-size:12px}.activity-summary{display:flex;flex-wrap:wrap;gap:6px}.activity-pill{display:inline-flex;align-items:center;gap:6px;background:var(--bg-elev);border:1px solid var(--border);color:var(--fg-dim);padding:3px 10px;border-radius:999px;cursor:pointer;font-size:12px}.activity-pill:hover{background:var(--bg-elev-2)}.activity-pill.running{color:var(--accent);border-color:#3b82f673}.activity-pill .glyph{font-family:ui-monospace,monospace;font-size:11px}.activity-pill.running .glyph{display:inline-block;animation:spin 1s linear infinite}.activity-pill .caret{color:var(--fg-dim);font-size:10px}.activity-headlines{display:flex;flex-direction:column;gap:2px;margin-top:6px}.activity-headline{display:inline-flex;align-items:center;gap:6px;padding:2px 4px;color:var(--fg-dim)}.activity-headline.status-running{color:var(--accent)}.activity-headline.status-failed{color:var(--danger)}.activity-headline .glyph{font-family:ui-monospace,monospace;font-size:11px;width:12px;text-align:center}.activity-headline.status-running .glyph{animation:spin 1s linear infinite}.agent-tag{font-size:10px;text-transform:lowercase;background:#3b82f629;color:#93c5fd;border:1px solid rgba(59,130,246,.35);padding:1px 6px;border-radius:4px;letter-spacing:.02em}.activity-thinking,.activity-details{margin-top:8px;padding:10px 12px;background:var(--bg-elev);border:1px solid var(--border);border-radius:6px}.activity-details{display:flex;flex-direction:column;gap:6px}.thinking-block{margin:0;padding:8px;background:var(--bg-elev-2);border-radius:4px;white-space:pre-wrap;font-size:12px;line-height:1.5;max-height:280px;overflow:auto}.activity-row{border:1px solid var(--border);border-radius:6px;background:var(--bg-elev-2)}.activity-row.status-running{border-color:#3b82f673}.activity-row.status-failed{border-color:var(--danger)}.activity-row-head{width:100%;display:flex;align-items:center;gap:8px;background:transparent;border:0;color:var(--fg);text-align:left;padding:6px 10px;cursor:pointer;font-size:12px}.activity-row.status-running .activity-row-head .glyph{animation:spin 1s linear infinite;color:var(--accent)}.activity-row.status-failed .activity-row-head .glyph{color:var(--danger)}.activity-row .glyph{font-family:ui-monospace,monospace;width:12px;text-align:center}.activity-row .caret{margin-left:auto;color:var(--fg-dim)}.activity-row-body{padding:0 10px 10px;display:flex;flex-direction:column;gap:6px}.row-label{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--fg-dim)}.composer{border-top:1px solid var(--border);background:var(--bg-elev);padding:14px 32px;display:flex;flex-direction:column;gap:8px}.composer textarea{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:8px;color:var(--fg);padding:10px;resize:vertical;transition:background .14s ease,opacity .14s ease,border-color .14s ease}.composer-textarea--disabled,.composer textarea:disabled{background:color-mix(in srgb,var(--bg-elev-2) 88%,black);border-color:color-mix(in srgb,var(--border) 80%,black);cursor:not-allowed;opacity:.5}.composer-help{margin-top:-2px}.composer-status{border:1px solid transparent;border-radius:8px;font-size:12px;font-weight:600;padding:8px 10px}.composer-status--reconnecting{background:color-mix(in srgb,#f59e0b 14%,transparent);border-color:color-mix(in srgb,#f59e0b 35%,var(--border));color:#fbbf24}.composer-status--disconnected{background:color-mix(in srgb,#ef4444 12%,transparent);border-color:color-mix(in srgb,#ef4444 35%,var(--border));color:#fca5a5}.composer-queued{align-items:center;border:1px solid transparent;border-radius:10px;color:var(--fg-dim);display:flex;font-size:12px;gap:10px;justify-content:space-between;padding:8px 10px;transition:background .18s ease,border-color .18s ease,box-shadow .18s ease}.composer-queued--highlight{background:color-mix(in srgb,#f59e0b 14%,transparent);border-color:color-mix(in srgb,#f59e0b 35%,var(--border));box-shadow:0 0 0 1px color-mix(in srgb,#f59e0b 22%,transparent)}.composer-queued-link{flex:0 0 auto;text-underline-offset:2px}.dreaming-indicator{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--fg-dim);padding:4px 0;animation:pulse 2s ease-in-out infinite}.dreaming-indicator-glyph{color:#c4b5fd}.composer-actions{display:flex;justify-content:flex-end;gap:6px}.composer-actions .btn:disabled{cursor:not-allowed;opacity:.55}.md{line-height:1.55}.md p:first-child{margin-top:0}.md p:last-child{margin-bottom:0}.md pre{background:var(--bg-elev-2);border-radius:6px;padding:12px;overflow:auto}.md pre code{background:transparent;padding:0}.md table{border-collapse:collapse;margin:1em 0}.md th,.md td{border:1px solid var(--border);padding:6px 10px}.workers-layout{display:grid;grid-template-columns:320px 1fr;gap:18px;align-items:start}.workers-list{display:flex;flex-direction:column;gap:6px}.worker-row{text-align:left;background:var(--bg-elev);border:1px solid var(--border);border-radius:8px;padding:10px 12px;cursor:pointer;color:var(--fg)}.worker-row.selected,.worker-row:hover{background:var(--bg-elev-2)}.worker-row-head{display:flex;justify-content:space-between;align-items:center}.worker-status{font-size:11px;font-weight:600;padding:2px 7px;border-radius:10px;text-transform:uppercase;letter-spacing:.04em}.worker-status--running{background:color-mix(in srgb,var(--accent) 15%,transparent);color:var(--accent)}.worker-status--completed{background:color-mix(in srgb,#4caf50 15%,transparent);color:#4caf50}.worker-status--error{background:color-mix(in srgb,#f44336 15%,transparent);color:#f44336}.worker-row-desc{margin-top:4px;font-size:13px;color:var(--fg)}.workers-detail{background:var(--bg-elev);border:1px solid var(--border);border-radius:8px;padding:18px}.worker-detail-description{margin:4px 0 8px;font-size:15px}.worker-detail-slug,.worker-detail-taskid{font-size:.75em;font-family:var(--font-mono, monospace)}.worker-detail-meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px;margin-bottom:8px}.worker-events{display:flex;flex-direction:column;gap:4px;max-height:320px;overflow-y:auto;background:var(--bg-elev-2);border-radius:6px;padding:10px 12px;margin-bottom:12px;font-size:12px;font-family:var(--font-mono, monospace)}.worker-event{display:flex;gap:8px;align-items:baseline;line-height:1.5}.worker-event-ts{color:var(--text-dim, #888);flex-shrink:0;font-size:11px}.worker-event-body{display:flex;gap:4px;align-items:baseline;flex-wrap:wrap;overflow:hidden}.worker-event-icon{flex-shrink:0}.worker-event--tool_complete .worker-event-icon{opacity:.7}.msg-queued-indicator{font-size:.8em;opacity:.6;vertical-align:middle;-webkit-user-select:none;user-select:none}.msg-queued-backend-indicator{display:inline-block;font-size:.78em;opacity:.75;margin-top:4px;color:var(--fg-dim);-webkit-user-select:none;user-select:none}.output{background:var(--bg-elev-2);padding:12px;border-radius:6px;overflow:auto;white-space:pre-wrap;font-size:13px}.projects-toolbar{margin-bottom:16px}.projects-register-form{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.projects-path-input{background:var(--bg-elev);border:1px solid var(--border);border-radius:6px;color:var(--fg);font-size:13px;padding:6px 10px;width:380px;max-width:100%}.projects-path-input:focus{outline:none;border-color:var(--accent)}.projects-register-error{font-size:12px}.projects-disabled{background:var(--bg-elev);border:1px solid var(--border);border-radius:8px;padding:18px}.projects-empty{padding:24px 0}.projects-list{display:flex;flex-direction:column;gap:8px}.project-row{background:var(--bg-elev);border:1px solid var(--border);border-radius:8px;padding:12px 16px;display:flex;align-items:center;justify-content:space-between;gap:12px}.project-row-info{display:flex;flex-direction:column;gap:4px;min-width:0}.project-root{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-meta{display:flex;gap:12px;font-size:12px;flex-wrap:wrap}.project-badge{background:var(--bg-elev-2);border:1px solid var(--border);border-radius:10px;padding:1px 8px;font-size:11px;color:var(--fg)}.project-row-actions{display:flex;gap:6px;flex-shrink:0}.project-chat-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 16px;background:color-mix(in srgb,var(--accent) 8%,var(--bg-elev));border-bottom:1px solid color-mix(in srgb,var(--accent) 20%,var(--border));flex-shrink:0}.project-chat-header-identity{display:flex;align-items:center;gap:8px;min-width:0;overflow:hidden}.project-chat-icon{font-size:16px;flex-shrink:0}.project-chat-title{font-size:14px;white-space:nowrap;flex-shrink:0}.project-chat-path{font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.wiki{display:flex;flex-direction:column;min-height:100%}.wiki-layout{display:grid;grid-template-columns:minmax(320px,360px) minmax(0,1fr);gap:20px;flex:1;min-height:0}.wiki-mobile-nav-bar{display:none}.wiki-sidebar,.wiki-main{min-height:0}.wiki-sidebar{display:flex;flex-direction:column;background:var(--bg-elev);border:1px solid var(--border);border-radius:12px;overflow:hidden}.wiki-sidebar-header{position:sticky;top:0;z-index:1;display:flex;flex-direction:column;gap:14px;padding:16px;border-bottom:1px solid var(--border);background:linear-gradient(180deg,var(--bg-elev) 0%,rgba(22,27,34,.98) 100%)}.wiki-sidebar-header-row{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.wiki-sidebar-header-row h2{margin:0 0 4px;font-size:16px}.wiki-sidebar-header-row p{margin:0}.wiki-search{display:flex;flex-direction:column;gap:12px}.wiki-search-field input,.wiki-filter select{width:100%;background:var(--bg);border:1px solid var(--border);color:var(--fg);padding:9px 10px;border-radius:8px}.wiki-filter{display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--fg-dim)}.wiki-search-meta,.wiki-shortcuts,.wiki-scope-legend{color:var(--fg-dim)}.wiki-scope-header-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.wiki-scope-header-row h1{margin:0}.wiki-shortcuts{border-top:1px solid var(--border);padding-top:12px}.wiki-scope-legend{display:flex;flex-wrap:wrap;gap:8px}.wiki-scope-legend>span{display:inline-flex;align-items:center;gap:4px}.wiki-sidebar-body{flex:1;min-height:0;overflow:auto;padding:12px}.wiki-tree,.wiki-tree-children{list-style:none;margin:0;padding:0}.wiki-tree-children{margin-top:4px}.wiki-node{margin:2px 0}.wiki-node-button{width:100%;display:flex;align-items:center;gap:8px;padding:7px 10px;background:transparent;border:1px solid transparent;border-radius:8px;color:var(--fg);text-align:left;cursor:pointer}.wiki-node-folder-button{color:var(--fg-dim)}.wiki-node-folder-button:hover,.wiki-node-folder-button.expanded,.wiki-node-page-button:hover{background:var(--bg-elev-2);border-color:var(--border);color:var(--fg)}.wiki-node-page-button{align-items:flex-start}.wiki-node-page-button.selected{background:#3b82f61f;border-color:#3b82f659;box-shadow:inset 2px 0 0 var(--accent)}.wiki-node-icon{width:14px;flex:none;text-align:center;color:var(--fg-dim)}.wiki-node-page-button.selected .wiki-node-icon{color:#93c5fd}.wiki-node-page-button.selected .wiki-node-scope-icon-personal{color:#ddd6fe}.wiki-node-page-button.selected .wiki-node-scope-icon-team{color:#a7f3d0}.wiki-node-content{min-width:0;display:flex;flex:1;flex-direction:column;gap:4px}.wiki-node-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wiki-node-meta{display:flex;flex-wrap:wrap;gap:6px;font-size:11px}.wiki-node-count{margin-left:auto;border:1px solid var(--border);border-radius:999px;padding:0 6px;font-size:11px;color:var(--fg-dim)}.wiki-main{min-width:0;display:flex;background:var(--bg-elev);border:1px solid var(--border);border-radius:12px;overflow:hidden}.wiki-main>.wiki-empty-state{width:100%}.wiki-document{width:100%;min-height:0;display:flex;flex-direction:column}.wiki-page-header{position:sticky;top:0;z-index:1;padding:18px 22px 16px;border-bottom:1px solid var(--border);background:linear-gradient(180deg,var(--bg-elev) 0%,rgba(22,27,34,.98) 100%)}.wiki-page-header-main{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.wiki-page-title-block{min-width:0}.wiki-page-title-block h2{margin:0;font-size:28px;line-height:1.2}.wiki-page-summary{margin:8px 0 0;max-width:72ch;color:var(--fg-dim)}.wiki-page-actions{display:flex;gap:8px;flex:none}.wiki-breadcrumbs ol{display:flex;flex-wrap:wrap;gap:8px;list-style:none;margin:0 0 12px;padding:0}.wiki-breadcrumbs li{display:flex;align-items:center;min-width:0}.wiki-breadcrumbs li+li:before{content:"/";margin-right:8px;color:var(--fg-dim)}.wiki-breadcrumb-button{display:inline-block;max-width:100%;overflow:hidden;padding:0;border:0;background:transparent;color:var(--fg-dim);text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.wiki-breadcrumbs [aria-current=page]{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wiki-breadcrumb-button:hover{color:var(--fg);text-decoration:underline}.wiki-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:14px;font-size:12px;color:var(--fg-dim)}.wiki-meta>*{max-width:100%}.wiki-badge,.wiki-tag,.wiki-meta-item{display:inline-flex;align-items:center;border:1px solid var(--border);border-radius:999px;padding:3px 8px;background:var(--bg-elev-2)}.wiki-badge{color:#93c5fd;border-color:#3b82f659}.wiki-scope-badge{display:inline-flex;align-items:center;gap:4px}.wiki-scope-badge-personal{color:#c4b5fd;border-color:#c4b5fd59;background:#c4b5fd14}.wiki-scope-badge-team{color:#6ee7b7;border-color:#6ee7b759;background:#6ee7b714}.wiki-node-scope-icon-personal{color:#c4b5fd}.wiki-node-scope-icon-team{color:#6ee7b7}.wiki-tag{color:var(--fg)}.wiki-meta-path{max-width:100%;overflow:auto;white-space:nowrap}.wiki-document-body{flex:1;min-height:0;overflow:auto}.wiki-article{box-sizing:border-box;width:100%;max-width:min(76ch,100%);padding:24px 22px 32px}.wiki-article .md{overflow-wrap:anywhere}.wiki-article .md img{max-width:100%;height:auto}.wiki-article .md table{display:block;width:max-content;max-width:100%;overflow-x:auto}.wiki-empty-state{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:12px;margin:auto;max-width:56ch;padding:32px}.wiki-empty-state.compact{margin:0;max-width:none;padding:20px 12px}.wiki-empty-state h2{margin:0;font-size:20px}.wiki-empty-state p{margin:0;color:var(--fg-dim)}.wiki-empty-state-actions{display:flex;flex-wrap:wrap;gap:8px}.wiki-mobile-sidebar-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30;display:flex;justify-content:flex-start}.wiki-mobile-sidebar-backdrop{flex:1;border:0;background:#0a0f19b8}.wiki-mobile-sidebar-panel{position:relative;z-index:1;display:flex;flex-direction:column;gap:12px;width:min(100%,24rem);min-width:0;padding:16px 12px 12px;background:#0a0f19fa;border-right:1px solid var(--border);box-shadow:0 20px 48px #00000059}.wiki-mobile-sidebar-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px}.wiki-mobile-sidebar-title{font-size:14px;font-weight:600}.wiki-mobile-sidebar-panel .wiki-sidebar{flex:1;min-height:0}@media (max-width: 960px){.wiki-layout{grid-template-columns:1fr}.wiki-sidebar{max-height:50vh}.wiki-page-header-main,.wiki-sidebar-header-row,.wiki-scope-legend{flex-direction:column}.wiki-page-actions{width:100%}.wiki-page-actions .btn{flex:1}}@media (max-width: 767px){.wiki{gap:16px}.wiki-mobile-nav-bar{display:flex;align-items:center;gap:12px;padding:12px 14px;background:var(--bg-elev);border:1px solid var(--border);border-radius:12px}.wiki-mobile-nav-bar .btn{flex:none}.wiki-mobile-nav-label{min-width:0;margin-left:auto;overflow:hidden;color:var(--fg-dim);text-align:right;text-overflow:ellipsis;white-space:nowrap}.wiki-main{min-height:0}.wiki-page-header{padding:16px}.wiki-page-title-block h2{font-size:24px}.wiki-meta{align-items:flex-start}.wiki-article{padding:18px 16px 24px}.wiki-mobile-sidebar-toolbar,.wiki-page-actions{flex-wrap:wrap}.wiki-page-actions .btn,.wiki-mobile-sidebar-toolbar .btn{flex:1 1 160px}}.wiki-edit .row{display:flex;gap:12px;margin-bottom:12px}.wiki-edit input[type=text]{flex:1;background:var(--bg);border:1px solid var(--border);color:var(--fg);padding:8px;border-radius:6px}.wiki-edit label{display:block;width:100%;font-size:12px;color:var(--fg-dim)}.wiki-editor{margin-bottom:16px}.agent-editor-form{display:flex;flex-direction:column;gap:16px}.agent-editor-card{display:flex;flex-direction:column;gap:12px;padding:16px;border:1px solid var(--border);border-radius:12px;background:var(--bg-elev)}.agent-editor-grid{display:grid;gap:16px}.agent-editor-meta-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin:0}.agent-editor-meta-list div{display:flex;flex-direction:column;gap:4px}.agent-editor-meta-list dt{font-size:12px;color:var(--fg-dim)}.agent-editor-meta-list dd{margin:0}.agent-editor-skills{display:flex;flex-direction:column;gap:10px}.agent-editor-skill-option{display:flex;align-items:center;gap:8px}.agent-editor-prompt{min-height:240px;font-family:var(--font-mono, "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace)}.agent-editor-toast{margin-bottom:12px}.skill-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}.skill-card{background:var(--bg-elev);border:1px solid var(--border);border-radius:8px;padding:14px}.skill-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.tag{font-size:10px;text-transform:uppercase;padding:2px 6px;border-radius:4px;letter-spacing:.05em;background:var(--bg-elev-2);color:var(--fg-dim)}.tag-bundled{color:#93c5fd}.tag-local{color:#86efac}.tag-global{color:#fcd34d}.settings section{margin-bottom:28px}.settings-field{display:flex;flex-direction:column;gap:6px}.settings-field-label{font-size:12px;color:var(--fg-dim)}.settings select{background:var(--bg);color:var(--fg);border:1px solid var(--border);border-radius:6px;padding:6px 10px}.row{display:flex;align-items:center;gap:8px}.settings-row{align-items:flex-end}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes skeleton-shimmer{0%{background-position:100% 50%}to{background-position:0 50%}}@keyframes pulse{0%,to{opacity:.4}50%{opacity:1}}.ralph{max-width:760px}.ralph-section{margin-top:24px}.ralph-section h2{font-size:15px;font-weight:600;margin-bottom:10px;color:var(--fg)}.ralph-status-card{background:var(--bg-elev);border:1px solid var(--border);border-radius:8px;padding:14px 16px;display:flex;flex-direction:column;gap:8px}.ralph-status-row{display:flex;align-items:center;gap:10px;font-size:14px}.ralph-status-label{min-width:90px;color:var(--text-dim, #888);font-size:12px;text-transform:uppercase;letter-spacing:.04em}.ralph-badge{font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px;text-transform:uppercase;letter-spacing:.04em}.ralph-badge--running{background:color-mix(in srgb,var(--accent) 15%,transparent);color:var(--accent)}.ralph-badge--stopped{background:color-mix(in srgb,#888 15%,transparent);color:#888}.ralph-mono{font-family:var(--font-mono, monospace);font-size:13px}.ralph-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:400px}.ralph-controls{background:var(--bg-elev);border:1px solid var(--border);border-radius:8px;padding:14px 16px;display:flex;flex-direction:column;gap:12px}.ralph-form-row{display:flex;align-items:center;gap:10px;font-size:14px}.ralph-form-row label{min-width:140px;color:var(--text-dim, #888);font-size:12px;text-transform:uppercase;letter-spacing:.04em}.ralph-select,.ralph-input{background:var(--bg-elev-2, var(--bg-elev));border:1px solid var(--border);border-radius:5px;color:var(--fg);font-size:13px;padding:5px 8px;min-width:240px}.ralph-input--narrow{min-width:80px;width:80px}.ralph-select:focus,.ralph-input:focus{outline:2px solid var(--accent);outline-offset:1px}.btn{border:none;border-radius:6px;font-size:13px;font-weight:600;padding:6px 14px;cursor:pointer;transition:opacity .1s;align-self:flex-start}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover:not(:disabled){opacity:.85}.btn-danger{background:#f44336;color:#fff}.btn-danger:hover:not(:disabled){opacity:.85}.ralph-queue-count{font-weight:400;color:var(--text-dim, #888);font-size:13px}.ralph-queue-source{margin-bottom:8px}.ralph-queue{display:flex;flex-direction:column;gap:6px}.ralph-issue{display:block;text-decoration:none;color:inherit;background:var(--bg-elev);border:1px solid var(--border);border-radius:8px;padding:10px 12px;transition:background .1s}.ralph-issue:hover{background:var(--bg-elev-2)}.ralph-issue-head{display:flex;align-items:baseline;gap:8px;margin-bottom:4px}.ralph-issue-number{font-family:var(--font-mono, monospace);font-size:12px;color:var(--text-dim, #888);flex-shrink:0}.ralph-issue-title{font-size:14px;font-weight:500}.ralph-issue-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.ralph-labels{display:flex;flex-wrap:wrap;gap:4px}.ralph-label{font-size:11px;padding:1px 6px;border-radius:8px;background:color-mix(in srgb,#888 12%,transparent);color:var(--fg)}.ralph-label--agent{background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent)}.ralph-label--triage{background:color-mix(in srgb,#9c27b0 12%,transparent);color:#9c27b0}.ralph-label--urgent{background:color-mix(in srgb,#f44336 12%,transparent);color:#f44336}.link-btn{background:none;border:none;color:var(--accent);font-size:inherit;cursor:pointer;padding:0;text-decoration:underline}.memory-layout{display:grid;grid-template-columns:300px 1fr;gap:16px;align-items:start;flex:1;min-height:0}.memory-scope-list{display:flex;flex-direction:column;gap:6px;background:var(--bg-elev);border:1px solid var(--border);border-radius:12px;overflow:hidden}.memory-scope-list-header{padding:14px 16px 10px;border-bottom:1px solid var(--border);font-size:13px;font-weight:600;color:var(--fg-muted);text-transform:uppercase;letter-spacing:.04em}.memory-scope-item{text-align:left;background:none;border:none;border-bottom:1px solid var(--border);padding:12px 16px;cursor:pointer;color:var(--fg);width:100%}.memory-scope-item:last-child{border-bottom:none}.memory-scope-item:hover,.memory-scope-item.selected{background:var(--bg-elev-2)}.memory-scope-item-head{display:flex;align-items:center;gap:8px;margin-bottom:4px}.memory-scope-name{font-size:14px;font-weight:500;flex:1}.memory-active-badge{font-size:10px;font-weight:700;background:var(--accent);color:#fff;border-radius:4px;padding:1px 5px;text-transform:uppercase;letter-spacing:.04em}.memory-scope-counts{display:flex;gap:6px;flex-wrap:wrap}.memory-count-pill{font-size:11px;background:var(--bg);border:1px solid var(--border);border-radius:999px;padding:1px 7px;color:var(--fg-muted)}.memory-scope-set-active{margin-top:6px;font-size:11px;background:none;border:1px solid var(--border);border-radius:4px;padding:2px 8px;color:var(--fg-muted);cursor:pointer}.memory-scope-set-active:hover{color:var(--accent);border-color:var(--accent)}.memory-detail-panel{background:var(--bg-elev);border:1px solid var(--border);border-radius:12px;overflow:hidden;display:flex;flex-direction:column;min-height:400px}.memory-detail-header{padding:14px 16px 0;border-bottom:1px solid var(--border)}.memory-detail-title{font-size:16px;font-weight:600;margin:0 0 12px}.memory-store-tabs{display:flex;gap:2px}.memory-store-tab{font-size:13px;background:none;border:none;border-bottom:2px solid transparent;padding:8px 12px;cursor:pointer;color:var(--fg-muted)}.memory-store-tab.active{color:var(--fg);border-bottom-color:var(--accent)}.memory-tier-filters{display:flex;gap:6px;padding:10px 16px;border-bottom:1px solid var(--border);background:var(--bg-elev)}.memory-tier-btn{font-size:12px;background:none;border:1px solid var(--border);border-radius:999px;padding:3px 10px;cursor:pointer;color:var(--fg-muted)}.memory-tier-btn.active{background:var(--accent);color:#fff;border-color:var(--accent)}.memory-entries-list{flex:1;overflow-y:auto;padding:8px 0}.memory-entry{padding:10px 16px;border-bottom:1px solid color-mix(in srgb,var(--border) 50%,transparent);font-size:13px;line-height:1.5}.memory-entry:last-child{border-bottom:none}.memory-entry-head{display:flex;align-items:center;gap:8px;margin-bottom:4px}.memory-tier-badge{font-size:10px;font-weight:700;border-radius:3px;padding:1px 5px;text-transform:uppercase}.memory-tier-badge.hot{background:#c85f00;color:#fff}.memory-tier-badge.warm{background:var(--bg-elev-2);color:var(--fg-muted);border:1px solid var(--border)}.memory-tier-badge.cold{background:#1a4a6e;color:#7ab8e8}.memory-entry-date{font-size:11px;color:var(--fg-muted);margin-left:auto}.memory-entry-content{color:var(--fg)}.memory-entry-entity{font-size:11px;color:var(--fg-muted);margin-top:3px}.memory-inbox-item{padding:12px 16px;border-bottom:1px solid var(--border);font-size:13px}.memory-inbox-item:last-child{border-bottom:none}.memory-inbox-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}.memory-inbox-kind-badge{font-size:10px;font-weight:700;background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:2px 6px;color:var(--fg-muted);text-transform:uppercase}.memory-inbox-source{font-size:11px;color:var(--fg-muted);margin-left:auto}.memory-inbox-payload-preview{color:var(--fg);margin-bottom:8px;word-break:break-word}.memory-inbox-actions{display:flex;gap:8px}.memory-inbox-accept-btn{font-size:12px;background:#1a4a1a;border:1px solid #2d7a2d;color:#7adf7a;border-radius:4px;padding:4px 12px;cursor:pointer}.memory-inbox-accept-btn:hover{background:#2d7a2d}.memory-inbox-reject-btn{font-size:12px;background:none;border:1px solid var(--border);color:var(--fg-muted);border-radius:4px;padding:4px 12px;cursor:pointer}.memory-inbox-reject-btn:hover{border-color:#c00;color:#f55}.memory-inbox-count-badge{display:inline-block;min-width:18px;height:18px;line-height:18px;text-align:center;background:var(--accent);color:#fff;border-radius:999px;font-size:10px;font-weight:700;padding:0 5px;margin-left:4px;vertical-align:middle}.active-scope-indicator{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--fg-muted);padding:4px 8px;border-radius:6px;border:1px solid var(--border);background:none;cursor:pointer;text-decoration:none;line-height:1.2}.active-scope-indicator:hover{border-color:var(--accent);color:var(--fg)}.active-scope-dot{width:7px;height:7px;border-radius:50%;background:var(--accent);flex-shrink:0}.active-scope-dot.none{background:var(--fg-muted)}.memory-nav-link-wrap{display:flex;align-items:center}.nav-badge{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;background:var(--accent);color:#fff;border-radius:999px;font-size:10px;font-weight:700;padding:0 4px;margin-left:5px}.research-sessions-label-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.research-sessions-badge{border:0;cursor:pointer}.research-sessions-list{display:flex;flex-direction:column;gap:2px;margin-bottom:8px}.research-session-link{font-size:12px}.wiki-browser-page{display:flex;flex-direction:column;gap:16px}.wiki-browser-layout{display:grid;grid-template-columns:minmax(320px,420px) minmax(0,1fr);gap:16px}.wiki-browser-results-panel,.wiki-browser-detail-panel,.wiki-graph-shell,.wiki-research-card{border:1px solid var(--border);border-radius:12px;background:var(--bg-elev)}.wiki-browser-results-panel,.wiki-browser-detail-panel{padding:16px}.wiki-browser-toolbar{display:flex;flex-direction:column;gap:12px;margin-bottom:16px}.wiki-browser-tabs{display:flex;flex-wrap:wrap;gap:8px}.wiki-browser-search,.wiki-browser-editor textarea{width:100%;border:1px solid var(--border);border-radius:10px;background:var(--bg);color:var(--fg);padding:10px 12px}.wiki-browser-results{display:flex;flex-direction:column;gap:10px}.wiki-browser-result{width:100%;text-align:left;border:1px solid var(--border);border-radius:10px;background:var(--bg);color:var(--fg);padding:12px;cursor:pointer}.wiki-browser-result:hover,.wiki-browser-result.selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--bg))}.wiki-browser-result-head,.wiki-browser-editor-actions,.wiki-research-metrics{display:flex;align-items:center;justify-content:space-between;gap:8px}.wiki-browser-result-slug,.wiki-browser-result-meta{color:var(--fg-dim);font-size:12px}.wiki-browser-result p{margin:8px 0;color:var(--fg-dim)}.wiki-browser-editor{display:flex;flex-direction:column;gap:12px}.wiki-browser-truth{white-space:pre-wrap;line-height:1.6}.wiki-research-list{display:grid;gap:12px}.wiki-research-card{padding:16px}.wiki-research-card h2{margin:0 0 8px}.wiki-graph-shell{padding:8px;overflow:hidden}.wiki-graph-canvas{width:100%;min-height:560px;display:block}@media (max-width: 1100px){.wiki-browser-layout{grid-template-columns:1fr}}