diff --git a/packages/extension/esbuild.config.mjs b/packages/extension/esbuild.config.mjs
index d336deef..435af26a 100644
--- a/packages/extension/esbuild.config.mjs
+++ b/packages/extension/esbuild.config.mjs
@@ -43,6 +43,7 @@ const targets = [
sourcemap: true,
minify: false,
logLevel: "info",
+ loader: { ".svg": "text" },
},
// bottom-panel Run Inspector webview bundle
{
@@ -55,6 +56,7 @@ const targets = [
sourcemap: true,
minify: false,
logLevel: "info",
+ loader: { ".svg": "text" },
},
];
diff --git a/packages/extension/media/amico-tab-dark.svg b/packages/extension/media/amico-tab-dark.svg
new file mode 100644
index 00000000..25f716f7
--- /dev/null
+++ b/packages/extension/media/amico-tab-dark.svg
@@ -0,0 +1,3 @@
+
diff --git a/packages/extension/media/amico-tab-light.svg b/packages/extension/media/amico-tab-light.svg
new file mode 100644
index 00000000..ec08e9f0
--- /dev/null
+++ b/packages/extension/media/amico-tab-light.svg
@@ -0,0 +1,3 @@
+
diff --git a/packages/extension/media/amico.svg b/packages/extension/media/amico.svg
index f61916dd..4aa29774 100644
--- a/packages/extension/media/amico.svg
+++ b/packages/extension/media/amico.svg
@@ -1,19 +1,22 @@
-
+
+
\ No newline at end of file
diff --git a/packages/extension/media/amico_reduced.svg b/packages/extension/media/amico_reduced.svg
new file mode 100644
index 00000000..d25562e3
--- /dev/null
+++ b/packages/extension/media/amico_reduced.svg
@@ -0,0 +1,3 @@
+
diff --git a/packages/extension/media/ui/atoms/icon.ts b/packages/extension/media/ui/atoms/icon.ts
deleted file mode 100644
index 8d1fa808..00000000
--- a/packages/extension/media/ui/atoms/icon.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-// Icon atoms. The mark is the Harmoniqs H-robot SILHOUETTE — same glyph +
-// animation language as the fork's AmicoSpinner (spinner.tsx): the screen slit
-// is knocked out via fill-rule evenodd, NO face pixels (illegible at small
-// sizes — the full-face Mark is for large canvases only), currentColor so it
-// rides the theme, gentle pulse-opacity, static under prefers-reduced-motion.
-
-import { defineStyle } from "../style";
-
-defineStyle(
- "mark",
- `
- .mark { display: inline-flex; align-items: center; }
- .mark svg { width: 20px; height: 17.5px; display: block; color: var(--vscode-foreground); }
- @media (prefers-reduced-motion: no-preference) {
- .mark svg { animation: mark-pulse 1.2s ease-in-out infinite both; }
- }
- @keyframes mark-pulse { 0%, 100% { opacity: 0.4; } 50% { opacity: 1; } }
-`,
-);
-
-const SVG_NS = "http://www.w3.org/2000/svg";
-
-export function mark(): HTMLSpanElement {
- const el = document.createElement("span");
- el.className = "mark";
- const svg = document.createElementNS(SVG_NS, "svg");
- svg.setAttribute("viewBox", "0 0 64 56");
- svg.setAttribute("fill", "currentColor");
- svg.setAttribute("aria-label", "Amicode");
- const body = document.createElementNS(SVG_NS, "path");
- body.setAttribute("fill-rule", "evenodd");
- body.setAttribute("d", "M2 2h16v14h28V2h16v52H46V40H18v14H2Z M9 19h46v18H9Z");
- svg.append(body);
- el.append(svg);
- return el;
-}
diff --git a/packages/extension/media/ui/atoms/logo.ts b/packages/extension/media/ui/atoms/logo.ts
new file mode 100644
index 00000000..656519ab
--- /dev/null
+++ b/packages/extension/media/ui/atoms/logo.ts
@@ -0,0 +1,55 @@
+// Logo atom — the Amico mark, fed by the two canonical SVG files.
+//
+// variant "full" (default) → media/amico.svg (detailed mark)
+// variant "reduced" → media/amico_reduced.svg (outer bracket only,
+// legible at small sizes)
+//
+// Both files are imported as raw text (esbuild loader {".svg":"text"}, see
+// esbuild.config.mjs + the vitest transform) and carry fill="currentColor" on
+// their