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.
- package/agents/korg.agent.md +65 -0
- package/dist/api/korg.js +34 -0
- package/dist/api/korg.test.js +42 -0
- package/dist/api/server.js +238 -2
- package/dist/api/server.test.js +199 -0
- package/dist/config.js +28 -0
- package/dist/config.test.js +20 -0
- package/dist/copilot/agents.js +3 -4
- package/dist/copilot/agents.test.js +12 -1
- package/dist/copilot/orchestrator.js +12 -1
- package/dist/copilot/orchestrator.test.js +3 -7
- package/dist/copilot/system-message.js +12 -10
- package/dist/copilot/system-message.test.js +6 -1
- package/dist/copilot/tools.js +193 -375
- package/dist/copilot/tools.memory.test.js +32 -0
- package/dist/copilot/tools.wiki.test.js +80 -59
- package/dist/copilot/turn-event-log-env.test.js +11 -15
- package/dist/daemon.js +19 -0
- package/dist/memory/decisions.js +6 -5
- package/dist/memory/entities.js +20 -9
- package/dist/memory/eot.js +30 -8
- package/dist/memory/eot.test.js +220 -6
- package/dist/memory/hooks.js +151 -0
- package/dist/memory/hooks.test.js +325 -0
- package/dist/memory/hot-tier.js +37 -0
- package/dist/memory/hot-tier.test.js +30 -0
- package/dist/memory/housekeeping-scheduler.js +35 -0
- package/dist/memory/housekeeping-scheduler.test.js +50 -0
- package/dist/memory/inbox.js +10 -0
- package/dist/memory/index.js +3 -1
- package/dist/memory/migration.js +244 -0
- package/dist/memory/migration.test.js +108 -0
- package/dist/memory/reflect.js +273 -0
- package/dist/memory/reflect.test.js +254 -0
- package/dist/paths.js +31 -11
- package/dist/store/db.js +187 -4
- package/dist/store/db.test.js +66 -2
- package/dist/test/helpers/reset-singletons.js +8 -0
- package/dist/test/helpers/reset-singletons.test.js +37 -0
- package/dist/test/setup-env.js +9 -1
- package/dist/wiki/consolidation.js +641 -0
- package/dist/wiki/consolidation.test.js +143 -0
- package/dist/wiki/frontmatter.js +48 -0
- package/dist/wiki/frontmatter.test.js +42 -0
- package/dist/wiki/fs.js +22 -13
- package/dist/wiki/index-manager.js +305 -330
- package/dist/wiki/index-manager.test.js +265 -144
- package/dist/wiki/ingest.js +347 -0
- package/dist/wiki/ingest.test.js +111 -0
- package/dist/wiki/links.js +151 -0
- package/dist/wiki/links.test.js +176 -0
- package/dist/wiki/log-manager.js +8 -5
- package/dist/wiki/log-manager.test.js +4 -0
- package/dist/wiki/migrate-topics.test.js +16 -6
- package/dist/wiki/scheduler.js +118 -0
- package/dist/wiki/scheduler.test.js +64 -0
- package/dist/wiki/timeline.js +51 -0
- package/dist/wiki/timeline.test.js +65 -0
- package/dist/wiki/topic-structure.js +1 -1
- package/package.json +1 -1
- package/skills/pkb-ideas/SKILL.md +78 -0
- package/skills/pkb-ideas/_meta.json +4 -0
- package/skills/pkb-org/SKILL.md +82 -0
- package/skills/pkb-org/_meta.json +4 -0
- package/skills/pkb-people/SKILL.md +74 -0
- package/skills/pkb-people/_meta.json +4 -0
- package/skills/pkb-research/SKILL.md +83 -0
- package/skills/pkb-research/_meta.json +4 -0
- package/skills/pkb-source/SKILL.md +38 -0
- package/skills/pkb-source/_meta.json +4 -0
- package/skills/wiki-conventions/SKILL.md +5 -5
- package/web/dist/assets/{index-DuKYxMIR.css → index-5kz9aRU9.css} +1 -1
- package/web/dist/assets/{index-DytB69KC.js → index-BbX9RKf3.js} +91 -89
- package/web/dist/assets/index-BbX9RKf3.js.map +1 -0
- package/web/dist/index.html +2 -2
- package/dist/wiki/context.js +0 -138
- package/dist/wiki/fix.js +0 -335
- package/dist/wiki/fix.test.js +0 -350
- package/dist/wiki/lint.js +0 -451
- package/dist/wiki/lint.test.js +0 -329
- 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,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,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,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,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
|
|
@@ -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,
|
|
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`, `
|
|
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 ->
|
|
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 -> `
|
|
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}}
|