JP reported (Chrome) after b43e649:
- Sidebar buttons render ✓
- Adwright: useless middle black panel between sidebar and right area
- BTE: entire left sidebar disappears, only close-X recovers it
ROOT CAUSES:
1. webui CSS has `main.main:not(.showing-X):not(.showing-Y)... > #mainChat
{ display:flex }` which still matches when our class is svrnty-showing-*
(not in webui's whitelist). Chat rendered alongside our panel → the
empty void = "middle black panel".
2. BTE overlay was `position:fixed; inset:0; z-index:9991` — covered the
whole viewport including sidebar + topbar.
FIXES:
- Adwright + BTE CSS now `main.main.svrnty-showing-<id> > .main-view
{ display:none !important }` — explicitly hides every native main-view
(mainChat, mainSkills, mainTasks, ...) when our panel is active.
- BTE.css: overlay no longer position:fixed. Becomes a normal flex child
of main when svrnty-showing-bte is active. Sidebar + topbar stay visible.
- bte.js: _openOverlay now appends to <main class="main"> instead of
document.body. Migrates existing body-mounted overlay on first open.
Karpathy 4 rules: root-caused via direct CSS inspection (not guessing),
two-line CSS change per panel, no new abstractions.
JP feedback: floating BTE launcher + always-visible Adwright panel were
"very fucked up" UX. Replaced with proper hermes-webui sidebar integration.
New static/svrnty_nav.js:
- Injects 2 nav-tab buttons into .sidebar-nav matching the existing
data-panel + nav-tab + has-tooltip pattern
- Adwright: bullseye icon (marketing intelligence)
- BTE: sparkle/palette icon (creative studio)
- Wraps window.switchPanel to add main.svrnty-showing-{adwright,bte}
classes so our panels participate in the existing main-view show/hide
system without editing upstream panels.js
- Dispatches "svrnty:panel-switch" CustomEvent so panel modules can
lazy-init / open / close based on which panel is active
Adwright panel:
- adwright.css: hidden by default; shows only when main has
.svrnty-showing-adwright. When showing, occupies full main width
and hides all other main children (chat etc).
- adwright.js: no change to mount logic (already mounted inside <main>).
BTE panel:
- bte.js: removed _installLauncher (no more floating bottom-right button).
Init now listens for svrnty:panel-switch events to open/close the
overlay. Defensively removes any stale .svrnty-bte-launcher DOM nodes
from prior plugin versions.
- bte.css: launcher styles replaced with display:none !important.
manifest.yaml: bumped 0.4.0 → 0.5.0, svrnty_nav.js added to assets in
the correct load order (after app.js, before adwright.js + bte.js).
CONNECTION-MAP regenerated.
Karpathy 4 rules: no upstream edit, smallest possible wrap of switchPanel
to keep our panels coexisting with native panels (chat, tasks, kanban,
etc), CSS-only visibility (no DOM thrashing).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Header now shows ↗ BTE button next to the profile status pill. Click
invokes window.SvrntyBTE.open() to surface the BTE overlay, satisfying
the "Adwright pulls content from BTE panel" integration goal at the UX
level. Asset-URL-level integration follows automatically once cycles
contain BTE-rendered asset references (post Phase 8).
Themed via existing CSS vars (--accent, --border2, --accent-bg, etc) —
zero hardcoded colors. CONNECTION-MAP regenerated.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>