theseus/bundled-addons/hermes/panel.html
Local Dev 4a7667c06e hermes.x: standalone site + sidebar addon side:left + mark v2 (tapered trails)
New site-hermes-x/ — standalone .x site (own nav, own assets, own OG tags),
sibling to site-theseus-x and site-sirius-x. Internal nav stays on hermes.x:
Overview, Messenger (preview + UI mockup), Branding (brand kit). The only
cross-link is 'Get Theseus' pointing at theseus.x where appropriate.

Mark redesigned: tilted winged envelope with three tapered speed-trails on
the back-left (top longest, bottom shortest). Default colour sky #38BDF8 —
swappable via --sky in site-hermes-x/assets/shared.css. Alternate orange
palette documented but not applied by default. Mark propagated to:
  - site-hermes-x/assets/mark.svg + mark-stroke.svg (16-20px variant)
  - site/hermes/{index.html, branding/{index.html, mark.svg, mark-stroke.svg}}
  - TheseusNavigator/bundled-addons/hermes/{addon.json, panel.html}

Theseus addon moves out of the top-right extensions dock and into the
left-strip sidebar: panels[].side = 'left' + registerSidebarPanel({side:'left'}).
Appears alongside Mail/Pithos/Telegram, excluded from rightPanels() so the
extensions dock no longer lists it. Verified via sidebarState() CDP query —
hermes:main is no longer in the right-panels list.

site/hermes/ (the nested silentmode.st/hermes page) also updated to the new
mark for consistency; both the sovereign hermes.x and the silentmode-nested
page now show the same winged envelope.
2026-10-21 02:19:58 +03:00

71 lines
3 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Hermes</title>
<style>
:root { color-scheme: light dark;
--bg:#0e131c; --panel:#141a24; --line:rgba(255,255,255,.09);
--ink:#e7eaf1; --mut:#8b98a9; --dim:#5e6678; --acid:#d6ff3d;
--amber:#f4c430; }
@media (prefers-color-scheme: light) {
:root { --bg:#f8faff; --panel:#ffffff; --line:rgba(0,0,0,.10);
--ink:#1a1f2b; --mut:#5c6577; --dim:#8a93a5;
--acid:#088A66; }
}
* { box-sizing: border-box; }
html, body { margin: 0; height: 100%; }
body { background: var(--bg); color: var(--ink);
font: 14px/1.5 system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
display: flex; flex-direction: column; align-items: center; justify-content: center;
padding: 24px 20px; text-align: center; gap: 14px; }
.mark { color: var(--acid); line-height: 0; }
.mark svg { width: 72px; height: 72px; display: block; }
h1 { margin: 0; font-size: 18px; font-weight: 600; letter-spacing: .3px; }
.lede { color: var(--mut); font-size: 13px; margin: 0; max-width: 260px; }
button { font: inherit; font-weight: 600; cursor: pointer;
background: var(--acid); color: #0a0d13; border: none;
padding: 10px 20px; border-radius: 999px; }
button:hover { filter: brightness(1.08); }
.shortcut { color: var(--dim); font-size: 11.5px; margin-top: 4px; }
.shortcut kbd { background: var(--panel); border: 1px solid var(--line);
border-radius: 4px; padding: 1px 6px; font-family: ui-monospace, monospace;
font-size: 10.5px; color: var(--ink); }
.err { color: #f6768a; font-size: 12px; min-height: 1em; }
</style>
</head>
<body>
<div class="mark" aria-hidden="true">
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round">
<path d="M20 42 Q 20 12 32 12 Q 44 12 44 42"/>
<path d="M16 42 L48 42"/>
<path d="M44 18 L 60 12"/>
<path d="M44 24 L 62 22"/>
<path d="M44 30 L 58 32"/>
<path d="M20 18 L 4 12"/>
<path d="M20 24 L 2 22"/>
<path d="M20 30 L 6 32"/>
</g>
</svg>
</div>
<h1>Hermes</h1>
<p class="lede">Message anyone by their <code>.bch</code> name. Sealed-sender DMs over Nostr.</p>
<button id="openBtn">Open Messages</button>
<div class="shortcut">or press <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>E</kbd></div>
<div class="err" id="err"></div>
<script>
const bridge = window.silentmode && typeof window.silentmode.invoke === "function" ? window.silentmode : null;
const err = (m) => { document.getElementById("err").textContent = m || ""; };
document.getElementById("openBtn").addEventListener("click", async () => {
err("");
if (!bridge) { err("sidebar bridge unavailable"); return; }
try {
const r = await bridge.invoke("open-messages");
if (!r || r.ok !== true) err("could not open messages window");
} catch (e) { err("error: " + (e && e.message || e)); }
});
</script>
</body>
</html>