Bundles four Tranche-A polish fixes that ship together:
1. **Font 404s** — CSS @font-face URLs were /extensions/fonts/* but the
plugin loader serves static under /plugins/svrnty/*. Updated paths
to match register_static prefix.
2. **Humanized status enum** — _humanStatus() maps proto canonical strings
(CYCLE_STATUS_PREVIEW_READY, VARIANT_STATUS_ACTIVE, etc.) to
user-facing labels ("Preview ready", "Active"). Applied to Cycles
row, Overview timeline, and variant detail.
3. **Compound Overview refresh** — refresh-overview now dispatches both
refresh-cycles AND list-recipes via _COMPOUND_ACTIONS map. Without
this, KPI Recipes stayed at 0 until user visited Targeting tab.
Added per-action user-facing toast labels (_ACTION_LABELS) so the
user sees "Loading recipes…" instead of just hermes-webui's raw
"Queued: /adwright list-recipes" banner.
4. **Poll deadline race** — compound actions fired two sub-actions
back-to-back; sub1's poll response was nulling pendingTool before
sub2 could be ingested. _pollOnce now (a) resets deadline on each
successful update (sign of progress) and (b) only stops polling
when the response matches the CURRENT pendingTool (not the captured
local var from earlier in the recursive fire).
Verified live: Overview now shows Cycles=1, Recipes=10, Spend=$0/$200,
timeline=Cycle #1 — Preview ready. Console clean (0 errors, was 3
font 404s).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
66 lines
3.7 KiB
CSS
66 lines
3.7 KiB
CSS
/* ============================================================================
|
|
Svrnty brand reskin for Hermes WebUI — Tier 1 (extension CSS, no core edits).
|
|
Source of truth: cortex/L2-svrnty.lib-design-system/tokens/svrnty.tokens.json
|
|
Maps svrnty DTCG tokens onto the WebUI's CSS variables. Loaded after
|
|
static/style.css, so these win by cascade. Upgrade-proof (out of tree).
|
|
|
|
NOTE: for the pure svrnty accent, keep Skin = "default" in Settings →
|
|
Appearance. Named skins use higher-specificity selectors that would
|
|
override --accent below.
|
|
============================================================================ */
|
|
|
|
/* ── Montserrat (self-hosted, sovereign — no external CDN; font-src 'self') ── */
|
|
@font-face{font-family:"Montserrat";font-style:normal;font-weight:400;font-display:swap;src:url("/plugins/svrnty/fonts/montserrat-400.woff2") format("woff2");}
|
|
@font-face{font-family:"Montserrat";font-style:normal;font-weight:500;font-display:swap;src:url("/plugins/svrnty/fonts/montserrat-500.woff2") format("woff2");}
|
|
@font-face{font-family:"Montserrat";font-style:normal;font-weight:600;font-display:swap;src:url("/plugins/svrnty/fonts/montserrat-600.woff2") format("woff2");}
|
|
@font-face{font-family:"Montserrat";font-style:normal;font-weight:700;font-display:swap;src:url("/plugins/svrnty/fonts/montserrat-700.woff2") format("woff2");}
|
|
|
|
/* ── Light (svrnty *.light) ─────────────────────────────────────────────── */
|
|
:root {
|
|
--bg:#FFFFFF; --sidebar:#F5F5F5; --surface:#F0F0F0;
|
|
--main-bg:rgba(255,255,255,0.5); --topbar-bg:rgba(245,245,245,.98);
|
|
--border:#E5E7EB; --border2:rgba(6,8,12,0.12);
|
|
--border-subtle:rgba(6,8,12,.08); --border-muted:rgba(6,8,12,.14);
|
|
--surface-subtle:rgba(6,8,12,.025); --surface-subtle-hover:rgba(6,8,12,.045);
|
|
|
|
--text:#1A1A1A; --strong:#06080C; --muted:#6B7280; --em:#3A4958;
|
|
|
|
/* brandRed #DF2D45 */
|
|
--accent:#DF2D45; --accent-hover:#C41E3A; --accent-text:#C41E3A;
|
|
--accent-bg:rgba(223,45,69,0.08); --accent-bg-strong:rgba(223,45,69,0.15);
|
|
--focus-ring:rgba(223,45,69,.35); --focus-glow:rgba(223,45,69,.10);
|
|
|
|
--blue:#3B82F6; --gold:#F59E0B;
|
|
--input-bg:rgba(6,8,12,.03); --hover-bg:rgba(6,8,12,.05);
|
|
--code-bg:#F0F0F0; --code-text:#C41E3A; --code-inline-bg:rgba(6,8,12,.06); --pre-text:#1A1A1A;
|
|
|
|
--error:#EF4444; --success:#22C55E; --warning:#F59E0B; --info:#3B82F6;
|
|
|
|
/* svrnty radii (sm8 / md12 / lg16 / full) */
|
|
--radius-sm:8px; --radius-md:12px; --radius-card:12px; --radius-lg:16px; --radius-pill:9999px;
|
|
|
|
--font-ui:"Montserrat",-apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,sans-serif;
|
|
}
|
|
|
|
/* ── Dark (svrnty *.dark — brandBlack #06080C base) ─────────────────────── */
|
|
:root.dark {
|
|
--bg:#06080C; --sidebar:#0D1318; --surface:#151D24;
|
|
--main-bg:rgba(6,8,12,0.5); --topbar-bg:rgba(13,19,24,.98);
|
|
--border:#2D3843; --border2:rgba(229,229,229,0.14);
|
|
--border-subtle:rgba(229,229,229,.075); --border-muted:rgba(229,229,229,.12);
|
|
--surface-subtle:rgba(229,229,229,.025); --surface-subtle-hover:rgba(229,229,229,.045);
|
|
|
|
--text:#FFFFFF; --strong:#FFFFFF; --muted:#9CA3AF; --em:#5A6978;
|
|
|
|
/* brand red lifts to #FF6B7A on dark (svrnty link/inversePrimary.dark) */
|
|
--accent:#FF6B7A; --accent-hover:#DF2D45; --accent-text:#FF6B7A;
|
|
--accent-bg:rgba(255,107,122,0.08); --accent-bg-strong:rgba(255,107,122,0.15);
|
|
--focus-ring:rgba(255,107,122,.35); --focus-glow:rgba(255,107,122,.10);
|
|
|
|
--blue:#60A5FA; --gold:#FBBF24;
|
|
--input-bg:rgba(229,229,229,.04); --hover-bg:rgba(229,229,229,.06);
|
|
--code-bg:#0D1318; --code-text:#FF6B7A; --code-inline-bg:rgba(0,0,0,.35); --pre-text:#E5E5E5;
|
|
|
|
--error:#FF6B6B; --success:#4ADE80; --warning:#FBBF24; --info:#60A5FA;
|
|
}
|