diff --git a/plugins/superpowers/.codex-plugin/plugin.json b/plugins/superpowers/.codex-plugin/plugin.json
index c031b834d..5c2201a01 100644
--- a/plugins/superpowers/.codex-plugin/plugin.json
+++ b/plugins/superpowers/.codex-plugin/plugin.json
@@ -1,6 +1,6 @@
{
"name": "superpowers",
- "version": "5.1.3",
+ "version": "6.0.1",
"description": "An agentic skills framework & software development methodology that works: planning, TDD, debugging, and collaboration workflows.",
"author": {
"name": "Jesse Vincent",
@@ -21,12 +21,13 @@
"workflow"
],
"skills": "./skills/",
+ "hooks": "./hooks/hooks-codex.json",
"interface": {
"displayName": "Superpowers",
"shortDescription": "Planning, TDD, debugging, and delivery workflows for coding agents",
"longDescription": "Use Superpowers to guide agent work through brainstorming, implementation planning, test-driven development, systematic debugging, parallel execution, code review, and finish-the-branch workflows.",
"developerName": "Jesse Vincent",
- "category": "Developer Tools",
+ "category": "Coding",
"capabilities": [
"Interactive",
"Read",
@@ -41,7 +42,7 @@
"termsOfServiceURL": "https://docs.github.com/en/site-policy/github-terms/github-terms-of-service",
"brandColor": "#F59E0B",
"composerIcon": "./assets/superpowers-small.svg",
- "logo": "./assets/superpowers-small.svg",
+ "logo": "./assets/app-icon.png",
"screenshots": []
}
}
diff --git a/plugins/superpowers/README.md b/plugins/superpowers/README.md
index 244060e57..c3e304d77 100644
--- a/plugins/superpowers/README.md
+++ b/plugins/superpowers/README.md
@@ -2,9 +2,16 @@
Superpowers is a complete software development methodology for your coding agents, built on top of a set of composable skills and some initial instructions that make sure your agent uses them.
+
+## We're Hiring!
+
+We're hiring someone to help out full time with Superpowers community and code work.
+You can read about the job at https://primeradiant.com/jobs/superpowers-community-engineer/
+If this sounds like someone you know, definitely send them our way.
+
## Quickstart
-Give your agent Superpowers: [Claude Code](#claude-code), [Codex CLI](#codex-cli), [Codex App](#codex-app), [Factory Droid](#factory-droid), [Gemini CLI](#gemini-cli), [OpenCode](#opencode), [Cursor](#cursor), [GitHub Copilot CLI](#github-copilot-cli).
+Give your agent Superpowers: [Claude Code](#claude-code), [Antigravity](#antigravity), [Codex App](#codex-app), [Codex CLI](#codex-cli), [Cursor](#cursor), [Factory Droid](#factory-droid), [Gemini CLI](#gemini-cli), [GitHub Copilot CLI](#github-copilot-cli), [Kimi Code](#kimi-code), [OpenCode](#opencode), [Pi](#pi).
## How it works
@@ -14,19 +21,13 @@ Once it's teased a spec out of the conversation, it shows it to you in chunks sh
After you've signed off on the design, your agent puts together an implementation plan that's clear enough for an enthusiastic junior engineer with poor taste, no judgement, no project context, and an aversion to testing to follow. It emphasizes true red/green TDD, YAGNI (You Aren't Gonna Need It), and DRY.
-Next up, once you say "go", it launches a *subagent-driven-development* process, having agents work through each engineering task, inspecting and reviewing their work, and continuing forward. It's not uncommon for Claude to be able to work autonomously for a couple hours at a time without deviating from the plan you put together.
+Next up, once you say "go", it launches a *subagent-driven-development* process, having agents work through each engineering task, inspecting and reviewing their work, and continuing forward. It's not uncommon for your agent to work autonomously for a couple hours at a time without deviating from the plan you put together.
There's a bunch more to it, but that's the core of the system. And because the skills trigger automatically, you don't need to do anything special. Your coding agent just has Superpowers.
+## Commercial Services
-## Sponsorship
-
-If Superpowers has helped you do stuff that makes money and you are so inclined, I'd greatly appreciate it if you'd consider [sponsoring my opensource work](https://github.com/sponsors/obra).
-
-Thanks!
-
-- Jesse
-
+If you're using Superpowers in enterprise and could benefit from commercial support, additional tooling, or managed spending, please don't hesitate to drop us a line at sales@primeradiant.com.
## Installation
@@ -60,6 +61,25 @@ The Superpowers marketplace provides Superpowers and some other related plugins
/plugin install superpowers@superpowers-marketplace
```
+### Antigravity
+
+Install Superpowers as a plugin from this repository:
+
+```bash
+agy plugin install https://github.com/obra/superpowers
+```
+
+Antigravity runs the plugin's session-start hook, so Superpowers is active from
+the first message. Reinstall with the same command to update.
+
+### Codex App
+
+Superpowers is available via the [official Codex plugin marketplace](https://github.com/openai/plugins).
+
+- In the Codex app, click on Plugins in the sidebar.
+- You should see `Superpowers` in the Coding section.
+- Click the `+` next to Superpowers and follow the prompts.
+
### Codex CLI
Superpowers is available via the [official Codex plugin marketplace](https://github.com/openai/plugins).
@@ -78,13 +98,15 @@ Superpowers is available via the [official Codex plugin marketplace](https://git
- Select `Install Plugin`.
-### Codex App
+### Cursor
-Superpowers is available via the [official Codex plugin marketplace](https://github.com/openai/plugins).
+- In Cursor Agent chat, install from marketplace:
-- In the Codex app, click on Plugins in the sidebar.
-- You should see `Superpowers` in the Developer Tools section.
-- Click the `+` next to Superpowers and follow the prompts.
+ ```text
+ /add-plugin superpowers
+ ```
+
+- Or search for "superpowers" in the plugin marketplace.
### Factory Droid
@@ -114,6 +136,40 @@ Superpowers is available via the [official Codex plugin marketplace](https://git
gemini extensions update superpowers
```
+### GitHub Copilot CLI
+
+- Register the marketplace:
+
+ ```bash
+ copilot plugin marketplace add obra/superpowers-marketplace
+ ```
+
+- Install the plugin:
+
+ ```bash
+ copilot plugin install superpowers@superpowers-marketplace
+ ```
+
+### Kimi Code
+
+Superpowers is available in Kimi Code's plugin marketplace.
+
+- Open Kimi Code's plugin manager:
+
+ ```text
+ /plugins
+ ```
+
+- Go to `Marketplace` > `Superpowers` and install it.
+
+- Or install directly from this repository:
+
+ ```text
+ /plugins install https://github.com/obra/superpowers
+ ```
+
+- Detailed docs: [docs/README.kimi.md](docs/README.kimi.md)
+
### OpenCode
OpenCode uses its own plugin install; install Superpowers separately even if you
@@ -127,29 +183,21 @@ already use it in another harness.
- Detailed docs: [docs/README.opencode.md](docs/README.opencode.md)
-### Cursor
-
-- In Cursor Agent chat, install from marketplace:
+### Pi
- ```text
- /add-plugin superpowers
- ```
+Install Superpowers as a Pi package from this repository:
-- Or search for "superpowers" in the plugin marketplace.
+```bash
+pi install git:github.com/obra/superpowers
+```
-### GitHub Copilot CLI
+For local development, run Pi with this checkout loaded as a temporary package:
-- Register the marketplace:
+```bash
+pi -e /path/to/superpowers
+```
- ```bash
- copilot plugin marketplace add obra/superpowers-marketplace
- ```
-
-- Install the plugin:
-
- ```bash
- copilot plugin install superpowers@superpowers-marketplace
- ```
+The Pi package loads the Superpowers skills and a small extension that injects the `using-superpowers` bootstrap at session startup and again after compaction. Pi has native skills, so no compatibility `Skill` tool is required. Subagent and task-list tools remain optional Pi companion packages.
## The Basic Workflow
@@ -214,6 +262,8 @@ The general contribution process for Superpowers is below. Keep in mind that we
4. Follow the `writing-skills` skill for creating and testing new and modified skills
5. Submit a PR, being sure to fill in the pull request template.
+Skill-behavior tests use the eval harness submodule at `evals/`. After cloning this repo, run `git submodule update --init evals`, then see `evals/README.md` for setup. Plugin-infrastructure tests live at `tests/` and run via the relevant `run-*.sh` or `npm test`.
+
See `skills/writing-skills/SKILL.md` for the complete guide.
## Updating
@@ -224,6 +274,10 @@ Superpowers updates are somewhat coding-agent dependent, but are often automatic
MIT License - see LICENSE file for details
+## Visual companion telemetry
+
+Because skills and plugins don't provide any feedback to creators, we have no idea how many of you are using Superpowers. By default, the Prime Radiant logo on brainstorming's optional visual companion feature is loaded from our website. It includes the version of Superpowers in use. It does not include any details about your project, prompt, or coding agent. We don't see your clicks or anything about what you're building. This helps us have a rough idea of how many folks are using Superpowers and which version of Superpowers they're using. It's 100% optional. To disable this, set the environment variable `SUPERPOWERS_DISABLE_TELEMETRY` to any true value. Superpowers also honors Claude Code's `DISABLE_TELEMETRY` and `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` opt-outs.
+
## Community
Superpowers is built by [Jesse Vincent](https://blog.fsck.com) and the rest of the folks at [Prime Radiant](https://primeradiant.com).
diff --git a/plugins/superpowers/assets/app-icon.png b/plugins/superpowers/assets/app-icon.png
index 1ec202afc..25518da46 100644
Binary files a/plugins/superpowers/assets/app-icon.png and b/plugins/superpowers/assets/app-icon.png differ
diff --git a/plugins/superpowers/assets/superpowers-small.svg b/plugins/superpowers/assets/superpowers-small.svg
index 3dcbb075d..c514fe33a 100644
--- a/plugins/superpowers/assets/superpowers-small.svg
+++ b/plugins/superpowers/assets/superpowers-small.svg
@@ -1 +1 @@
-
+
\ No newline at end of file
diff --git a/plugins/superpowers/hooks/hooks-codex.json b/plugins/superpowers/hooks/hooks-codex.json
new file mode 100644
index 000000000..5c357fccf
--- /dev/null
+++ b/plugins/superpowers/hooks/hooks-codex.json
@@ -0,0 +1,16 @@
+{
+ "hooks": {
+ "SessionStart": [
+ {
+ "matcher": "startup|resume|clear",
+ "hooks": [
+ {
+ "type": "command",
+ "command": "\"${PLUGIN_ROOT}/hooks/run-hook.cmd\" session-start-codex",
+ "async": false
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/plugins/superpowers/hooks/hooks-cursor.json b/plugins/superpowers/hooks/hooks-cursor.json
new file mode 100644
index 000000000..84e6d3387
--- /dev/null
+++ b/plugins/superpowers/hooks/hooks-cursor.json
@@ -0,0 +1,10 @@
+{
+ "version": 1,
+ "hooks": {
+ "sessionStart": [
+ {
+ "command": "./hooks/run-hook.cmd session-start"
+ }
+ ]
+ }
+}
diff --git a/plugins/superpowers/hooks/hooks.json b/plugins/superpowers/hooks/hooks.json
new file mode 100644
index 000000000..79d8cee37
--- /dev/null
+++ b/plugins/superpowers/hooks/hooks.json
@@ -0,0 +1,16 @@
+{
+ "hooks": {
+ "SessionStart": [
+ {
+ "matcher": "startup|clear|compact",
+ "hooks": [
+ {
+ "type": "command",
+ "command": "\"${CLAUDE_PLUGIN_ROOT}/hooks/run-hook.cmd\" session-start",
+ "async": false
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/plugins/superpowers/hooks/run-hook.cmd b/plugins/superpowers/hooks/run-hook.cmd
new file mode 100755
index 000000000..ceec3a732
--- /dev/null
+++ b/plugins/superpowers/hooks/run-hook.cmd
@@ -0,0 +1,46 @@
+: << 'CMDBLOCK'
+@echo off
+REM Cross-platform polyglot wrapper for hook scripts.
+REM On Windows: cmd.exe runs the batch portion, which finds and calls bash.
+REM On Unix: the shell interprets this as a script (: is a no-op in bash).
+REM
+REM Hook scripts use extensionless filenames (e.g. "session-start" not
+REM "session-start.sh") so Claude Code's Windows auto-detection -- which
+REM prepends "bash" to any command containing .sh -- doesn't interfere.
+REM
+REM Usage: run-hook.cmd [args...]
+
+if "%~1"=="" (
+ echo run-hook.cmd: missing script name >&2
+ exit /b 1
+)
+
+set "HOOK_DIR=%~dp0"
+
+REM Try Git for Windows bash in standard locations
+if exist "C:\Program Files\Git\bin\bash.exe" (
+ "C:\Program Files\Git\bin\bash.exe" "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9
+ exit /b %ERRORLEVEL%
+)
+if exist "C:\Program Files (x86)\Git\bin\bash.exe" (
+ "C:\Program Files (x86)\Git\bin\bash.exe" "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9
+ exit /b %ERRORLEVEL%
+)
+
+REM Try bash on PATH (e.g. user-installed Git Bash, MSYS2, Cygwin)
+where bash >nul 2>nul
+if %ERRORLEVEL% equ 0 (
+ bash "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9
+ exit /b %ERRORLEVEL%
+)
+
+REM No bash found - exit silently rather than error
+REM (plugin still works, just without SessionStart context injection)
+exit /b 0
+CMDBLOCK
+
+# Unix: run the named script directly
+SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
+SCRIPT_NAME="$1"
+shift
+exec bash "${SCRIPT_DIR}/${SCRIPT_NAME}" "$@"
diff --git a/plugins/superpowers/hooks/session-start b/plugins/superpowers/hooks/session-start
new file mode 100755
index 000000000..93a6bc2c6
--- /dev/null
+++ b/plugins/superpowers/hooks/session-start
@@ -0,0 +1,49 @@
+#!/usr/bin/env bash
+# SessionStart hook for superpowers plugin
+
+set -euo pipefail
+
+# Determine plugin root directory
+SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
+PLUGIN_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
+
+# Read using-superpowers content
+using_superpowers_content=$(cat "${PLUGIN_ROOT}/skills/using-superpowers/SKILL.md" 2>&1 || echo "Error reading using-superpowers skill")
+
+# Escape string for JSON embedding using bash parameter substitution.
+# Each ${s//old/new} is a single C-level pass - orders of magnitude
+# faster than the character-by-character loop this replaces.
+escape_for_json() {
+ local s="$1"
+ s="${s//\\/\\\\}"
+ s="${s//\"/\\\"}"
+ s="${s//$'\n'/\\n}"
+ s="${s//$'\r'/\\r}"
+ s="${s//$'\t'/\\t}"
+ printf '%s' "$s"
+}
+
+using_superpowers_escaped=$(escape_for_json "$using_superpowers_content")
+session_context="\nYou have superpowers.\n\n**Below is the full content of your 'superpowers:using-superpowers' skill - your introduction to using skills. For all other skills, use the 'Skill' tool:**\n\n${using_superpowers_escaped}\n"
+
+# Output context injection as JSON.
+# Cursor hooks expect additional_context (snake_case).
+# Claude Code hooks expect hookSpecificOutput.additionalContext (nested).
+# Copilot CLI (v1.0.11+) and others expect additionalContext (top-level, SDK standard).
+# Claude Code reads BOTH additional_context and hookSpecificOutput without
+# deduplication, so we must emit only the field the current platform consumes.
+#
+# Uses printf instead of heredoc to work around bash 5.3+ heredoc hang.
+# See: https://github.com/obra/superpowers/issues/571
+if [ -n "${CURSOR_PLUGIN_ROOT:-}" ]; then
+ # Cursor sets CURSOR_PLUGIN_ROOT (may also set CLAUDE_PLUGIN_ROOT)
+ printf '{\n "additional_context": "%s"\n}\n' "$session_context" | cat
+elif [ -n "${CLAUDE_PLUGIN_ROOT:-}" ] && [ -z "${COPILOT_CLI:-}" ]; then
+ # Claude Code sets CLAUDE_PLUGIN_ROOT without COPILOT_CLI
+ printf '{\n "hookSpecificOutput": {\n "hookEventName": "SessionStart",\n "additionalContext": "%s"\n }\n}\n' "$session_context" | cat
+else
+ # Copilot CLI (sets COPILOT_CLI=1) or unknown platform — SDK standard format
+ printf '{\n "additionalContext": "%s"\n}\n' "$session_context" | cat
+fi
+
+exit 0
diff --git a/plugins/superpowers/hooks/session-start-codex b/plugins/superpowers/hooks/session-start-codex
new file mode 100755
index 000000000..f25ea0846
--- /dev/null
+++ b/plugins/superpowers/hooks/session-start-codex
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+# Codex SessionStart hook for superpowers plugin
+
+set -euo pipefail
+
+SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
+PLUGIN_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
+
+using_superpowers_content=$(cat "${PLUGIN_ROOT}/skills/using-superpowers/SKILL.md" 2>&1 || echo "Error reading using-superpowers skill")
+
+escape_for_json() {
+ local s="$1"
+ s="${s//\\/\\\\}"
+ s="${s//\"/\\\"}"
+ s="${s//$'\n'/\\n}"
+ s="${s//$'\r'/\\r}"
+ s="${s//$'\t'/\\t}"
+ printf '%s' "$s"
+}
+
+using_superpowers_escaped=$(escape_for_json "$using_superpowers_content")
+session_context="\nYou have superpowers.\n\n**Below is the full content of your 'superpowers:using-superpowers' skill - your introduction to using skills. For all other skills, follow the Codex skill-loading instructions in that skill:**\n\n${using_superpowers_escaped}\n"
+
+printf '{\n "hookSpecificOutput": {\n "hookEventName": "SessionStart",\n "additionalContext": "%s"\n }\n}\n' "$session_context" | cat
+
+exit 0
diff --git a/plugins/superpowers/skills/brainstorming/SKILL.md b/plugins/superpowers/skills/brainstorming/SKILL.md
index 06cd0a21e..b0d52b258 100644
--- a/plugins/superpowers/skills/brainstorming/SKILL.md
+++ b/plugins/superpowers/skills/brainstorming/SKILL.md
@@ -22,7 +22,7 @@ Every project goes through this process. A todo list, a single-function utility,
You MUST create a task for each of these items and complete them in order:
1. **Explore project context** — check files, docs, recent commits
-2. **Offer visual companion** (if topic will involve visual questions) — this is its own message, not combined with a clarifying question. See the Visual Companion section below.
+2. **Offer the visual companion just-in-time** — NOT upfront. The first time a question would genuinely be clearer shown than described, offer it then (its own message); on approval its browser tab opens for you. If no visual question ever arises, never offer it. See the Visual Companion section below.
3. **Ask clarifying questions** — one at a time, understand purpose/constraints/success criteria
4. **Propose 2-3 approaches** — with trade-offs and your recommendation
5. **Present design** — in sections scaled to their complexity, get user approval after each section
@@ -36,8 +36,6 @@ You MUST create a task for each of these items and complete them in order:
```dot
digraph brainstorming {
"Explore project context" [shape=box];
- "Visual questions ahead?" [shape=diamond];
- "Offer Visual Companion\n(own message, no other content)" [shape=box];
"Ask clarifying questions" [shape=box];
"Propose 2-3 approaches" [shape=box];
"Present design sections" [shape=box];
@@ -47,10 +45,7 @@ digraph brainstorming {
"User reviews spec?" [shape=diamond];
"Invoke writing-plans skill" [shape=doublecircle];
- "Explore project context" -> "Visual questions ahead?";
- "Visual questions ahead?" -> "Offer Visual Companion\n(own message, no other content)" [label="yes"];
- "Visual questions ahead?" -> "Ask clarifying questions" [label="no"];
- "Offer Visual Companion\n(own message, no other content)" -> "Ask clarifying questions";
+ "Explore project context" -> "Ask clarifying questions";
"Ask clarifying questions" -> "Propose 2-3 approaches";
"Propose 2-3 approaches" -> "Present design sections";
"Present design sections" -> "User approves design?";
@@ -148,10 +143,10 @@ Wait for the user's response. If they request changes, make them and re-run the
A browser-based companion for showing mockups, diagrams, and visual options during brainstorming. Available as a tool — not a mode. Accepting the companion means it's available for questions that benefit from visual treatment; it does NOT mean every question goes through the browser.
-**Offering the companion:** When you anticipate that upcoming questions will involve visual content (mockups, layouts, diagrams), offer it once for consent:
-> "Some of what we're working on might be easier to explain if I can show it to you in a web browser. I can put together mockups, diagrams, comparisons, and other visuals as we go. This feature is still new and can be token-intensive. Want to try it? (Requires opening a local URL)"
+**Offering the companion (just-in-time):** Do NOT offer it upfront. Wait until a question would genuinely be clearer shown than told — a real mockup / layout / diagram question, not merely a UI *topic*. The first time that happens, offer it then, as its own message:
+> "This next part might be easier if I show you — I can put together mockups, diagrams, and comparisons in a browser tab as we go. It's still new and can be token-intensive. Want me to? I'll open it for you."
-**This offer MUST be its own message.** Do not combine it with clarifying questions, context summaries, or any other content. The message should contain ONLY the offer above and nothing else. Wait for the user's response before continuing. If they decline, proceed with text-only brainstorming.
+**This offer MUST be its own message.** Only the offer — no clarifying question, summary, or other content. Wait for the user's response. If they accept, start the server with `--open` so their browser opens to the first screen automatically. If they decline, continue text-only and don't offer again unless they raise it.
**Per-question decision:** Even after the user accepts, decide FOR EACH QUESTION whether to use the browser or the terminal. The test: **would the user understand this better by seeing it than reading it?**
diff --git a/plugins/superpowers/skills/brainstorming/scripts/frame-template.html b/plugins/superpowers/skills/brainstorming/scripts/frame-template.html
index dcfe01817..f540bb8a4 100644
--- a/plugins/superpowers/skills/brainstorming/scripts/frame-template.html
+++ b/plugins/superpowers/skills/brainstorming/scripts/frame-template.html
@@ -9,11 +9,11 @@
*
* This template provides a consistent frame with:
* - OS-aware light/dark theming
- * - Fixed header and selection indicator bar
+ * - Header branding and connection status
* - Scrollable main content area
* - CSS helpers for common UI patterns
*
- * Content is injected via placeholder comment in #claude-content.
+ * Content is injected via placeholder comment in #frame-content.
*/
* { box-sizing: border-box; margin: 0; padding: 0; }
@@ -63,34 +63,37 @@
}
/* ===== FRAME STRUCTURE ===== */
- .header {
- background: var(--bg-secondary);
- padding: 0.5rem 1.5rem;
- display: flex;
- justify-content: space-between;
- align-items: center;
- border-bottom: 1px solid var(--border);
- flex-shrink: 0;
+ .brand { display: flex; align-items: center; min-width: 0; overflow: hidden; color: var(--text-secondary); line-height: 1; }
+ .brand a { color: inherit; text-decoration: none; display: flex; align-items: center; gap: 0.5rem; min-width: 0; max-width: 100%; line-height: 1; }
+ .brand-copy { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; line-height: 1; transform: translateY(-1px); }
+ .brand-logo { display: block; height: 1em; width: auto; max-width: 180px; flex-shrink: 0; filter: invert(1); }
+ @media (prefers-color-scheme: dark) {
+ .brand-logo { filter: none; }
}
- .header h1 { font-size: 0.85rem; font-weight: 500; color: var(--text-secondary); }
- .header .status { font-size: 0.7rem; color: var(--success); display: flex; align-items: center; gap: 0.4rem; }
- .header .status::before { content: ''; width: 6px; height: 6px; background: var(--success); border-radius: 50%; }
+ .status { font-size: 0.7rem; color: var(--status-color, var(--success)); display: flex; align-items: center; gap: 0.4rem; justify-self: end; white-space: nowrap; line-height: 1; }
+ .status::before { content: ''; width: 6px; height: 6px; background: var(--status-color, var(--success)); border-radius: 50%; }
.main { flex: 1; overflow-y: auto; }
- #claude-content { padding: 2rem; min-height: 100%; }
+ #frame-content { padding: 2rem; min-height: 100%; }
- .indicator-bar {
+ .header {
background: var(--bg-secondary);
- border-top: 1px solid var(--border);
+ border-bottom: 1px solid var(--border);
padding: 0.5rem 1.5rem;
flex-shrink: 0;
- text-align: center;
+ display: grid;
+ grid-template-columns: minmax(0, 1fr) auto;
+ align-items: center;
+ gap: 1rem;
+ min-height: 42px;
}
- .indicator-bar span {
+ .header .brand { justify-self: start; width: 100%; font-size: 0.75rem; line-height: 1; }
+ .header .status { grid-column: 2; line-height: 1; }
+ .header span {
font-size: 0.75rem;
color: var(--text-secondary);
}
- .indicator-bar .selected-text {
+ .header .selected-text {
color: var(--accent);
font-weight: 500;
}
@@ -196,19 +199,15 @@