diff --git a/web/.gitignore b/web/.gitignore
new file mode 100644
index 0000000..f06235c
--- /dev/null
+++ b/web/.gitignore
@@ -0,0 +1,2 @@
+node_modules
+dist
diff --git a/web/app.js b/web/app.js
new file mode 100644
index 0000000..214adc9
--- /dev/null
+++ b/web/app.js
@@ -0,0 +1,322 @@
+const $ = (id) => document.getElementById(id);
+const state = {
+ sessionId: localStorage.getItem("grokboy.session") || "",
+ sessions: [],
+ running: false,
+ source: null,
+};
+
+function tokenHeaders() {
+ const token = localStorage.getItem("grokboy.token") || "";
+ return token ? { Authorization: `Bearer ${token}` } : {};
+}
+
+async function api(path, opts = {}) {
+ const res = await fetch(path, {
+ ...opts,
+ headers: {
+ "content-type": "application/json",
+ ...tokenHeaders(),
+ ...(opts.headers || {}),
+ },
+ });
+ const raw = await res.text();
+ let data = null;
+ try {
+ data = raw ? JSON.parse(raw) : null;
+ } catch {
+ data = null;
+ }
+ if (!res.ok) {
+ throw new Error((data && data.error) || raw || String(res.status));
+ }
+ return data;
+}
+
+function setStatus(text) {
+ $("header-status").textContent = text;
+}
+
+function renderSessions() {
+ const list = $("session-list");
+ list.innerHTML = "";
+ for (const s of state.sessions) {
+ const btn = document.createElement("button");
+ btn.className = "session-item" + (s.id === state.sessionId ? " active" : "");
+ btn.innerHTML = `${s.running ? "進行中" : "對話"}${escapeHtml(s.preview || s.id)}`;
+ btn.onclick = () => openSession(s.id);
+ list.appendChild(btn);
+ }
+}
+
+function escapeHtml(s) {
+ return String(s)
+ .replace(/&/g, "&")
+ .replace(//g, ">");
+}
+
+function addBubble(role, content) {
+ const row = document.createElement("div");
+ row.className = `row ${role}`;
+ row.innerHTML = `
${escapeHtml(content)}
`;
+ $("transcript").appendChild(row);
+ $("transcript").scrollTop = $("transcript").scrollHeight;
+}
+
+function addActivity(text) {
+ const el = document.createElement("div");
+ el.className = "activity";
+ el.textContent = text;
+ $("transcript").appendChild(el);
+ $("transcript").scrollTop = $("transcript").scrollHeight;
+}
+
+function showTyping(on) {
+ $("transcript").querySelector(".typing")?.remove();
+ if (!on) return;
+ const el = document.createElement("div");
+ el.className = "typing";
+ el.innerHTML = "";
+ $("transcript").appendChild(el);
+ $("transcript").scrollTop = $("transcript").scrollHeight;
+}
+
+function renderQuestion(q) {
+ const card = $("question-card");
+ if (!q) {
+ card.classList.add("hidden");
+ card.innerHTML = "";
+ return;
+ }
+ const prompt = q.question || q.reason || "需要你的回覆";
+ const options = (q.options || []).map((o) => (typeof o === "string" ? o : o.label || o.value)).filter(Boolean);
+ card.classList.remove("hidden");
+ card.innerHTML = `${escapeHtml(prompt)}
` + (options.length
+ ? `${options.map((o) => ``).join("")}
`
+ : "");
+ card.querySelectorAll("button").forEach((b) => {
+ b.onclick = () => send(b.dataset.answer);
+ });
+}
+
+function renderPlan(plan) {
+ if (!plan || !plan.length) return;
+ const el = document.createElement("div");
+ el.className = "plan";
+ el.innerHTML = "計畫" + plan.map((step) => {
+ const text = step.step || step;
+ const status = step.status || "";
+ return `- ${escapeHtml(text)}
`;
+ }).join("") + "
";
+ $("transcript").appendChild(el);
+}
+
+async function loadSessions() {
+ const data = await api("/api/sessions");
+ state.sessions = data.sessions || [];
+ renderSessions();
+}
+
+async function openSession(id) {
+ state.sessionId = id;
+ localStorage.setItem("grokboy.session", id);
+ renderSessions();
+ closeSidebar();
+ const data = await api(`/api/sessions/${id}`);
+ $("transcript").innerHTML = "";
+ for (const item of data.transcript || []) addBubble(item.role, item.content);
+ renderPlan(data.plan);
+ renderQuestion(data.pending_question);
+ state.running = !!data.running;
+ $("stop-btn").classList.toggle("hidden", !state.running);
+ showTyping(state.running);
+ setStatus(state.running ? "工作中" : data.last_verdict || "準備好了");
+ listen(id);
+}
+
+function listen(id) {
+ state.source?.close();
+ clearInterval(state.poll);
+ const src = new EventSource(`/api/sessions/${id}/events`);
+ state.source = src;
+ src.onmessage = (ev) => {
+ let data;
+ try { data = JSON.parse(ev.data); } catch { return; }
+ handleEvent(data);
+ };
+ state.poll = setInterval(async () => {
+ if (!state.running) return;
+ try {
+ const data = await api(`/api/sessions/${id}`);
+ if (data.running !== state.running && !data.running) {
+ handleEvent({
+ type: "turn_ended",
+ verdict: data.last_verdict,
+ pending_question: data.pending_question,
+ plan: data.plan,
+ });
+ }
+ } catch {
+ /* keep polling */
+ }
+ }, 2000);
+}
+
+function handleEvent(data) {
+ switch (data.type) {
+ case "user":
+ addBubble("user", data.content);
+ break;
+ case "message":
+ showTyping(false);
+ addBubble("assistant", data.content);
+ break;
+ case "status":
+ case "progress":
+ addActivity(data.message);
+ break;
+ case "tool_started":
+ addActivity(`〔開始〕${data.name}`);
+ showTyping(true);
+ break;
+ case "tool_finished":
+ addActivity(`〔${data.success ? "完成" : "失敗"}〕${data.name}`);
+ break;
+ case "waiting":
+ setStatus(data.stage || "等待中");
+ break;
+ case "question":
+ renderQuestion(data.question);
+ showTyping(false);
+ break;
+ case "plan_updated":
+ renderPlan(data.plan);
+ break;
+ case "turn_ended":
+ state.running = false;
+ $("stop-btn").classList.add("hidden");
+ showTyping(false);
+ renderQuestion(data.pending_question);
+ setStatus(data.verdict || "完成");
+ loadSessions();
+ break;
+ default:
+ break;
+ }
+}
+
+async function send(text) {
+ const value = (text ?? $("prompt").value).trim();
+ if (!value) return;
+ if (!state.sessionId) {
+ const created = await api("/api/sessions", { method: "POST", body: "{}" });
+ state.sessionId = created.id;
+ localStorage.setItem("grokboy.session", created.id);
+ await loadSessions();
+ listen(created.id);
+ }
+ $("prompt").value = "";
+ resizePrompt();
+ $("send-btn").disabled = true;
+ addBubble("user", value);
+ renderQuestion(null);
+ state.running = true;
+ $("stop-btn").classList.remove("hidden");
+ showTyping(true);
+ setStatus("工作中");
+ try {
+ await api(`/api/sessions/${state.sessionId}/messages`, {
+ method: "POST",
+ body: JSON.stringify({ text: value }),
+ });
+ } catch (err) {
+ state.running = false;
+ $("stop-btn").classList.add("hidden");
+ showTyping(false);
+ setStatus(String(err.message || err));
+ addActivity("送出失敗:" + (err.message || err));
+ }
+}
+
+async function newChat() {
+ const created = await api("/api/sessions", { method: "POST", body: "{}" });
+ await loadSessions();
+ await openSession(created.id);
+}
+
+function resizePrompt() {
+ const el = $("prompt");
+ el.style.height = "auto";
+ el.style.height = Math.min(el.scrollHeight, window.innerHeight * 0.3) + "px";
+ $("send-btn").disabled = !el.value.trim();
+}
+
+function openSidebar() {
+ $("sidebar").classList.add("open");
+ $("sidebar-backdrop").classList.remove("hidden");
+}
+function closeSidebar() {
+ $("sidebar").classList.remove("open");
+ $("sidebar-backdrop").classList.add("hidden");
+}
+
+async function openComputer() {
+ $("computer-pane").hidden = false;
+ $("tab-computer").classList.add("active");
+ $("tab-chat").classList.remove("active");
+ $("computer-status").textContent = "正在啟動我的電腦…";
+ try {
+ const data = await api("/api/computer", { method: "POST", body: "{}" });
+ $("computer-frame").src = data.viewer_url;
+ $("computer-status").textContent = data.ready ? "已連線同一台 Docker 桌面" : (data.error || "桌面啟動中");
+ } catch (err) {
+ $("computer-status").textContent = String(err.message || err);
+ }
+}
+function closeComputer() {
+ $("computer-pane").hidden = true;
+ $("tab-chat").classList.add("active");
+ $("tab-computer").classList.remove("active");
+}
+
+$("composer").addEventListener("submit", (e) => {
+ e.preventDefault();
+ send();
+});
+$("prompt").addEventListener("input", resizePrompt);
+$("prompt").addEventListener("keydown", (e) => {
+ if (e.key === "Enter" && !e.shiftKey && window.matchMedia("(min-width: 861px)").matches) {
+ e.preventDefault();
+ send();
+ }
+});
+$("new-chat").onclick = () => newChat();
+$("menu-btn").onclick = openSidebar;
+$("sidebar-backdrop").onclick = closeSidebar;
+$("computer-btn").onclick = openComputer;
+$("computer-close").onclick = closeComputer;
+$("tab-chat").onclick = () => {
+ closeComputer();
+ closeSidebar();
+};
+$("tab-computer").onclick = openComputer;
+$("stop-btn").onclick = async () => {
+ if (state.sessionId) await api(`/api/sessions/${state.sessionId}/stop`, { method: "POST", body: "{}" });
+};
+
+if ("serviceWorker" in navigator) {
+ navigator.serviceWorker.register("/sw.js").catch(() => {});
+}
+
+(async () => {
+ try {
+ const health = await api("/api/health");
+ $("model-label").textContent = health.model || "grok-4.6";
+ await loadSessions();
+ if (state.sessionId) await openSession(state.sessionId);
+ else if (state.sessions[0]) await openSession(state.sessions[0].id);
+ } catch (err) {
+ setStatus("無法連線:" + err.message);
+ }
+})();
diff --git a/web/icon.svg b/web/icon.svg
new file mode 100644
index 0000000..411765f
--- /dev/null
+++ b/web/icon.svg
@@ -0,0 +1,5 @@
+
diff --git a/web/index.html b/web/index.html
new file mode 100644
index 0000000..1a160de
--- /dev/null
+++ b/web/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+ GrokBoy
+
+
+
+
+
+
+
+
+
diff --git a/web/manifest.webmanifest b/web/manifest.webmanifest
new file mode 100644
index 0000000..1adde17
--- /dev/null
+++ b/web/manifest.webmanifest
@@ -0,0 +1,19 @@
+{
+ "name": "GrokBoy",
+ "short_name": "GrokBoy",
+ "description": "Local Grok Bot-style agent",
+ "start_url": "/",
+ "scope": "/",
+ "display": "standalone",
+ "orientation": "portrait",
+ "background_color": "#141414",
+ "theme_color": "#141414",
+ "icons": [
+ {
+ "src": "/icon.svg",
+ "sizes": "any",
+ "type": "image/svg+xml",
+ "purpose": "any maskable"
+ }
+ ]
+}
diff --git a/web/package-lock.json b/web/package-lock.json
new file mode 100644
index 0000000..c3b053e
--- /dev/null
+++ b/web/package-lock.json
@@ -0,0 +1,1792 @@
+{
+ "name": "grokboy-web",
+ "version": "0.1.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "grokboy-web",
+ "version": "0.1.0",
+ "dependencies": {
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1"
+ },
+ "devDependencies": {
+ "@types/react": "^18.3.12",
+ "@types/react-dom": "^18.3.1",
+ "@vitejs/plugin-react": "^4.3.4",
+ "typescript": "^5.6.3",
+ "vite": "^5.4.11"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
+ "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.29.7",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz",
+ "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz",
+ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.7",
+ "@babel/generator": "^7.29.7",
+ "@babel/helper-compilation-targets": "^7.29.7",
+ "@babel/helper-module-transforms": "^7.29.7",
+ "@babel/helpers": "^7.29.7",
+ "@babel/parser": "^7.29.7",
+ "@babel/template": "^7.29.7",
+ "@babel/traverse": "^7.29.7",
+ "@babel/types": "^7.29.7",
+ "@jridgewell/remapping": "^2.3.5",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz",
+ "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.29.8",
+ "@babel/types": "^7.29.8",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
+ "jsesc": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz",
+ "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.29.7",
+ "@babel/helper-validator-option": "^7.29.7",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-globals": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz",
+ "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz",
+ "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.29.7",
+ "@babel/types": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz",
+ "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7",
+ "@babel/traverse": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz",
+ "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
+ "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz",
+ "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz",
+ "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.29.7",
+ "@babel/types": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz",
+ "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.29.8"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz",
+ "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz",
+ "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz",
+ "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.7",
+ "@babel/parser": "^7.29.7",
+ "@babel/types": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz",
+ "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.7",
+ "@babel/generator": "^7.29.8",
+ "@babel/helper-globals": "^7.29.7",
+ "@babel/parser": "^7.29.8",
+ "@babel/template": "^7.29.7",
+ "@babel/types": "^7.29.8",
+ "debug": "^4.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz",
+ "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@napi-rs/lzma-linux-x64-gnu": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz",
+ "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^22.20 || ^24.12 || >=25"
+ }
+ },
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz",
+ "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.63.2.tgz",
+ "integrity": "sha512-Xa6RDoWa+hNiX6PgsljlH6W75RaONx3y6PVlbLhkEWW+GaPQ3dP5gwbL/erAzQHWwkvW5UxdD5l87Qx2FAQ/4A==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.63.2.tgz",
+ "integrity": "sha512-vNASxsghMfQ5s+v3PrpnJd+ryL/26lxCCaGI+sDJ7VzmHiYXIrrVltsDhaawxLM1WcoMU2oYlbPHLaYQtBzhcg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.63.2.tgz",
+ "integrity": "sha512-0dWDjmlrpZAgjPD/aPzUDhBW8APLRjAni5bOrM76wiiZm+E+KTMVKNhAzaTBohz8UyO2fKNAl0+fygbe2HZXOA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.63.2.tgz",
+ "integrity": "sha512-N58uktcwzk3+qT4KHEuNdIxX1N01RWrkfVoml69EAbSaNDL+sbNVLx2RMl4Qd23lpA0fgPvyh5hHb4weD5WKmg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.63.2.tgz",
+ "integrity": "sha512-HWF2zH8EAp2scWRpt2PGe6iUGz7zi04waXsdRr3zb4DWCk2ImIo5FZu0jjmD53nP/DGSvnW0e7/1ToCNZs2lZw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.63.2.tgz",
+ "integrity": "sha512-MkvcwHMnzPSMOQEwB6wHnLzmc+hT8BGc5bW/Mhmjjgx3wbj6VBnlc47XsK74kD0K9MikFfXpQqyz4NUXaUW62A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.63.2.tgz",
+ "integrity": "sha512-xe1bCKPJaKsD0tfd7Rb6bGfUogJTpKbTEEthsfdb7hTfTRNJVQTdirabQx0o6ERVba/smkM720soMY+0QnrlSQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.63.2.tgz",
+ "integrity": "sha512-yOM7LdK0p6gk6+Q773OEwtlsikT1TL3yMmYsTtRlDRPha5vV2DC5x7LqRWDr6f3cSYNMKVqxzffXv8ivxNBIFQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.63.2.tgz",
+ "integrity": "sha512-qiWuJJV3DybA2IfzvRimeKXGrGuVPv1zobSY/26KnP3HbV0VcNb3ECzgvtbvF3xjSMkcooou6HASXZuLdjnhpQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.63.2.tgz",
+ "integrity": "sha512-akcZquRzCY/KpUoZAMBhGf7oi4LmXq1BzRA5CPAC3rkUf28Y/sAYV3jSL+JKd7cwEyFvR5G0XVZ0gaMedP+60A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.63.2.tgz",
+ "integrity": "sha512-fNwYHrPyYyxauPzX/cpYw8Z7LQpp+DGA0KCoswA0aVFBpmdMil9XgjB8V3Ny64Ihu797+GKcuJqnsOKEmor7fA==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.63.2.tgz",
+ "integrity": "sha512-XfvsgzR7DZqREdst7K1Mj3ilSUM5xLAHJcIMDFPKdxTs9q5VHOT8aMA+a683fqBu7DQl8+Sd9HCsQYL8EMY9qA==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.63.2.tgz",
+ "integrity": "sha512-Pp7gVZggEFlbcuztay+/U0gVG9S1XAh8i7I1Re/htbAzo43P5wHZHw6pTyzotISqlKohoh9RpIfnOz3RbemK1w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.63.2.tgz",
+ "integrity": "sha512-zkgL2xff6i7u5hau/m6FGeS8gRkLEdgLw522WGmdWWlLd9btmNl3S80mcEjtGq+kvgUekQ3+BOYLLLcPlS2LIA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.63.2.tgz",
+ "integrity": "sha512-qOheJomrkVCbbHFJ7L3J97cnhfogKqguAQphv26+3ZsAQIF1L19b+dArl//s8rjJHJLz9byykyM8NBP4nmSa1g==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.63.2.tgz",
+ "integrity": "sha512-XlxLD54wQhH3FciCgMofxBw27NzUe818gJH410qWvc41UT0ZFcgxVjyX5/EK8MPTupjeVWqN5oy+9pCA9mqfCA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.63.2.tgz",
+ "integrity": "sha512-vdryWeRb2bLJZf0Fv/W8se6nvsHe2PkTCxV0meheK3nQE+G90VCJcke51Miy1yQRsfm2uqIyjXOu4wmUzbTtkQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.63.2.tgz",
+ "integrity": "sha512-bcq2h2pkKmH2po4cZV8VWzO4lL40STyu/nLoFpYMQp9C2tCVNTdcVv86MwSsn3D5s1FBe2Ty1atqvVAUTMimNg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.63.2.tgz",
+ "integrity": "sha512-EGoo5DMVMRkTId8fuTDaoxVlR5ZTsKULUezRjd9gCw5eeY+DjCvDpZAOlNUvKPGX+7rS1RWx6j+yOpNPx0cUgQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.63.2.tgz",
+ "integrity": "sha512-MErl12k7BFHZG1TI9QF/3lSSZARzq9KgNy/FjnqFMCkv+N4RSSzoUCA5h2mqHX4Mox3WaTVKblyzhQ1zRb2ZuQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.63.2.tgz",
+ "integrity": "sha512-ILs8k07Wh4p0PsNY4wYLEaXZKMOpVhrG5QDB0yHhGhuzOfDlnyHN6sflL4El/MpUP1y8uY2lUZrv4oBS6pTT3g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.63.2.tgz",
+ "integrity": "sha512-hKgB3nz/TKD3Wv78XEsyXzQsNjvhOHmwKQTvXADGOyU/cIClZDO7DsoggbdmJDPGp5V80tA3Vfv61PaKTLH3LA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.63.2.tgz",
+ "integrity": "sha512-T4wf1mudIDxN8Q/CWIBJC1u5gQUc+r5mPvlwoSbIvNkyVTP2TAFeobEmst5AQ4gMyAz4sSByVdoTDfvTmGK/8g==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.63.2.tgz",
+ "integrity": "sha512-tC3IY7qoaD9Ll3/8WJQn49j5V2f/NuI9S41NOE2iM5MPs3sPIvOkVToLcz/7Bz4pyF7PSvrtwu8I/pUrGOSecQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.63.2.tgz",
+ "integrity": "sha512-6NHnk/K3eq2ZFYcU1X8g67s9qIJRCOTT92gwLMVBp08dB2uuuwI1/Q/empzL2Bfr2f2WRLJVwpp90RmacQyFkw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
+ "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.28.2"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
+ "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/prop-types": {
+ "version": "15.7.15",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
+ "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/react": {
+ "version": "18.3.31",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.31.tgz",
+ "integrity": "sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/prop-types": "*",
+ "csstype": "^3.2.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.3.7",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz",
+ "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "^18.0.0"
+ }
+ },
+ "node_modules/@vitejs/plugin-react": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz",
+ "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.28.0",
+ "@babel/plugin-transform-react-jsx-self": "^7.27.1",
+ "@babel/plugin-transform-react-jsx-source": "^7.27.1",
+ "@rolldown/pluginutils": "1.0.0-beta.27",
+ "@types/babel__core": "^7.20.5",
+ "react-refresh": "^0.17.0"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"
+ }
+ },
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.11.23",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.23.tgz",
+ "integrity": "sha512-le521dGVfxM7yRX0EikCoSz+rOK+hHzdDt/E7mG1jOJB/6WAAUuwVroLwaB7ApaUsz5Q0kFlDXLSA9MheUIfRQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.cjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.28.9",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.9.tgz",
+ "integrity": "sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "baseline-browser-mapping": "^2.11.20",
+ "caniuse-lite": "^1.0.30001810",
+ "electron-to-chromium": "^1.5.420",
+ "node-releases": "^2.0.54",
+ "update-browserslist-db": "^1.3.2"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001810",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz",
+ "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/csstype": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.427",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.427.tgz",
+ "integrity": "sha512-n14zb3FdsChZ2BNobqNHAJMcP3ifFv4paox2LvCrfVAQcqGiSURgbJl+PfMpHVCNFkStnNc+RRVtPBTVW5PDgw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/esbuild": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.21.5",
+ "@esbuild/android-arm": "0.21.5",
+ "@esbuild/android-arm64": "0.21.5",
+ "@esbuild/android-x64": "0.21.5",
+ "@esbuild/darwin-arm64": "0.21.5",
+ "@esbuild/darwin-x64": "0.21.5",
+ "@esbuild/freebsd-arm64": "0.21.5",
+ "@esbuild/freebsd-x64": "0.21.5",
+ "@esbuild/linux-arm": "0.21.5",
+ "@esbuild/linux-arm64": "0.21.5",
+ "@esbuild/linux-ia32": "0.21.5",
+ "@esbuild/linux-loong64": "0.21.5",
+ "@esbuild/linux-mips64el": "0.21.5",
+ "@esbuild/linux-ppc64": "0.21.5",
+ "@esbuild/linux-riscv64": "0.21.5",
+ "@esbuild/linux-s390x": "0.21.5",
+ "@esbuild/linux-x64": "0.21.5",
+ "@esbuild/netbsd-x64": "0.21.5",
+ "@esbuild/openbsd-x64": "0.21.5",
+ "@esbuild/sunos-x64": "0.21.5",
+ "@esbuild/win32-arm64": "0.21.5",
+ "@esbuild/win32-ia32": "0.21.5",
+ "@esbuild/win32-x64": "0.21.5"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
+ "node_modules/jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.19",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz",
+ "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.55",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.55.tgz",
+ "integrity": "sha512-mIrE/Cw9y+9Au6dS5vDKDhQza9YvG6w+ZrS6X+ZzA7yFW/soAeaups4Qzn1bL6g5FVy8WtP79+0j82oPIbqRjQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/postcss": {
+ "version": "8.5.28",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz",
+ "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.18",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/react": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.2"
+ },
+ "peerDependencies": {
+ "react": "^18.3.1"
+ }
+ },
+ "node_modules/react-refresh": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz",
+ "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.63.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.2.tgz",
+ "integrity": "sha512-l5eyksV4tPBj6lJyEa37YzIOCSOV7lkZzEHUdpjWZbtD7wTcFYmEYXSgm5bT4vV+dZLb9rBG1W9GROOG4NS4Ew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.9"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@napi-rs/lzma-linux-x64-gnu": "1.5.1",
+ "@rollup/rollup-android-arm-eabi": "4.63.2",
+ "@rollup/rollup-android-arm64": "4.63.2",
+ "@rollup/rollup-darwin-arm64": "4.63.2",
+ "@rollup/rollup-darwin-x64": "4.63.2",
+ "@rollup/rollup-freebsd-arm64": "4.63.2",
+ "@rollup/rollup-freebsd-x64": "4.63.2",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.63.2",
+ "@rollup/rollup-linux-arm-musleabihf": "4.63.2",
+ "@rollup/rollup-linux-arm64-gnu": "4.63.2",
+ "@rollup/rollup-linux-arm64-musl": "4.63.2",
+ "@rollup/rollup-linux-loong64-gnu": "4.63.2",
+ "@rollup/rollup-linux-loong64-musl": "4.63.2",
+ "@rollup/rollup-linux-ppc64-gnu": "4.63.2",
+ "@rollup/rollup-linux-ppc64-musl": "4.63.2",
+ "@rollup/rollup-linux-riscv64-gnu": "4.63.2",
+ "@rollup/rollup-linux-riscv64-musl": "4.63.2",
+ "@rollup/rollup-linux-s390x-gnu": "4.63.2",
+ "@rollup/rollup-linux-x64-gnu": "4.63.2",
+ "@rollup/rollup-linux-x64-musl": "4.63.2",
+ "@rollup/rollup-openbsd-x64": "4.63.2",
+ "@rollup/rollup-openharmony-arm64": "4.63.2",
+ "@rollup/rollup-win32-arm64-msvc": "4.63.2",
+ "@rollup/rollup-win32-ia32-msvc": "4.63.2",
+ "@rollup/rollup-win32-x64-gnu": "4.63.2",
+ "@rollup/rollup-win32-x64-msvc": "4.63.2",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz",
+ "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/vite": {
+ "version": "5.4.21",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz",
+ "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.21.3",
+ "postcss": "^8.4.43",
+ "rollup": "^4.20.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "sass-embedded": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true,
+ "license": "ISC"
+ }
+ }
+}
diff --git a/web/package.json b/web/package.json
new file mode 100644
index 0000000..1a07156
--- /dev/null
+++ b/web/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "grokboy-web",
+ "private": true,
+ "version": "0.1.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc --noEmit && vite build",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1"
+ },
+ "devDependencies": {
+ "@types/react": "^18.3.12",
+ "@types/react-dom": "^18.3.1",
+ "@vitejs/plugin-react": "^4.3.4",
+ "typescript": "^5.6.3",
+ "vite": "^5.4.11"
+ }
+}
diff --git a/web/public/icon.svg b/web/public/icon.svg
new file mode 100644
index 0000000..411765f
--- /dev/null
+++ b/web/public/icon.svg
@@ -0,0 +1,5 @@
+
diff --git a/web/public/manifest.webmanifest b/web/public/manifest.webmanifest
new file mode 100644
index 0000000..07882c9
--- /dev/null
+++ b/web/public/manifest.webmanifest
@@ -0,0 +1,11 @@
+{
+ "name": "GrokBoy",
+ "short_name": "GrokBoy",
+ "start_url": "/",
+ "scope": "/",
+ "display": "standalone",
+ "orientation": "portrait",
+ "background_color": "#141414",
+ "theme_color": "#141414",
+ "icons": [{ "src": "/icon.svg", "sizes": "any", "type": "image/svg+xml", "purpose": "any maskable" }]
+}
diff --git a/web/public/sw.js b/web/public/sw.js
new file mode 100644
index 0000000..5d9c482
--- /dev/null
+++ b/web/public/sw.js
@@ -0,0 +1,11 @@
+const CACHE = "grokboy-web-v2";
+self.addEventListener("install", () => self.skipWaiting());
+self.addEventListener("activate", (event) => {
+ event.waitUntil(caches.keys().then((keys) => Promise.all(keys.filter((k) => k !== CACHE).map((k) => caches.delete(k)))));
+ self.clients.claim();
+});
+self.addEventListener("fetch", (event) => {
+ const url = new URL(event.request.url);
+ if (url.pathname.startsWith("/api/") || url.pathname.startsWith("/novnc") || event.request.method !== "GET") return;
+ event.respondWith(fetch(event.request).catch(() => caches.match(event.request)));
+});
diff --git a/web/src/App.tsx b/web/src/App.tsx
new file mode 100644
index 0000000..af3535f
--- /dev/null
+++ b/web/src/App.tsx
@@ -0,0 +1,455 @@
+import { FormEvent, useCallback, useEffect, useMemo, useRef, useState } from "react";
+import { api, type AgentDetail, type AgentRow, type TeamEvent, type TranscriptItem } from "./api";
+import { SandButton, SandIcon, SandIconButton } from "./grok/sand-kit-primitives";
+import { RUNTIME_THEME_CLASS } from "./grok/runtime-theme-token-installer";
+
+const PROMPT_ATTACH_CLASS = "sand-prompt-attach sand-2lah0s sand-i07v4r sand-uo9n5k sand-1vhj7fz sand-4b2ntj sand-1dsx48b sand-1hc1fzr sand-1lfpgzf sand-1ypdohk";
+const PROMPT_SEND_CLASS = "sand-prompt-send sand-2lah0s sand-mak4db sand-1tc92z3 sand-1hc1fzr sand-1p5hr7d sand-1lfpgzf sand-1ypdohk";
+const COMPUTER_HEADER_CLASS = "sand-chat-header__computer";
+const DETAILS_ID = "sand-conversation-details";
+
+type Activity = { id: string; text: string };
+
+export function App() {
+ const [agents, setAgents] = useState([]);
+ const [activeId, setActiveId] = useState(localStorage.getItem("grokboy.agent") || "");
+ const [detail, setDetail] = useState(null);
+ const [transcript, setTranscript] = useState([]);
+ const [activity, setActivity] = useState([]);
+ const [question, setQuestion] = useState<{ prompt: string; options: string[] } | null>(null);
+ const [status, setStatus] = useState("Ready");
+ const [draft, setDraft] = useState("");
+ const [sidebarOpen, setSidebarOpen] = useState(false);
+ const [computerOpen, setComputerOpen] = useState(false);
+ const [computerUrl, setComputerUrl] = useState("");
+ const [computerStatus, setComputerStatus] = useState("");
+ const [typing, setTyping] = useState(false);
+ const [showCreate, setShowCreate] = useState(false);
+ const [newName, setNewName] = useState("");
+ const [query, setQuery] = useState("");
+ const [searchOpen, setSearchOpen] = useState(false);
+ const searchRef = useRef(null);
+ const scroller = useRef(null);
+ const activeIdRef = useRef(activeId);
+ activeIdRef.current = activeId;
+
+ const active = useMemo(
+ () => agents.find((a) => a.id === activeId || a.name === activeId) || null,
+ [agents, activeId]
+ );
+
+ const visibleAgents = useMemo(() => {
+ const needle = query.trim().toLowerCase();
+ if (!needle) return agents;
+ return agents.filter(
+ (agent) =>
+ agent.name.toLowerCase().includes(needle) ||
+ (agent.preview || "").toLowerCase().includes(needle)
+ );
+ }, [agents, query]);
+
+ const loadAgents = useCallback(async () => {
+ const data = await api.agents();
+ setAgents(data.agents || []);
+ return data.agents || [];
+ }, []);
+
+ const openAgent = useCallback(async (id: string) => {
+ setActiveId(id);
+ localStorage.setItem("grokboy.agent", id);
+ setSidebarOpen(false);
+ setTyping(false);
+ setStatus("Loading");
+ try {
+ const data = await api.agent(id);
+ setDetail(data);
+ setTranscript(data.transcript || []);
+ setQuestion(null);
+ setActivity([]);
+ setStatus(data.running ? "Working" : "Ready");
+ } catch (err) {
+ setDetail(null);
+ setTranscript([]);
+ setStatus(err instanceof Error ? err.message : String(err));
+ }
+ }, []);
+
+ useEffect(() => {
+ loadAgents()
+ .then((list) => {
+ const remembered = localStorage.getItem("grokboy.agent");
+ const pick = list.find((a) => a.id === remembered || a.name === remembered) || list[0];
+ if (pick) return openAgent(pick.id);
+ })
+ .catch((err) => setStatus(String(err.message)));
+ }, [loadAgents, openAgent]);
+
+ useEffect(() => {
+ if (!activeId) return;
+ const sourceAgent = activeId;
+ const source = new EventSource(`/api/agents/${encodeURIComponent(sourceAgent)}/events`);
+ source.onmessage = (ev) => {
+ if (activeIdRef.current !== sourceAgent) return;
+ let payload: { events?: TeamEvent[] };
+ try {
+ payload = JSON.parse(ev.data);
+ } catch {
+ return;
+ }
+ for (const event of payload.events || []) handleEvent(event);
+ };
+ const poll = window.setInterval(() => {
+ loadAgents().catch(() => undefined);
+ }, 4000);
+ return () => {
+ source.close();
+ window.clearInterval(poll);
+ };
+ }, [activeId, loadAgents]);
+
+ useEffect(() => {
+ scroller.current?.scrollTo(0, scroller.current.scrollHeight);
+ }, [transcript, activity, question, typing]);
+
+ function handleEvent(event: TeamEvent) {
+ const p = event.payload || {};
+ switch (event.kind) {
+ case "reply":
+ if (typeof p.message === "string" && p.message.trim()) {
+ setTranscript((cur) => [...cur, { role: "assistant", content: p.message as string }]);
+ }
+ setTyping(false);
+ setStatus(typeof p.verdict === "string" ? String(p.verdict) : "Ready");
+ setQuestion(null);
+ void loadAgents();
+ break;
+ case "runtime": {
+ const type = String(p.type || "");
+ if (type === "message" && typeof p.content === "string") {
+ const content = p.content;
+ setTranscript((cur) => [...cur, { role: "assistant", content }]);
+ } else if (type === "tool_started") {
+ setTyping(true);
+ pushActivity(`Started ${p.name}`);
+ } else if (type === "tool_finished") {
+ pushActivity(`${p.success ? "Done" : "Failed"} ${p.name}`);
+ } else if (type === "progress" || type === "status") {
+ pushActivity(String(p.message || type));
+ } else if (type === "question") {
+ const q = (p.question || {}) as { question?: string; reason?: string; options?: unknown[] };
+ setTyping(false);
+ setQuestion({
+ prompt: q.question || q.reason || "Needs a reply",
+ options: (q.options || [])
+ .map((o) =>
+ typeof o === "string"
+ ? o
+ : String((o as { label?: string; value?: string }).label || (o as { value?: string }).value || "")
+ )
+ .filter(Boolean),
+ });
+ } else if (type === "waiting") {
+ setStatus(String(p.stage || "Waiting"));
+ }
+ break;
+ }
+ case "error":
+ setTyping(false);
+ pushActivity(String(p.message || JSON.stringify(p)));
+ setStatus("Failed");
+ break;
+ default:
+ break;
+ }
+ }
+
+ function pushActivity(text: string) {
+ setActivity((cur) => [...cur.slice(-7), { id: `${Date.now()}-${text.slice(0, 16)}`, text }]);
+ }
+
+ async function onNewChat() {
+ setShowCreate(true);
+ }
+
+ function onOpenSearch() {
+ setSearchOpen(true);
+ queueMicrotask(() => searchRef.current?.focus());
+ }
+
+ async function onCreate(ev?: FormEvent) {
+ ev?.preventDefault();
+ const name = newName.trim();
+ if (!name) return;
+ try {
+ const created = await api.createAgent(name);
+ setNewName("");
+ setShowCreate(false);
+ await loadAgents();
+ await openAgent(created.id || created.name);
+ } catch (err) {
+ setStatus(err instanceof Error ? err.message : String(err));
+ }
+ }
+
+ async function onSend(text?: string, ev?: FormEvent) {
+ ev?.preventDefault();
+ const value = (text ?? draft).trim();
+ if (!value) return;
+ let id = activeId;
+ if (!id) {
+ const created = await api.createAgent(`agent_${Date.now().toString(36)}`);
+ id = created.id;
+ await loadAgents();
+ setActiveId(id);
+ localStorage.setItem("grokboy.agent", id);
+ }
+ setDraft("");
+ setTranscript((cur) => [...cur, { role: "user", content: value }]);
+ setQuestion(null);
+ setTyping(true);
+ setStatus("Working");
+ try {
+ await api.send(id, value);
+ } catch (err) {
+ setTyping(false);
+ setStatus(err instanceof Error ? err.message : String(err));
+ }
+ }
+
+ async function onStop() {
+ const id = activeId;
+ if (!id) return;
+ try {
+ await api.stop(id);
+ setTyping(false);
+ setStatus("Stopped");
+ setDetail((current) => (current ? { ...current, running: false } : current));
+ setAgents((current) => current.map((agent) => (agent.id === id ? { ...agent, running: false } : agent)));
+ } catch (err) {
+ setStatus(err instanceof Error ? err.message : String(err));
+ }
+ }
+
+ async function onComputer() {
+ if (computerOpen) {
+ setComputerOpen(false);
+ return;
+ }
+ setComputerOpen(true);
+ setComputerStatus("Starting Grok Bot's Computer…");
+ try {
+ const data = await api.computer();
+ setComputerUrl(data.viewer_url);
+ setComputerStatus(data.ready ? "Grok Bot's Computer" : data.error || "Starting desktop…");
+ } catch (err) {
+ setComputerStatus(err instanceof Error ? err.message : String(err));
+ }
+ }
+
+ const hasPayload = draft.trim().length > 0;
+ const working = Boolean(typing || detail?.running || active?.running || status === "Working");
+
+ return (
+
+
+
+
+
+
+
+ {(active?.name || "G").slice(0, 1).toUpperCase()}
+ {active?.name || "Select an agent"}
+ {detail?.running || status === "Working" ? Working : null}
+
+
+ {working ? (
+ void onStop()}
+ size="md"
+ title="Stop"
+ />
+ ) : null}
+ void onComputer()}
+ size="md"
+ />
+
+
+
+
+ {transcript.map((item, i) => (
+
+ ))}
+ {activity.map((item) => (
+
{item.text}
+ ))}
+ {typing ?
: null}
+
+
+ {question ? (
+
+
{question.prompt}
+
+ {question.options.map((option) => (
+
+ ))}
+
+
+ ) : null}
+
+
+
+
+
+
+
+
setSidebarOpen(false)} />
+
+ );
+}
diff --git a/web/src/api.ts b/web/src/api.ts
new file mode 100644
index 0000000..c367fdf
--- /dev/null
+++ b/web/src/api.ts
@@ -0,0 +1,63 @@
+export type AgentRow = {
+ id: string;
+ name: string;
+ expertise?: string;
+ preview?: string;
+ running?: boolean;
+};
+
+export type TranscriptItem = { role: "user" | "assistant"; content: string };
+
+export type AgentDetail = {
+ id: string;
+ name: string;
+ expertise: string;
+ preview: string;
+ transcript: TranscriptItem[];
+ running: boolean;
+};
+
+export type TeamEvent = {
+ id: number;
+ kind: string;
+ task_id?: string | null;
+ payload: Record
;
+};
+
+async function request(path: string, init?: RequestInit): Promise {
+ const res = await fetch(path, {
+ ...init,
+ headers: { "content-type": "application/json", ...(init?.headers || {}) },
+ });
+ const raw = await res.text();
+ let data: unknown = null;
+ try {
+ data = raw ? JSON.parse(raw) : null;
+ } catch {
+ data = raw;
+ }
+ if (!res.ok) {
+ const err = data as { error?: string } | null;
+ throw new Error(err?.error || raw || String(res.status));
+ }
+ return data as T;
+}
+
+export const api = {
+ health: () => request<{ ok: boolean; service: boolean; model: string }>("/api/health"),
+ agents: async () => {
+ const data = await request("/api/agents");
+ const agents = Array.isArray(data) ? data : data.agents || [];
+ return { agents };
+ },
+ createAgent: (name: string) => request("/api/agents", { method: "POST", body: JSON.stringify({ name }) }),
+ agent: (id: string) => request(`/api/agents/${id}`),
+ send: (id: string, text: string) =>
+ request<{ queued?: string }>(`/api/agents/${id}/messages`, { method: "POST", body: JSON.stringify({ text }) }),
+ stop: (id: string) => request(`/api/agents/${id}/stop`, { method: "POST", body: "{}" }),
+ computer: () =>
+ request<{ ready: boolean; viewer_url: string; error?: string }>("/api/computer", {
+ method: "POST",
+ body: "{}",
+ }),
+};
diff --git a/web/src/grok/conversation.css b/web/src/grok/conversation.css
new file mode 100644
index 0000000..7f8a252
--- /dev/null
+++ b/web/src/grok/conversation.css
@@ -0,0 +1,346 @@
+/* @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=5279500 */
+@import url("./pdf-viewer.css");
+::highlight(sand-find-match) { background-color: color-mix(in srgb, var(--cursor-warn, #ffc000) 30%, transparent); }
+::highlight(sand-find-current) { background-color: var(--cursor-warn, #ffc000); color: #1f1f1f; }
+
+/* @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#L499 */
+/* @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=2603896 (r0n separator) */
+.sand-agents-sidebar { position: relative; min-height: 0; width: 100%; background: var(--cursor-bg-chrome); border-right: 1px solid var(--cursor-stroke-tertiary); container-name: sand-sidebar; container-type: inline-size; }
+.sand-agents-sidebar__header { display: flex; align-items: center; justify-content: space-between; height: 50px; padding: 0 12px 0 16px; border-bottom: 1px solid var(--cursor-stroke-tertiary); }
+.sand-agents-sidebar__header strong { font-size: var(--cursor-font-size-lg); }
+.sand-agents-sidebar__new-actions { display: flex; gap: 3px; }
+.sand-agents-sidebar__rail-new { display: flex; justify-content: center; width: 100%; padding: 8px 0; }
+.sand-agents-sidebar__new-actions button,
+.sand-agents-sidebar__rail-new button { flex: 0 0 auto; }
+/* @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=2597261 (Wpn list carrier) */
+/* @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=2579998 (yQ.listContent: 4px / 12px / 24px insets) */
+.sand-agents-list { display: grid; flex: 1 1 auto; gap: var(--cursor-spacing-0-75); min-height: 0; overflow: auto; padding: 4px 12px 24px; }
+/* @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=2566867 (Zbe section-header owner) */
+.sand-agents-section { min-width: 0; }
+/* @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=2566867 (Zbe section-header owner) */
+.sand-agents-section__header {
+ display: flex;
+ align-items: center;
+ gap: 0;
+ width: 100%;
+ height: 30px;
+ box-sizing: border-box;
+ padding: 8px;
+ padding-bottom: 6px;
+ color: var(--cursor-text-secondary);
+ text-align: left;
+ background: transparent;
+ border: 0;
+ border-radius: 6px;
+ cursor: pointer;
+ transition: background-color .12s ease;
+}
+.sand-agents-section__header:hover,
+.sand-agents-section__header:focus-visible { background: var(--sand-fill-ghost-hover); outline: none; }
+.sand-agents-section__header > span:first-child { min-width: 0; overflow: hidden; flex: 1 1 auto; text-overflow: ellipsis; white-space: nowrap; }
+.sand-agents-section__header > span:nth-child(2) { flex: 0 0 auto; margin-left: 6px; color: var(--cursor-text-tertiary); font-size: var(--cursor-font-size-xs); }
+.sand-agents-section__header > span:last-child { display: inline-flex; flex: 0 0 auto; width: 16px; height: 16px; align-items: center; justify-content: center; color: var(--cursor-text-tertiary); transform: rotate(90deg); transition: opacity .12s ease, width .12s ease; }
+.sand-agents-section__header > span:last-child { opacity: 0; width: 0; overflow: hidden; }
+.sand-agents-section__header:hover > span:last-child,
+.sand-agents-section__header:focus-visible > span:last-child { opacity: 1; width: 16px; }
+.sand-agents-section__rows { min-width: 0; }
+.sand-agents-section__empty { display: flex; align-items: center; min-height: 30px; padding: 8px; color: var(--cursor-text-tertiary); font-size: var(--cursor-font-size-xs); }
+.sand-agent-item { position: relative; display: grid; grid-template-columns: 34px minmax(0, 1fr) auto; gap: 9px; align-items: center; width: 100%; min-height: 58px; padding: 8px; color: var(--cursor-text-primary); text-align: left; background: transparent; border: 0; border-radius: var(--cursor-radius-lg); cursor: pointer; }
+.sand-agent-item:hover { background: var(--cursor-bg-secondary); }
+.sand-agent-item__avatar, .sand-chat-header__avatar { display: grid; place-items: center; color: var(--cursor-base); background: transparent; border-radius: var(--cursor-radius-lg); }
+.sand-agent-item__avatar { width: 34px; height: 34px; }
+.sand-agent-item__avatar .sand-agent-avatar, .sand-chat-header__avatar .sand-agent-avatar { display: block; width: 100%; height: 100%; object-fit: cover; }
+.sand-grok-bot-mark { position: relative; display: block; overflow: visible; color: var(--fg, var(--cursor-text-primary)); flex: 0 0 auto; }
+.sand-shared-room-avatar { display: grid; place-items: center; color: var(--cursor-text-secondary); background: var(--cursor-bg-secondary); border-radius: var(--cursor-radius-full); }
+.sand-group-avatar { position: relative; display: block; overflow: hidden; border-radius: var(--cursor-radius-lg); }
+.sand-agent-item__body { display: grid; gap: 4px; min-width: 0; }
+.sand-agent-item__name, .sand-agent-item__preview { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
+.sand-agent-item__name { font-size: var(--cursor-font-size-base); }
+.sand-agent-item__preview { color: var(--cursor-text-tertiary); font-size: var(--cursor-font-size-xs); font-weight: 400; }
+.sand-agent-item__trailing { display: grid; justify-items: end; gap: 8px; color: var(--cursor-text-tertiary); font-size: var(--cursor-font-size-xs); }
+.sand-agent-item__activity { color: var(--sand-fill-accent); }
+
+/* @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#byteOffset=422439,423828,526294,490692,378915,407990,408356,406334,407287,406856 (Mac SHA256 5a25f934b7d3b7a55483cb5f2a1a05e21209aad0a09c82d07d2add054a6b7856) */
+/* @evidence recovered/frontend/app/assets/index-lCyB53CO.css#byteOffset=478765,480339,594613,554945,430030,462492,462890,460684,461725,461254 (Windows SHA256 bc44533bcf9109b5596d57dda428370d9bdc4fba8201cd6ed4cb0d4abd795ddc) */
+/* d0e stylex root/state tokens are retained by the immutable renderer CSS. These scoped declarations keep the exact utility behavior when the clean sidebar is mounted without the opaque aggregate stylesheet. */
+.sand-agents-sidebar .sand-agent-item__corner-dot {
+ position: absolute;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ pointer-events: none;
+ border-radius: var(--cursor-radius-full);
+}
+.sand-agents-sidebar .sand-kit-status-dot.sand-1rm5x0x { background-color: var(--sand-fill-success); }
+.sand-agents-sidebar .sand-kit-status-dot.sand-mab63l { background-color: var(--sand-fill-warning); }
+.sand-agents-sidebar .sand-kit-status-dot.sand-3zn3jg { background-color: var(--sand-fill-neutral); }
+.sand-agents-sidebar .sand-kit-status-dot.sand-18he5m { background-color: var(--sand-fill-danger); }
+.sand-agents-sidebar .sand-kit-status-dot.sand-2uzfp6 { background-color: var(--sand-fill-accent); }
+.sand-agents-sidebar .sand-agent-item__corner-dot.sand-1jq8d06 { animation-duration: .13s; }
+.sand-agents-sidebar .sand-agent-item__corner-dot.sand-1lfcbla { animation-timing-function: cubic-bezier(.22, 1, .36, 1); }
+@media (prefers-reduced-motion: reduce) {
+ .sand-agents-sidebar .sand-agent-item__corner-dot.sand-1aquc0h { animation-name: none; }
+}
+.sand-agents-sidebar .sand-kit-status-dot { position: static; top: auto; left: auto; z-index: auto; width: 8px; height: 8px; border: 0; border-radius: var(--cursor-radius-full); transform: none; }
+.sand-agents-section__reveal { outline: 1px solid var(--cursor-stroke-focused); outline-offset: -1px; background: var(--sand-fill-accent-subtle); }
+
+/* @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=2603896 */
+/* r0n: absolute edge handle, transparent surface, app-region exclusion, col-resize cursor, and touch-action cleanup. */
+.sand-sidebar-resize-handle { position: absolute; top: 0; right: -6px; bottom: 0; width: 12px; background: transparent; cursor: col-resize; -webkit-app-region: no-drag; touch-action: none; }
+
+@container sand-sidebar (max-width: 130px) {
+ .sand-agents-sidebar__header { justify-content: center; padding: 0; }
+ .sand-agents-sidebar__new-actions button:not(:last-child) { display: none; }
+ .sand-agent-item { grid-template-columns: 34px; justify-content: center; min-height: 44px; padding: 5px; }
+ .sand-agent-item__body, .sand-agent-item__trailing { display: none; }
+}
+
+.sand-chat-stage { display: flex; flex: 1 1 0; flex-direction: column; width: 100%; min-width: 0; min-height: 0; overflow: hidden; background: var(--cursor-bg-editor); }
+.sand-chat-header { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-width: 0; min-height: 51px; padding: 0 16px; border-bottom: 1px solid var(--cursor-stroke-tertiary); }
+.sand-chat-header > button { color: var(--cursor-text-secondary); background: transparent; border: 0; border-radius: var(--cursor-radius-lg); cursor: pointer; }
+.sand-chat-header__identity { display: flex; align-items: center; gap: 9px; padding: 5px 7px; }
+.sand-chat-header__avatar { width: 28px; height: 28px; }
+.sand-chat-header__identity small { color: var(--cursor-text-tertiary); }
+/* @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=4886695 (aSn controls: inline-flex, aligned, gap 2) */
+.sand-chat-header__controls { display: inline-flex; align-items: center; gap: 2px; flex-shrink: 0; }
+
+.sand-virtual-transcript { flex: 1 1 0; min-height: 0; overflow: auto; padding: 28px max(30px, calc((100% - 690px) / 2)); outline: none; }
+.sand-chat-stage > .sand-chat-transcript-loading { flex: 1 1 0; min-height: 0; overflow: auto; }
+.sand-transcript-row { margin: 0 0 22px; }
+/*
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#sha256=5a25f934b7d3b7a55483cb5f2a1a05e21209aad0a09c82d07d2add054a6b7856#byteOffset=502781 (.sand-1q8iv8g: agent max-width)
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#sha256=5a25f934b7d3b7a55483cb5f2a1a05e21209aad0a09c82d07d2add054a6b7856#byteOffset=406415 (.sand-1g0q52m: agent bubble fill)
+ * @evidence recovered/frontend/app/assets/index-lCyB53CO.css#sha256=bc44533bcf9109b5596d57dda428370d9bdc4fba8201cd6ed4cb0d4abd795ddc#byteOffset=568410 (.sand-1q8iv8g: Windows agent max-width)
+ * @evidence recovered/frontend/app/assets/index-lCyB53CO.css#sha256=bc44533bcf9109b5596d57dda428370d9bdc4fba8201cd6ed4cb0d4abd795ddc#byteOffset=460773 (.sand-1g0q52m: Windows agent bubble fill)
+ * The semantic selectors below retain the immutable geometry while using the
+ * recovery theme tokens so light and dark shells share the same layout.
+ */
+.sand-message {
+ box-sizing: border-box;
+ max-width: min(88%, 640px, calc(100% - 82px));
+ padding: 8px 12px;
+ overflow-wrap: anywhere;
+ color: var(--cursor-text-primary);
+ background: var(--sand-fill-bubble-agent, var(--cursor-bg-secondary));
+ border-radius: 18px;
+}
+.sand-message-action-anchor { position: relative; width: fit-content; max-width: 100%; }
+.sand-message-hover-actions { position: absolute; right: 0; bottom: -30px; z-index: 2; display: flex; gap: 4px; opacity: 0; pointer-events: none; transition: opacity .12s ease; }
+.sand-message-action-anchor:hover .sand-message-hover-actions,
+.sand-message-action-anchor:focus-within .sand-message-hover-actions,
+.sand-message-action-anchor--menu-open .sand-message-hover-actions { opacity: 1; pointer-events: auto; }
+.sand-message-hover-actions__button { display: inline-flex; align-items: center; gap: 6px; min-height: 28px; padding: 4px 8px; color: #a9afa3; background: #20231f; border: 1px solid #343832; border-radius: 7px; cursor: pointer; font: inherit; font-size: 11px; }
+.sand-message-hover-actions__button:hover,
+.sand-message-hover-actions__button:focus-visible { color: #eef3e7; background: #292d26; outline: 1px solid #a9c85d; outline-offset: 1px; }
+.sand-message-prose { display: flex; flex-direction: column; min-width: 0; overflow-wrap: anywhere; color: var(--cursor-text-primary); font-size: var(--cursor-font-size-base, 14px); line-height: 20px; }
+.sand-message-prose p { margin: 0; line-height: inherit; white-space: pre-wrap; }
+.sand-message-prose a { color: #bfe86b; text-decoration: underline; text-underline-offset: 2px; }
+.sand-code-figure { position: relative; margin: 10px 0; }
+.sand-code-scroll { max-width: 100%; overflow-x: auto; }
+.sand-code-block { margin: 0; padding: 11px 12px; color: #d9ded4; background: #1a1d19; border: 1px solid #343932; border-radius: 8px; font: 11px/1.55 ui-monospace, SFMono-Regular, Menlo, monospace; }
+.sand-code-block code { white-space: pre; }
+.sand-code-fallback { white-space: pre; }
+/*
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#byteOffset=341113
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#byteOffset=341216
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#byteOffset=341330
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#byteOffset=341452
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#byteOffset=341494
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#byteOffset=341583
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#byteOffset=359319
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#byteOffset=359379
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#byteOffset=359452
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#byteOffset=359518
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#byteOffset=359583
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#byteOffset=359646
+ * Font faces and the remaining generated vendor stylesheet are intentionally
+ * excluded; KaTeX font parity is a separate package-closure prerequisite.
+ */
+.sand-message-prose .katex { font: 1.21em KaTeX_Main, Times New Roman, serif; line-height: 1.2; text-indent: 0; text-rendering: auto; }
+.sand-message-prose .katex * { -ms-high-contrast-adjust: none !important; border-color: currentColor; }
+.sand-message-prose .katex .katex-mathml { position: absolute; clip: rect(1px, 1px, 1px, 1px); padding: 0; border: 0; height: 1px; width: 1px; overflow: hidden; }
+.sand-message-prose .katex .katex-html>.newline { display: block; }
+.sand-message-prose .katex .base { position: relative; display: inline-block; white-space: nowrap; width: min-content; }
+.sand-message-prose .katex .strut { display: inline-block; }
+.sand-message-prose .katex-display { display: block; margin: 1em 0; text-align: center; }
+.sand-message-prose .katex-display>.katex { display: block; text-align: center; white-space: nowrap; }
+.sand-message-prose .katex-display>.katex>.katex-html { display: block; position: relative; }
+.sand-message-prose .katex-display>.katex>.katex-html>.tag { position: absolute; right: 0; }
+.sand-message-prose .katex-display.leqno>.katex>.katex-html>.tag { left: 0; right: auto; }
+.sand-message-prose .katex-display.fleqn>.katex { text-align: left; padding-left: 2em; }
+.sand-message-prose .katex-error { color: #cc0000; }
+.sand-message-prose .language-math { color: inherit; font: inherit; white-space: pre-wrap; }
+/* @evidence src/app/dist/renderer/assets/index-UbX-y3il.js */
+.sand-mermaid-figure { position: relative; max-width: 100%; margin: 10px 0; }
+.sand-mermaid { display: block; max-width: 100%; min-height: 24px; overflow: hidden; color: #d9ded4; cursor: pointer; }
+.sand-mermaid > svg { display: block; max-width: 100%; height: auto; }
+.sand-mermaid-expand { position: absolute; top: 8px; right: 8px; display: grid; place-items: center; width: 28px; height: 28px; padding: 0; color: #cbd2c5; background: #20231f; border: 1px solid #343832; border-radius: 7px; cursor: pointer; opacity: 0; }
+.sand-mermaid-figure:hover .sand-mermaid-expand, .sand-mermaid:focus-visible + .sand-mermaid-expand { opacity: 1; }
+.sand-mermaid-expand:hover, .sand-mermaid-expand:focus-visible, .sand-mermaid-viewer button:hover, .sand-mermaid-viewer button:focus-visible { color: #eef3e7; background: #292d26; outline: 1px solid #a9c85d; outline-offset: 1px; }
+.sand-mermaid-error { margin: 8px 0 4px; color: #f0a7a7; font-size: 11px; }
+.sand-mermaid-viewer { position: fixed; inset: 0; z-index: 4000; display: flex; overflow: hidden; background: rgba(13, 15, 12, .96); }
+.sand-mermaid-viewer__content { position: absolute; inset: 0; overflow: hidden; }
+.sand-mermaid-viewer__canvas { position: absolute; top: 50%; left: 50%; display: grid; place-items: center; transform-origin: center; }
+.sand-mermaid-viewer__canvas > svg { display: block; width: 100%; height: 100%; }
+.sand-mermaid-viewer__close { position: absolute; top: 16px; right: 16px; z-index: 1; display: grid; place-items: center; width: 32px; height: 32px; padding: 0; color: #d9ded4; background: #20231f; border: 1px solid #343832; border-radius: 8px; cursor: pointer; font-size: 20px; line-height: 1; }
+.sand-mermaid-viewer__toolbar { position: absolute; top: 16px; left: 50%; z-index: 1; display: flex; gap: 4px; padding: 4px; background: #20231f; border: 1px solid #343832; border-radius: 8px; transform: translateX(-50%); }
+.sand-mermaid-viewer__toolbar button, .sand-mermaid-viewer__zoom-out, .sand-mermaid-viewer__zoom-in, .sand-mermaid-viewer__fit { display: grid; place-items: center; width: 30px; height: 30px; padding: 0; color: #d9ded4; background: transparent; border: 0; border-radius: 6px; cursor: pointer; font-size: 16px; line-height: 1; }
+.sand-message-content { margin: 0; }
+.sand-message-typing { display: flex; gap: 4px; width: max-content; padding: 10px 12px; background: #20231f; border-radius: 14px; }
+.sand-message-typing__dot { width: 5px; height: 5px; background: #9ba392; border-radius: 50%; }
+.sand-queued-send-notice, .sand-failed-send-actions { display: flex; align-items: center; gap: 8px; margin-top: 8px; color: #92998d; font-size: 11px; }
+.sand-queued-send-notice button, .sand-failed-send-actions button { padding: 0; color: #c7ec6b; background: transparent; border: 0; cursor: pointer; font: inherit; }
+.sand-failed-send-actions [role="status"] { color: #f0a7a7; }
+.sand-transcript-time-separator { margin: 0 0 22px; color: #747b70; text-align: center; font-size: 11px; }
+.sand-unread-divider { display: flex; align-items: center; gap: 10px; margin: 22px 0; color: #c7ec6b; font-size: 11px; }
+.sand-unread-divider::before, .sand-unread-divider::after { content: ""; height: 1px; flex: 1; background: #53632f; }
+.sand-message-attachments { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
+.sand-message-attachments__strip { display: flex; flex-wrap: wrap; gap: 8px; }
+/*
+ * @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=4911773 (wSn fixed panel)
+ * @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=4905208 (fSn outline rows)
+ * The recovered panel must remain a bounded overlay. Without this owner the
+ * rows participate in the transcript flow and cover the permission dock and
+ * composer instead of scrolling inside the outline surface.
+ */
+.sand-outline-panel {
+ position: fixed;
+ top: 56px;
+ right: 16px;
+ z-index: 200;
+ display: flex;
+ flex-direction: column;
+ width: 360px;
+ max-width: calc(100vw - 32px);
+ max-height: min(70vh, 640px);
+ overflow: hidden;
+ color: var(--cursor-text-primary);
+ background: var(--cursor-bg-elevated);
+ border: 1px solid var(--cursor-stroke-tertiary);
+ border-radius: 14px;
+ box-shadow: 0 24px 64px -24px #0009;
+ animation: sand-ef87bi-B .16s cubic-bezier(.16, 1, .3, 1);
+}
+.sand-outline-panel__header {
+ display: flex;
+ flex: 0 0 auto;
+ align-items: center;
+ justify-content: space-between;
+ gap: 8px;
+ padding: 10px 10px 10px 12px;
+ border-bottom: 1px solid var(--cursor-stroke-tertiary);
+ cursor: grab;
+ touch-action: none;
+ -webkit-app-region: no-drag;
+}
+.sand-outline-panel__title { display: flex; min-width: 0; align-items: center; gap: 8px; }
+.sand-outline-panel__title-text { display: flex; min-width: 0; flex-direction: column; gap: 2px; overflow: hidden; }
+.sand-outline-panel__title-text > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
+.sand-outline-panel__title-text > span:last-child { color: var(--cursor-text-secondary); font-size: var(--cursor-font-size-xs); }
+.sand-outline-panel__header > button { flex: 0 0 auto; }
+.sand-outline-panel__tabs { display: flex; flex: 0 0 auto; gap: 4px; overflow-x: auto; padding: 6px 10px; border-bottom: 1px solid var(--cursor-stroke-tertiary); }
+.sand-outline-tab { display: inline-flex; flex: 0 0 auto; align-items: center; gap: 6px; min-height: 28px; max-width: 100%; padding: 4px 8px; color: var(--cursor-text-secondary); background: transparent; border: 0; border-radius: var(--cursor-radius-sm); cursor: pointer; font: inherit; font-size: var(--cursor-font-size-xs); }
+.sand-outline-tab[aria-selected="true"] { color: var(--cursor-text-primary); background: var(--cursor-bg-secondary); }
+.sand-outline-tab:focus-visible { outline: 1px solid var(--cursor-stroke-focused); outline-offset: 1px; }
+.sand-outline-tab__status { width: 6px; height: 6px; flex: 0 0 auto; border-radius: 50%; background: var(--cursor-text-tertiary); }
+.sand-outline-tab__label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
+.sand-outline-panel__list { flex: 1 1 auto; min-height: 0; overflow: auto; padding: 6px 10px; }
+.sand-outline-empty { padding: 12px; color: var(--cursor-text-tertiary); text-align: center; font-size: var(--cursor-font-size-sm); }
+.sand-outline-item { margin: 0 0 10px; border: 1px solid var(--cursor-stroke-tertiary); border-radius: 9px; background: var(--cursor-bg-elevated); }
+.sand-outline-item__row { display: flex; align-items: center; gap: 8px; width: 100%; min-height: 34px; padding: 7px 9px; color: var(--cursor-text-primary); text-align: left; background: transparent; border: 0; border-radius: 9px; cursor: pointer; font: inherit; }
+.sand-outline-item__row:hover { background: var(--cursor-bg-secondary); }
+.sand-outline-item__icon { display: inline-flex; flex: 0 0 auto; align-items: center; justify-content: center; width: 16px; height: 16px; color: var(--cursor-icon-tertiary); font-size: 14px; line-height: 1; }
+.sand-outline-item__icon.sand-kbann2 { color: var(--cursor-text-accent); }
+.sand-outline-item__icon.sand-pmgbkh { color: var(--cursor-text-red-primary, #ff5f57); }
+@keyframes sand-outline-item-spin { to { transform: rotate(360deg); } }
+.sand-outline-item__label { flex: 0 0 auto; font-size: 11px; font-weight: 600; }
+.sand-outline-item__preview { min-width: 0; overflow: hidden; color: var(--cursor-text-tertiary); text-overflow: ellipsis; white-space: nowrap; font-size: 10px; }
+.sand-outline-item__chevron { flex: 0 0 auto; width: 6px; height: 6px; margin-left: auto; border-right: 1px solid var(--cursor-text-secondary); border-bottom: 1px solid var(--cursor-text-secondary); transform: rotate(-45deg); }
+.sand-outline-item__detail { padding: 0 10px 10px 25px; color: var(--cursor-text-secondary); font-size: 10px; }
+.sand-outline-item__detail-section { display: grid; gap: 4px; }
+.sand-outline-item__detail-label { color: var(--cursor-text-tertiary); font-size: 9px; font-weight: 600; text-transform: uppercase; }
+.sand-outline-item__detail-text { max-height: 220px; margin: 0; overflow: auto; white-space: pre-wrap; overflow-wrap: anywhere; font: inherit; }
+.sand-attachment { display: grid; max-width: min(560px, 100%); overflow: hidden; border-radius: 10px; }
+.sand-attachment__image { display: block; max-width: 100%; max-height: 320px; object-fit: contain; }
+.sand-attachment__video { display: block; max-width: 100%; max-height: 320px; }
+.sand-attachment audio { max-width: 280px; }
+.sand-file-attachment-chip { display: flex; align-items: center; gap: 8px; }
+.sand-message-attachment { display: flex; align-items: center; gap: 8px; min-width: 180px; padding: 8px 10px; background: #20231f; border: 1px solid #343832; border-radius: 9px; }
+.sand-message-attachment > span:last-child { display: grid; min-width: 0; }
+.sand-message-attachment strong { overflow: hidden; text-overflow: ellipsis; font-size: 11px; white-space: nowrap; }
+.sand-message-attachment small { color: #798076; font-size: 10px; }
+/* @evidence src/app/dist/renderer/assets/index-UbX-y3il.js */
+.sand-media-viewer { position: fixed; inset: 0; z-index: 4000; display: flex; overflow: hidden; background: rgba(13, 15, 12, .96); }
+.sand-media-viewer__top-bar { position: absolute; inset: 0 0 auto; z-index: 2; display: flex; justify-content: flex-end; padding: 12px 16px; pointer-events: none; }
+.sand-media-viewer__close { width: 34px; height: 34px; color: #d9ded4; background: #20231f; border: 1px solid #343832; border-radius: 8px; cursor: pointer; font-size: 22px; line-height: 1; pointer-events: auto; }
+.sand-media-viewer__close:hover, .sand-media-viewer__close:focus-visible, .sand-media-viewer__nav:hover, .sand-media-viewer__nav:focus-visible, .sand-media-viewer__thumb:hover, .sand-media-viewer__thumb:focus-visible { color: #eef3e7; background: #292d26; outline: 1px solid #a9c85d; outline-offset: 1px; }
+.sand-media-viewer__column { display: flex; flex: 1; flex-direction: column; min-width: 0; min-height: 0; }
+.sand-media-viewer__media-cell { position: relative; display: grid; flex: 1; place-items: center; min-height: 0; overflow: hidden; }
+.sand-media-viewer__image { display: block; max-width: 92vw; max-height: calc(100vh - 145px); object-fit: contain; transform-origin: center; user-select: none; }
+.sand-media-viewer__state { color: #c5cbc0; font-size: 13px; }
+.sand-media-viewer__state[role="alert"] { color: #f0a7a7; }
+.sand-media-viewer__nav { position: absolute; top: 50%; z-index: 1; display: grid; place-items: center; width: 38px; height: 38px; color: #d9ded4; background: #20231f; border: 1px solid #343832; border-radius: 50%; cursor: pointer; font-size: 28px; line-height: 1; transform: translateY(-50%); }
+.sand-media-viewer__caption { flex: 0 0 auto; padding: 8px 18px; overflow: hidden; color: #c5cbc0; text-align: center; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; }
+.sand-media-viewer__filmstrip { display: flex; flex: 0 0 auto; max-width: 100%; padding: 8px 18px 14px; overflow-x: auto; justify-content: center; }
+.sand-media-viewer__filmstrip-track { display: flex; gap: 6px; }
+.sand-media-viewer__thumb { display: grid; place-items: center; width: 42px; height: 32px; flex: 0 0 auto; padding: 0; color: #c5cbc0; background: #20231f; border: 1px solid #343832; border-radius: 6px; cursor: pointer; overflow: hidden; }
+.sand-media-viewer__thumb-image, .sand-media-viewer__thumb-video { display: block; width: 100%; height: 100%; object-fit: cover; }
+.sand-media-viewer__thumb-fallback { width: 100%; height: 100%; background: #20231f; }
+.sand-media-viewer__thumb[aria-current="true"] { color: #171914; background: #d8fa78; border-color: #d8fa78; }
+.sand-typing-indicator { display: flex; gap: 4px; width: max-content; padding: 10px 12px; background: #20231f; border-radius: 14px; }
+.sand-typing-indicator span { width: 5px; height: 5px; background: #9ba392; border-radius: 50%; }
+
+.sand-chat-input-dock { display: flex; flex: 0 0 auto; flex-direction: column; position: relative; z-index: 3; width: 100%; min-width: 0; padding: 8px max(24px, calc((100% - 700px) / 2)) 18px; }
+.sand-prompt-form { width: 100%; }
+/*
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#sha256=5a25f934b7d3b7a55483cb5f2a1a05e21209aad0a09c82d07d2add054a6b7856#byteOffset=10377,17213,19235,23344,24913
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#sha256=5a25f934b7d3b7a55483cb5f2a1a05e21209aad0a09c82d07d2add054a6b7856#byteOffset=365349,365644,366247,366340,366775,366876
+ * @evidence recovered/frontend/app/assets/index-lCyB53CO.css#sha256=bc44533bcf9109b5596d57dda428370d9bdc4fba8201cd6ed4cb0d4abd795ddc#byteOffset=12434,19561,21670,25989,27654
+ * @evidence recovered/frontend/app/assets/index-lCyB53CO.css#sha256=bc44533bcf9109b5596d57dda428370d9bdc4fba8201cd6ed4cb0d4abd795ddc#byteOffset=414869,415191,415842,415944,416415,416525
+ * Immutable cursor/Sand tokens above are the light/dark computed-style contract
+ * for the prompt surface; keep this owner palette token-based.
+ */
+.sand-prompt-shell { position: relative; padding: 9px; background: var(--cursor-bg-input-surface); border: 1px solid var(--cursor-stroke-secondary); border-radius: 16px; box-shadow: var(--cursor-box-shadow-sm); }
+/*
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#byteOffset=384243
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#byteOffset=470278
+ * Exact ComposerReplyPill utility behavior; the window chrome has an equivalent
+ * local owner and must not be changed here.
+ */
+.sand-1ge13bo:not(#\#):not(#\#){transition:background-color.12s ease,color.12s ease}
+.sand-7gh5u8:hover:not(#\#):not(#\#):not(#\#){color:var(--cursor-text-primary)}
+.sand-chat-drop-overlay { display: grid; place-items: center; position: absolute; inset: 0; z-index: 2; border: 2px dashed var(--sand-border-accent); border-radius: 16px; background: var(--cursor-bg-input-surface); }
+.sand-chat-drop-overlay__badge { padding: 8px 12px; color: var(--sand-text-on-color); background: var(--sand-fill-primary); border-radius: 999px; font-size: 11px; font-weight: 600; }
+.sand-prompt-attachment-notice { margin: 2px 6px 8px; color: var(--cursor-text-tertiary); font-size: 10px; }
+.sand-prompt-field { display: block; box-sizing: border-box; width: 100%; min-height: 48px; resize: none; color: var(--cursor-text-primary); background: transparent; border: 0; outline: none; line-height: 1.4; }
+.sand-prompt-field::placeholder { color: var(--cursor-input-placeholder-foreground); }
+.sand-prompt-attachments { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 7px; }
+.sand-prompt-attachment { display: flex; align-items: center; gap: 8px; max-width: 210px; padding: 6px 7px 6px 9px; background: var(--cursor-bg-tertiary); border: 1px solid var(--cursor-stroke-secondary); border-radius: 8px; }
+.sand-prompt-attachment > span { display: grid; min-width: 0; }
+.sand-prompt-attachment strong { overflow: hidden; text-overflow: ellipsis; font-size: 10px; white-space: nowrap; }
+.sand-prompt-attachment small { color: var(--cursor-text-tertiary); font-size: 9px; }
+.sand-prompt-actions-row { display: flex; align-items: center; justify-content: space-between; }
+.sand-prompt-actions-row > .sand-kit-icon-button.sand-prompt-attach { width: 30px; height: 30px; color: var(--cursor-icon-secondary); background: var(--sand-fill-secondary); border-radius: 50%; }
+.sand-prompt-actions-row > .sand-prompt-mic,
+.sand-prompt-actions-row > .sand-prompt-send { display: grid; place-items: center; width: 30px; height: 30px; padding: 0; color: var(--cursor-icon-secondary); background: var(--sand-fill-secondary); border: 0; border-radius: 50%; cursor: pointer; }
+.sand-prompt-actions-row > .sand-prompt-send { color: var(--sand-text-on-color); background: var(--sand-fill-primary); }
+.sand-prompt-actions-row > .sand-prompt-mic:focus-visible,
+.sand-prompt-actions-row > .sand-prompt-send:focus-visible { outline: 1px solid var(--sand-border-accent); outline-offset: 1px; }
+.sand-prompt-actions-row button:disabled { cursor: not-allowed; opacity: .4; }
+.sand-prompt-actions-trailing { display: flex; gap: 6px; }
+.sand-prompt-voice-error { margin: 8px 6px 0; color: var(--sand-text-danger); font-size: 10px; }
+.sand-prompt-voice-status { display: block; margin: 2px 6px 8px; color: var(--cursor-text-secondary); font-size: 10px; }
+.sand-prompt-voice-processing { display: inline-flex; align-items: center; min-height: 30px; padding: 0 10px; color: var(--cursor-text-secondary); background: var(--sand-fill-secondary); border-radius: 999px; font-size: 10px; }
+.sand-recording-chip { display: inline-flex !important; align-items: center; gap: 8px; width: auto !important; min-width: 116px; padding: 0 10px !important; color: var(--sand-text-primary) !important; background: var(--sand-fill-secondary) !important; border: 1px solid var(--sand-border-default) !important; border-radius: 999px !important; }
+/* Immutable i6n recording-chip geometry/colors: stop 10px neutral mark, 18x13 spectrum, tokenized light/dark foregrounds. */
+.sand-recording-chip__stop { width: 10px; height: 10px; background: var(--cursor-text-primary); border-radius: var(--cursor-radius-xs); }
+.sand-recording-chip__timer { color: var(--cursor-text-primary); font-variant-numeric: tabular-nums; font-size: var(--cursor-font-size-lg); line-height: var(--cursor-line-height-lg); letter-spacing: var(--cursor-letter-spacing-lg); }
+.sand-recording-chip__waveform { display: inline-flex; width: 18px; height: 13px; color: var(--cursor-text-secondary); }
+.sand-prompt-file-input { display: none; }
+
+@media (max-width: 760px) {
+ .sand-agents-sidebar__header > strong, .sand-agent-item__body, .sand-agent-item__trailing { display: none; }
+ .sand-agents-sidebar__header { justify-content: center; padding: 0; }
+ .sand-agents-sidebar__new-actions button:not(:last-child) { display: none; }
+ .sand-agent-item { grid-template-columns: 1fr; justify-items: center; }
+}
diff --git a/web/src/grok/cursor-icons-16-f_W_ogc-.woff2 b/web/src/grok/cursor-icons-16-f_W_ogc-.woff2
new file mode 100644
index 0000000..c0c9d53
Binary files /dev/null and b/web/src/grok/cursor-icons-16-f_W_ogc-.woff2 differ
diff --git a/web/src/grok/host.css b/web/src/grok/host.css
new file mode 100644
index 0000000..3b4f0de
--- /dev/null
+++ b/web/src/grok/host.css
@@ -0,0 +1,186 @@
+/* Host layout on top of copied grok CSS. Theme tokens come from the runtime installer. */
+html, body, #root { width: 100%; height: 100%; margin: 0; overflow: hidden; }
+html { color-scheme: dark; background: var(--cursor-bg-editor, #141414); }
+
+.sand-shell {
+ display: grid;
+ grid-template-columns: var(--sand-sidebar-width, 280px) minmax(0, 1fr) auto;
+ width: 100%;
+ height: 100dvh;
+ min-height: 0;
+ --sand-sidebar-width: 280px;
+ --sand-info-pane-width: min(52vw, 720px);
+ --sand-chat-min-width: 424px;
+}
+
+.sand-agents-sidebar {
+ grid-column: 1;
+ width: var(--sand-sidebar-width, 280px);
+ max-width: var(--sand-sidebar-width, 280px);
+ height: 100%;
+}
+
+.sand-chat-stage {
+ grid-column: 2;
+ min-width: 0;
+ min-height: 0;
+ height: 100%;
+}
+
+.sand-agent-item[aria-current="true"],
+.sand-agent-item[data-active="true"] {
+ background: var(--cursor-bg-secondary);
+}
+
+.sand-agent-item__avatar,
+.sand-chat-header__avatar {
+ background: var(--sand-fill-accent);
+ color: var(--sand-text-on-color);
+ font-weight: 700;
+}
+
+.sand-transcript-row--user { display: flex; justify-content: flex-end; }
+.sand-transcript-row--user .sand-message {
+ background: var(--sand-fill-bubble-user);
+ color: var(--sand-text-on-color);
+}
+.sand-message { white-space: pre-wrap; }
+
+.sand-info-pane iframe {
+ flex: 1 1 auto;
+ width: 100%;
+ min-height: 0;
+ border: 0;
+ background: #111;
+}
+.sand-info-pane__vnc {
+ display: flex;
+ flex: 1 1 auto;
+ flex-direction: column;
+ min-height: 0;
+}
+.sand-info-pane__status {
+ margin: 0;
+ padding: 8px 12px;
+ color: var(--cursor-text-tertiary);
+ font-size: var(--cursor-font-size-xs);
+}
+.sand-info-pane[hidden] { display: none !important; }
+
+.sand-agents-create {
+ display: flex;
+ gap: 6px;
+ width: calc(100% - 24px);
+ margin: 4px 12px 8px;
+}
+.sand-agents-create input {
+ flex: 1;
+ min-width: 0;
+ min-height: 30px;
+ padding: 6px 8px;
+ color: var(--cursor-text-primary);
+ background: var(--cursor-bg-input-surface);
+ border: 1px solid var(--cursor-stroke-secondary);
+ border-radius: var(--cursor-radius-base);
+ outline: none;
+}
+
+.sand-agents-search-field {
+ display: block;
+ box-sizing: border-box;
+ width: calc(100% - 24px);
+ margin: 0 12px 8px;
+ min-height: 32px;
+ padding: 6px 8px;
+ color: var(--cursor-text-primary);
+ background: var(--cursor-bg-input-surface);
+ border: 1px solid var(--cursor-stroke-secondary);
+ border-radius: var(--cursor-radius-base);
+ outline: none;
+}
+
+@media (max-width: 860px) {
+ .sand-shell { display: block; }
+ .sand-agents-sidebar {
+ position: fixed;
+ z-index: 9;
+ inset: 0 auto 0 0;
+ width: min(86vw, 320px);
+ max-width: min(86vw, 320px);
+ transform: translateX(-105%);
+ transition: transform .22s cubic-bezier(.22, 1, .36, 1);
+ }
+ .sand-agents-sidebar.is-open { transform: none; }
+ .sand-agents-sidebar .sand-agent-item {
+ grid-template-columns: 34px minmax(0, 1fr) auto;
+ justify-content: start;
+ justify-items: stretch;
+ min-height: 58px;
+ padding: 8px;
+ }
+ .sand-agents-sidebar .sand-agent-item__body,
+ .sand-agents-sidebar .sand-agent-item__trailing { display: grid; }
+ .sand-agents-sidebar .sand-agent-item__body { gap: 4px; min-width: 0; }
+ .sand-agents-sidebar__header { justify-content: space-between; padding: 0 12px 0 16px; }
+ .sand-chat-stage { height: 100dvh; }
+ .sand-info-pane,
+ .sand-info-pane .sand-info-pane__inner {
+ position: fixed !important;
+ inset: 0 0 51px 0 !important;
+ width: 100% !important;
+ max-width: none !important;
+ z-index: 15;
+ background: var(--cursor-bg-editor);
+ }
+ .sand-tabbar {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ position: fixed;
+ left: 0; right: 0; bottom: 0;
+ z-index: 16;
+ padding: 6px 8px env(safe-area-inset-bottom, 0px);
+ background: var(--cursor-bg-chrome);
+ border-top: 1px solid var(--cursor-stroke-tertiary);
+ }
+ .sand-tabbar button {
+ min-height: 44px;
+ border: 0;
+ border-radius: 12px;
+ background: transparent;
+ color: var(--cursor-text-tertiary);
+ font-weight: 600;
+ }
+ .sand-tabbar button[aria-current="true"] {
+ color: var(--cursor-text-primary);
+ background: var(--cursor-bg-secondary);
+ }
+ .sand-chat-input-dock { padding-bottom: calc(64px + env(safe-area-inset-bottom, 0px)); }
+ .sand-backdrop {
+ position: fixed; inset: 0; z-index: 8; background: #0008;
+ }
+ .sand-backdrop[hidden] { display: none !important; }
+ .sand-chat-header__menu { display: inline-flex !important; }
+}
+.sand-tabbar { display: none; }
+@media (max-width: 860px) {
+ .sand-tabbar { display: grid; }
+}
+.sand-chat-header__menu {
+ display: none;
+ width: 32px; height: 32px; padding: 0;
+ color: var(--cursor-text-secondary);
+ background: transparent; border: 0; border-radius: 8px;
+}
+.sand-question {
+ margin: 0 max(30px, calc((100% - 690px) / 2)) 8px;
+ padding: 12px;
+ border: 1px solid var(--cursor-stroke-tertiary);
+ border-radius: 14px;
+}
+.sand-question__options { display: flex; flex-wrap: wrap; gap: 8px; }
+.sand-question__options button {
+ min-height: 36px; padding: 6px 12px; border: 0; border-radius: 999px;
+ background: var(--cursor-text-primary); color: var(--cursor-bg-editor); font-weight: 600;
+}
+.sand-activity { margin: 0 0 10px; color: var(--cursor-text-tertiary); font-size: 11px; }
+.sand-chat-header__stop { color: var(--cursor-text-primary); }
diff --git a/web/src/grok/pdf-viewer.css b/web/src/grok/pdf-viewer.css
new file mode 100644
index 0000000..8ef5109
--- /dev/null
+++ b/web/src/grok/pdf-viewer.css
@@ -0,0 +1 @@
+/* pdf viewer not in this slice */
diff --git a/web/src/grok/production.css b/web/src/grok/production.css
new file mode 100644
index 0000000..3d132b9
--- /dev/null
+++ b/web/src/grok/production.css
@@ -0,0 +1,332 @@
+/* @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#L1 */
+/* Exact immutable icon-font dependency used by every recovered data-icon-name and
+ * cursor-icons glyph. The binary is hash-pinned in computer-shell-evidence.json. */
+@font-face {
+ font-family: "cursor-icons";
+ font-display: block;
+ src: url("./cursor-icons-16-f_W_ogc-.woff2") format("woff2");
+}
+
+:root {
+ color-scheme: light dark;
+ font-family: var(--cursor-font-family-sans);
+ font-synthesis: none;
+ background: var(--cursor-bg-editor);
+}
+
+* { box-sizing: border-box; }
+html, body, #root { width: 100%; height: 100%; margin: 0; overflow: hidden; }
+button, textarea, input { font: inherit; }
+/* @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=5563488 (root shell consumer) */
+.sand-shell {
+ color: var(--cursor-text-primary);
+ background: var(--cursor-bg-editor);
+ font-family: var(--cursor-font-family-sans);
+}
+.sand-shell button { cursor: pointer; }
+.sand-shell button:disabled { cursor: not-allowed; }
+/* @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=2983995-2986100 */
+/* The shipped root uses a flex sidebar column and a footer-profile slot. Keep
+ * the recovered shell's native grid host intact while restoring that ownership
+ * boundary for the account trigger/menu. */
+.sand-agents-sidebar {
+ position: relative;
+ z-index: 1;
+ display: flex;
+ flex-direction: column;
+ gap: 0;
+ min-width: 0;
+ min-height: 0;
+ width: 100%;
+ padding: 0;
+ background: var(--cursor-bg-chrome);
+ border-right: .5px solid var(--sand-border-weak);
+ container-name: sand-sidebar;
+ container-type: inline-size;
+}
+.sand-agents-sidebar__plugins {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 10px;
+ width: 100%;
+ min-height: 38px;
+ padding: 0 12px;
+ color: var(--cursor-text-primary);
+ text-align: left;
+ background: transparent;
+ border: 0;
+}
+
+.sand-agents-sidebar__plugins:hover { background: var(--cursor-bg-secondary); }
+.sand-agents-sidebar__plugins-entry { padding: 4px 8px; }
+.sand-agents-sidebar__plugins { justify-content: flex-start; border-radius: var(--cursor-radius-lg); }
+
+/* @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=2983995-2986100 */
+/* @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#byteOffset=0 (immutable menu surface tokens) */
+.sand-agents-sidebar__account {
+ position: relative;
+ min-width: 0;
+}
+.sand-agents-sidebar__account > button {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ width: 100%;
+ min-height: 40px;
+ padding: 6px 8px;
+ color: var(--cursor-text-primary);
+ text-align: left;
+ background: transparent;
+ border: 0;
+ border-radius: var(--cursor-radius-lg);
+ cursor: pointer;
+}
+.sand-agents-sidebar__account > button:hover,
+.sand-agents-sidebar__account > button[aria-expanded="true"] { background: var(--cursor-bg-secondary); }
+.sand-agents-sidebar__account > button > span:first-child {
+ display: grid;
+ flex: 0 0 auto;
+ width: 30px;
+ height: 30px;
+ place-items: center;
+ overflow: hidden;
+ color: var(--cursor-base);
+ font-size: 13px;
+ font-weight: 700;
+ background: var(--sand-fill-accent);
+ border-radius: var(--cursor-radius-lg);
+}
+.sand-agents-sidebar__account > button > span:first-child img { width: 100%; height: 100%; object-fit: cover; }
+.sand-agents-sidebar__account > button > span:last-child { display: grid; min-width: 0; gap: 2px; }
+.sand-agents-sidebar__account > button > span:last-child strong,
+.sand-agents-sidebar__account > button > span:last-child small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
+.sand-agents-sidebar__account > button > span:last-child strong { font-size: var(--cursor-font-size-base); font-weight: 600; }
+.sand-agents-sidebar__account > button > span:last-child small { color: var(--cursor-text-secondary); font-size: var(--cursor-font-size-xs); }
+/* @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=424809 (LegacyMenu.Content account-menu surface) */
+[aria-label="Account"].ui-menu__content {
+ display: grid;
+ gap: 2px;
+ min-width: 228px;
+ max-width: min(360px, calc(100vw - 16px));
+ padding: 6px;
+ color: var(--cursor-text-primary);
+ font-size: var(--cursor-font-size-base);
+ line-height: var(--cursor-line-height-base);
+ letter-spacing: 0;
+ background: var(--cursor-bg-elevated);
+ border: 1px solid var(--cursor-stroke-secondary);
+ border-radius: var(--cursor-radius-xl);
+ box-shadow: var(--cursor-box-shadow-md);
+}
+[aria-label="Account"].ui-menu__content [role="menuitem"] {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 4px;
+ width: 100%;
+ min-height: 30px;
+ padding: 6px 8px;
+ color: var(--cursor-text-primary);
+ text-align: left;
+ background: transparent;
+ border: 0;
+ border-radius: var(--cursor-radius-base);
+ cursor: pointer;
+}
+[aria-label="Account"].ui-menu__content [role="menuitem"]:hover:not([aria-disabled="true"]),
+[aria-label="Account"].ui-menu__content [role="menuitem"]:focus-visible:not([aria-disabled="true"]) { color: var(--cursor-text-primary); background: var(--cursor-bg-secondary); }
+[aria-label="Account"].ui-menu__content [role="menuitem"][aria-disabled="true"] { color: var(--sand-text-disabled); cursor: default; }
+[aria-label="Account"].ui-menu__content hr { width: calc(100% - 16px); height: 1px; margin: 4px 8px; background: var(--cursor-stroke-secondary); border: 0; }
+.sand-agents-sidebar__account-name,
+.sand-agents-sidebar__account-name-input { min-width: 0; margin: 0 8px 2px; }
+.sand-agents-sidebar__account-name { display: inline-flex; align-items: center; color: var(--cursor-text-secondary); background: transparent; border: 0; cursor: pointer; font-size: var(--cursor-font-size-base); }
+.sand-agents-sidebar__account-name-input { width: calc(100% - 16px); padding: 4px 6px; color: var(--cursor-text-primary); background: var(--cursor-bg-input); border: 1px solid var(--cursor-stroke-secondary); border-radius: var(--cursor-radius-base); outline: none; }
+
+/* @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=2983995 (Rct footer root) */
+.sand-agents-sidebar__footer {
+ display: flex;
+ flex-direction: column;
+ flex-shrink: 0;
+ min-width: 0;
+ padding: 2px 12px 12px;
+}
+
+/* @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=2605212 (a0n search control) */
+.sand-agents-sidebar__search {
+ width: calc(100% - 24px);
+ margin: 4px 12px;
+ justify-content: flex-start;
+ box-shadow: inset 0 0 0 .5px var(--sand-border-weak);
+}
+.sand-agents-sidebar__search > span {
+ display: inline-flex;
+ align-items: center;
+ gap: var(--cursor-spacing-1);
+}
+
+@container sand-sidebar (max-width: 130px) {
+ .sand-agents-sidebar__footer { padding: 0 8px 8px; }
+ .sand-agents-sidebar__search { display: none; }
+}
+
+.sand-chat-header__identity { display: flex; align-items: center; gap: 9px; }
+
+.sand-onboarding {
+ position: fixed;
+ inset: 0;
+ display: grid;
+ grid-template-columns: minmax(0, 1fr);
+ grid-template-rows: minmax(0, 1fr);
+ min-width: 0;
+ min-height: 0;
+ overflow: hidden;
+ color: var(--sand-text-primary);
+ background-color: var(--cursor-bg-editor);
+ font-family: var(--cursor-font-family-sans);
+}
+
+.sand-onboarding__landing {
+ display: grid;
+ justify-items: center;
+ gap: 18px;
+ width: min(520px, 100%);
+ text-align: center;
+ place-self: center;
+}
+.sand-onboarding__landing h1,
+.sand-onboarding__landing p { margin: 0; }
+.sand-onboarding__landing > p { color: var(--cursor-text-secondary); }
+.sand-onboarding__landing button {
+ padding: 9px 18px;
+ color: var(--sand-text-on-color);
+ background: var(--cursor-bg-accent);
+ border: 0;
+ border-radius: 999px;
+}
+.sand-onboarding__landing-wait { display: grid; gap: 10px; }
+.sand-onboarding__landing-wait > span { display: flex; align-items: center; justify-content: center; gap: 8px; }
+.sand-onboarding__landing-wait button { padding: 0; color: var(--cursor-text-accent); background: transparent; }
+
+.sand-about-dialog,
+.sand-feedback-dialog,
+.sand-alert-dialog,
+.sand-deep-link-info {
+ position: relative;
+ overflow: hidden;
+ color: var(--cursor-text-primary);
+ background: var(--cursor-bg-elevated);
+ border: 1px solid var(--cursor-stroke-secondary);
+ border-radius: 12px;
+ box-shadow: var(--cursor-box-shadow-xl);
+}
+.sand-about-dialog { width: 360px; }
+.sand-feedback-dialog { width: min(460px, 100%); }
+.sand-alert-dialog { width: min(380px, 100%); padding: 20px; }
+.sand-deep-link-info { width: min(360px, 100%); }
+.sand-about-dialog > button { position: absolute; top: 8px; right: 10px; color: var(--cursor-text-secondary); background: transparent; border: 0; font-size: 20px; }
+.sand-about-dialog > div { display: grid; justify-items: center; gap: 8px; padding: 42px 24px 28px; text-align: center; }
+.sand-about-dialog > div h2, .sand-about-dialog > div p { margin: 0; }
+.sand-about-dialog > div small { margin-top: 20px; color: var(--cursor-text-tertiary); }
+.sand-about-dialog footer,
+.sand-feedback-dialog footer,
+.sand-alert-dialog footer { display: flex; justify-content: flex-end; gap: 8px; padding: 12px 16px; border-top: 1px solid var(--cursor-stroke-secondary); }
+.sand-about-dialog footer button,
+.sand-feedback-dialog footer button,
+.sand-alert-dialog footer button { padding: 8px 12px; color: var(--cursor-text-primary); background: var(--cursor-bg-secondary); border: 0; border-radius: 7px; }
+.sand-feedback-dialog footer button:last-child,
+.sand-alert-dialog footer button:last-child { color: var(--cursor-text-on-color); background: var(--cursor-bg-accent); }
+.sand-feedback-dialog header { padding: 18px 20px 0; }
+.sand-feedback-dialog header h2 { margin: 0; }
+.sand-feedback-dialog > div { display: grid; gap: 14px; padding: 16px 20px 20px; }
+.sand-feedback-dialog > div p { margin: 0; color: var(--cursor-text-secondary); }
+.sand-feedback-dialog textarea { min-height: 140px; padding: 10px; resize: vertical; color: var(--cursor-text-primary); background: var(--cursor-bg-input); border: 1px solid var(--cursor-stroke-secondary); border-radius: 8px; }
+.sand-feedback-dialog label { display: flex; align-items: center; gap: 8px; font-size: 12px; }
+.sand-alert-dialog h2, .sand-alert-dialog p { margin: 0 0 12px; }
+.sand-alert-dialog p { color: var(--cursor-text-secondary); }
+.sand-alert-dialog footer { margin: 20px -20px -20px; }
+.sand-deep-link-info header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; padding: 18px 20px 0; }
+.sand-deep-link-info header h2, .sand-deep-link-info header p { margin: 0; }
+.sand-deep-link-info header p, .sand-deep-link-info > div p { color: var(--cursor-text-secondary); }
+.sand-deep-link-info header button { color: var(--cursor-text-secondary); background: transparent; border: 0; font-size: 20px; }
+.sand-deep-link-info > div { display: grid; gap: 14px; padding: 16px 20px 20px; }
+.sand-deep-link-info > div > div { display: grid; gap: 5px; }
+.sand-deep-link-info > div p { margin: 0; font-size: 12px; }
+.sand-deep-link-info code { overflow-wrap: anywhere; color: var(--cursor-text-primary); }
+.sand-deep-link-info footer { display: flex; justify-content: flex-end; gap: 8px; padding: 12px 16px; border-top: 1px solid var(--cursor-stroke-secondary); }
+.sand-deep-link-info footer button { padding: 8px 12px; color: var(--cursor-text-on-color); background: var(--cursor-bg-accent); border: 0; border-radius: 7px; }
+
+/* @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#L523 */
+.sand-command-palette {
+ position: fixed;
+ z-index: 3000;
+ top: 50%;
+ left: 50%;
+ display: flex;
+ flex-direction: column;
+ box-sizing: border-box;
+ width: 560px;
+ max-width: 92vw;
+ max-height: calc(100vh - (2 * max(16px, var(--sand-window-controls-block, 0px))));
+ overflow: hidden;
+ color: var(--cursor-text-primary);
+ background-color: var(--cursor-bg-elevated);
+ border: .5px solid var(--cursor-stroke-secondary);
+ border-radius: var(--cursor-radius-2xl);
+ box-shadow: var(--cursor-box-shadow-lg);
+ transform: translate(-50%, -50%);
+}
+.sand-command-palette > input {
+ flex: 1 1 auto;
+ min-width: 0;
+ padding: var(--cursor-spacing-3-5) var(--cursor-spacing-2-5) var(--cursor-spacing-3-5) var(--cursor-spacing-3-5);
+ color: var(--cursor-text-primary);
+ background: transparent;
+ border: 0;
+ border-bottom: .5px solid var(--cursor-stroke-tertiary);
+ outline: none;
+}
+.sand-command-palette > [role="tablist"] {
+ position: relative;
+ z-index: 1;
+ display: flex;
+ gap: var(--cursor-spacing-0-5);
+ padding: var(--cursor-spacing-2) var(--cursor-spacing-2) calc(var(--cursor-spacing-2) + 1px);
+ margin-bottom: -1px;
+ background-color: var(--sand-bg-elevated);
+}
+.sand-command-palette [role="tab"],
+.sand-command-palette [role="option"] {
+ color: inherit;
+ background: transparent;
+ border: 0;
+}
+.sand-command-palette > [role="listbox"] {
+ display: flex;
+ flex-direction: column;
+ row-gap: var(--cursor-spacing-0-5);
+ height: 360px;
+ padding: var(--cursor-spacing-2);
+ overflow: auto;
+}
+.sand-command-palette [role="option"] {
+ display: flex;
+ align-items: center;
+ gap: var(--cursor-spacing-2);
+ height: 49px;
+ padding: var(--cursor-spacing-2);
+ text-align: left;
+}
+.sand-command-palette [role="option"] > small:first-of-type { margin-left: auto; }
+.sand-command-palette [aria-selected="true"] { background: var(--cursor-bg-secondary); }
+
+/*
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#byteOffset=539920
+ * The immutable global focus ring is scoped to these two mounted menu surfaces
+ * so the production root and unrelated recovered controls remain disjoint.
+ */
+.sand-command-palette :is(button, input, [role="tab"], [role="option"]):focus-visible,
+.sand-agents-sidebar__account :is(button, input, [role="menuitem"]):focus-visible {
+ outline: 2px solid var(--cursor-stroke-focused);
+ outline-offset: 1px;
+}
diff --git a/web/src/grok/runtime-theme-token-installer.ts b/web/src/grok/runtime-theme-token-installer.ts
new file mode 100644
index 0000000..c6b47e5
--- /dev/null
+++ b/web/src/grok/runtime-theme-token-installer.ts
@@ -0,0 +1,32 @@
+/** Exact immutable runtime theme-token generator and installer.
+ * Source: index-UbX-y3il.js SHA-256 ef4e9831b65d39633f09c9ad0c083b98b7ebf52e3bb558182aee5bde31f876fa.
+ * Palette 129583-129644; Bzn/_zn 132849-132920; Urn 46941-47033; tables 8230.
+ * CORE_CSS is the exact light/dark output of the shipped Urn closure; bzn and
+ * Ezn remain generators over the complete palette/mapping data below. */
+export type RuntimeThemeMode = "light" | "dark";
+export interface ThemeStyleElement { id: string; textContent: string | null }
+export interface ThemeDocument { documentElement: { dataset: Record; style: { colorScheme: string } }; head: { appendChild(node: ThemeStyleElement): void; removeChild(node: ThemeStyleElement): void }; createElement(tagName: "style"): ThemeStyleElement; getElementById(id: string): ThemeStyleElement | null }
+export interface RuntimeThemeInstallHandle { update(mode: RuntimeThemeMode): void; dispose(): void }
+export const RUNTIME_THEME_STYLE_ID = "sand-cursor-theme" as const;
+export const RUNTIME_THEME_CLASS: Readonly> = { light: "cursor-light", dark: "cursor-dark" };
+export const IMMUTABLE_THEME_SNAPSHOT_HASHES = {"light":"9e56e8bba144ea6ec97ef4ddf1d3dadbdd9d4741fb173f7431210c2c41ddd569","dark":"df27d452a59e967cf6edce997871098f22435e168aa0c7ecb76d22c07fa24881"};
+export const IMMUTABLE_RENDERER_ASSET_SHA256 = "ef4e9831b65d39633f09c9ad0c083b98b7ebf52e3bb558182aee5bde31f876fa" as const;
+export const IMMUTABLE_THEME_PALETTE_COUNT = 130 as const;
+type ModeValue = string | Readonly>;
+interface RuntimePaletteEntry { readonly cssVar: string; readonly light: string; readonly dark: string }
+const RUNTIME_PALETTE: readonly RuntimePaletteEntry[] = [{"cssVar":"--sand-bg-base","light":"#fcfcfc","dark":"#070707"},{"cssVar":"--sand-bg-subtle","light":"#f7f7f7","dark":"#111111"},{"cssVar":"--sand-bg-elevated","light":"#fcfcfc","dark":"#181818"},{"cssVar":"--sand-bg-fade-base","light":"#fcfcfc00","dark":"#07070700"},{"cssVar":"--sand-bg-fade-subtle","light":"#f7f7f700","dark":"#11111100"},{"cssVar":"--sand-bg-scrim","light":"#14141480","dark":"#141414b2"},{"cssVar":"--sand-bg-scrim-heavy","light":"#141414e5","dark":"#141414f2"},{"cssVar":"--sand-text-primary","light":"#141414","dark":"#fcfcfc"},{"cssVar":"--sand-text-secondary","light":"#14141499","dark":"#fcfcfc99"},{"cssVar":"--sand-text-tertiary","light":"#14141466","dark":"#fcfcfc66"},{"cssVar":"--sand-text-disabled","light":"#1414144d","dark":"#fcfcfc4d"},{"cssVar":"--sand-text-on-primary","light":"#fcfcfc","dark":"#141414"},{"cssVar":"--sand-text-on-color","light":"#fcfcfc","dark":"#fcfcfc"},{"cssVar":"--sand-text-neutral","light":"#3d3d3d","dark":"#b7b7b7"},{"cssVar":"--sand-text-neutral-disabled","light":"#77777721","dark":"#77777733"},{"cssVar":"--sand-text-accent","light":"#0c64c1","dark":"#459ffe"},{"cssVar":"--sand-text-accent-disabled","light":"#1084fe2b","dark":"#1084fe52"},{"cssVar":"--sand-text-success","light":"#009957","dark":"#38d591"},{"cssVar":"--sand-text-success-disabled","light":"#00c97221","dark":"#00c97233"},{"cssVar":"--sand-text-warning","light":"#c27400","dark":"#ffaf38"},{"cssVar":"--sand-text-warning-disabled","light":"#ff980021","dark":"#ff980033"},{"cssVar":"--sand-text-danger","light":"#c21d2e","dark":"#ff5667"},{"cssVar":"--sand-text-danger-disabled","light":"#ff263c2b","dark":"#ff263c52"},{"cssVar":"--sand-text-supplementary1","light":"#c24e00","dark":"#ff8838"},{"cssVar":"--sand-text-supplementary1-disabled","light":"#ff670021","dark":"#ff670033"},{"cssVar":"--sand-text-supplementary2","light":"#734f2e","dark":"#ae8968"},{"cssVar":"--sand-text-supplementary2-disabled","light":"#97683d21","dark":"#97683d33"},{"cssVar":"--sand-text-supplementary3","light":"#008f7e","dark":"#38cbba"},{"cssVar":"--sand-text-supplementary3-disabled","light":"#00bca621","dark":"#00bca633"},{"cssVar":"--sand-text-supplementary4","light":"#6e44c1","dark":"#a97efe"},{"cssVar":"--sand-text-supplementary4-disabled","light":"#9159fe21","dark":"#9159fe33"},{"cssVar":"--sand-text-supplementary5","light":"#c22476","dark":"#ff5eb1"},{"cssVar":"--sand-text-supplementary5-disabled","light":"#ff309b21","dark":"#ff309b33"},{"cssVar":"--sand-text-shimmer-base","light":"#14141466","dark":"#fcfcfc66"},{"cssVar":"--sand-text-shimmer-highlight","light":"#141414","dark":"#fcfcfc"},{"cssVar":"--sand-border-subtle","light":"#1414140d","dark":"#fcfcfc0d"},{"cssVar":"--sand-border-weak","light":"#1414141a","dark":"#fcfcfc1a"},{"cssVar":"--sand-border-default","light":"#14141426","dark":"#fcfcfc26"},{"cssVar":"--sand-border-strong","light":"#1414144d","dark":"#fcfcfc4d"},{"cssVar":"--sand-border-focus","light":"#14141466","dark":"#fcfcfc66"},{"cssVar":"--sand-border-accent","light":"#459ffe","dark":"#0c64c1"},{"cssVar":"--sand-border-accent-subtle","light":"#1084fe2b","dark":"#1084fe52"},{"cssVar":"--sand-border-success","light":"#38d591","dark":"#009957"},{"cssVar":"--sand-border-success-subtle","light":"#00c9722b","dark":"#00c97252"},{"cssVar":"--sand-border-warning","light":"#ffaf38","dark":"#c27400"},{"cssVar":"--sand-border-warning-subtle","light":"#ff98002b","dark":"#ff980052"},{"cssVar":"--sand-border-danger","light":"#ff5667","dark":"#c21d2e"},{"cssVar":"--sand-border-danger-subtle","light":"#ff263c2b","dark":"#ff263c52"},{"cssVar":"--sand-border-supplementary5-subtle","light":"#ff309b2b","dark":"#ff309b52"},{"cssVar":"--sand-border-cutout-on-base","light":"#fcfcfc","dark":"#141414"},{"cssVar":"--sand-border-cutout-on-subtle","light":"#f7f7f7","dark":"#111111"},{"cssVar":"--sand-border-cutout-on-elevated","light":"#fcfcfc","dark":"#181818"},{"cssVar":"--sand-fill-primary","light":"#070707","dark":"#fafafa"},{"cssVar":"--sand-fill-primary-hover","light":"#2f2f2f","dark":"#d5d5d5"},{"cssVar":"--sand-fill-primary-disabled","light":"#14141426","dark":"#fcfcfc26"},{"cssVar":"--sand-fill-secondary","light":"#77777717","dark":"#7777772c"},{"cssVar":"--sand-fill-secondary-hover","light":"#7777772b","dark":"#77777752"},{"cssVar":"--sand-fill-secondary-disabled","light":"#77777710","dark":"#77777724"},{"cssVar":"--sand-fill-secondary-solid","light":"#f3f3f3","dark":"#151515"},{"cssVar":"--sand-fill-secondary-solid-hover","light":"#eeeeee","dark":"#181818"},{"cssVar":"--sand-fill-ghost-hover","light":"#77777717","dark":"#7777772c"},{"cssVar":"--sand-fill-ghost-selected","light":"#7777772b","dark":"#77777752"},{"cssVar":"--sand-fill-elevated","light":"#fcfcfc","dark":"#2f2f2f"},{"cssVar":"--sand-fill-elevated-hover","light":"#77777717","dark":"#77777733"},{"cssVar":"--sand-fill-bubble-agent","light":"#eeeeee","dark":"#262626"},{"cssVar":"--sand-fill-bubble-user","light":"#070707","dark":"#5a5a5a"},{"cssVar":"--sand-fill-bubble-user-disabled","light":"#14141426","dark":"#fcfcfc26"},{"cssVar":"--sand-fill-control-checked","light":"#070707","dark":"#5a5a5a"},{"cssVar":"--sand-fill-control-checked-hover","light":"#2f2f2f","dark":"#777777"},{"cssVar":"--sand-fill-control-checked-disabled","light":"#14141426","dark":"#fcfcfc26"},{"cssVar":"--sand-fill-control-track","light":"#1414141a","dark":"#fcfcfc1a"},{"cssVar":"--sand-fill-control-track-disabled","light":"#77777710","dark":"#77777724"},{"cssVar":"--sand-fill-neutral","light":"#777777","dark":"#777777"},{"cssVar":"--sand-fill-neutral-hover","light":"#5a5a5a","dark":"#959595"},{"cssVar":"--sand-fill-neutral-disabled","light":"#7777772b","dark":"#77777752"},{"cssVar":"--sand-fill-neutral-subtle","light":"#77777717","dark":"#7777772c"},{"cssVar":"--sand-fill-accent","light":"#1084fe","dark":"#1084fe"},{"cssVar":"--sand-fill-accent-hover","light":"#0c64c1","dark":"#459ffe"},{"cssVar":"--sand-fill-accent-disabled","light":"#1084fe2b","dark":"#1084fe52"},{"cssVar":"--sand-fill-accent-subtle","light":"#1084fe17","dark":"#1084fe2c"},{"cssVar":"--sand-fill-accent-subtle-hover","light":"#1084fe2b","dark":"#1084fe52"},{"cssVar":"--sand-fill-accent-subtle-disabled","light":"#1084fe10","dark":"#1084fe24"},{"cssVar":"--sand-fill-success","light":"#00c972","dark":"#00c972"},{"cssVar":"--sand-fill-success-hover","light":"#009957","dark":"#38d591"},{"cssVar":"--sand-fill-success-disabled","light":"#00c9722b","dark":"#00c97252"},{"cssVar":"--sand-fill-success-subtle","light":"#00c97217","dark":"#00c9722c"},{"cssVar":"--sand-fill-success-subtle-hover","light":"#00c9722b","dark":"#00c97252"},{"cssVar":"--sand-fill-success-subtle-disabled","light":"#00c97210","dark":"#00c97224"},{"cssVar":"--sand-fill-warning","light":"#ff9800","dark":"#ff9800"},{"cssVar":"--sand-fill-warning-hover","light":"#c27400","dark":"#ffaf38"},{"cssVar":"--sand-fill-warning-disabled","light":"#ff98002b","dark":"#ff980052"},{"cssVar":"--sand-fill-warning-subtle","light":"#ff980017","dark":"#ff98002c"},{"cssVar":"--sand-fill-warning-subtle-hover","light":"#ff98002b","dark":"#ff980052"},{"cssVar":"--sand-fill-warning-subtle-disabled","light":"#ff980010","dark":"#ff980024"},{"cssVar":"--sand-fill-danger","light":"#ff263c","dark":"#ff263c"},{"cssVar":"--sand-fill-danger-hover","light":"#c21d2e","dark":"#ff5667"},{"cssVar":"--sand-fill-danger-disabled","light":"#ff263c2b","dark":"#ff263c52"},{"cssVar":"--sand-fill-danger-subtle","light":"#ff263c17","dark":"#ff263c2c"},{"cssVar":"--sand-fill-danger-subtle-hover","light":"#ff263c2b","dark":"#ff263c52"},{"cssVar":"--sand-fill-danger-subtle-disabled","light":"#ff263c10","dark":"#ff263c24"},{"cssVar":"--sand-fill-supplementary1","light":"#ff6700","dark":"#ff6700"},{"cssVar":"--sand-fill-supplementary1-hover","light":"#c24e00","dark":"#ff8838"},{"cssVar":"--sand-fill-supplementary1-disabled","light":"#ff67002b","dark":"#ff670052"},{"cssVar":"--sand-fill-supplementary1-subtle","light":"#ff670017","dark":"#ff67002c"},{"cssVar":"--sand-fill-supplementary2","light":"#97683d","dark":"#97683d"},{"cssVar":"--sand-fill-supplementary2-hover","light":"#734f2e","dark":"#ae8968"},{"cssVar":"--sand-fill-supplementary2-disabled","light":"#97683d2b","dark":"#97683d52"},{"cssVar":"--sand-fill-supplementary2-subtle","light":"#97683d17","dark":"#97683d2c"},{"cssVar":"--sand-fill-supplementary3","light":"#00bca6","dark":"#00bca6"},{"cssVar":"--sand-fill-supplementary3-hover","light":"#008f7e","dark":"#38cbba"},{"cssVar":"--sand-fill-supplementary3-disabled","light":"#00bca62b","dark":"#00bca652"},{"cssVar":"--sand-fill-supplementary3-subtle","light":"#00bca617","dark":"#00bca62c"},{"cssVar":"--sand-fill-supplementary4","light":"#9159fe","dark":"#9159fe"},{"cssVar":"--sand-fill-supplementary4-hover","light":"#6e44c1","dark":"#a97efe"},{"cssVar":"--sand-fill-supplementary4-disabled","light":"#9159fe2b","dark":"#9159fe52"},{"cssVar":"--sand-fill-supplementary4-subtle","light":"#9159fe17","dark":"#9159fe2c"},{"cssVar":"--sand-fill-supplementary5","light":"#ff309b","dark":"#ff309b"},{"cssVar":"--sand-fill-supplementary5-hover","light":"#c22476","dark":"#ff5eb1"},{"cssVar":"--sand-fill-supplementary5-disabled","light":"#ff309b2b","dark":"#ff309b52"},{"cssVar":"--sand-fill-supplementary5-subtle","light":"#ff309b17","dark":"#ff309b2c"},{"cssVar":"--sand-shadow-control","light":"#0000001f","dark":"#00000000"},{"cssVar":"--sand-shadow-inline-ambient","light":"#00000014","dark":"#00000000"},{"cssVar":"--sand-shadow-inline-key","light":"#0000000f","dark":"#00000000"},{"cssVar":"--sand-shadow-popover-ambient","light":"#0000001a","dark":"#00000000"},{"cssVar":"--sand-shadow-popover-key","light":"#0000001a","dark":"#00000000"},{"cssVar":"--sand-shadow-modal-ambient","light":"#0000001a","dark":"#00000000"},{"cssVar":"--sand-shadow-modal-key","light":"#0000001a","dark":"#00000000"},{"cssVar":"--sand-shadow-window-ambient","light":"#0000008f","dark":"#00000000"},{"cssVar":"--sand-shadow-window-edge","light":"#0000001a","dark":"#00000000"},{"cssVar":"--sand-shadow-ring","light":"#e4e4e40a","dark":"#e4e4e400"}];
+const SAND_DATA: Readonly>>> = {"light":{"--sand-data-gray-1":"#b7b7b7","--sand-data-gray-2":"#959595","--sand-data-gray-3":"#777777","--sand-data-gray-4":"#5a5a5a","--sand-data-gray-5":"#3d3d3d","--sand-data-blue-1":"#80befe","--sand-data-blue-2":"#459ffe","--sand-data-blue-3":"#1084fe","--sand-data-blue-4":"#0c64c1","--sand-data-blue-5":"#084382","--sand-data-red-1":"#ff8c98","--sand-data-red-2":"#ff5667","--sand-data-red-3":"#ff263c","--sand-data-red-4":"#c21d2e","--sand-data-red-5":"#82131f","--sand-data-orange-1":"#ffae78","--sand-data-orange-2":"#ff8838","--sand-data-orange-3":"#ff6700","--sand-data-orange-4":"#c24e00","--sand-data-orange-5":"#823500","--sand-data-yellow-1":"#ffc878","--sand-data-yellow-2":"#ffaf38","--sand-data-yellow-3":"#ff9800","--sand-data-yellow-4":"#c27400","--sand-data-yellow-5":"#824e00","--sand-data-green-1":"#78e2b4","--sand-data-green-2":"#38d591","--sand-data-green-3":"#00c972","--sand-data-green-4":"#009957","--sand-data-green-5":"#00673a","--sand-data-cyan-1":"#78dbd0","--sand-data-cyan-2":"#38cbba","--sand-data-cyan-3":"#00bca6","--sand-data-cyan-4":"#008f7e","--sand-data-cyan-5":"#006055","--sand-data-purple-1":"#c5a7fe","--sand-data-purple-2":"#a97efe","--sand-data-purple-3":"#9159fe","--sand-data-purple-4":"#6e44c1","--sand-data-purple-5":"#4a2d82","--sand-data-magenta-1":"#ff91ca","--sand-data-magenta-2":"#ff5eb1","--sand-data-magenta-3":"#ff309b","--sand-data-magenta-4":"#c22476","--sand-data-magenta-5":"#82184f","--sand-data-brown-1":"#c8af98","--sand-data-brown-2":"#ae8968","--sand-data-brown-3":"#97683d","--sand-data-brown-4":"#734f2e","--sand-data-brown-5":"#4d351f","--sand-gradient-bg1-fade":"linear-gradient(to bottom, var(--sand-bg-base), var(--sand-bg-fade-base))","--sand-gradient-bg2-fade":"linear-gradient(to bottom, var(--sand-bg-subtle), var(--sand-bg-fade-subtle))","--sand-gradient-text-shimmer":"linear-gradient(90deg, var(--sand-text-shimmer-base) 0%, var(--sand-text-shimmer-base) 25%, var(--sand-text-shimmer-highlight) 60%, var(--sand-text-shimmer-base) 75%, var(--sand-text-shimmer-base) 100%)","--sand-blur-background":"24px"},"dark":{"--sand-data-gray-1":"#3d3d3d","--sand-data-gray-2":"#5a5a5a","--sand-data-gray-3":"#777777","--sand-data-gray-4":"#959595","--sand-data-gray-5":"#b7b7b7","--sand-data-blue-1":"#084382","--sand-data-blue-2":"#0c64c1","--sand-data-blue-3":"#1084fe","--sand-data-blue-4":"#459ffe","--sand-data-blue-5":"#80befe","--sand-data-red-1":"#82131f","--sand-data-red-2":"#c21d2e","--sand-data-red-3":"#ff263c","--sand-data-red-4":"#ff5667","--sand-data-red-5":"#ff8c98","--sand-data-orange-1":"#823500","--sand-data-orange-2":"#c24e00","--sand-data-orange-3":"#ff6700","--sand-data-orange-4":"#ff8838","--sand-data-orange-5":"#ffae78","--sand-data-yellow-1":"#824e00","--sand-data-yellow-2":"#c27400","--sand-data-yellow-3":"#ff9800","--sand-data-yellow-4":"#ffaf38","--sand-data-yellow-5":"#ffc878","--sand-data-green-1":"#00673a","--sand-data-green-2":"#009957","--sand-data-green-3":"#00c972","--sand-data-green-4":"#38d591","--sand-data-green-5":"#78e2b4","--sand-data-cyan-1":"#006055","--sand-data-cyan-2":"#008f7e","--sand-data-cyan-3":"#00bca6","--sand-data-cyan-4":"#38cbba","--sand-data-cyan-5":"#78dbd0","--sand-data-purple-1":"#4a2d82","--sand-data-purple-2":"#6e44c1","--sand-data-purple-3":"#9159fe","--sand-data-purple-4":"#a97efe","--sand-data-purple-5":"#c5a7fe","--sand-data-magenta-1":"#82184f","--sand-data-magenta-2":"#c22476","--sand-data-magenta-3":"#ff309b","--sand-data-magenta-4":"#ff5eb1","--sand-data-magenta-5":"#ff91ca","--sand-data-brown-1":"#4d351f","--sand-data-brown-2":"#734f2e","--sand-data-brown-3":"#97683d","--sand-data-brown-4":"#ae8968","--sand-data-brown-5":"#c8af98","--sand-gradient-bg1-fade":"linear-gradient(to bottom, var(--sand-bg-base), var(--sand-bg-fade-base))","--sand-gradient-bg2-fade":"linear-gradient(to bottom, var(--sand-bg-subtle), var(--sand-bg-fade-subtle))","--sand-gradient-text-shimmer":"linear-gradient(90deg, var(--sand-text-shimmer-base) 0%, var(--sand-text-shimmer-base) 25%, var(--sand-text-shimmer-highlight) 60%, var(--sand-text-shimmer-base) 75%, var(--sand-text-shimmer-base) 100%)","--sand-blur-background":"24px"}};
+export const IMMUTABLE_SZN_PALETTE_MAPPING: Readonly> = {"--cursor-text-primary":"var(--sand-text-primary)","--cursor-text-secondary":"var(--sand-text-secondary)","--cursor-text-tertiary":"var(--sand-text-tertiary)","--cursor-text-quaternary":{"light":"#1414144d","dark":"#fcfcfc4d"},"--cursor-text-invert":"var(--sand-text-on-color)","--cursor-text-accent":"var(--sand-text-accent)","--cursor-text-link":"var(--sand-text-accent)","--cursor-foreground":"var(--sand-fill-bubble-user)","--cursor-icon-primary":"var(--sand-text-primary)","--cursor-icon-secondary":"var(--sand-text-secondary)","--cursor-icon-tertiary":"var(--sand-text-tertiary)","--cursor-icon-quaternary":{"light":"#1414144d","dark":"#fcfcfc4d"},"--cursor-icon-accent-primary":"var(--sand-text-accent)","--cursor-bg-editor":"var(--sand-bg-base)","--cursor-bg-chrome":"var(--sand-bg-subtle)","--cursor-bg-elevated":"var(--sand-bg-elevated)","--cursor-bg-input":"var(--sand-fill-elevated)","--cursor-bg-card":"var(--sand-fill-secondary)","--cursor-bg-quaternary":"var(--sand-fill-secondary)","--cursor-bg-quinary":"var(--sand-fill-secondary-disabled)","--cursor-bg-tertiary":"var(--sand-fill-ghost-hover)","--cursor-bg-secondary":"var(--sand-fill-ghost-selected)","--cursor-bg-active":"var(--sand-fill-ghost-selected)","--cursor-bg-hover":"var(--sand-fill-ghost-hover)","--cursor-bg-selected":"var(--sand-fill-ghost-selected)","--cursor-bg-focused":"var(--sand-fill-ghost-selected)","--cursor-bg-primary":"var(--sand-fill-ghost-selected)","--cursor-bg-accent":"var(--sand-fill-accent)","--cursor-bg-accent-hover":"var(--sand-fill-accent-hover)","--cursor-bg-accent-secondary":"var(--sand-fill-accent-subtle)","--cursor-bg-accent-tertiary":"var(--sand-fill-accent-subtle)","--cursor-bg-accent-quaternary":"var(--sand-fill-accent-subtle)","--cursor-accent-color":"var(--sand-fill-accent)","--cursor-stroke-primary":{"light":"#14141433","dark":"#fcfcfc33"},"--cursor-stroke-secondary":"var(--sand-border-default)","--cursor-stroke-tertiary":{"light":"#1414141a","dark":"#fcfcfc1a"},"--cursor-stroke-quaternary":{"light":"#1414140d","dark":"#fcfcfc0d"},"--cursor-stroke-focused":"var(--sand-border-focus)","--cursor-stroke-accent":"var(--sand-fill-accent)","--cursor-stroke-red":"var(--sand-fill-danger)","--cursor-stroke-cyan-primary":{"light":"#008f7e","dark":"#38cbba"},"--cursor-border-color":"var(--sand-border-default)","--cursor-text-git-added-primary":"var(--sand-text-success)","--cursor-text-git-removed-primary":"var(--sand-text-danger)","--cursor-box-shadow-sm":"0 1px 3px 0 var(--sand-shadow-control)","--cursor-box-shadow-md":"0 10px 20px -3px var(--sand-shadow-popover-ambient), 0 4px 6px -4px var(--sand-shadow-popover-key), 0 0 0 1px var(--sand-shadow-ring)","--cursor-box-shadow-lg":"0 22px 70px 4px var(--sand-shadow-window-ambient), 0 0 0 0.5px var(--sand-shadow-window-edge)","--cursor-shadow-md":"0 10px 20px -3px var(--sand-shadow-popover-ambient), 0 4px 6px -4px var(--sand-shadow-popover-key), 0 0 0 1px var(--sand-shadow-ring)","--cursor-shadow-primary":"#1414144d","--sand-agent-selected-fill":"var(--sand-fill-ghost-selected)","--sand-floating-control-surface":"var(--sand-fill-elevated)","--ui-tooltip-border-width":"0.5px","--ui-tooltip-border-radius":"6px","--ui-tooltip-box-shadow":"0 4px 12px -1px var(--sand-shadow-inline-ambient), 0 2px 4px -2px var(--sand-shadow-inline-key), 0 0 0 1px var(--sand-shadow-ring)","--ui-tooltip-font-size":"12px","--ui-tooltip-line-height":"16px","--ui-tooltip-letter-spacing":"0","--ui-tooltip-padding-y":"4px","--ui-tooltip-padding-x":"6px"};
+const NZN_TOKENS: Readonly> = {"--cursor-text-red-primary":{"light":"#c21d2e","dark":"#ff5667"},"--cursor-icon-red-primary":{"light":"#c21d2e","dark":"#ff5667"},"--cursor-bg-red-primary":{"light":"#ff263c","dark":"#ff263c"},"--cursor-bg-red-secondary":{"light":"#ff263c17","dark":"#ff263c2c"},"--cursor-text-orange-primary":{"light":"#c24e00","dark":"#ff8838"},"--cursor-icon-orange-primary":{"light":"#c24e00","dark":"#ff8838"},"--cursor-bg-orange-primary":{"light":"#ff6700","dark":"#ff6700"},"--cursor-bg-orange-secondary":{"light":"#ff670017","dark":"#ff67002c"},"--cursor-text-yellow-primary":{"light":"#c27400","dark":"#ffaf38"},"--cursor-icon-yellow-primary":{"light":"#c27400","dark":"#ffaf38"},"--cursor-bg-yellow-primary":{"light":"#ff9800","dark":"#ff9800"},"--cursor-bg-yellow-secondary":{"light":"#ff980017","dark":"#ff98002c"},"--cursor-text-green-primary":{"light":"#009957","dark":"#38d591"},"--cursor-icon-green-primary":{"light":"#009957","dark":"#38d591"},"--cursor-bg-green-primary":{"light":"#00c972","dark":"#00c972"},"--cursor-bg-green-secondary":{"light":"#00c97217","dark":"#00c9722c"},"--cursor-text-cyan-primary":{"light":"#008f7e","dark":"#38cbba"},"--cursor-icon-cyan-primary":{"light":"#008f7e","dark":"#38cbba"},"--cursor-bg-cyan-primary":{"light":"#00bca6","dark":"#00bca6"},"--cursor-bg-cyan-secondary":{"light":"#00bca617","dark":"#00bca62c"},"--cursor-text-blue-primary":{"light":"#0c64c1","dark":"#459ffe"},"--cursor-icon-blue-primary":{"light":"#0c64c1","dark":"#459ffe"},"--cursor-bg-blue-primary":{"light":"#1084fe","dark":"#1084fe"},"--cursor-bg-blue-secondary":{"light":"#1084fe17","dark":"#1084fe2c"},"--cursor-text-magenta-primary":{"light":"#c22476","dark":"#ff5eb1"},"--cursor-icon-magenta-primary":{"light":"#c22476","dark":"#ff5eb1"},"--cursor-bg-magenta-primary":{"light":"#ff309b","dark":"#ff309b"},"--cursor-bg-magenta-secondary":{"light":"#ff309b17","dark":"#ff309b2c"},"--cursor-text-purple-primary":{"light":"#6e44c1","dark":"#a97efe"},"--cursor-icon-purple-primary":{"light":"#6e44c1","dark":"#a97efe"},"--cursor-bg-purple-primary":{"light":"#9159fe","dark":"#9159fe"},"--cursor-bg-purple-secondary":{"light":"#9159fe17","dark":"#9159fe2c"}};
+function rootBlock(d: readonly string[]): string { return ':root {\n' + d.join('\n') + '\n}'; }
+export function bzn(mode: RuntimeThemeMode): string { const d=RUNTIME_PALETTE.map(e=>" "+e.cssVar+": "+e[mode]+";"); for(const [n,v] of Object.entries(SAND_DATA[mode])) if(!n.startsWith("--sand-gradient-")&&n!=="--sand-blur-background") d.push(" "+n+": "+v+";"); d.push(" --sand-gradient-bg1-fade: linear-gradient(to bottom, var(--sand-bg-base), var(--sand-bg-fade-base));"," --sand-gradient-bg2-fade: linear-gradient(to bottom, var(--sand-bg-subtle), var(--sand-bg-fade-subtle));"," --sand-gradient-text-shimmer: linear-gradient(90deg, var(--sand-text-shimmer-base) 0%, var(--sand-text-shimmer-base) 25%, var(--sand-text-shimmer-highlight) 60%, var(--sand-text-shimmer-base) 75%, var(--sand-text-shimmer-base) 100%);"," --sand-blur-background: 24px;"); return rootBlock(d); }
+function resolveModeValue(v: ModeValue,m: RuntimeThemeMode): string { return typeof v === "string" ? v : v[m]; }
+export function Ezn(mode: RuntimeThemeMode): string { const d:string[]=[]; for(const [n,v] of Object.entries({...NZN_TOKENS,...IMMUTABLE_SZN_PALETTE_MAPPING})) d.push(" "+n+": "+resolveModeValue(v,mode)+";"); return rootBlock(d); }
+const CORE_CSS: Readonly> = {"light":":root {\n --cursor-accent: #1084fe;\n --cursor-action-label: #fcfcfc;\n --cursor-added: #00c972;\n --cursor-base: #141414;\n --cursor-blue: #1084fe;\n --cursor-brand: #f54e00;\n --cursor-chrome: #f7f7f7;\n --cursor-cyan: #00bca6;\n --cursor-danger: #c21d2e;\n --cursor-diff-added-line-background: #00c97217;\n --cursor-diff-added-text-background: #00c97210;\n --cursor-diff-removed-line-background: #ff263c17;\n --cursor-diff-removed-text-background: #ff263c10;\n --cursor-editor: #fcfcfc;\n --cursor-focus: #459ffe;\n --cursor-green: #00c972;\n --cursor-magenta: #ff309b;\n --cursor-modified: #ff9800;\n --cursor-orange: #ff6700;\n --cursor-purple: #9159fe;\n --cursor-red: #ff263c;\n --cursor-removed: #c21d2e;\n --cursor-sidebar: #f7f7f7;\n --cursor-success: #00c972;\n --cursor-terminal-ansi-black: #141414;\n --cursor-terminal-ansi-blue: #0c64c1;\n --cursor-terminal-ansi-bright-black: #141414bd;\n --cursor-terminal-ansi-bright-blue: #1084fe;\n --cursor-terminal-ansi-bright-cyan: #00bca6;\n --cursor-terminal-ansi-bright-green: #00c972;\n --cursor-terminal-ansi-bright-magenta: #ff309b;\n --cursor-terminal-ansi-bright-red: #ff263c;\n --cursor-terminal-ansi-bright-white: #ffffff;\n --cursor-terminal-ansi-bright-yellow: #ff9800;\n --cursor-terminal-ansi-cyan: #008f7e;\n --cursor-terminal-ansi-green: #009957;\n --cursor-terminal-ansi-magenta: #c22476;\n --cursor-terminal-ansi-red: #c21d2e;\n --cursor-terminal-ansi-white: #fcfcfc;\n --cursor-terminal-ansi-yellow: #c27400;\n --cursor-untracked: #008f7e;\n --cursor-warn: #ff9800;\n --cursor-yellow: #ff9800;\n}\n:root {\n\t--cursor-foreground: var(--cursor-base);\n\t--cursor-text-primary: var(--cursor-base);\n\t--cursor-text-secondary: color-mix(in srgb, var(--cursor-base) 74%, transparent);\n\t--cursor-text-tertiary: color-mix(in srgb, var(--cursor-base) 60%, transparent);\n\t--cursor-text-quaternary: color-mix(in srgb, var(--cursor-base) 36%, transparent);\n\t--cursor-text-invert: var(--cursor-editor);\n\t--cursor-text-active: var(--cursor-text-primary);\n\t--cursor-text-focused: var(--cursor-text-primary);\n\t--cursor-text-git-added-primary: var(--cursor-added);\n\t--cursor-text-git-added-secondary: color-mix(in srgb, var(--cursor-added) 78%, transparent);\n\t--cursor-text-git-added-tertiary: color-mix(in srgb, var(--cursor-added) 64%, transparent);\n\t--cursor-text-git-added-quaternary: color-mix(in srgb, var(--cursor-added) 40%, transparent);\n\t--cursor-text-git-modified-primary: var(--cursor-modified);\n\t--cursor-text-git-modified-secondary: color-mix(in srgb, var(--cursor-modified) 78%, transparent);\n\t--cursor-text-git-modified-tertiary: color-mix(in srgb, var(--cursor-modified) 64%, transparent);\n\t--cursor-text-git-modified-quaternary: color-mix(in srgb, var(--cursor-modified) 40%, transparent);\n\t--cursor-text-git-removed-primary: var(--cursor-removed);\n\t--cursor-text-git-removed-secondary: color-mix(in srgb, var(--cursor-removed) 78%, transparent);\n\t--cursor-text-git-removed-tertiary: color-mix(in srgb, var(--cursor-removed) 64%, transparent);\n\t--cursor-text-git-removed-quaternary: color-mix(in srgb, var(--cursor-removed) 40%, transparent);\n\t--cursor-text-git-untracked-primary: var(--cursor-untracked);\n\t--cursor-text-git-untracked-secondary: color-mix(in srgb, var(--cursor-untracked) 78%, transparent);\n\t--cursor-text-git-untracked-tertiary: color-mix(in srgb, var(--cursor-untracked) 64%, transparent);\n\t--cursor-text-git-untracked-quaternary: color-mix(in srgb, var(--cursor-untracked) 40%, transparent);\n\t--cursor-text-red-primary: var(--cursor-red);\n\t--cursor-text-red-secondary: color-mix(in srgb, var(--cursor-red) 78%, transparent);\n\t--cursor-text-yellow-primary: var(--cursor-yellow);\n\t--cursor-text-yellow-secondary: color-mix(in srgb, var(--cursor-yellow) 78%, transparent);\n\t--cursor-text-green-primary: var(--cursor-green);\n\t--cursor-text-green-secondary: color-mix(in srgb, var(--cursor-green) 78%, transparent);\n\t--cursor-text-magenta-primary: var(--cursor-magenta);\n\t--cursor-text-magenta-secondary: color-mix(in srgb, var(--cursor-magenta) 78%, transparent);\n\t--cursor-text-purple-primary: var(--cursor-purple);\n\t--cursor-text-purple-secondary: color-mix(in srgb, var(--cursor-purple) 78%, transparent);\n\t--cursor-text-cyan-primary: var(--cursor-cyan);\n\t--cursor-text-cyan-secondary: color-mix(in srgb, var(--cursor-cyan) 78%, transparent);\n\t--cursor-text-blue-primary: var(--cursor-blue);\n\t--cursor-text-blue-secondary: color-mix(in srgb, var(--cursor-blue) 78%, transparent);\n\t--cursor-text-orange-primary: var(--cursor-orange);\n\t--cursor-text-orange-secondary: color-mix(in srgb, var(--cursor-orange) 78%, transparent);\n\t--cursor-text-accent: var(--cursor-accent);\n\t--cursor-text-link: var(--cursor-text-blue-primary);\n\t--cursor-icon-primary: var(--cursor-base);\n\t--cursor-icon-secondary: color-mix(in srgb, var(--cursor-base) 66%, transparent);\n\t--cursor-icon-tertiary: color-mix(in srgb, var(--cursor-base) 52%, transparent);\n\t--cursor-icon-quaternary: color-mix(in srgb, var(--cursor-base) 28%, transparent);\n\t--cursor-icon-git-added-primary: var(--cursor-added);\n\t--cursor-icon-git-added-secondary: color-mix(in srgb, var(--cursor-added) 70%, transparent);\n\t--cursor-icon-git-added-tertiary: color-mix(in srgb, var(--cursor-added) 56%, transparent);\n\t--cursor-icon-git-added-quaternary: color-mix(in srgb, var(--cursor-added) 32%, transparent);\n\t--cursor-icon-git-modified-primary: var(--cursor-modified);\n\t--cursor-icon-git-modified-secondary: color-mix(in srgb, var(--cursor-modified) 70%, transparent);\n\t--cursor-icon-git-modified-tertiary: color-mix(in srgb, var(--cursor-modified) 56%, transparent);\n\t--cursor-icon-git-modified-quaternary: color-mix(in srgb, var(--cursor-modified) 32%, transparent);\n\t--cursor-icon-git-removed-primary: var(--cursor-removed);\n\t--cursor-icon-git-removed-secondary: color-mix(in srgb, var(--cursor-removed) 70%, transparent);\n\t--cursor-icon-git-removed-tertiary: color-mix(in srgb, var(--cursor-removed) 56%, transparent);\n\t--cursor-icon-git-removed-quaternary: color-mix(in srgb, var(--cursor-removed) 32%, transparent);\n\t--cursor-icon-git-untracked-primary: var(--cursor-untracked);\n\t--cursor-icon-git-untracked-secondary: color-mix(in srgb, var(--cursor-untracked) 70%, transparent);\n\t--cursor-icon-git-untracked-tertiary: color-mix(in srgb, var(--cursor-untracked) 56%, transparent);\n\t--cursor-icon-git-untracked-quaternary: color-mix(in srgb, var(--cursor-untracked) 32%, transparent);\n\t--cursor-icon-accent-primary: var(--cursor-accent);\n\t--cursor-icon-accent-secondary: color-mix(in srgb, var(--cursor-accent) 70%, transparent);\n\t--cursor-icon-red-primary: var(--cursor-red);\n\t--cursor-icon-red-secondary: color-mix(in srgb, var(--cursor-red) 70%, transparent);\n\t--cursor-icon-yellow-primary: var(--cursor-yellow);\n\t--cursor-icon-yellow-secondary: color-mix(in srgb, var(--cursor-yellow) 70%, transparent);\n\t--cursor-icon-green-primary: var(--cursor-green);\n\t--cursor-icon-green-secondary: color-mix(in srgb, var(--cursor-green) 70%, transparent);\n\t--cursor-icon-magenta-primary: var(--cursor-magenta);\n\t--cursor-icon-magenta-secondary: color-mix(in srgb, var(--cursor-magenta) 70%, transparent);\n\t--cursor-icon-cyan-primary: var(--cursor-cyan);\n\t--cursor-icon-cyan-secondary: color-mix(in srgb, var(--cursor-cyan) 70%, transparent);\n\t--cursor-icon-blue-primary: var(--cursor-blue);\n\t--cursor-icon-blue-secondary: color-mix(in srgb, var(--cursor-blue) 70%, transparent);\n\t--cursor-icon-orange-primary: var(--cursor-orange);\n\t--cursor-icon-orange-secondary: color-mix(in srgb, var(--cursor-orange) 70%, transparent);\n\t--cursor-icon-purple-primary: var(--cursor-purple);\n\t--cursor-icon-purple-secondary: color-mix(in srgb, var(--cursor-purple) 70%, transparent);\n\t--cursor-bg-primary: color-mix(in srgb, var(--cursor-base) 20%, transparent);\n\t--cursor-bg-secondary: color-mix(in srgb, var(--cursor-base) 14%, transparent);\n\t--cursor-bg-tertiary: color-mix(in srgb, var(--cursor-base) 8%, transparent);\n\t--cursor-bg-quaternary: color-mix(in srgb, var(--cursor-base) 6%, transparent);\n\t--cursor-bg-quinary: color-mix(in srgb, var(--cursor-base) 4%, transparent);\n\t--cursor-bg-elevated: var(--cursor-editor);\n\t--cursor-bg-chrome: var(--cursor-chrome);\n\t--cursor-bg-card: var(--cursor-bg-quaternary);\n\t--cursor-bg-input: var(--cursor-editor);\n\t--cursor-bg-input-surface: var(--cursor-bg-quaternary);\n\t--cursor-bg-editor: var(--cursor-editor);\n\t--cursor-bg-sidebar: var(--cursor-sidebar);\n\t--cursor-bg-diff-inserted: var(--cursor-diff-added-line-background);\n\t--cursor-bg-diff-removed: var(--cursor-diff-removed-line-background);\n\t--cursor-bg-git-added-primary: var(--cursor-added);\n\t--cursor-bg-git-added-hover: color-mix(in srgb, var(--cursor-base) 10%, var(--cursor-added));\n\t--cursor-bg-git-added-secondary: color-mix(in srgb, var(--cursor-added) 24%, transparent);\n\t--cursor-bg-git-added-tertiary: color-mix(in srgb, var(--cursor-added) 12%, transparent);\n\t--cursor-bg-git-added-quaternary: color-mix(in srgb, var(--cursor-added) 8%, transparent);\n\t--cursor-bg-git-modified-primary: var(--cursor-modified);\n\t--cursor-bg-git-modified-hover: color-mix(in srgb, var(--cursor-base) 10%, var(--cursor-modified));\n\t--cursor-bg-git-modified-secondary: color-mix(in srgb, var(--cursor-modified) 24%, transparent);\n\t--cursor-bg-git-modified-tertiary: color-mix(in srgb, var(--cursor-modified) 12%, transparent);\n\t--cursor-bg-git-modified-quaternary: color-mix(in srgb, var(--cursor-modified) 8%, transparent);\n\t--cursor-bg-git-removed-primary: var(--cursor-removed);\n\t--cursor-bg-git-removed-hover: color-mix(in srgb, var(--cursor-base) 10%, var(--cursor-removed));\n\t--cursor-bg-git-removed-secondary: color-mix(in srgb, var(--cursor-removed) 24%, transparent);\n\t--cursor-bg-git-removed-tertiary: color-mix(in srgb, var(--cursor-removed) 12%, transparent);\n\t--cursor-bg-git-removed-quaternary: color-mix(in srgb, var(--cursor-removed) 8%, transparent);\n\t--cursor-bg-git-untracked-primary: var(--cursor-untracked);\n\t--cursor-bg-git-untracked-hover: color-mix(in srgb, var(--cursor-base) 10%, var(--cursor-untracked));\n\t--cursor-bg-git-untracked-secondary: color-mix(in srgb, var(--cursor-untracked) 24%, transparent);\n\t--cursor-bg-git-untracked-tertiary: color-mix(in srgb, var(--cursor-untracked) 12%, transparent);\n\t--cursor-bg-git-untracked-quaternary: color-mix(in srgb, var(--cursor-untracked) 8%, transparent);\n\t--cursor-bg-active: color-mix(in srgb, var(--cursor-base) 16%, transparent);\n\t--cursor-bg-focused: color-mix(in srgb, var(--cursor-base) 22%, transparent);\n\t--cursor-bg-red-primary: var(--cursor-red);\n\t--cursor-bg-red-secondary: color-mix(in srgb, var(--cursor-red) 12%, transparent);\n\t--cursor-bg-yellow-primary: var(--cursor-yellow);\n\t--cursor-bg-yellow-secondary: color-mix(in srgb, var(--cursor-yellow) 12%, transparent);\n\t--cursor-bg-green-primary: var(--cursor-green);\n\t--cursor-bg-green-secondary: color-mix(in srgb, var(--cursor-green) 12%, transparent);\n\t--cursor-bg-magenta-primary: var(--cursor-magenta);\n\t--cursor-bg-magenta-secondary: color-mix(in srgb, var(--cursor-magenta) 12%, transparent);\n\t--cursor-bg-cyan-primary: var(--cursor-cyan);\n\t--cursor-bg-cyan-secondary: color-mix(in srgb, var(--cursor-cyan) 12%, transparent);\n\t--cursor-bg-blue-primary: var(--cursor-blue);\n\t--cursor-bg-blue-secondary: color-mix(in srgb, var(--cursor-blue) 12%, transparent);\n\t--cursor-bg-orange-primary: var(--cursor-orange);\n\t--cursor-bg-orange-secondary: color-mix(in srgb, var(--cursor-orange) 12%, transparent);\n\t--cursor-bg-purple-primary: var(--cursor-purple);\n\t--cursor-bg-purple-secondary: color-mix(in srgb, var(--cursor-purple) 12%, transparent);\n\t--cursor-bg-purple-tertiary: color-mix(in srgb, var(--cursor-purple) 8%, transparent);\n\t--cursor-bg-accent: var(--cursor-accent);\n\t--cursor-bg-accent-hover: color-mix(in srgb, var(--cursor-base) 10%, var(--cursor-accent));\n\t--cursor-bg-accent-secondary: color-mix(in srgb, var(--cursor-accent) 24%, transparent);\n\t--cursor-bg-accent-tertiary: color-mix(in srgb, var(--cursor-accent) 12%, transparent);\n\t--cursor-bg-accent-quaternary: color-mix(in srgb, var(--cursor-accent) 8%, transparent);\n\t--cursor-stroke-primary: color-mix(in srgb, var(--cursor-base) 20%, transparent);\n\t--cursor-stroke-secondary: color-mix(in srgb, var(--cursor-base) 12%, transparent);\n\t--cursor-stroke-tertiary: color-mix(in srgb, var(--cursor-base) 8%, transparent);\n\t--cursor-stroke-tertiary-opaque: color-mix(in srgb, var(--cursor-base) 8%, var(--cursor-chrome));\n\t--cursor-stroke-quaternary: color-mix(in srgb, var(--cursor-base) 4%, transparent);\n\t--cursor-stroke-focused: color-mix(in srgb, var(--cursor-focus) 15%, transparent);\n\t--cursor-stroke-high-contrast: color-mix(in srgb, var(--cursor-base) 0%, transparent);\n\t--cursor-stroke-git-added: color-mix(in srgb, var(--cursor-added) 56%, transparent);\n\t--cursor-stroke-git-modified: color-mix(in srgb, var(--cursor-modified) 56%, transparent);\n\t--cursor-stroke-git-removed: color-mix(in srgb, var(--cursor-removed) 56%, transparent);\n\t--cursor-stroke-git-untracked: color-mix(in srgb, var(--cursor-untracked) 56%, transparent);\n\t--cursor-stroke-red-primary: color-mix(in srgb, var(--cursor-red) 56%, transparent);\n\t--cursor-stroke-red-secondary: color-mix(in srgb, var(--cursor-red) 32%, transparent);\n\t--cursor-stroke-yellow-primary: color-mix(in srgb, var(--cursor-yellow) 56%, transparent);\n\t--cursor-stroke-yellow-secondary: color-mix(in srgb, var(--cursor-yellow) 32%, transparent);\n\t--cursor-stroke-green-primary: color-mix(in srgb, var(--cursor-green) 56%, transparent);\n\t--cursor-stroke-green-secondary: color-mix(in srgb, var(--cursor-green) 32%, transparent);\n\t--cursor-stroke-magenta-primary: color-mix(in srgb, var(--cursor-magenta) 56%, transparent);\n\t--cursor-stroke-magenta-secondary: color-mix(in srgb, var(--cursor-magenta) 32%, transparent);\n\t--cursor-stroke-cyan-primary: color-mix(in srgb, var(--cursor-cyan) 56%, transparent);\n\t--cursor-stroke-cyan-secondary: color-mix(in srgb, var(--cursor-cyan) 32%, transparent);\n\t--cursor-stroke-blue-primary: color-mix(in srgb, var(--cursor-blue) 56%, transparent);\n\t--cursor-stroke-blue-secondary: color-mix(in srgb, var(--cursor-blue) 32%, transparent);\n\t--cursor-stroke-orange-primary: color-mix(in srgb, var(--cursor-orange) 56%, transparent);\n\t--cursor-stroke-orange-secondary: color-mix(in srgb, var(--cursor-orange) 32%, transparent);\n\t--cursor-shadow-primary: color-mix(in srgb, #000000 6%, transparent);\n\t--cursor-shadow-secondary: color-mix(in srgb, var(--cursor-shadow-primary) 60%, transparent);\n\t--cursor-shadow-tertiary: color-mix(in srgb, var(--cursor-shadow-primary) 30%, transparent);\n\t--cursor-shadow-workbench: 0px 0px 8px 2px color-mix(in srgb, var(--cursor-shadow-primary) 40%, transparent);\n\t--cursor-box-shadow-sm: 0px 2px 8px 0px var(--cursor-shadow-secondary);\n\t--cursor-box-shadow-base: 0px 0px 8px 2px var(--cursor-shadow-primary);\n\t--cursor-box-shadow-soft: 0px 0px 8px 2px var(--cursor-shadow-tertiary);\n\t--cursor-box-shadow-lg: inset 0px 0px 4px 0px rgba(255, 255, 255, 0.05), 0px 0px 3px 0px var(--cursor-shadow-secondary), 0px 16px 24px 0px var(--cursor-shadow-tertiary);\n\t--cursor-box-shadow-xl: inset 0px 0px 4px 0px rgba(255, 255, 255, 0.05), 0px 0px 6px 8px var(--cursor-shadow-secondary), 0px 24px 16px 6px var(--cursor-shadow-tertiary);\n\t--cursor-button-secondary-background: var(--cursor-bg-tertiary);\n\t--cursor-button-secondary-foreground: var(--cursor-text-primary);\n\t--cursor-button-secondary-hover-background: var(--cursor-bg-secondary);\n\t--cursor-titlebar-active-foreground: var(--cursor-text-secondary);\n\t--cursor-titlebar-inactive-foreground: var(--cursor-text-tertiary);\n\t--cursor-command-center-foreground: var(--cursor-text-secondary);\n\t--cursor-command-center-background: var(--cursor-bg-tertiary);\n\t--cursor-command-center-border: var(--cursor-stroke-secondary);\n\t--cursor-command-center-active-foreground: var(--cursor-text-secondary);\n\t--cursor-command-center-active-border: var(--cursor-stroke-primary);\n\t--cursor-command-center-active-background: var(--cursor-bg-secondary);\n\t--cursor-command-center-inactive-foreground: var(--cursor-text-tertiary);\n\t--cursor-command-center-inactive-border: var(--cursor-stroke-secondary);\n\t--cursor-terminal-background: var(--cursor-chrome);\n\t--cursor-terminal-foreground: var(--cursor-text-primary);\n\t--cursor-terminal-selection-background: color-mix(in srgb, var(--cursor-base) 12%, transparent);\n\t--cursor-scrollbar-thumb-background: color-mix(in srgb, var(--cursor-base) 14%, transparent);\n\t--cursor-scrollbar-thumb-hover-background: color-mix(in srgb, var(--cursor-base) 22%, transparent);\n\t--cursor-scrollbar-thumb-active-background: color-mix(in srgb, var(--cursor-base) 26%, transparent);\n\t--cursor-scrollbar-shadow: var(--cursor-shadow-primary);\n\t--cursor-progress-bar-background: var(--cursor-accent);\n\t--cursor-toolbar-hover-background: var(--cursor-bg-tertiary);\n\t--cursor-input-border: var(--cursor-stroke-secondary);\n\t--cursor-input-placeholder-foreground: var(--cursor-text-quaternary);\n\t--cursor-editor-foreground: var(--cursor-text-primary);\n\t--cursor-editor-line-highlight-background: color-mix(in srgb, var(--cursor-base) 8%, transparent);\n\t--cursor-editor-line-number-foreground: var(--cursor-text-tertiary);\n\t--cursor-editor-line-number-active-foreground: var(--cursor-text-primary);\n\t--cursor-editor-cursor-foreground: var(--cursor-text-primary);\n\t--cursor-editor-selection-background: color-mix(in srgb, var(--cursor-accent) 42%, transparent);\n\t--cursor-editor-inactive-selection-background: color-mix(in srgb, var(--cursor-accent) 30%, transparent);\n\t--cursor-editor-selection-highlight-background: color-mix(in srgb, var(--cursor-accent) 32%, transparent);\n\t--cursor-editor-widget-background: var(--cursor-bg-elevated);\n\t--cursor-editor-widget-border: var(--cursor-stroke-secondary);\n\t--cursor-editor-widget-foreground: var(--cursor-text-primary);\n\t--cursor-editor-gutter-background: var(--cursor-editor);\n\t--cursor-editor-whitespace-foreground: color-mix(in srgb, var(--cursor-base) 22%, transparent);\n\t--cursor-editor-bracket-match-background: color-mix(in srgb, var(--cursor-success) 22%, transparent);\n\t--cursor-editor-bracket-match-border: color-mix(in srgb, var(--cursor-base) 52%, transparent);\n\t--cursor-editor-indent-guide-background: color-mix(in srgb, var(--cursor-base) 22%, transparent);\n\t--cursor-editor-indent-guide-active-background: color-mix(in srgb, var(--cursor-base) 40%, transparent);\n\t--cursor-editor-find-match-background: color-mix(in srgb, var(--cursor-warn) 72%, transparent);\n\t--cursor-editor-find-match-highlight-background: color-mix(in srgb, var(--cursor-warn) 32%, transparent);\n\t--cursor-text-code-block-background: var(--cursor-bg-elevated);\n\t--cursor-text-link-active: var(--cursor-accent);\n}\n:root {\n --cursor-font-family-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n --cursor-font-family-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;\n --cursor-scrollbar-vertical-size: var(--vscode-scrollbar-vertical-size, 14px);\n --cursor-scrollbar-horizontal-size: var(--vscode-scrollbar-horizontal-size, 12px);\n --cursor-scrollbar-thumb-background: var(--vscode-scrollbarSlider-background);\n --cursor-scrollbar-thumb-hover-background: var(--vscode-scrollbarSlider-hoverBackground);\n --cursor-scrollbar-thumb-active-background: var(--vscode-scrollbarSlider-activeBackground);\n --cursor-syntax-foreground: #141414EB;\n --cursor-syntax-background: #FCFCFC;\n --cursor-syntax-keyword: #B3003F;\n --cursor-syntax-string: #9E94D5;\n --cursor-syntax-function: #DB704B;\n --cursor-syntax-number: #B8448B;\n --cursor-syntax-comment: #141414AD;\n --cursor-syntax-constant: #206595;\n --cursor-syntax-parameter: #141414EB;\n --cursor-syntax-punctuation: #141414EB;\n --cursor-syntax-link: #206595;\n --cursor-syntax-string-expression: #9E94D5;\n --cursor-syntax-tag: #B3003F;\n --cursor-syntax-attribute: #141414EB;\n --cursor-syntax-property: #141414EB;\n --cursor-syntax-type: #206595;\n --cursor-syntax-variable: #141414EB;\n --cursor-syntax-class: #206595;\n --cursor-syntax-language-variable: #B3003F;\n --cursor-syntax-constant-variable: #206595;\n --cursor-duration-instant: 50ms;\n --cursor-duration-fast: 100ms;\n --cursor-duration-normal: 150ms;\n --cursor-duration-slow: 200ms;\n --cursor-duration-slower: 300ms;\n --cursor-easing-default: ease;\n --cursor-easing-in: ease-in;\n --cursor-easing-out: ease-out;\n --cursor-easing-in-out: ease-in-out;\n --cursor-easing-in-strong: cubic-bezier(0.895, 0.03, 0.685, 0.22);\n --cursor-easing-out-strong: cubic-bezier(0.165, 0.84, 0.44, 1);\n --cursor-easing-out-quint: cubic-bezier(0.16, 1, 0.3, 1);\n --cursor-easing-in-out-strong: cubic-bezier(0.77, 0, 0.175, 1);\n --cursor-spacing-1: 4px;\n --cursor-spacing-2: 8px;\n --cursor-spacing-3: 12px;\n --cursor-spacing-4: 16px;\n --cursor-spacing-5: 20px;\n --cursor-spacing-6: 24px;\n --cursor-spacing-7: 28px;\n --cursor-spacing-8: 32px;\n --cursor-spacing-9: 36px;\n --cursor-spacing-10: 40px;\n --cursor-spacing-11: 44px;\n --cursor-spacing-12: 48px;\n --cursor-spacing-13: 52px;\n --cursor-spacing-14: 56px;\n --cursor-spacing-15: 60px;\n --cursor-spacing-16: 64px;\n --cursor-spacing-17: 68px;\n --cursor-spacing-18: 72px;\n --cursor-spacing-19: 76px;\n --cursor-spacing-20: 80px;\n --cursor-spacing-ne-0-25: -1px;\n --cursor-spacing-ne-0-5: -2px;\n --cursor-spacing-ne-0-75: -3px;\n --cursor-spacing-ne-1: -4px;\n --cursor-spacing-ne-1-25: -5px;\n --cursor-spacing-ne-1-5: -6px;\n --cursor-spacing-ne-1-75: -7px;\n --cursor-spacing-ne-2: -8px;\n --cursor-spacing-ne-2-25: -9px;\n --cursor-spacing-ne-2-5: -10px;\n --cursor-spacing-ne-2-75: -11px;\n --cursor-spacing-ne-3: -12px;\n --cursor-spacing-ne-3-25: -13px;\n --cursor-spacing-ne-3-5: -14px;\n --cursor-spacing-ne-3-75: -15px;\n --cursor-spacing-ne-4: -16px;\n --cursor-spacing-ne-4-25: -17px;\n --cursor-spacing-ne-4-5: -18px;\n --cursor-spacing-ne-4-75: -19px;\n --cursor-spacing-ne-5: -20px;\n --cursor-spacing-0-25: 1px;\n --cursor-spacing-0-5: 2px;\n --cursor-spacing-0-75: 3px;\n --cursor-spacing-1-25: 5px;\n --cursor-spacing-1-5: 6px;\n --cursor-spacing-1-75: 7px;\n --cursor-spacing-2-25: 9px;\n --cursor-spacing-2-5: 10px;\n --cursor-spacing-2-75: 11px;\n --cursor-spacing-3-25: 13px;\n --cursor-spacing-3-5: 14px;\n --cursor-spacing-3-75: 15px;\n --cursor-spacing-4-25: 17px;\n --cursor-spacing-4-5: 18px;\n --cursor-spacing-4-75: 19px;\n --cursor-spacing-5-5: 22px;\n --cursor-spacing-6-5: 26px;\n --cursor-spacing-7-5: 30px;\n --cursor-spacing-8-5: 34px;\n --cursor-spacing-9-5: 38px;\n --cursor-radius-none: 0px;\n --cursor-radius-xs: 2px;\n --cursor-radius-sm: 4px;\n --cursor-radius-base: 6px;\n --cursor-radius-lg: 8px;\n --cursor-radius-xl: 12px;\n --cursor-radius-2xl: 14px;\n --cursor-radius-3xl: 16px;\n --cursor-radius-4xl: 18px;\n --cursor-radius-full: 9999px;\n --cursor-height-xs: 20px;\n --cursor-height-sm: 24px;\n --cursor-height-base: 28px;\n --cursor-height-lg: 32px;\n --cursor-font-size-xs: 11px;\n --cursor-font-size-sm: 12px;\n --cursor-font-size-base: 13px;\n --cursor-font-size-lg: 14px;\n --cursor-line-height-xs: 14px;\n --cursor-line-height-sm: 16px;\n --cursor-line-height-base: 18px;\n --cursor-line-height-lg: 22px;\n --cursor-letter-spacing-xs: 0.07px;\n --cursor-letter-spacing-sm: 0px;\n --cursor-letter-spacing-base: -0.08px;\n --cursor-letter-spacing-lg: -0.15px;\n --cursor-letter-spacing-xl: 0.08px;\n --cursor-letter-spacing-2xl: -0.46px;\n --cursor-letter-spacing-3xl: -0.26px;\n --cursor-elevation-1: 1;\n --cursor-elevation-2: 2;\n}","dark":":root {\n --cursor-accent: #1084fe;\n --cursor-action-label: #ffffff;\n --cursor-added: #00c972;\n --cursor-base: #fcfcfc;\n --cursor-blue: #1084fe;\n --cursor-brand: #f54e00;\n --cursor-chrome: #111111;\n --cursor-cyan: #00bca6;\n --cursor-danger: #ff5667;\n --cursor-diff-added-line-background: #00c9722c;\n --cursor-diff-added-text-background: #00c97224;\n --cursor-diff-removed-line-background: #ff263c2c;\n --cursor-diff-removed-text-background: #ff263c24;\n --cursor-editor: #141414;\n --cursor-focus: #0c64c1;\n --cursor-green: #00c972;\n --cursor-magenta: #ff309b;\n --cursor-modified: #ff9800;\n --cursor-orange: #ff6700;\n --cursor-purple: #9159fe;\n --cursor-red: #ff263c;\n --cursor-removed: #ff5667;\n --cursor-sidebar: #111111;\n --cursor-success: #00c972;\n --cursor-terminal-ansi-black: #181818;\n --cursor-terminal-ansi-blue: #80befe;\n --cursor-terminal-ansi-bright-black: #fcfcfcbd;\n --cursor-terminal-ansi-bright-blue: #e9f4ff;\n --cursor-terminal-ansi-bright-cyan: #e8f9f7;\n --cursor-terminal-ansi-bright-green: #e8faf2;\n --cursor-terminal-ansi-bright-magenta: #ffecf6;\n --cursor-terminal-ansi-bright-red: #ffebed;\n --cursor-terminal-ansi-bright-white: #ffffff;\n --cursor-terminal-ansi-bright-yellow: #fff6e8;\n --cursor-terminal-ansi-cyan: #78dbd0;\n --cursor-terminal-ansi-green: #78e2b4;\n --cursor-terminal-ansi-magenta: #ff91ca;\n --cursor-terminal-ansi-red: #ff8c98;\n --cursor-terminal-ansi-white: #f3f3f3;\n --cursor-terminal-ansi-yellow: #ffc878;\n --cursor-untracked: #38cbba;\n --cursor-warn: #ff9800;\n --cursor-yellow: #ff9800;\n}\n:root {\n\t--cursor-foreground: var(--cursor-base);\n\t--cursor-text-primary: var(--cursor-base);\n\t--cursor-text-secondary: color-mix(in srgb, var(--cursor-base) 74%, transparent);\n\t--cursor-text-tertiary: color-mix(in srgb, var(--cursor-base) 60%, transparent);\n\t--cursor-text-quaternary: color-mix(in srgb, var(--cursor-base) 36%, transparent);\n\t--cursor-text-invert: var(--cursor-editor);\n\t--cursor-text-active: var(--cursor-text-primary);\n\t--cursor-text-focused: var(--cursor-text-primary);\n\t--cursor-text-git-added-primary: var(--cursor-added);\n\t--cursor-text-git-added-secondary: color-mix(in srgb, var(--cursor-added) 78%, transparent);\n\t--cursor-text-git-added-tertiary: color-mix(in srgb, var(--cursor-added) 64%, transparent);\n\t--cursor-text-git-added-quaternary: color-mix(in srgb, var(--cursor-added) 40%, transparent);\n\t--cursor-text-git-modified-primary: var(--cursor-modified);\n\t--cursor-text-git-modified-secondary: color-mix(in srgb, var(--cursor-modified) 78%, transparent);\n\t--cursor-text-git-modified-tertiary: color-mix(in srgb, var(--cursor-modified) 64%, transparent);\n\t--cursor-text-git-modified-quaternary: color-mix(in srgb, var(--cursor-modified) 40%, transparent);\n\t--cursor-text-git-removed-primary: var(--cursor-removed);\n\t--cursor-text-git-removed-secondary: color-mix(in srgb, var(--cursor-removed) 78%, transparent);\n\t--cursor-text-git-removed-tertiary: color-mix(in srgb, var(--cursor-removed) 64%, transparent);\n\t--cursor-text-git-removed-quaternary: color-mix(in srgb, var(--cursor-removed) 40%, transparent);\n\t--cursor-text-git-untracked-primary: var(--cursor-untracked);\n\t--cursor-text-git-untracked-secondary: color-mix(in srgb, var(--cursor-untracked) 78%, transparent);\n\t--cursor-text-git-untracked-tertiary: color-mix(in srgb, var(--cursor-untracked) 64%, transparent);\n\t--cursor-text-git-untracked-quaternary: color-mix(in srgb, var(--cursor-untracked) 40%, transparent);\n\t--cursor-text-red-primary: var(--cursor-red);\n\t--cursor-text-red-secondary: color-mix(in srgb, var(--cursor-red) 78%, transparent);\n\t--cursor-text-yellow-primary: var(--cursor-yellow);\n\t--cursor-text-yellow-secondary: color-mix(in srgb, var(--cursor-yellow) 78%, transparent);\n\t--cursor-text-green-primary: var(--cursor-green);\n\t--cursor-text-green-secondary: color-mix(in srgb, var(--cursor-green) 78%, transparent);\n\t--cursor-text-magenta-primary: var(--cursor-magenta);\n\t--cursor-text-magenta-secondary: color-mix(in srgb, var(--cursor-magenta) 78%, transparent);\n\t--cursor-text-purple-primary: var(--cursor-purple);\n\t--cursor-text-purple-secondary: color-mix(in srgb, var(--cursor-purple) 78%, transparent);\n\t--cursor-text-cyan-primary: var(--cursor-cyan);\n\t--cursor-text-cyan-secondary: color-mix(in srgb, var(--cursor-cyan) 78%, transparent);\n\t--cursor-text-blue-primary: var(--cursor-blue);\n\t--cursor-text-blue-secondary: color-mix(in srgb, var(--cursor-blue) 78%, transparent);\n\t--cursor-text-orange-primary: var(--cursor-orange);\n\t--cursor-text-orange-secondary: color-mix(in srgb, var(--cursor-orange) 78%, transparent);\n\t--cursor-text-accent: var(--cursor-accent);\n\t--cursor-text-link: var(--cursor-text-blue-primary);\n\t--cursor-icon-primary: var(--cursor-base);\n\t--cursor-icon-secondary: color-mix(in srgb, var(--cursor-base) 66%, transparent);\n\t--cursor-icon-tertiary: color-mix(in srgb, var(--cursor-base) 52%, transparent);\n\t--cursor-icon-quaternary: color-mix(in srgb, var(--cursor-base) 28%, transparent);\n\t--cursor-icon-git-added-primary: var(--cursor-added);\n\t--cursor-icon-git-added-secondary: color-mix(in srgb, var(--cursor-added) 70%, transparent);\n\t--cursor-icon-git-added-tertiary: color-mix(in srgb, var(--cursor-added) 56%, transparent);\n\t--cursor-icon-git-added-quaternary: color-mix(in srgb, var(--cursor-added) 32%, transparent);\n\t--cursor-icon-git-modified-primary: var(--cursor-modified);\n\t--cursor-icon-git-modified-secondary: color-mix(in srgb, var(--cursor-modified) 70%, transparent);\n\t--cursor-icon-git-modified-tertiary: color-mix(in srgb, var(--cursor-modified) 56%, transparent);\n\t--cursor-icon-git-modified-quaternary: color-mix(in srgb, var(--cursor-modified) 32%, transparent);\n\t--cursor-icon-git-removed-primary: var(--cursor-removed);\n\t--cursor-icon-git-removed-secondary: color-mix(in srgb, var(--cursor-removed) 70%, transparent);\n\t--cursor-icon-git-removed-tertiary: color-mix(in srgb, var(--cursor-removed) 56%, transparent);\n\t--cursor-icon-git-removed-quaternary: color-mix(in srgb, var(--cursor-removed) 32%, transparent);\n\t--cursor-icon-git-untracked-primary: var(--cursor-untracked);\n\t--cursor-icon-git-untracked-secondary: color-mix(in srgb, var(--cursor-untracked) 70%, transparent);\n\t--cursor-icon-git-untracked-tertiary: color-mix(in srgb, var(--cursor-untracked) 56%, transparent);\n\t--cursor-icon-git-untracked-quaternary: color-mix(in srgb, var(--cursor-untracked) 32%, transparent);\n\t--cursor-icon-accent-primary: var(--cursor-accent);\n\t--cursor-icon-accent-secondary: color-mix(in srgb, var(--cursor-accent) 70%, transparent);\n\t--cursor-icon-red-primary: var(--cursor-red);\n\t--cursor-icon-red-secondary: color-mix(in srgb, var(--cursor-red) 70%, transparent);\n\t--cursor-icon-yellow-primary: var(--cursor-yellow);\n\t--cursor-icon-yellow-secondary: color-mix(in srgb, var(--cursor-yellow) 70%, transparent);\n\t--cursor-icon-green-primary: var(--cursor-green);\n\t--cursor-icon-green-secondary: color-mix(in srgb, var(--cursor-green) 70%, transparent);\n\t--cursor-icon-magenta-primary: var(--cursor-magenta);\n\t--cursor-icon-magenta-secondary: color-mix(in srgb, var(--cursor-magenta) 70%, transparent);\n\t--cursor-icon-cyan-primary: var(--cursor-cyan);\n\t--cursor-icon-cyan-secondary: color-mix(in srgb, var(--cursor-cyan) 70%, transparent);\n\t--cursor-icon-blue-primary: var(--cursor-blue);\n\t--cursor-icon-blue-secondary: color-mix(in srgb, var(--cursor-blue) 70%, transparent);\n\t--cursor-icon-orange-primary: var(--cursor-orange);\n\t--cursor-icon-orange-secondary: color-mix(in srgb, var(--cursor-orange) 70%, transparent);\n\t--cursor-icon-purple-primary: var(--cursor-purple);\n\t--cursor-icon-purple-secondary: color-mix(in srgb, var(--cursor-purple) 70%, transparent);\n\t--cursor-bg-primary: color-mix(in srgb, var(--cursor-base) 20%, transparent);\n\t--cursor-bg-secondary: color-mix(in srgb, var(--cursor-base) 14%, transparent);\n\t--cursor-bg-tertiary: color-mix(in srgb, var(--cursor-base) 8%, transparent);\n\t--cursor-bg-quaternary: color-mix(in srgb, var(--cursor-base) 6%, transparent);\n\t--cursor-bg-quinary: color-mix(in srgb, var(--cursor-base) 4%, transparent);\n\t--cursor-bg-elevated: var(--cursor-editor);\n\t--cursor-bg-chrome: var(--cursor-chrome);\n\t--cursor-bg-card: var(--cursor-bg-quaternary);\n\t--cursor-bg-input: var(--cursor-editor);\n\t--cursor-bg-input-surface: var(--cursor-bg-quaternary);\n\t--cursor-bg-editor: var(--cursor-editor);\n\t--cursor-bg-sidebar: var(--cursor-sidebar);\n\t--cursor-bg-diff-inserted: var(--cursor-diff-added-line-background);\n\t--cursor-bg-diff-removed: var(--cursor-diff-removed-line-background);\n\t--cursor-bg-git-added-primary: var(--cursor-added);\n\t--cursor-bg-git-added-hover: color-mix(in srgb, var(--cursor-base) 10%, var(--cursor-added));\n\t--cursor-bg-git-added-secondary: color-mix(in srgb, var(--cursor-added) 24%, transparent);\n\t--cursor-bg-git-added-tertiary: color-mix(in srgb, var(--cursor-added) 12%, transparent);\n\t--cursor-bg-git-added-quaternary: color-mix(in srgb, var(--cursor-added) 8%, transparent);\n\t--cursor-bg-git-modified-primary: var(--cursor-modified);\n\t--cursor-bg-git-modified-hover: color-mix(in srgb, var(--cursor-base) 10%, var(--cursor-modified));\n\t--cursor-bg-git-modified-secondary: color-mix(in srgb, var(--cursor-modified) 24%, transparent);\n\t--cursor-bg-git-modified-tertiary: color-mix(in srgb, var(--cursor-modified) 12%, transparent);\n\t--cursor-bg-git-modified-quaternary: color-mix(in srgb, var(--cursor-modified) 8%, transparent);\n\t--cursor-bg-git-removed-primary: var(--cursor-removed);\n\t--cursor-bg-git-removed-hover: color-mix(in srgb, var(--cursor-base) 10%, var(--cursor-removed));\n\t--cursor-bg-git-removed-secondary: color-mix(in srgb, var(--cursor-removed) 24%, transparent);\n\t--cursor-bg-git-removed-tertiary: color-mix(in srgb, var(--cursor-removed) 12%, transparent);\n\t--cursor-bg-git-removed-quaternary: color-mix(in srgb, var(--cursor-removed) 8%, transparent);\n\t--cursor-bg-git-untracked-primary: var(--cursor-untracked);\n\t--cursor-bg-git-untracked-hover: color-mix(in srgb, var(--cursor-base) 10%, var(--cursor-untracked));\n\t--cursor-bg-git-untracked-secondary: color-mix(in srgb, var(--cursor-untracked) 24%, transparent);\n\t--cursor-bg-git-untracked-tertiary: color-mix(in srgb, var(--cursor-untracked) 12%, transparent);\n\t--cursor-bg-git-untracked-quaternary: color-mix(in srgb, var(--cursor-untracked) 8%, transparent);\n\t--cursor-bg-active: color-mix(in srgb, var(--cursor-base) 16%, transparent);\n\t--cursor-bg-focused: color-mix(in srgb, var(--cursor-base) 22%, transparent);\n\t--cursor-bg-red-primary: var(--cursor-red);\n\t--cursor-bg-red-secondary: color-mix(in srgb, var(--cursor-red) 12%, transparent);\n\t--cursor-bg-yellow-primary: var(--cursor-yellow);\n\t--cursor-bg-yellow-secondary: color-mix(in srgb, var(--cursor-yellow) 12%, transparent);\n\t--cursor-bg-green-primary: var(--cursor-green);\n\t--cursor-bg-green-secondary: color-mix(in srgb, var(--cursor-green) 12%, transparent);\n\t--cursor-bg-magenta-primary: var(--cursor-magenta);\n\t--cursor-bg-magenta-secondary: color-mix(in srgb, var(--cursor-magenta) 12%, transparent);\n\t--cursor-bg-cyan-primary: var(--cursor-cyan);\n\t--cursor-bg-cyan-secondary: color-mix(in srgb, var(--cursor-cyan) 12%, transparent);\n\t--cursor-bg-blue-primary: var(--cursor-blue);\n\t--cursor-bg-blue-secondary: color-mix(in srgb, var(--cursor-blue) 12%, transparent);\n\t--cursor-bg-orange-primary: var(--cursor-orange);\n\t--cursor-bg-orange-secondary: color-mix(in srgb, var(--cursor-orange) 12%, transparent);\n\t--cursor-bg-purple-primary: var(--cursor-purple);\n\t--cursor-bg-purple-secondary: color-mix(in srgb, var(--cursor-purple) 12%, transparent);\n\t--cursor-bg-purple-tertiary: color-mix(in srgb, var(--cursor-purple) 8%, transparent);\n\t--cursor-bg-accent: var(--cursor-accent);\n\t--cursor-bg-accent-hover: color-mix(in srgb, var(--cursor-base) 10%, var(--cursor-accent));\n\t--cursor-bg-accent-secondary: color-mix(in srgb, var(--cursor-accent) 24%, transparent);\n\t--cursor-bg-accent-tertiary: color-mix(in srgb, var(--cursor-accent) 12%, transparent);\n\t--cursor-bg-accent-quaternary: color-mix(in srgb, var(--cursor-accent) 8%, transparent);\n\t--cursor-stroke-primary: color-mix(in srgb, var(--cursor-base) 20%, transparent);\n\t--cursor-stroke-secondary: color-mix(in srgb, var(--cursor-base) 12%, transparent);\n\t--cursor-stroke-tertiary: color-mix(in srgb, var(--cursor-base) 8%, transparent);\n\t--cursor-stroke-tertiary-opaque: color-mix(in srgb, var(--cursor-base) 8%, var(--cursor-chrome));\n\t--cursor-stroke-quaternary: color-mix(in srgb, var(--cursor-base) 4%, transparent);\n\t--cursor-stroke-focused: color-mix(in srgb, var(--cursor-focus) 15%, transparent);\n\t--cursor-stroke-high-contrast: color-mix(in srgb, var(--cursor-base) 0%, transparent);\n\t--cursor-stroke-git-added: color-mix(in srgb, var(--cursor-added) 56%, transparent);\n\t--cursor-stroke-git-modified: color-mix(in srgb, var(--cursor-modified) 56%, transparent);\n\t--cursor-stroke-git-removed: color-mix(in srgb, var(--cursor-removed) 56%, transparent);\n\t--cursor-stroke-git-untracked: color-mix(in srgb, var(--cursor-untracked) 56%, transparent);\n\t--cursor-stroke-red-primary: color-mix(in srgb, var(--cursor-red) 56%, transparent);\n\t--cursor-stroke-red-secondary: color-mix(in srgb, var(--cursor-red) 32%, transparent);\n\t--cursor-stroke-yellow-primary: color-mix(in srgb, var(--cursor-yellow) 56%, transparent);\n\t--cursor-stroke-yellow-secondary: color-mix(in srgb, var(--cursor-yellow) 32%, transparent);\n\t--cursor-stroke-green-primary: color-mix(in srgb, var(--cursor-green) 56%, transparent);\n\t--cursor-stroke-green-secondary: color-mix(in srgb, var(--cursor-green) 32%, transparent);\n\t--cursor-stroke-magenta-primary: color-mix(in srgb, var(--cursor-magenta) 56%, transparent);\n\t--cursor-stroke-magenta-secondary: color-mix(in srgb, var(--cursor-magenta) 32%, transparent);\n\t--cursor-stroke-cyan-primary: color-mix(in srgb, var(--cursor-cyan) 56%, transparent);\n\t--cursor-stroke-cyan-secondary: color-mix(in srgb, var(--cursor-cyan) 32%, transparent);\n\t--cursor-stroke-blue-primary: color-mix(in srgb, var(--cursor-blue) 56%, transparent);\n\t--cursor-stroke-blue-secondary: color-mix(in srgb, var(--cursor-blue) 32%, transparent);\n\t--cursor-stroke-orange-primary: color-mix(in srgb, var(--cursor-orange) 56%, transparent);\n\t--cursor-stroke-orange-secondary: color-mix(in srgb, var(--cursor-orange) 32%, transparent);\n\t--cursor-shadow-primary: color-mix(in srgb, #000000 20%, transparent);\n\t--cursor-shadow-secondary: color-mix(in srgb, var(--cursor-shadow-primary) 60%, transparent);\n\t--cursor-shadow-tertiary: color-mix(in srgb, var(--cursor-shadow-primary) 30%, transparent);\n\t--cursor-shadow-workbench: 0px 0px 8px 2px color-mix(in srgb, var(--cursor-shadow-primary) 40%, transparent);\n\t--cursor-box-shadow-sm: 0px 2px 8px 0px var(--cursor-shadow-secondary);\n\t--cursor-box-shadow-base: 0px 0px 8px 2px var(--cursor-shadow-primary);\n\t--cursor-box-shadow-soft: 0px 0px 8px 2px var(--cursor-shadow-tertiary);\n\t--cursor-box-shadow-lg: inset 0px 0px 4px 0px rgba(255, 255, 255, 0.05), 0px 0px 3px 0px var(--cursor-shadow-secondary), 0px 16px 24px 0px var(--cursor-shadow-tertiary);\n\t--cursor-box-shadow-xl: inset 0px 0px 4px 0px rgba(255, 255, 255, 0.05), 0px 0px 6px 8px var(--cursor-shadow-secondary), 0px 24px 16px 6px var(--cursor-shadow-tertiary);\n\t--cursor-button-secondary-background: var(--cursor-bg-tertiary);\n\t--cursor-button-secondary-foreground: var(--cursor-text-primary);\n\t--cursor-button-secondary-hover-background: var(--cursor-bg-secondary);\n\t--cursor-titlebar-active-foreground: var(--cursor-text-secondary);\n\t--cursor-titlebar-inactive-foreground: var(--cursor-text-tertiary);\n\t--cursor-command-center-foreground: var(--cursor-text-secondary);\n\t--cursor-command-center-background: var(--cursor-bg-tertiary);\n\t--cursor-command-center-border: var(--cursor-stroke-secondary);\n\t--cursor-command-center-active-foreground: var(--cursor-text-secondary);\n\t--cursor-command-center-active-border: var(--cursor-stroke-primary);\n\t--cursor-command-center-active-background: var(--cursor-bg-secondary);\n\t--cursor-command-center-inactive-foreground: var(--cursor-text-tertiary);\n\t--cursor-command-center-inactive-border: var(--cursor-stroke-secondary);\n\t--cursor-terminal-background: var(--cursor-chrome);\n\t--cursor-terminal-foreground: var(--cursor-text-primary);\n\t--cursor-terminal-selection-background: color-mix(in srgb, var(--cursor-base) 12%, transparent);\n\t--cursor-scrollbar-thumb-background: color-mix(in srgb, var(--cursor-base) 14%, transparent);\n\t--cursor-scrollbar-thumb-hover-background: color-mix(in srgb, var(--cursor-base) 22%, transparent);\n\t--cursor-scrollbar-thumb-active-background: color-mix(in srgb, var(--cursor-base) 26%, transparent);\n\t--cursor-scrollbar-shadow: var(--cursor-shadow-primary);\n\t--cursor-progress-bar-background: var(--cursor-accent);\n\t--cursor-toolbar-hover-background: var(--cursor-bg-tertiary);\n\t--cursor-input-border: var(--cursor-stroke-secondary);\n\t--cursor-input-placeholder-foreground: var(--cursor-text-quaternary);\n\t--cursor-editor-foreground: var(--cursor-text-primary);\n\t--cursor-editor-line-highlight-background: color-mix(in srgb, var(--cursor-base) 8%, transparent);\n\t--cursor-editor-line-number-foreground: var(--cursor-text-tertiary);\n\t--cursor-editor-line-number-active-foreground: var(--cursor-text-primary);\n\t--cursor-editor-cursor-foreground: var(--cursor-text-primary);\n\t--cursor-editor-selection-background: color-mix(in srgb, var(--cursor-accent) 42%, transparent);\n\t--cursor-editor-inactive-selection-background: color-mix(in srgb, var(--cursor-accent) 30%, transparent);\n\t--cursor-editor-selection-highlight-background: color-mix(in srgb, var(--cursor-accent) 32%, transparent);\n\t--cursor-editor-widget-background: var(--cursor-bg-elevated);\n\t--cursor-editor-widget-border: var(--cursor-stroke-secondary);\n\t--cursor-editor-widget-foreground: var(--cursor-text-primary);\n\t--cursor-editor-gutter-background: var(--cursor-editor);\n\t--cursor-editor-whitespace-foreground: color-mix(in srgb, var(--cursor-base) 22%, transparent);\n\t--cursor-editor-bracket-match-background: color-mix(in srgb, var(--cursor-success) 22%, transparent);\n\t--cursor-editor-bracket-match-border: color-mix(in srgb, var(--cursor-base) 52%, transparent);\n\t--cursor-editor-indent-guide-background: color-mix(in srgb, var(--cursor-base) 22%, transparent);\n\t--cursor-editor-indent-guide-active-background: color-mix(in srgb, var(--cursor-base) 40%, transparent);\n\t--cursor-editor-find-match-background: color-mix(in srgb, var(--cursor-warn) 72%, transparent);\n\t--cursor-editor-find-match-highlight-background: color-mix(in srgb, var(--cursor-warn) 32%, transparent);\n\t--cursor-text-code-block-background: var(--cursor-bg-elevated);\n\t--cursor-text-link-active: var(--cursor-accent);\n}\n:root {\n --cursor-font-family-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n --cursor-font-family-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;\n --cursor-scrollbar-vertical-size: var(--vscode-scrollbar-vertical-size, 14px);\n --cursor-scrollbar-horizontal-size: var(--vscode-scrollbar-horizontal-size, 12px);\n --cursor-scrollbar-thumb-background: var(--vscode-scrollbarSlider-background);\n --cursor-scrollbar-thumb-hover-background: var(--vscode-scrollbarSlider-hoverBackground);\n --cursor-scrollbar-thumb-active-background: var(--vscode-scrollbarSlider-activeBackground);\n --cursor-syntax-foreground: #d6d6dd;\n --cursor-syntax-background: #181818;\n --cursor-syntax-keyword: #82d2ce;\n --cursor-syntax-string: #e394dc;\n --cursor-syntax-function: #efb080;\n --cursor-syntax-number: #ebc88d;\n --cursor-syntax-comment: #E4E4E45E;\n --cursor-syntax-constant: #f8c762;\n --cursor-syntax-parameter: #d6d6dd;\n --cursor-syntax-punctuation: #d6d6dd;\n --cursor-syntax-link: #87c3ff;\n --cursor-syntax-string-expression: #e394dc;\n --cursor-duration-instant: 50ms;\n --cursor-duration-fast: 100ms;\n --cursor-duration-normal: 150ms;\n --cursor-duration-slow: 200ms;\n --cursor-duration-slower: 300ms;\n --cursor-easing-default: ease;\n --cursor-easing-in: ease-in;\n --cursor-easing-out: ease-out;\n --cursor-easing-in-out: ease-in-out;\n --cursor-easing-in-strong: cubic-bezier(0.895, 0.03, 0.685, 0.22);\n --cursor-easing-out-strong: cubic-bezier(0.165, 0.84, 0.44, 1);\n --cursor-easing-out-quint: cubic-bezier(0.16, 1, 0.3, 1);\n --cursor-easing-in-out-strong: cubic-bezier(0.77, 0, 0.175, 1);\n --cursor-spacing-1: 4px;\n --cursor-spacing-2: 8px;\n --cursor-spacing-3: 12px;\n --cursor-spacing-4: 16px;\n --cursor-spacing-5: 20px;\n --cursor-spacing-6: 24px;\n --cursor-spacing-7: 28px;\n --cursor-spacing-8: 32px;\n --cursor-spacing-9: 36px;\n --cursor-spacing-10: 40px;\n --cursor-spacing-11: 44px;\n --cursor-spacing-12: 48px;\n --cursor-spacing-13: 52px;\n --cursor-spacing-14: 56px;\n --cursor-spacing-15: 60px;\n --cursor-spacing-16: 64px;\n --cursor-spacing-17: 68px;\n --cursor-spacing-18: 72px;\n --cursor-spacing-19: 76px;\n --cursor-spacing-20: 80px;\n --cursor-spacing-ne-0-25: -1px;\n --cursor-spacing-ne-0-5: -2px;\n --cursor-spacing-ne-0-75: -3px;\n --cursor-spacing-ne-1: -4px;\n --cursor-spacing-ne-1-25: -5px;\n --cursor-spacing-ne-1-5: -6px;\n --cursor-spacing-ne-1-75: -7px;\n --cursor-spacing-ne-2: -8px;\n --cursor-spacing-ne-2-25: -9px;\n --cursor-spacing-ne-2-5: -10px;\n --cursor-spacing-ne-2-75: -11px;\n --cursor-spacing-ne-3: -12px;\n --cursor-spacing-ne-3-25: -13px;\n --cursor-spacing-ne-3-5: -14px;\n --cursor-spacing-ne-3-75: -15px;\n --cursor-spacing-ne-4: -16px;\n --cursor-spacing-ne-4-25: -17px;\n --cursor-spacing-ne-4-5: -18px;\n --cursor-spacing-ne-4-75: -19px;\n --cursor-spacing-ne-5: -20px;\n --cursor-spacing-0-25: 1px;\n --cursor-spacing-0-5: 2px;\n --cursor-spacing-0-75: 3px;\n --cursor-spacing-1-25: 5px;\n --cursor-spacing-1-5: 6px;\n --cursor-spacing-1-75: 7px;\n --cursor-spacing-2-25: 9px;\n --cursor-spacing-2-5: 10px;\n --cursor-spacing-2-75: 11px;\n --cursor-spacing-3-25: 13px;\n --cursor-spacing-3-5: 14px;\n --cursor-spacing-3-75: 15px;\n --cursor-spacing-4-25: 17px;\n --cursor-spacing-4-5: 18px;\n --cursor-spacing-4-75: 19px;\n --cursor-spacing-5-5: 22px;\n --cursor-spacing-6-5: 26px;\n --cursor-spacing-7-5: 30px;\n --cursor-spacing-8-5: 34px;\n --cursor-spacing-9-5: 38px;\n --cursor-radius-none: 0px;\n --cursor-radius-xs: 2px;\n --cursor-radius-sm: 4px;\n --cursor-radius-base: 6px;\n --cursor-radius-lg: 8px;\n --cursor-radius-xl: 12px;\n --cursor-radius-2xl: 14px;\n --cursor-radius-3xl: 16px;\n --cursor-radius-4xl: 18px;\n --cursor-radius-full: 9999px;\n --cursor-height-xs: 20px;\n --cursor-height-sm: 24px;\n --cursor-height-base: 28px;\n --cursor-height-lg: 32px;\n --cursor-font-size-xs: 11px;\n --cursor-font-size-sm: 12px;\n --cursor-font-size-base: 13px;\n --cursor-font-size-lg: 14px;\n --cursor-line-height-xs: 14px;\n --cursor-line-height-sm: 16px;\n --cursor-line-height-base: 18px;\n --cursor-line-height-lg: 22px;\n --cursor-letter-spacing-xs: 0.07px;\n --cursor-letter-spacing-sm: 0px;\n --cursor-letter-spacing-base: -0.08px;\n --cursor-letter-spacing-lg: -0.15px;\n --cursor-letter-spacing-xl: 0.08px;\n --cursor-letter-spacing-2xl: -0.46px;\n --cursor-letter-spacing-3xl: -0.26px;\n --cursor-elevation-1: 1;\n --cursor-elevation-2: 2;\n}"};
+export const RADIUS_CSS = ":root {\n --cursor-radius-base: 8px;\n --cursor-radius-lg: 10px;\n --cursor-radius-xl: 14px;\n --cursor-radius-2xl: 16px;\n --cursor-radius-3xl: 18px;\n}" as const;
+export function _zn(mode: RuntimeThemeMode): string { return [CORE_CSS[mode],RADIUS_CSS,bzn(mode),Ezn(mode)].join("\n"); }
+export const buildRuntimeThemeCss = _zn;
+function ambientDocument(): ThemeDocument|undefined { return typeof document === "undefined" ? undefined : document as unknown as ThemeDocument; }
+function requireDocument(d: ThemeDocument|undefined): ThemeDocument { if(d===undefined) throw Error("Runtime theme installation requires a document"); if(d.documentElement===undefined||d.head===undefined||typeof d.createElement!=="function"||typeof d.getElementById!=="function"||typeof d.head.appendChild!=="function") throw Error("Runtime theme installation received an incomplete document"); return d; }
+export function Bzn(mode: RuntimeThemeMode, documentLike?: ThemeDocument): void { const d=requireDocument(documentLike??ambientDocument()); d.documentElement.dataset.theme=RUNTIME_THEME_CLASS[mode]; d.documentElement.style.colorScheme=mode; let s=d.getElementById(RUNTIME_THEME_STYLE_ID); if(s===null){s=d.createElement("style");s.id=RUNTIME_THEME_STYLE_ID;} s.textContent=_zn(mode); d.head.appendChild(s); }
+export function createRuntimeThemeInstaller(documentLike: ThemeDocument, initialMode?: RuntimeThemeMode): RuntimeThemeInstallHandle { const d=requireDocument(documentLike); let owned:ThemeStyleElement|null=null, disposed=false; const update=(mode:RuntimeThemeMode)=>{if(disposed)return;const before=d.getElementById(RUNTIME_THEME_STYLE_ID);Bzn(mode,d);if(before===null)owned=d.getElementById(RUNTIME_THEME_STYLE_ID);};const dispose=()=>{if(disposed)return;disposed=true;if(owned!==null&&d.getElementById(RUNTIME_THEME_STYLE_ID)===owned)d.head.removeChild(owned);owned=null;};const h={update,dispose};if(initialMode!==undefined)update(initialMode);return h; }
diff --git a/web/src/grok/sand-icon-registry.ts b/web/src/grok/sand-icon-registry.ts
new file mode 100644
index 0000000..7581aa3
--- /dev/null
+++ b/web/src/grok/sand-icon-registry.ts
@@ -0,0 +1,3272 @@
+import type { CSSProperties } from "react";
+
+// Exact immutable icon registry extracted from the shipped Mac renderer.
+// @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#sha256=ef4e9831b65d39633f09c9ad0c083b98b7ebf52e3bb558182aee5bde31f876fa#byteOffset=123956 (q5t outline map)
+// @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#sha256=ef4e9831b65d39633f09c9ad0c083b98b7ebf52e3bb558182aee5bde31f876fa#byteOffset=138317 (j5t filled map)
+// @evidence recovered/frontend/app/assets/index-UbX-y3il.js#sha256=80464803b50f478598080bdc1b91da3996c6b74168e2351ea26f620f2ec62ba5#source-equivalent q5t/j5t maps
+// The font is already recovered at frontend/src/recovered/features/computer/shell/cursor-icons-16-f_W_ogc-.woff2.
+// @evidence frontend/manifests/computer-shell-evidence.json#assets.cursor-icons-16-f_W_ogc-.woff2
+
+export const SAND_ICON_OUTLINE_CODE_POINTS = {
+ "account": 0xeb99,
+ "add": 0xea60,
+ "agent": 0xf413,
+ "agent-circle": 0xf430,
+ "agent-square": 0xf431,
+ "agents": 0xf432,
+ "agents-swarm": 0xf412,
+ "alarm-clock": 0xf58b,
+ "alert": 0xea6c,
+ "archive": 0xea98,
+ "army-base": 0xf433,
+ "arrow-block-down": 0xf2c3,
+ "arrow-block-left": 0xf2c4,
+ "arrow-block-line-down": 0xf56e,
+ "arrow-block-line-left": 0xf570,
+ "arrow-block-line-right": 0xf572,
+ "arrow-block-line-up": 0xf574,
+ "arrow-block-right": 0xf2c5,
+ "arrow-block-up": 0xf2c6,
+ "arrow-bracket-from-down": 0xf34e,
+ "arrow-bracket-from-left": 0xf34f,
+ "arrow-bracket-from-right": 0xf359,
+ "arrow-bracket-from-up": 0xec28,
+ "arrow-bracket-from-up-dashed": 0xec27,
+ "arrow-bracket-to-down": 0xec26,
+ "arrow-bracket-to-left": 0xf358,
+ "arrow-bracket-to-right": 0xf357,
+ "arrow-bracket-to-up": 0xf356,
+ "arrow-ccw": 0xead2,
+ "arrow-circle-down": 0xebfc,
+ "arrow-circle-left": 0xebfd,
+ "arrow-circle-right": 0xebfe,
+ "arrow-circle-up": 0xebff,
+ "arrow-cw": 0xeb37,
+ "arrow-down": 0xea9a,
+ "arrow-left": 0xea9b,
+ "arrow-left-down": 0xf2c7,
+ "arrow-left-up": 0xf2c8,
+ "arrow-right": 0xea9c,
+ "arrow-right-down": 0xf2c9,
+ "arrow-right-up": 0xedc1,
+ "arrow-square-down": 0xf2f3,
+ "arrow-square-from-down": 0xf355,
+ "arrow-square-from-left": 0xf354,
+ "arrow-square-from-right": 0xea6e,
+ "arrow-square-from-up": 0xebac,
+ "arrow-square-left": 0xf2f5,
+ "arrow-square-left-down": 0xf2fc,
+ "arrow-square-left-top": 0xf2fb,
+ "arrow-square-left-up": 0xf2fb,
+ "arrow-square-right": 0xf2f4,
+ "arrow-square-right-down": 0xf2fa,
+ "arrow-square-right-top": 0xedc2,
+ "arrow-square-right-up": 0xedc2,
+ "arrow-square-to-down": 0xedae,
+ "arrow-square-to-left": 0xf353,
+ "arrow-square-to-right": 0xea6f,
+ "arrow-square-to-up": 0xf352,
+ "arrow-square-up": 0xf2f6,
+ "arrow-swap": 0xebcb,
+ "arrow-u-up-left": 0xed84,
+ "arrow-u-up-right": 0xf31e,
+ "arrow-up": 0xeaa1,
+ "arrows-both-horizontal": 0xea99,
+ "arrows-both-vertical": 0xf2ca,
+ "arrows-ccw": 0xf30f,
+ "arrows-ccw-angular": 0xf2cc,
+ "arrows-contract": 0xf310,
+ "arrows-contract-simple": 0xf2cd,
+ "arrows-cw": 0xea77,
+ "arrows-down-up": 0xf2ce,
+ "arrows-expand": 0xf311,
+ "arrows-expand-simple": 0xf2cf,
+ "arrows-left-right": 0xebcb,
+ "arrows-out-cardinal": 0xeb22,
+ "asterisk": 0xedbf,
+ "at": 0xec55,
+ "atom": 0xf434,
+ "bandaid": 0xf435,
+ "banknote": 0xf500,
+ "banknotes-stack": 0xf436,
+ "barbell": 0xf437,
+ "basketball": 0xf438,
+ "beach-umbrella": 0xf439,
+ "beaker": 0xea79,
+ "beaker-stop": 0xebe1,
+ "beehouse": 0xf43a,
+ "bell": 0xeaa2,
+ "bell-dot": 0xeb9a,
+ "bell-slash": 0xec08,
+ "binary": 0xeae8,
+ "binoculars": 0xeb68,
+ "bluetooth": 0xf43b,
+ "board-kanban": 0xeb30,
+ "book": 0xf414,
+ "book-open": 0xeaa4,
+ "bookmark": 0xeaa5,
+ "books": 0xeb9c,
+ "bowtie": 0xf4f2,
+ "bracket": 0xeb0f,
+ "bracket-dot": 0xebe5,
+ "bracket-error": 0xebe6,
+ "brackets-curly": 0xeb0f,
+ "brackets-curly-dot": 0xebe5,
+ "brackets-curly-x": 0xebe6,
+ "brackets-square": 0xea8a,
+ "brain": 0xed87,
+ "brain-hourglass": 0xf43c,
+ "brain-simple": 0xf43d,
+ "brain-simplest": 0xf43e,
+ "brain-slash": 0xf43f,
+ "briefcase": 0xeaac,
+ "browser": 0xeaae,
+ "browsers": 0xeb23,
+ "brush": 0xedb3,
+ "bug": 0xeaaf,
+ "bugbot": 0xec59,
+ "building": 0xf440,
+ "buildings": 0xf441,
+ "bullseye": 0xebf8,
+ "calculator": 0xf442,
+ "calendar": 0xeab0,
+ "calendar-hourglass": 0xf415,
+ "camera": 0xeada,
+ "car": 0xf443,
+ "cardholder": 0xf444,
+ "castle": 0xf445,
+ "cd": 0xf446,
+ "chart-bars": 0xeb03,
+ "chart-line": 0xebe2,
+ "chart-pie": 0xebe4,
+ "chart-pyramid": 0xf419,
+ "chart-scatter": 0xebe3,
+ "chat-bubble": 0xed95,
+ "chat-bubble-chevrons-left-right": 0xec37,
+ "chat-bubble-ellipsis": 0xf34c,
+ "chat-bubble-exclamation": 0xeb42,
+ "chat-bubble-pencil": 0xedc3,
+ "chat-bubble-question": 0xf23c,
+ "chat-bubbles": 0xf350,
+ "chat-bubbles-grid": 0xf424,
+ "chatBubble": 0xed95,
+ "chatBubble-ellipsis": 0xf34c,
+ "chatBubble-exclamation": 0xeb42,
+ "chatBubble-question": 0xf23c,
+ "chatBubbles": 0xf350,
+ "check": 0xeab2,
+ "check-circle": 0xedba,
+ "check-square": 0xf2d2,
+ "checks": 0xebb1,
+ "chef-hat": 0xf447,
+ "chess-king": 0xf448,
+ "chess-tower": 0xf449,
+ "chevron-circle-down": 0xf576,
+ "chevron-circle-left": 0xf578,
+ "chevron-circle-right": 0xf57a,
+ "chevron-circle-up": 0xf57c,
+ "chevron-down": 0xeab4,
+ "chevron-down-small": 0xf2d3,
+ "chevron-left": 0xeab5,
+ "chevron-left-small": 0xf2d4,
+ "chevron-right": 0xeab6,
+ "chevron-right-small": 0xf2d5,
+ "chevron-up": 0xeab7,
+ "chevron-up-small": 0xf2d6,
+ "chevrons-down": 0xeaf3,
+ "chevrons-down-up": 0xeaf5,
+ "chevrons-left": 0xedd4,
+ "chevrons-left-right": 0xf2d7,
+ "chevrons-right": 0xf31d,
+ "chevrons-right-dotted-left": 0xedc6,
+ "chevrons-up": 0xeaf4,
+ "chevrons-up-down": 0xedcb,
+ "chip": 0xec19,
+ "chip-simple": 0xf41a,
+ "circle": 0xebb5,
+ "circle-circle": 0xeba7,
+ "circle-dashed": 0xedbb,
+ "circles": 0xea97,
+ "circles-check": 0xec2e,
+ "clipboard": 0xedc9,
+ "clock": 0xedc0,
+ "clone": 0xebcc,
+ "close": 0xed82,
+ "cloud": 0xebaa,
+ "cloud-arrow-down": 0xeac2,
+ "cloud-arrow-up": 0xeac3,
+ "cloud-download": 0xeac2,
+ "cloud-upload": 0xeac3,
+ "code": 0xf44a,
+ "code-brackets": 0xea8a,
+ "code-simple": 0xf44b,
+ "cog": 0xeaf8,
+ "collection": 0xf31f,
+ "collection-plus": 0xf32b,
+ "color-mode": 0xeac6,
+ "command": 0xf2d8,
+ "comment": 0xea6b,
+ "comment-dashed": 0xec0e,
+ "comment-discussion": 0xf350,
+ "comment-dot": 0xec0a,
+ "comments": 0xeac7,
+ "compass": 0xebd5,
+ "compass-check": 0xebd7,
+ "compass-dot": 0xebd6,
+ "conversation": 0xf350,
+ "cookie": 0xf44c,
+ "copilot": 0xec10,
+ "copy": 0xebcc,
+ "corners-in": 0xeb4d,
+ "corners-out": 0xeb4c,
+ "corners-out-check": 0xf2da,
+ "corners-out-sparkle": 0xf44d,
+ "cost-high": 0xf41b,
+ "cost-low": 0xf41c,
+ "cost-medium": 0xf41d,
+ "credit-card": 0xeac9,
+ "cross-medical": 0xf44e,
+ "crosshair": 0xf44f,
+ "crown": 0xf53e,
+ "crystal-ball": 0xf450,
+ "cube": 0xedcc,
+ "cube-coordinates": 0xf451,
+ "cube-nodes": 0xedc8,
+ "cube-transparent": 0xf2db,
+ "currency-btc": 0xf452,
+ "currency-dollar": 0xf453,
+ "currency-eth": 0xf454,
+ "cursor-logo": 0xedd9,
+ "cursor-text": 0xf304,
+ "cutlery": 0xf455,
+ "cylinder": 0xf456,
+ "dashboard": 0xf457,
+ "database": 0xeace,
+ "database-network": 0xf458,
+ "debug-pause": 0xf35c,
+ "debug-restart": 0xead2,
+ "debug-start": 0xf35a,
+ "debug-stop": 0xeba5,
+ "deckchair-umbrella": 0xf459,
+ "desktop-download": 0xeac2,
+ "device-camera": 0xeada,
+ "device-camera-video": 0xead9,
+ "device-desktop": 0xea7a,
+ "device-mobile": 0xeadb,
+ "diagram": 0xf41e,
+ "diff": 0xeae1,
+ "diff-added": 0xeadc,
+ "diff-ignored": 0xeadd,
+ "diff-modified": 0xeade,
+ "diff-multiple": 0xec23,
+ "diff-removed": 0xeadf,
+ "diff-renamed": 0xeae0,
+ "diff-single": 0xec22,
+ "diff-single-arrow-right-up": 0xec0b,
+ "diff-single-dot": 0xec0c,
+ "discard": 0xed82,
+ "display": 0xea7a,
+ "display-check": 0xeb79,
+ "display-circle": 0xeb7a,
+ "display-connect": 0xeba9,
+ "display-play": 0xeb7b,
+ "display-waves": 0xf586,
+ "displays": 0xf587,
+ "dots-3-horizontal": 0xea7c,
+ "dots-3-vertical": 0xeb10,
+ "drop": 0xf4f4,
+ "easel": 0xf45a,
+ "edit": 0xea73,
+ "elephant": 0xf4d5,
+ "ellipsis": 0xea7c,
+ "envelope": 0xeb1c,
+ "envelope-open": 0xeb1b,
+ "eraser": 0xeda0,
+ "error": 0xea87,
+ "exclamation-circle": 0xedbc,
+ "exclamation-triangle": 0xea6c,
+ "execution-parallel": 0xf410,
+ "execution-sequential": 0xf411,
+ "extensions": 0xeae6,
+ "eye": 0xea70,
+ "eye-closed": 0xf338,
+ "eye-slash": 0xeae7,
+ "fast-backward": 0xf416,
+ "fast-forward": 0xf417,
+ "feedback": 0xf34c,
+ "file": 0xea7b,
+ "file-add": 0xed8d,
+ "file-arrow-right-up": 0xeaee,
+ "file-binary": 0xea7b,
+ "file-chevrons-left-right": 0xeae9,
+ "file-code": 0xea7b,
+ "file-directory": 0xea83,
+ "file-directory-create": 0xea80,
+ "file-image": 0xeaea,
+ "file-list": 0xec53,
+ "file-lock": 0xeafa,
+ "file-media": 0xeaea,
+ "file-pdf": 0xeaeb,
+ "file-plus": 0xed8d,
+ "file-text": 0xf45b,
+ "file-type-adobe-illustrator": 0xf4ec,
+ "file-type-adobe-photoshop": 0xf4ea,
+ "file-type-babel": 0xf53a,
+ "file-type-bazel": 0xf521,
+ "file-type-bevy": 0xf526,
+ "file-type-bicep": 0xf4fc,
+ "file-type-biomejs": 0xf592,
+ "file-type-bower": 0xf566,
+ "file-type-bun": 0xf594,
+ "file-type-c-plus-plus": 0xf4bf,
+ "file-type-c-sharp": 0xf4c0,
+ "file-type-clojure": 0xf4d3,
+ "file-type-crystal": 0xf4d7,
+ "file-type-cuda": 0xf540,
+ "file-type-dart": 0xf596,
+ "file-type-docker": 0xf490,
+ "file-type-ejs": 0xf54c,
+ "file-type-elixir": 0xf4ee,
+ "file-type-eslint": 0xf534,
+ "file-type-f-sharp": 0xf4d9,
+ "file-type-firebase": 0xf4fa,
+ "file-type-geckodriver": 0xf515,
+ "file-type-git-meta": 0xf491,
+ "file-type-go": 0xf492,
+ "file-type-godot": 0xf51d,
+ "file-type-grails": 0xf501,
+ "file-type-graphql": 0xf493,
+ "file-type-groovy": 0xf536,
+ "file-type-grunt": 0xf568,
+ "file-type-gulp": 0xf546,
+ "file-type-haml": 0xf55e,
+ "file-type-handlebars": 0xf553,
+ "file-type-haskell": 0xf4e8,
+ "file-type-ionic": 0xf494,
+ "file-type-java": 0xf495,
+ "file-type-javascript": 0xf496,
+ "file-type-julia": 0xf497,
+ "file-type-jupyter": 0xf511,
+ "file-type-karma": 0xf498,
+ "file-type-kotlin": 0xf499,
+ "file-type-latex": 0xf509,
+ "file-type-liquid": 0xf53c,
+ "file-type-maven": 0xf550,
+ "file-type-mustache": 0xf50b,
+ "file-type-npm": 0xf517,
+ "file-type-nunjucks": 0xf532,
+ "file-type-ocaml": 0xf56a,
+ "file-type-odata": 0xf505,
+ "file-type-pdf": 0xf523,
+ "file-type-perl": 0xf56c,
+ "file-type-platformio": 0xf52a,
+ "file-type-powershell": 0xf4f0,
+ "file-type-prettier": 0xf598,
+ "file-type-prisma": 0xf52e,
+ "file-type-prolog": 0xf544,
+ "file-type-puppet": 0xf4e6,
+ "file-type-python": 0xf49a,
+ "file-type-reason": 0xf548,
+ "file-type-rescript": 0xf52c,
+ "file-type-rollup": 0xf49b,
+ "file-type-rust": 0xf49c,
+ "file-type-sass": 0xf4fe,
+ "file-type-sbt": 0xf54a,
+ "file-type-scala": 0xf4c8,
+ "file-type-slim": 0xf54e,
+ "file-type-stylus": 0xf528,
+ "file-type-sublime": 0xf507,
+ "file-type-svelte": 0xf49d,
+ "file-type-swift": 0xf49e,
+ "file-type-terraform": 0xf49f,
+ "file-type-typescript": 0xf4a0,
+ "file-type-vala": 0xf51b,
+ "file-type-vite": 0xf4a1,
+ "file-type-vsc": 0xf519,
+ "file-type-vue": 0xf4a2,
+ "file-type-web-assembly": 0xf4ca,
+ "file-type-webpack": 0xf4a3,
+ "file-type-windows": 0xf4a4,
+ "file-type-yarn": 0xf51f,
+ "file-type-zig": 0xf538,
+ "file-zip": 0xea7b,
+ "files": 0xeaf0,
+ "film-reel": 0xf45c,
+ "film-strip": 0xf45d,
+ "filter": 0xeaf1,
+ "flag": 0xec3f,
+ "flag-hill": 0xeb20,
+ "flame": 0xeaf2,
+ "flask": 0xea79,
+ "flask-slash-circle": 0xebe1,
+ "floppy-disc": 0xeb4b,
+ "focus-window": 0xede6,
+ "fold-dashed": 0xede9,
+ "folder": 0xea83,
+ "folder-active": 0xeaf6,
+ "folder-arrow-right-up": 0xeaed,
+ "folder-check": 0xeaf6,
+ "folder-dashed": 0xf58d,
+ "folder-library": 0xebdf,
+ "folder-open": 0xeaf7,
+ "folder-opened": 0xea83,
+ "folder-plus": 0xea80,
+ "folders": 0xeaec,
+ "fork": 0xf41f,
+ "funnel": 0xeaf1,
+ "funnel-simple": 0xeb83,
+ "game-controller": 0xf45e,
+ "game-controller-retro": 0xf45f,
+ "gauge": 0xeacd,
+ "gear": 0xeaf8,
+ "gem": 0xeb48,
+ "gift": 0xeaf9,
+ "git-branch": 0xedb4,
+ "git-commit": 0xeafc,
+ "git-commit-horizontal": 0xf303,
+ "git-compare": 0xeafd,
+ "git-fetch": 0xec1d,
+ "git-fork": 0xea63,
+ "git-merge": 0xeafe,
+ "git-pull": 0xeb40,
+ "git-pull-request": 0xea64,
+ "git-pull-request-closed": 0xebda,
+ "git-pull-request-create": 0xebbc,
+ "git-pull-request-done": 0xec46,
+ "git-pull-request-draft": 0xebdb,
+ "git-push": 0xeb41,
+ "github": 0xea84,
+ "github-actions": 0xeaff,
+ "globe": 0xeb01,
+ "graduation-cap": 0xeb21,
+ "graph": 0xeb03,
+ "graph-line": 0xebe2,
+ "graph-scatter": 0xebe3,
+ "grid": 0xf460,
+ "grid-plus": 0xf461,
+ "grid-sparkle": 0xf462,
+ "gripper": 0xeb04,
+ "hamburger": 0xf463,
+ "hammer": 0xedab,
+ "hash": 0xf4a5,
+ "hat": 0xf464,
+ "headphones": 0xf465,
+ "headset": 0xf466,
+ "heart": 0xeb05,
+ "hexagon": 0xf4db,
+ "history": 0xea82,
+ "home": 0xeb06,
+ "hourglass": 0xedcf,
+ "house": 0xeb06,
+ "i-circle": 0xea74,
+ "image": 0xec56,
+ "image-square": 0xf2dc,
+ "inbox": 0xeb09,
+ "infinity": 0xed8e,
+ "info": 0xea74,
+ "inspect": 0xebd1,
+ "issue": 0xeb0c,
+ "issue-closed": 0xedba,
+ "issue-draft": 0xebd9,
+ "issues": 0xedbc,
+ "joystick": 0xf467,
+ "json": 0xeb0f,
+ "kebab-horizontal": 0xea7c,
+ "kebab-vertical": 0xeb10,
+ "key": 0xeb11,
+ "keyboard": 0xedac,
+ "keyboard-tab": 0xec3c,
+ "laptop": 0xedd2,
+ "layers": 0xebd2,
+ "layout-dialog": 0xf58f,
+ "layout-empty": 0xf590,
+ "layout-floating-window": 0xf591,
+ "layout-panel-bottom": 0xec01,
+ "layout-panel-bottom-dock": 0xec49,
+ "layout-panel-bottom-on": 0xebf2,
+ "layout-panel-bottom-undock": 0xf2dd,
+ "layout-panel-off": 0xec01,
+ "layout-sidebar-left": 0xec02,
+ "layout-sidebar-left-dock": 0xec4a,
+ "layout-sidebar-left-off": 0xec02,
+ "layout-sidebar-left-on": 0xebf3,
+ "layout-sidebar-left-undock": 0xf23a,
+ "layout-sidebar-right": 0xec00,
+ "layout-sidebar-right-dock": 0xec4b,
+ "layout-sidebar-right-off": 0xec00,
+ "layout-sidebar-right-on": 0xebf4,
+ "layout-sidebar-right-undock": 0xf23b,
+ "layout-split-horizontal": 0xec5c,
+ "layout-split-horizontal-dashed": 0xec5b,
+ "layout-split-horizontal-right-dock": 0xf305,
+ "layout-split-horizontal-right-undock": 0xf306,
+ "layout-split-vertical": 0xeb57,
+ "leaf": 0xf468,
+ "lego": 0xf469,
+ "library": 0xeb9c,
+ "lightbulb": 0xea61,
+ "lightbulb-sparkle": 0xec10,
+ "lightning": 0xedaa,
+ "link": 0xeb15,
+ "link-external": 0xede6,
+ "list-bullets": 0xeda5,
+ "list-checks": 0xeab3,
+ "list-filter": 0xeb83,
+ "list-ordered": 0xeb16,
+ "list-todo": 0xedd0,
+ "list-todo-subtask": 0xf425,
+ "list-x": 0xeabf,
+ "loading": 0xedca,
+ "location": 0xeb1a,
+ "lock": 0xea75,
+ "lock-locked": 0xea75,
+ "lock-unlocked": 0xeb74,
+ "logo-azure": 0xebd8,
+ "logo-azure-devops": 0xebe8,
+ "logo-figma": 0xf42a,
+ "logo-github": 0xea84,
+ "logo-gitlab": 0xf42b,
+ "logo-jira": 0xf4e3,
+ "logo-linear": 0xf42c,
+ "logo-markdown": 0xf319,
+ "logo-mcp": 0xec47,
+ "logo-microsoft-teams": 0xf4e4,
+ "logo-notion": 0xf42d,
+ "logo-python": 0xec39,
+ "logo-sentry": 0xf4e5,
+ "logo-slack": 0xf42e,
+ "logo-vscode": 0xec29,
+ "logo-vscode-insiders": 0xec2a,
+ "logo-x": 0xeb72,
+ "mac-mini": 0xf46a,
+ "magic-wand": 0xebcf,
+ "magnet": 0xebae,
+ "magnifying-glass": 0xea6d,
+ "magnifying-glass-fuzzy": 0xec0d,
+ "magnifying-glass-minus": 0xeb82,
+ "magnifying-glass-plus": 0xeb81,
+ "magnifying-glass-slash-circle": 0xeb4e,
+ "magnifying-glass-sparkle": 0xec50,
+ "magnifyingGlass": 0xea6d,
+ "magnifyingGlass-minus": 0xeb82,
+ "magnifyingGlass-plus": 0xeb81,
+ "magnifyingGlass-slash-circle": 0xeb4e,
+ "mail": 0xeb1c,
+ "map": 0xec05,
+ "map-pin": 0xeb1a,
+ "mark-github": 0xea84,
+ "markdown": 0xeb1d,
+ "mask-happy": 0xf46b,
+ "masks-happy": 0xf46c,
+ "mcp": 0xec47,
+ "megaphone": 0xeb1e,
+ "mention": 0xec55,
+ "menu": 0xeb94,
+ "merge": 0xebab,
+ "mic": 0xec12,
+ "microscope": 0xea79,
+ "minus": 0xeb3b,
+ "minus-circle": 0xf2de,
+ "minus-small": 0xf46d,
+ "mobile": 0xeadb,
+ "moon": 0xf2df,
+ "moon-sparkle": 0xf46e,
+ "moon-z": 0xf46f,
+ "more": 0xea7c,
+ "music": 0xec1b,
+ "mute": 0xeb24,
+ "new-file": 0xed8d,
+ "new-folder": 0xea80,
+ "newspaper": 0xf470,
+ "note": 0xeb26,
+ "one-circle": 0xf420,
+ "organization": 0xea7e,
+ "organization-filled": 0xea7e,
+ "owl": 0xf542,
+ "package": 0xeb29,
+ "package-zipper": 0xf48d,
+ "paint-roller": 0xf471,
+ "palette": 0xf472,
+ "paperclip": 0xec54,
+ "paperplane": 0xec0f,
+ "paragraph": 0xf2e1,
+ "pass": 0xedba,
+ "pause": 0xf35c,
+ "pause-circle": 0xf2e2,
+ "paw": 0xf473,
+ "pen-nib": 0xf2e3,
+ "pencil": 0xea73,
+ "pencil-square": 0xeddd,
+ "pentagon": 0xf4dd,
+ "people": 0xea7e,
+ "people-3": 0xf474,
+ "percent": 0xec33,
+ "person": 0xea67,
+ "person-add": 0xebcd,
+ "person-chat-bubble": 0xeb96,
+ "person-circle": 0xeb99,
+ "person-follow": 0xebcd,
+ "person-plus": 0xebcd,
+ "piano": 0xec1a,
+ "pie-chart": 0xebe4,
+ "pilcrow": 0xeb7d,
+ "pin": 0xeb2b,
+ "pin-slash": 0xf40b,
+ "pipe": 0xf530,
+ "plan": 0xf2e4,
+ "plane": 0xf475,
+ "play": 0xf35a,
+ "play-bug": 0xeb91,
+ "play-circle": 0xeba6,
+ "play-slow": 0xf421,
+ "play-super-fast": 0xf422,
+ "playback-loop": 0xf40d,
+ "plays-bug": 0xebdc,
+ "plug": 0xeb2d,
+ "plug-slash": 0xead0,
+ "plus": 0xea60,
+ "plus-circle": 0xf232,
+ "plus-minus": 0xf302,
+ "pointer-arrow": 0xec57,
+ "pug": 0xf564,
+ "pulse": 0xeb31,
+ "puzzle-piece": 0xf476,
+ "question": 0xf2e5,
+ "question-circle": 0xeb32,
+ "quote": 0xeb33,
+ "radar": 0xf477,
+ "radio-tower": 0xeb34,
+ "rect-magnifying-glass": 0xf351,
+ "rect-magnifyingGlass": 0xf351,
+ "redo": 0xeb37,
+ "refresh": 0xeb37,
+ "regex": 0xeb38,
+ "remote-control": 0xf589,
+ "remove": 0xeb3b,
+ "remove-close": 0xed82,
+ "replace": 0xf351,
+ "replace-all": 0xf351,
+ "report": 0xeb42,
+ "return": 0xebea,
+ "review": 0xf2e7,
+ "robot": 0xec20,
+ "rocket": 0xeb44,
+ "rocking-chair": 0xf478,
+ "rss": 0xeb47,
+ "ruler": 0xea96,
+ "rules": 0xf414,
+ "run": 0xf35a,
+ "satellite": 0xf479,
+ "scales": 0xeb12,
+ "seal": 0xf2e8,
+ "seal-check": 0xeb77,
+ "seal-question": 0xeb76,
+ "search": 0xea6d,
+ "search-stop": 0xeb4e,
+ "send": 0xec0f,
+ "server": 0xf48f,
+ "servers": 0xeb50,
+ "settings": 0xeb52,
+ "settings-gear": 0xeaf8,
+ "shapes-square-circle": 0xf47a,
+ "share": 0xec25,
+ "shield": 0xeb53,
+ "shield-check": 0xebc1,
+ "shield-question": 0xebc3,
+ "shield-x": 0xebc2,
+ "shoe-fast": 0xf47b,
+ "shopping-bag": 0xf47c,
+ "shopping-basket": 0xf47d,
+ "signal": 0xf47e,
+ "skills": 0xec10,
+ "skills-capability": 0xec10,
+ "slash-circle": 0xeabd,
+ "sliders": 0xeb52,
+ "smartwatch": 0xf2e9,
+ "smiley-happy": 0xf234,
+ "smiley-happy-square": 0xf47f,
+ "smiley-neutral": 0xf235,
+ "smiley-plus": 0xeb35,
+ "smiley-sad": 0xf233,
+ "snowflake": 0xf480,
+ "soccer-ball": 0xf481,
+ "sort-ascending": 0xf2ea,
+ "sort-descending": 0xf2eb,
+ "source-control": 0xedb4,
+ "sparkle": 0xec10,
+ "sparkles": 0xec10,
+ "speaker-hifi": 0xf482,
+ "speaker-waves": 0xeb75,
+ "speaker-x": 0xeb24,
+ "spinner": 0xedca,
+ "split": 0xf42f,
+ "split-horizontal": 0xec5c,
+ "split-vertical": 0xeb57,
+ "sprint": 0xf426,
+ "square": 0xea72,
+ "square-dashed": 0xf58e,
+ "square-dot": 0xf423,
+ "squares": 0xeabb,
+ "squares-minus": 0xeac5,
+ "squares-plus": 0xeb95,
+ "squares-x": 0xeac1,
+ "stack": 0xebd2,
+ "star": 0xea6a,
+ "star-empty": 0xea6a,
+ "star-full": 0xeb59,
+ "status-done": 0xedba,
+ "status-draft": 0xedbb,
+ "status-needs-attention": 0xedbc,
+ "stop": 0xf35b,
+ "stop-circle": 0xeba5,
+ "stopwatch": 0xf418,
+ "storefront": 0xf483,
+ "sun": 0xf2ed,
+ "swatches": 0xf484,
+ "symbol-folder": 0xea83,
+ "sync": 0xea77,
+ "t-shirt": 0xf485,
+ "table": 0xebb7,
+ "tabs": 0xf2be,
+ "tag": 0xea66,
+ "tags-chevron-down": 0xf57e,
+ "tags-chevron-left": 0xf580,
+ "tags-chevron-right": 0xf582,
+ "tags-chevron-up": 0xf584,
+ "target": 0xebf8,
+ "terminal": 0xf50e,
+ "terminal-rectangle": 0xea85,
+ "text-aa": 0xeab1,
+ "text-ab": 0xeb2e,
+ "text-b": 0xeaa3,
+ "text-c": 0xf4ce,
+ "text-d": 0xf4cc,
+ "text-italic": 0xeb0d,
+ "text-j": 0xf4f7,
+ "text-r": 0xf4d1,
+ "text-s": 0xf524,
+ "text-strikethrough": 0xf525,
+ "text-t": 0xf2ee,
+ "text-t-square": 0xf2c1,
+ "text-tt": 0xeb69,
+ "text-y": 0xf4df,
+ "thinking-high": 0xf427,
+ "thinking-low": 0xf428,
+ "thinking-medium": 0xf429,
+ "threads-parallel": 0xf40e,
+ "threads-single": 0xf40f,
+ "three-bars": 0xeb6a,
+ "thumbs-down": 0xed96,
+ "thumbs-up": 0xed97,
+ "thumbsdown": 0xed96,
+ "thumbsup": 0xed97,
+ "traffic-cone": 0xf34d,
+ "trafficCone": 0xf34d,
+ "trash": 0xea81,
+ "trashcan": 0xea81,
+ "tray": 0xeb09,
+ "treasure-chest": 0xf486,
+ "trending-down": 0xf487,
+ "trending-up": 0xf488,
+ "triangle-small-down": 0xeb6e,
+ "triangle-small-left": 0xeb6f,
+ "triangle-small-right": 0xeb70,
+ "triangle-small-up": 0xeb71,
+ "twig": 0xf503,
+ "unfold-dashed": 0xede8,
+ "unlock": 0xeb74,
+ "unmute": 0xeb75,
+ "unverified": 0xeb76,
+ "vault": 0xf489,
+ "verified": 0xeb77,
+ "versions": 0xeb78,
+ "video-camera": 0xead9,
+ "vm": 0xea7a,
+ "vr": 0xf48a,
+ "vr-headset": 0xf562,
+ "vr-headset-head": 0xf563,
+ "wallet": 0xf48b,
+ "wand": 0xec10,
+ "warning": 0xea6c,
+ "watch": 0xeb7c,
+ "waveform": 0xf48c,
+ "whole-word": 0xeb7e,
+ "window": 0xeb7f,
+ "window-pointer-arrow": 0xebd1,
+ "windows": 0xf2bf,
+ "wrench": 0xeb6d,
+ "x": 0xed82,
+ "x-circle": 0xea87,
+ "yarn": 0xf513,
+ "zap": 0xec10,
+ "zipper": 0xf48d,
+ "zoom-in": 0xeb81,
+ "zoom-out": 0xeb82,
+ "zzz": 0xf48e,
+} as const;
+
+export const SAND_ICON_FILLED_CODE_POINTS = {
+ "account": 0xeb99,
+ "add": 0xf3e5,
+ "agent": 0xf413,
+ "agent-circle": 0xf430,
+ "agent-square": 0xf431,
+ "agents": 0xf432,
+ "agents-swarm": 0xf412,
+ "alarm-clock": 0xf58c,
+ "alert": 0xea6c,
+ "archive": 0xea98,
+ "army-base": 0xf433,
+ "arrow-block-down": 0xf35d,
+ "arrow-block-left": 0xf35e,
+ "arrow-block-line-down": 0xf56f,
+ "arrow-block-line-left": 0xf571,
+ "arrow-block-line-right": 0xf573,
+ "arrow-block-line-up": 0xf575,
+ "arrow-block-right": 0xf35f,
+ "arrow-block-up": 0xf360,
+ "arrow-bracket-from-down": 0xf34e,
+ "arrow-bracket-from-left": 0xf34f,
+ "arrow-bracket-from-right": 0xf359,
+ "arrow-bracket-from-up": 0xec28,
+ "arrow-bracket-from-up-dashed": 0xec27,
+ "arrow-bracket-to-down": 0xf4e1,
+ "arrow-bracket-to-left": 0xf358,
+ "arrow-bracket-to-right": 0xf357,
+ "arrow-bracket-to-up": 0xf356,
+ "arrow-ccw": 0xead2,
+ "arrow-circle-down": 0xf361,
+ "arrow-circle-left": 0xf362,
+ "arrow-circle-right": 0xf363,
+ "arrow-circle-up": 0xf364,
+ "arrow-cw": 0xeb37,
+ "arrow-down": 0xf365,
+ "arrow-left": 0xf368,
+ "arrow-left-down": 0xf366,
+ "arrow-left-up": 0xf367,
+ "arrow-right": 0xf36b,
+ "arrow-right-down": 0xf369,
+ "arrow-right-up": 0xf36a,
+ "arrow-square-down": 0xf36c,
+ "arrow-square-from-down": 0xf355,
+ "arrow-square-from-left": 0xf354,
+ "arrow-square-from-right": 0xea6e,
+ "arrow-square-from-up": 0xebac,
+ "arrow-square-left": 0xf36f,
+ "arrow-square-left-down": 0xf36d,
+ "arrow-square-left-top": 0xf36e,
+ "arrow-square-left-up": 0xf36e,
+ "arrow-square-right": 0xf372,
+ "arrow-square-right-down": 0xf370,
+ "arrow-square-right-top": 0xf371,
+ "arrow-square-right-up": 0xf371,
+ "arrow-square-to-down": 0xedae,
+ "arrow-square-to-left": 0xf353,
+ "arrow-square-to-right": 0xea6f,
+ "arrow-square-to-up": 0xf352,
+ "arrow-square-up": 0xf373,
+ "arrow-swap": 0xebcb,
+ "arrow-u-up-left": 0xed84,
+ "arrow-u-up-right": 0xf31e,
+ "arrow-up": 0xf374,
+ "arrows-both-horizontal": 0xea99,
+ "arrows-both-vertical": 0xf2ca,
+ "arrows-ccw": 0xf30f,
+ "arrows-ccw-angular": 0xf2cc,
+ "arrows-contract": 0xf310,
+ "arrows-contract-simple": 0xf2cd,
+ "arrows-cw": 0xea77,
+ "arrows-down-up": 0xf2ce,
+ "arrows-expand": 0xf311,
+ "arrows-expand-simple": 0xf2cf,
+ "arrows-left-right": 0xebcb,
+ "arrows-out-cardinal": 0xeb22,
+ "asterisk": 0xedbf,
+ "at": 0xf375,
+ "atom": 0xf4bc,
+ "bandaid": 0xf435,
+ "banknote": 0xf500,
+ "banknotes-stack": 0xf436,
+ "barbell": 0xf437,
+ "basketball": 0xf438,
+ "beach-umbrella": 0xf439,
+ "beaker": 0xea79,
+ "beaker-stop": 0xebe1,
+ "beehouse": 0xf43a,
+ "bell": 0xeaa2,
+ "bell-dot": 0xeb9a,
+ "bell-slash": 0xec08,
+ "binary": 0xf556,
+ "binoculars": 0xeb68,
+ "bluetooth": 0xf43b,
+ "board-kanban": 0xf376,
+ "book": 0xf414,
+ "book-open": 0xf377,
+ "bookmark": 0xf378,
+ "books": 0xeb9c,
+ "bowtie": 0xf4f3,
+ "bracket": 0xf555,
+ "bracket-dot": 0xebe5,
+ "bracket-error": 0xebe6,
+ "brackets-curly": 0xf555,
+ "brackets-curly-dot": 0xebe5,
+ "brackets-curly-x": 0xebe6,
+ "brackets-square": 0xea8a,
+ "brain": 0xed87,
+ "brain-hourglass": 0xf43c,
+ "brain-simple": 0xf43d,
+ "brain-simplest": 0xf43e,
+ "brain-slash": 0xf43f,
+ "briefcase": 0xeaac,
+ "browser": 0xf379,
+ "browsers": 0xf37a,
+ "brush": 0xedb3,
+ "bug": 0xf37b,
+ "bugbot": 0xec59,
+ "building": 0xf440,
+ "buildings": 0xf441,
+ "bullseye": 0xebf8,
+ "calculator": 0xf442,
+ "calendar": 0xeab0,
+ "calendar-hourglass": 0xf415,
+ "camera": 0xf37c,
+ "car": 0xf443,
+ "cardholder": 0xf444,
+ "castle": 0xf445,
+ "cd": 0xf4b5,
+ "chart-bars": 0xeb03,
+ "chart-line": 0xebe2,
+ "chart-pie": 0xf37d,
+ "chart-pyramid": 0xf419,
+ "chart-scatter": 0xebe3,
+ "chat-bubble": 0xf381,
+ "chat-bubble-chevrons-left-right": 0xf37e,
+ "chat-bubble-ellipsis": 0xf37f,
+ "chat-bubble-exclamation": 0xeb42,
+ "chat-bubble-pencil": 0xedc3,
+ "chat-bubble-question": 0xf380,
+ "chat-bubbles": 0xf382,
+ "chat-bubbles-grid": 0xf424,
+ "chatBubble": 0xf381,
+ "chatBubble-ellipsis": 0xf37f,
+ "chatBubble-exclamation": 0xeb42,
+ "chatBubble-question": 0xf380,
+ "chatBubbles": 0xf382,
+ "check": 0xf385,
+ "check-circle": 0xf383,
+ "check-square": 0xf384,
+ "checks": 0xebb1,
+ "chef-hat": 0xf447,
+ "chess-king": 0xf448,
+ "chess-tower": 0xf449,
+ "chevron-circle-down": 0xf577,
+ "chevron-circle-left": 0xf579,
+ "chevron-circle-right": 0xf57b,
+ "chevron-circle-up": 0xf57d,
+ "chevron-down": 0xf387,
+ "chevron-down-small": 0xf386,
+ "chevron-left": 0xf389,
+ "chevron-left-small": 0xf388,
+ "chevron-right": 0xf38b,
+ "chevron-right-small": 0xf38a,
+ "chevron-up": 0xf38d,
+ "chevron-up-small": 0xf38c,
+ "chevrons-down": 0xeaf3,
+ "chevrons-down-up": 0xeaf5,
+ "chevrons-left": 0xedd4,
+ "chevrons-left-right": 0xf2d7,
+ "chevrons-right": 0xf31d,
+ "chevrons-right-dotted-left": 0xedc6,
+ "chevrons-up": 0xeaf4,
+ "chevrons-up-down": 0xedcb,
+ "chip": 0xec19,
+ "chip-simple": 0xf41a,
+ "circle": 0xf38f,
+ "circle-circle": 0xf38e,
+ "circle-dashed": 0xedbb,
+ "circles": 0xf390,
+ "circles-check": 0xec2e,
+ "clipboard": 0xedc9,
+ "clock": 0xf391,
+ "clone": 0xf399,
+ "close": 0xf409,
+ "cloud": 0xf392,
+ "cloud-arrow-down": 0xeac2,
+ "cloud-arrow-up": 0xeac3,
+ "cloud-download": 0xeac2,
+ "cloud-upload": 0xeac3,
+ "code": 0xf44a,
+ "code-brackets": 0xea8a,
+ "code-simple": 0xf4c1,
+ "cog": 0xf393,
+ "collection": 0xf395,
+ "collection-plus": 0xf394,
+ "color-mode": 0xf396,
+ "command": 0xf397,
+ "comment": 0xea6b,
+ "comment-dashed": 0xec0e,
+ "comment-discussion": 0xf382,
+ "comment-dot": 0xec0a,
+ "comments": 0xeac7,
+ "compass": 0xf398,
+ "compass-check": 0xebd7,
+ "compass-dot": 0xebd6,
+ "conversation": 0xf382,
+ "cookie": 0xf4f6,
+ "copilot": 0xf3f4,
+ "copy": 0xf399,
+ "corners-in": 0xeb4d,
+ "corners-out": 0xeb4c,
+ "corners-out-check": 0xf2da,
+ "corners-out-sparkle": 0xf44d,
+ "cost-high": 0xf41b,
+ "cost-low": 0xf41c,
+ "cost-medium": 0xf41d,
+ "credit-card": 0xf39a,
+ "cross-medical": 0xf44e,
+ "crosshair": 0xf44f,
+ "crown": 0xf53f,
+ "crystal-ball": 0xf450,
+ "cube": 0xf39d,
+ "cube-coordinates": 0xf451,
+ "cube-nodes": 0xf39b,
+ "cube-transparent": 0xf39c,
+ "currency-btc": 0xf452,
+ "currency-dollar": 0xf4c6,
+ "currency-eth": 0xf4b6,
+ "cursor-logo": 0xf39e,
+ "cursor-text": 0xf304,
+ "cutlery": 0xf455,
+ "cylinder": 0xf456,
+ "dashboard": 0xf457,
+ "database": 0xf39f,
+ "database-network": 0xf458,
+ "debug-pause": 0xead1,
+ "debug-restart": 0xead2,
+ "debug-start": 0xeb2c,
+ "debug-stop": 0xf3fe,
+ "deckchair-umbrella": 0xf459,
+ "desktop-download": 0xeac2,
+ "device-camera": 0xf37c,
+ "device-camera-video": 0xf405,
+ "device-desktop": 0xf3a8,
+ "device-mobile": 0xf3da,
+ "diagram": 0xf41e,
+ "diff": 0xf3a7,
+ "diff-added": 0xf3a0,
+ "diff-ignored": 0xf3a1,
+ "diff-modified": 0xf3a2,
+ "diff-multiple": 0xf3a3,
+ "diff-removed": 0xf3a4,
+ "diff-renamed": 0xf3a5,
+ "diff-single": 0xf3a6,
+ "diff-single-arrow-right-up": 0xec0b,
+ "diff-single-dot": 0xec0c,
+ "discard": 0xf409,
+ "display": 0xf3a8,
+ "display-check": 0xeb79,
+ "display-circle": 0xeb7a,
+ "display-connect": 0xeba9,
+ "display-play": 0xeb7b,
+ "display-waves": 0xf586,
+ "displays": 0xf588,
+ "dots-3-horizontal": 0xea7c,
+ "dots-3-vertical": 0xeb10,
+ "drop": 0xf4f5,
+ "easel": 0xf45a,
+ "edit": 0xea73,
+ "elephant": 0xf4d6,
+ "ellipsis": 0xea7c,
+ "envelope": 0xf3a9,
+ "envelope-open": 0xeb1b,
+ "eraser": 0xeda0,
+ "error": 0xf408,
+ "exclamation-circle": 0xf3aa,
+ "exclamation-triangle": 0xea6c,
+ "execution-parallel": 0xf410,
+ "execution-sequential": 0xf411,
+ "extensions": 0xf3ab,
+ "eye": 0xf3ac,
+ "eye-closed": 0xf338,
+ "eye-slash": 0xeae7,
+ "fast-backward": 0xf416,
+ "fast-forward": 0xf417,
+ "feedback": 0xf37f,
+ "file": 0xf3ad,
+ "file-add": 0xed8d,
+ "file-arrow-right-up": 0xeaee,
+ "file-binary": 0xf3ad,
+ "file-chevrons-left-right": 0xeae9,
+ "file-code": 0xf3ad,
+ "file-directory": 0xf3b2,
+ "file-directory-create": 0xea80,
+ "file-image": 0xeaea,
+ "file-list": 0xec53,
+ "file-lock": 0xeafa,
+ "file-media": 0xeaea,
+ "file-pdf": 0xeaeb,
+ "file-plus": 0xed8d,
+ "file-text": 0xf4bd,
+ "file-type-adobe-illustrator": 0xf4ed,
+ "file-type-adobe-photoshop": 0xf4eb,
+ "file-type-babel": 0xf53b,
+ "file-type-bazel": 0xf522,
+ "file-type-bevy": 0xf527,
+ "file-type-bicep": 0xf4fd,
+ "file-type-biomejs": 0xf593,
+ "file-type-bower": 0xf567,
+ "file-type-bun": 0xf595,
+ "file-type-c-plus-plus": 0xf50f,
+ "file-type-c-sharp": 0xf510,
+ "file-type-clojure": 0xf4d4,
+ "file-type-crystal": 0xf4d8,
+ "file-type-cuda": 0xf541,
+ "file-type-dart": 0xf597,
+ "file-type-docker": 0xf4a6,
+ "file-type-ejs": 0xf54d,
+ "file-type-elixir": 0xf4ef,
+ "file-type-eslint": 0xf535,
+ "file-type-f-sharp": 0xf4da,
+ "file-type-firebase": 0xf4fb,
+ "file-type-geckodriver": 0xf516,
+ "file-type-git-meta": 0xf4a7,
+ "file-type-go": 0xf55b,
+ "file-type-godot": 0xf51e,
+ "file-type-grails": 0xf502,
+ "file-type-graphql": 0xf4a8,
+ "file-type-groovy": 0xf537,
+ "file-type-grunt": 0xf569,
+ "file-type-gulp": 0xf547,
+ "file-type-haml": 0xf55f,
+ "file-type-handlebars": 0xf554,
+ "file-type-haskell": 0xf4e9,
+ "file-type-ionic": 0xf4a9,
+ "file-type-java": 0xf4f9,
+ "file-type-javascript": 0xf557,
+ "file-type-julia": 0xf4aa,
+ "file-type-jupyter": 0xf512,
+ "file-type-karma": 0xf4c2,
+ "file-type-kotlin": 0xf4ab,
+ "file-type-latex": 0xf50a,
+ "file-type-liquid": 0xf53d,
+ "file-type-maven": 0xf551,
+ "file-type-mustache": 0xf50c,
+ "file-type-npm": 0xf518,
+ "file-type-nunjucks": 0xf533,
+ "file-type-ocaml": 0xf56b,
+ "file-type-odata": 0xf506,
+ "file-type-pdf": 0xf55c,
+ "file-type-perl": 0xf56d,
+ "file-type-platformio": 0xf52b,
+ "file-type-powershell": 0xf4f1,
+ "file-type-prettier": 0xf599,
+ "file-type-prisma": 0xf52f,
+ "file-type-prolog": 0xf545,
+ "file-type-puppet": 0xf4e7,
+ "file-type-python": 0xf4ac,
+ "file-type-reason": 0xf549,
+ "file-type-rescript": 0xf52d,
+ "file-type-rollup": 0xf4ad,
+ "file-type-rust": 0xf4ae,
+ "file-type-sass": 0xf4ff,
+ "file-type-sbt": 0xf54b,
+ "file-type-scala": 0xf4c9,
+ "file-type-slim": 0xf54f,
+ "file-type-stylus": 0xf529,
+ "file-type-sublime": 0xf508,
+ "file-type-svelte": 0xf559,
+ "file-type-swift": 0xf4af,
+ "file-type-terraform": 0xf4b0,
+ "file-type-typescript": 0xf558,
+ "file-type-vala": 0xf51c,
+ "file-type-vite": 0xf4b1,
+ "file-type-vsc": 0xf51a,
+ "file-type-vue": 0xf4b2,
+ "file-type-web-assembly": 0xf4cb,
+ "file-type-webpack": 0xf4b3,
+ "file-type-windows": 0xf4b4,
+ "file-type-yarn": 0xf520,
+ "file-type-zig": 0xf539,
+ "file-zip": 0xf3ad,
+ "files": 0xf3ae,
+ "film-reel": 0xf45c,
+ "film-strip": 0xf4b7,
+ "filter": 0xeaf1,
+ "flag": 0xf3af,
+ "flag-hill": 0xeb20,
+ "flame": 0xeaf2,
+ "flask": 0xea79,
+ "flask-slash-circle": 0xebe1,
+ "floppy-disc": 0xf3b0,
+ "focus-window": 0xf3b1,
+ "fold-dashed": 0xede9,
+ "folder": 0xf3b2,
+ "folder-active": 0xeaf6,
+ "folder-arrow-right-up": 0xeaed,
+ "folder-check": 0xeaf6,
+ "folder-dashed": 0xf58d,
+ "folder-library": 0xebdf,
+ "folder-open": 0xeaf7,
+ "folder-opened": 0xf3b2,
+ "folder-plus": 0xea80,
+ "folders": 0xeaec,
+ "fork": 0xf41f,
+ "funnel": 0xeaf1,
+ "funnel-simple": 0xeb83,
+ "game-controller": 0xf45e,
+ "game-controller-retro": 0xf45f,
+ "gauge": 0xeacd,
+ "gear": 0xf393,
+ "gem": 0xf3b3,
+ "gift": 0xeaf9,
+ "git-branch": 0xf3b4,
+ "git-commit": 0xf3b6,
+ "git-commit-horizontal": 0xf3b5,
+ "git-compare": 0xf3b7,
+ "git-fetch": 0xec1d,
+ "git-fork": 0xf3b8,
+ "git-merge": 0xf3b9,
+ "git-pull": 0xf3bf,
+ "git-pull-request": 0xf3be,
+ "git-pull-request-closed": 0xf3ba,
+ "git-pull-request-create": 0xf3bb,
+ "git-pull-request-done": 0xf3bc,
+ "git-pull-request-draft": 0xf3bd,
+ "git-push": 0xf3c0,
+ "github": 0xea84,
+ "github-actions": 0xeaff,
+ "globe": 0xf3c1,
+ "graduation-cap": 0xeb21,
+ "graph": 0xeb03,
+ "graph-line": 0xebe2,
+ "graph-scatter": 0xebe3,
+ "grid": 0xf460,
+ "grid-plus": 0xf461,
+ "grid-sparkle": 0xf462,
+ "gripper": 0xeb04,
+ "hamburger": 0xf463,
+ "hammer": 0xedab,
+ "hash": 0xf4c5,
+ "hat": 0xf464,
+ "headphones": 0xf465,
+ "headset": 0xf466,
+ "heart": 0xf3c2,
+ "hexagon": 0xf4dc,
+ "history": 0xea82,
+ "home": 0xeb06,
+ "hourglass": 0xedcf,
+ "house": 0xeb06,
+ "i-circle": 0xf3c3,
+ "image": 0xf3c5,
+ "image-square": 0xf3c4,
+ "inbox": 0xeb09,
+ "infinity": 0xed8e,
+ "info": 0xf3c3,
+ "inspect": 0xebd1,
+ "issue": 0xf3c6,
+ "issue-closed": 0xf383,
+ "issue-draft": 0xebd9,
+ "issues": 0xf3aa,
+ "joystick": 0xf467,
+ "json": 0xf555,
+ "kebab-horizontal": 0xea7c,
+ "kebab-vertical": 0xeb10,
+ "key": 0xeb11,
+ "keyboard": 0xedac,
+ "keyboard-tab": 0xf3c7,
+ "laptop": 0xf3c9,
+ "layers": 0xf3fc,
+ "layout-dialog": 0xf58f,
+ "layout-empty": 0xf590,
+ "layout-floating-window": 0xf591,
+ "layout-panel-bottom": 0xf3ca,
+ "layout-panel-bottom-dock": 0xec49,
+ "layout-panel-bottom-on": 0xebf2,
+ "layout-panel-bottom-undock": 0xf2dd,
+ "layout-panel-off": 0xf3ca,
+ "layout-sidebar-left": 0xf3cb,
+ "layout-sidebar-left-dock": 0xec4a,
+ "layout-sidebar-left-off": 0xf3cb,
+ "layout-sidebar-left-on": 0xebf3,
+ "layout-sidebar-left-undock": 0xf23a,
+ "layout-sidebar-right": 0xf3cc,
+ "layout-sidebar-right-dock": 0xec4b,
+ "layout-sidebar-right-off": 0xf3cc,
+ "layout-sidebar-right-on": 0xebf4,
+ "layout-sidebar-right-undock": 0xf23b,
+ "layout-split-horizontal": 0xf3cd,
+ "layout-split-horizontal-dashed": 0xec5b,
+ "layout-split-horizontal-right-dock": 0xf305,
+ "layout-split-horizontal-right-undock": 0xf306,
+ "layout-split-vertical": 0xf3ce,
+ "leaf": 0xf468,
+ "lego": 0xf469,
+ "library": 0xeb9c,
+ "lightbulb": 0xf50d,
+ "lightbulb-sparkle": 0xf3f4,
+ "lightning": 0xf3cf,
+ "link": 0xeb15,
+ "link-external": 0xf3b1,
+ "list-bullets": 0xeda5,
+ "list-checks": 0xeab3,
+ "list-filter": 0xeb83,
+ "list-ordered": 0xeb16,
+ "list-todo": 0xf3d0,
+ "list-todo-subtask": 0xf425,
+ "list-x": 0xeabf,
+ "loading": 0xedca,
+ "location": 0xf3d6,
+ "lock": 0xf3d1,
+ "lock-locked": 0xf3d1,
+ "lock-unlocked": 0xf3d2,
+ "logo-azure": 0xebd8,
+ "logo-azure-devops": 0xebe8,
+ "logo-figma": 0xf42a,
+ "logo-github": 0xea84,
+ "logo-gitlab": 0xf42b,
+ "logo-jira": 0xf4e3,
+ "logo-linear": 0xf42c,
+ "logo-markdown": 0xf319,
+ "logo-mcp": 0xec47,
+ "logo-microsoft-teams": 0xf4e4,
+ "logo-notion": 0xf42d,
+ "logo-python": 0xec39,
+ "logo-sentry": 0xf4e5,
+ "logo-slack": 0xf42e,
+ "logo-vscode": 0xec29,
+ "logo-vscode-insiders": 0xec2a,
+ "logo-x": 0xeb72,
+ "mac-mini": 0xf46a,
+ "magic-wand": 0xebcf,
+ "magnet": 0xebae,
+ "magnifying-glass": 0xf3d5,
+ "magnifying-glass-fuzzy": 0xec0d,
+ "magnifying-glass-minus": 0xf3d3,
+ "magnifying-glass-plus": 0xf3d4,
+ "magnifying-glass-slash-circle": 0xeb4e,
+ "magnifying-glass-sparkle": 0xec50,
+ "magnifyingGlass": 0xf3d5,
+ "magnifyingGlass-minus": 0xf3d3,
+ "magnifyingGlass-plus": 0xf3d4,
+ "magnifyingGlass-slash-circle": 0xeb4e,
+ "mail": 0xf3a9,
+ "map": 0xec05,
+ "map-pin": 0xf3d6,
+ "mark-github": 0xea84,
+ "markdown": 0xf55d,
+ "mask-happy": 0xf46b,
+ "masks-happy": 0xf46c,
+ "mcp": 0xec47,
+ "megaphone": 0xeb1e,
+ "mention": 0xf375,
+ "menu": 0xeb94,
+ "merge": 0xebab,
+ "mic": 0xf3d7,
+ "microscope": 0xea79,
+ "minus": 0xf3d9,
+ "minus-circle": 0xf3d8,
+ "minus-small": 0xf46d,
+ "mobile": 0xf3da,
+ "moon": 0xf3db,
+ "moon-sparkle": 0xf46e,
+ "moon-z": 0xf46f,
+ "more": 0xea7c,
+ "music": 0xf3dc,
+ "mute": 0xf3f6,
+ "new-file": 0xed8d,
+ "new-folder": 0xea80,
+ "newspaper": 0xf470,
+ "note": 0xeb26,
+ "one-circle": 0xf420,
+ "organization": 0xea7e,
+ "organization-filled": 0xea7e,
+ "owl": 0xf543,
+ "package": 0xf4e2,
+ "package-zipper": 0xf552,
+ "paint-roller": 0xf471,
+ "palette": 0xf4b8,
+ "paperclip": 0xec54,
+ "paperplane": 0xf3dd,
+ "paragraph": 0xf4c3,
+ "pass": 0xf383,
+ "pause": 0xead1,
+ "pause-circle": 0xf3de,
+ "paw": 0xf473,
+ "pen-nib": 0xf2e3,
+ "pencil": 0xea73,
+ "pencil-square": 0xeddd,
+ "pentagon": 0xf4de,
+ "people": 0xea7e,
+ "people-3": 0xf474,
+ "percent": 0xec33,
+ "person": 0xf3df,
+ "person-add": 0xebcd,
+ "person-chat-bubble": 0xeb96,
+ "person-circle": 0xeb99,
+ "person-follow": 0xebcd,
+ "person-plus": 0xebcd,
+ "piano": 0xec1a,
+ "pie-chart": 0xf37d,
+ "pilcrow": 0xeb7d,
+ "pin": 0xf3e0,
+ "pin-slash": 0xf40b,
+ "pipe": 0xf531,
+ "plan": 0xf3e1,
+ "plane": 0xf475,
+ "play": 0xeb2c,
+ "play-bug": 0xeb91,
+ "play-circle": 0xf3e2,
+ "play-slow": 0xf421,
+ "play-super-fast": 0xf422,
+ "playback-loop": 0xf40d,
+ "plays-bug": 0xebdc,
+ "plug": 0xf3e3,
+ "plug-slash": 0xead0,
+ "plus": 0xf3e5,
+ "plus-circle": 0xf3e4,
+ "plus-minus": 0xf302,
+ "pointer-arrow": 0xf3e6,
+ "pug": 0xf565,
+ "pulse": 0xeb31,
+ "puzzle-piece": 0xf476,
+ "question": 0xf2e5,
+ "question-circle": 0xf3e7,
+ "quote": 0xeb33,
+ "radar": 0xf477,
+ "radio-tower": 0xeb34,
+ "rect-magnifying-glass": 0xf351,
+ "rect-magnifyingGlass": 0xf351,
+ "redo": 0xeb37,
+ "refresh": 0xeb37,
+ "regex": 0xeb38,
+ "remote-control": 0xf58a,
+ "remove": 0xf3d9,
+ "remove-close": 0xf409,
+ "replace": 0xf351,
+ "replace-all": 0xf351,
+ "report": 0xeb42,
+ "return": 0xebea,
+ "review": 0xf2e7,
+ "robot": 0xf3e8,
+ "rocket": 0xeb44,
+ "rocking-chair": 0xf478,
+ "rss": 0xeb47,
+ "ruler": 0xea96,
+ "rules": 0xf414,
+ "run": 0xeb2c,
+ "satellite": 0xf479,
+ "scales": 0xeb12,
+ "seal": 0xf3ea,
+ "seal-check": 0xf3e9,
+ "seal-question": 0xeb76,
+ "search": 0xf3d5,
+ "search-stop": 0xeb4e,
+ "send": 0xf3dd,
+ "server": 0xf48f,
+ "servers": 0xeb50,
+ "settings": 0xf3f0,
+ "settings-gear": 0xf393,
+ "shapes-square-circle": 0xf4b9,
+ "share": 0xec25,
+ "shield": 0xf3ee,
+ "shield-check": 0xf3eb,
+ "shield-question": 0xf3ec,
+ "shield-x": 0xf3ed,
+ "shoe-fast": 0xf47b,
+ "shopping-bag": 0xf47c,
+ "shopping-basket": 0xf47d,
+ "signal": 0xf47e,
+ "skills": 0xf3f4,
+ "skills-capability": 0xf3f4,
+ "slash-circle": 0xf3ef,
+ "sliders": 0xf3f0,
+ "smartwatch": 0xf2e9,
+ "smiley-happy": 0xf3f1,
+ "smiley-happy-square": 0xf47f,
+ "smiley-neutral": 0xf3f2,
+ "smiley-plus": 0xeb35,
+ "smiley-sad": 0xf3f3,
+ "snowflake": 0xf480,
+ "soccer-ball": 0xf481,
+ "sort-ascending": 0xf2ea,
+ "sort-descending": 0xf2eb,
+ "source-control": 0xf3b4,
+ "sparkle": 0xf3f4,
+ "sparkles": 0xf3f4,
+ "speaker-hifi": 0xf482,
+ "speaker-waves": 0xf3f5,
+ "speaker-x": 0xf3f6,
+ "spinner": 0xedca,
+ "split": 0xf42f,
+ "split-horizontal": 0xf3cd,
+ "split-vertical": 0xf3ce,
+ "sprint": 0xf426,
+ "square": 0xf3f7,
+ "square-dashed": 0xf58e,
+ "square-dot": 0xf423,
+ "squares": 0xf3fb,
+ "squares-minus": 0xf3f8,
+ "squares-plus": 0xf3f9,
+ "squares-x": 0xf3fa,
+ "stack": 0xf3fc,
+ "star": 0xf3fd,
+ "star-empty": 0xf3fd,
+ "star-full": 0xeb59,
+ "status-done": 0xf383,
+ "status-draft": 0xedbb,
+ "status-needs-attention": 0xf3aa,
+ "stop": 0xed86,
+ "stop-circle": 0xf3fe,
+ "stopwatch": 0xf418,
+ "storefront": 0xf483,
+ "sun": 0xf3ff,
+ "swatches": 0xf484,
+ "symbol-folder": 0xf3b2,
+ "sync": 0xea77,
+ "t-shirt": 0xf485,
+ "table": 0xf4bb,
+ "tabs": 0xf2be,
+ "tag": 0xf400,
+ "tags-chevron-down": 0xf57f,
+ "tags-chevron-left": 0xf581,
+ "tags-chevron-right": 0xf583,
+ "tags-chevron-up": 0xf585,
+ "target": 0xebf8,
+ "terminal": 0xf50e,
+ "terminal-rectangle": 0xf401,
+ "text-aa": 0xf55a,
+ "text-ab": 0xeb2e,
+ "text-b": 0xeaa3,
+ "text-c": 0xf4cf,
+ "text-d": 0xf4cd,
+ "text-italic": 0xeb0d,
+ "text-j": 0xf4f8,
+ "text-r": 0xf4d2,
+ "text-s": 0xf524,
+ "text-strikethrough": 0xf525,
+ "text-t": 0xf4d0,
+ "text-t-square": 0xf402,
+ "text-tt": 0xeb69,
+ "text-y": 0xf4e0,
+ "thinking-high": 0xf427,
+ "thinking-low": 0xf428,
+ "thinking-medium": 0xf429,
+ "threads-parallel": 0xf40e,
+ "threads-single": 0xf40f,
+ "three-bars": 0xeb6a,
+ "thumbs-down": 0xf560,
+ "thumbs-up": 0xf561,
+ "thumbsdown": 0xf560,
+ "thumbsup": 0xf561,
+ "traffic-cone": 0xf34d,
+ "trafficCone": 0xf34d,
+ "trash": 0xf403,
+ "trashcan": 0xf403,
+ "tray": 0xeb09,
+ "treasure-chest": 0xf486,
+ "trending-down": 0xf487,
+ "trending-up": 0xf488,
+ "triangle-small-down": 0xeb6e,
+ "triangle-small-left": 0xeb6f,
+ "triangle-small-right": 0xeb70,
+ "triangle-small-up": 0xeb71,
+ "twig": 0xf504,
+ "unfold-dashed": 0xede8,
+ "unlock": 0xf3d2,
+ "unmute": 0xf3f5,
+ "unverified": 0xeb76,
+ "vault": 0xf489,
+ "verified": 0xf3e9,
+ "versions": 0xf404,
+ "video-camera": 0xf405,
+ "vm": 0xf3a8,
+ "vr": 0xf48a,
+ "vr-headset": 0xf562,
+ "vr-headset-head": 0xf563,
+ "wallet": 0xf48b,
+ "wand": 0xf3f4,
+ "warning": 0xea6c,
+ "watch": 0xeb7c,
+ "waveform": 0xf4c4,
+ "whole-word": 0xeb7e,
+ "window": 0xf406,
+ "window-pointer-arrow": 0xebd1,
+ "windows": 0xf407,
+ "wrench": 0xeb6d,
+ "x": 0xf409,
+ "x-circle": 0xf408,
+ "yarn": 0xf514,
+ "zap": 0xf3f4,
+ "zipper": 0xf552,
+ "zoom-in": 0xf3d4,
+ "zoom-out": 0xf3d3,
+ "zzz": 0xf48e,
+} as const;
+
+// Exact Windows renderer tables. The shared font is byte-identical, but the
+// shipped Windows renderer assigns a different codepoint range to many names.
+// @evidence recovered/frontend/app/assets/index-UbX-y3il.js#sha256=80464803b50f478598080bdc1b91da3996c6b74168e2351ea26f620f2ec62ba5#q5t/j5t
+export const SAND_ICON_OUTLINE_CODE_POINTS_WINDOWS = {
+ "account": 0xeb99,
+ "add": 0xf3e5,
+ "agent": 0xf413,
+ "agent-circle": 0xf430,
+ "agent-square": 0xf431,
+ "agents": 0xf432,
+ "agents-swarm": 0xf412,
+ "alarm-clock": 0xf58c,
+ "alert": 0xea6c,
+ "archive": 0xea98,
+ "army-base": 0xf433,
+ "arrow-block-down": 0xf35d,
+ "arrow-block-left": 0xf35e,
+ "arrow-block-line-down": 0xf56f,
+ "arrow-block-line-left": 0xf571,
+ "arrow-block-line-right": 0xf573,
+ "arrow-block-line-up": 0xf575,
+ "arrow-block-right": 0xf35f,
+ "arrow-block-up": 0xf360,
+ "arrow-bracket-from-down": 0xf34e,
+ "arrow-bracket-from-left": 0xf34f,
+ "arrow-bracket-from-right": 0xf359,
+ "arrow-bracket-from-up": 0xec28,
+ "arrow-bracket-from-up-dashed": 0xec27,
+ "arrow-bracket-to-down": 0xf4e1,
+ "arrow-bracket-to-left": 0xf358,
+ "arrow-bracket-to-right": 0xf357,
+ "arrow-bracket-to-up": 0xf356,
+ "arrow-ccw": 0xead2,
+ "arrow-circle-down": 0xf361,
+ "arrow-circle-left": 0xf362,
+ "arrow-circle-right": 0xf363,
+ "arrow-circle-up": 0xf364,
+ "arrow-cw": 0xeb37,
+ "arrow-down": 0xf365,
+ "arrow-left": 0xf368,
+ "arrow-left-down": 0xf366,
+ "arrow-left-up": 0xf367,
+ "arrow-right": 0xf36b,
+ "arrow-right-down": 0xf369,
+ "arrow-right-up": 0xf36a,
+ "arrow-square-down": 0xf36c,
+ "arrow-square-from-down": 0xf355,
+ "arrow-square-from-left": 0xf354,
+ "arrow-square-from-right": 0xea6e,
+ "arrow-square-from-up": 0xebac,
+ "arrow-square-left": 0xf36f,
+ "arrow-square-left-down": 0xf36d,
+ "arrow-square-left-top": 0xf36e,
+ "arrow-square-left-up": 0xf36e,
+ "arrow-square-right": 0xf372,
+ "arrow-square-right-down": 0xf370,
+ "arrow-square-right-top": 0xf371,
+ "arrow-square-right-up": 0xf371,
+ "arrow-square-to-down": 0xedae,
+ "arrow-square-to-left": 0xf353,
+ "arrow-square-to-right": 0xea6f,
+ "arrow-square-to-up": 0xf352,
+ "arrow-square-up": 0xf373,
+ "arrow-swap": 0xebcb,
+ "arrow-u-up-left": 0xed84,
+ "arrow-u-up-right": 0xf31e,
+ "arrow-up": 0xf374,
+ "arrows-both-horizontal": 0xea99,
+ "arrows-both-vertical": 0xf2ca,
+ "arrows-ccw": 0xf30f,
+ "arrows-ccw-angular": 0xf2cc,
+ "arrows-contract": 0xf310,
+ "arrows-contract-simple": 0xf2cd,
+ "arrows-cw": 0xea77,
+ "arrows-down-up": 0xf2ce,
+ "arrows-expand": 0xf311,
+ "arrows-expand-simple": 0xf2cf,
+ "arrows-left-right": 0xebcb,
+ "arrows-out-cardinal": 0xeb22,
+ "asterisk": 0xedbf,
+ "at": 0xf375,
+ "atom": 0xf4bc,
+ "bandaid": 0xf435,
+ "banknote": 0xf500,
+ "banknotes-stack": 0xf436,
+ "barbell": 0xf437,
+ "basketball": 0xf438,
+ "beach-umbrella": 0xf439,
+ "beaker": 0xea79,
+ "beaker-stop": 0xebe1,
+ "beehouse": 0xf43a,
+ "bell": 0xeaa2,
+ "bell-dot": 0xeb9a,
+ "bell-slash": 0xec08,
+ "binary": 0xf556,
+ "binoculars": 0xeb68,
+ "bluetooth": 0xf43b,
+ "board-kanban": 0xf376,
+ "book": 0xf414,
+ "book-open": 0xf377,
+ "bookmark": 0xf378,
+ "books": 0xeb9c,
+ "bowtie": 0xf4f3,
+ "bracket": 0xf555,
+ "bracket-dot": 0xebe5,
+ "bracket-error": 0xebe6,
+ "brackets-curly": 0xf555,
+ "brackets-curly-dot": 0xebe5,
+ "brackets-curly-x": 0xebe6,
+ "brackets-square": 0xea8a,
+ "brain": 0xed87,
+ "brain-hourglass": 0xf43c,
+ "brain-simple": 0xf43d,
+ "brain-simplest": 0xf43e,
+ "brain-slash": 0xf43f,
+ "briefcase": 0xeaac,
+ "browser": 0xf379,
+ "browsers": 0xf37a,
+ "brush": 0xedb3,
+ "bug": 0xf37b,
+ "bugbot": 0xec59,
+ "building": 0xf440,
+ "buildings": 0xf441,
+ "bullseye": 0xebf8,
+ "calculator": 0xf442,
+ "calendar": 0xeab0,
+ "calendar-hourglass": 0xf415,
+ "camera": 0xf37c,
+ "car": 0xf443,
+ "cardholder": 0xf444,
+ "castle": 0xf445,
+ "cd": 0xf4b5,
+ "chart-bars": 0xeb03,
+ "chart-line": 0xebe2,
+ "chart-pie": 0xf37d,
+ "chart-pyramid": 0xf419,
+ "chart-scatter": 0xebe3,
+ "chat-bubble": 0xf381,
+ "chat-bubble-chevrons-left-right": 0xf37e,
+ "chat-bubble-ellipsis": 0xf37f,
+ "chat-bubble-exclamation": 0xeb42,
+ "chat-bubble-pencil": 0xedc3,
+ "chat-bubble-question": 0xf380,
+ "chat-bubbles": 0xf382,
+ "chat-bubbles-grid": 0xf424,
+ "chatBubble": 0xf381,
+ "chatBubble-ellipsis": 0xf37f,
+ "chatBubble-exclamation": 0xeb42,
+ "chatBubble-question": 0xf380,
+ "chatBubbles": 0xf382,
+ "check": 0xf385,
+ "check-circle": 0xf383,
+ "check-square": 0xf384,
+ "checks": 0xebb1,
+ "chef-hat": 0xf447,
+ "chess-king": 0xf448,
+ "chess-tower": 0xf449,
+ "chevron-circle-down": 0xf577,
+ "chevron-circle-left": 0xf579,
+ "chevron-circle-right": 0xf57b,
+ "chevron-circle-up": 0xf57d,
+ "chevron-down": 0xf387,
+ "chevron-down-small": 0xf386,
+ "chevron-left": 0xf389,
+ "chevron-left-small": 0xf388,
+ "chevron-right": 0xf38b,
+ "chevron-right-small": 0xf38a,
+ "chevron-up": 0xf38d,
+ "chevron-up-small": 0xf38c,
+ "chevrons-down": 0xeaf3,
+ "chevrons-down-up": 0xeaf5,
+ "chevrons-left": 0xedd4,
+ "chevrons-left-right": 0xf2d7,
+ "chevrons-right": 0xf31d,
+ "chevrons-right-dotted-left": 0xedc6,
+ "chevrons-up": 0xeaf4,
+ "chevrons-up-down": 0xedcb,
+ "chip": 0xec19,
+ "chip-simple": 0xf41a,
+ "circle": 0xf38f,
+ "circle-circle": 0xf38e,
+ "circle-dashed": 0xedbb,
+ "circles": 0xf390,
+ "circles-check": 0xec2e,
+ "clipboard": 0xedc9,
+ "clock": 0xf391,
+ "clone": 0xf399,
+ "close": 0xf409,
+ "cloud": 0xf392,
+ "cloud-arrow-down": 0xeac2,
+ "cloud-arrow-up": 0xeac3,
+ "cloud-download": 0xeac2,
+ "cloud-upload": 0xeac3,
+ "code": 0xf44a,
+ "code-brackets": 0xea8a,
+ "code-simple": 0xf4c1,
+ "cog": 0xf393,
+ "collection": 0xf395,
+ "collection-plus": 0xf394,
+ "color-mode": 0xf396,
+ "command": 0xf397,
+ "comment": 0xea6b,
+ "comment-dashed": 0xec0e,
+ "comment-discussion": 0xf382,
+ "comment-dot": 0xec0a,
+ "comments": 0xeac7,
+ "compass": 0xf398,
+ "compass-check": 0xebd7,
+ "compass-dot": 0xebd6,
+ "conversation": 0xf382,
+ "cookie": 0xf4f6,
+ "copilot": 0xf3f4,
+ "copy": 0xf399,
+ "corners-in": 0xeb4d,
+ "corners-out": 0xeb4c,
+ "corners-out-check": 0xf2da,
+ "corners-out-sparkle": 0xf44d,
+ "cost-high": 0xf41b,
+ "cost-low": 0xf41c,
+ "cost-medium": 0xf41d,
+ "credit-card": 0xf39a,
+ "cross-medical": 0xf44e,
+ "crosshair": 0xf44f,
+ "crown": 0xf53f,
+ "crystal-ball": 0xf450,
+ "cube": 0xf39d,
+ "cube-coordinates": 0xf451,
+ "cube-nodes": 0xf39b,
+ "cube-transparent": 0xf39c,
+ "currency-btc": 0xf452,
+ "currency-dollar": 0xf4c6,
+ "currency-eth": 0xf4b6,
+ "cursor-logo": 0xf39e,
+ "cursor-text": 0xf304,
+ "cutlery": 0xf455,
+ "cylinder": 0xf456,
+ "dashboard": 0xf457,
+ "database": 0xf39f,
+ "database-network": 0xf458,
+ "debug-pause": 0xead1,
+ "debug-restart": 0xead2,
+ "debug-start": 0xeb2c,
+ "debug-stop": 0xf3fe,
+ "deckchair-umbrella": 0xf459,
+ "desktop-download": 0xeac2,
+ "device-camera": 0xf37c,
+ "device-camera-video": 0xf405,
+ "device-desktop": 0xf3a8,
+ "device-mobile": 0xf3da,
+ "diagram": 0xf41e,
+ "diff": 0xf3a7,
+ "diff-added": 0xf3a0,
+ "diff-ignored": 0xf3a1,
+ "diff-modified": 0xf3a2,
+ "diff-multiple": 0xf3a3,
+ "diff-removed": 0xf3a4,
+ "diff-renamed": 0xf3a5,
+ "diff-single": 0xf3a6,
+ "diff-single-arrow-right-up": 0xec0b,
+ "diff-single-dot": 0xec0c,
+ "discard": 0xf409,
+ "display": 0xf3a8,
+ "display-check": 0xeb79,
+ "display-circle": 0xeb7a,
+ "display-connect": 0xeba9,
+ "display-play": 0xeb7b,
+ "display-waves": 0xf586,
+ "displays": 0xf588,
+ "dots-3-horizontal": 0xea7c,
+ "dots-3-vertical": 0xeb10,
+ "drop": 0xf4f5,
+ "easel": 0xf45a,
+ "edit": 0xea73,
+ "elephant": 0xf4d6,
+ "ellipsis": 0xea7c,
+ "envelope": 0xf3a9,
+ "envelope-open": 0xeb1b,
+ "eraser": 0xeda0,
+ "error": 0xf408,
+ "exclamation-circle": 0xf3aa,
+ "exclamation-triangle": 0xea6c,
+ "execution-parallel": 0xf410,
+ "execution-sequential": 0xf411,
+ "extensions": 0xf3ab,
+ "eye": 0xf3ac,
+ "eye-closed": 0xf338,
+ "eye-slash": 0xeae7,
+ "fast-backward": 0xf416,
+ "fast-forward": 0xf417,
+ "feedback": 0xf37f,
+ "file": 0xf3ad,
+ "file-add": 0xed8d,
+ "file-arrow-right-up": 0xeaee,
+ "file-binary": 0xf3ad,
+ "file-chevrons-left-right": 0xeae9,
+ "file-code": 0xf3ad,
+ "file-directory": 0xf3b2,
+ "file-directory-create": 0xea80,
+ "file-image": 0xeaea,
+ "file-list": 0xec53,
+ "file-lock": 0xeafa,
+ "file-media": 0xeaea,
+ "file-pdf": 0xeaeb,
+ "file-plus": 0xed8d,
+ "file-text": 0xf4bd,
+ "file-type-adobe-illustrator": 0xf4ed,
+ "file-type-adobe-photoshop": 0xf4eb,
+ "file-type-babel": 0xf53b,
+ "file-type-bazel": 0xf522,
+ "file-type-bevy": 0xf527,
+ "file-type-bicep": 0xf4fd,
+ "file-type-biomejs": 0xf593,
+ "file-type-bower": 0xf567,
+ "file-type-bun": 0xf595,
+ "file-type-c-plus-plus": 0xf50f,
+ "file-type-c-sharp": 0xf510,
+ "file-type-clojure": 0xf4d4,
+ "file-type-crystal": 0xf4d8,
+ "file-type-cuda": 0xf541,
+ "file-type-dart": 0xf597,
+ "file-type-docker": 0xf4a6,
+ "file-type-ejs": 0xf54d,
+ "file-type-elixir": 0xf4ef,
+ "file-type-eslint": 0xf535,
+ "file-type-f-sharp": 0xf4da,
+ "file-type-firebase": 0xf4fb,
+ "file-type-geckodriver": 0xf516,
+ "file-type-git-meta": 0xf4a7,
+ "file-type-go": 0xf55b,
+ "file-type-godot": 0xf51e,
+ "file-type-grails": 0xf502,
+ "file-type-graphql": 0xf4a8,
+ "file-type-groovy": 0xf537,
+ "file-type-grunt": 0xf569,
+ "file-type-gulp": 0xf547,
+ "file-type-haml": 0xf55f,
+ "file-type-handlebars": 0xf554,
+ "file-type-haskell": 0xf4e9,
+ "file-type-ionic": 0xf4a9,
+ "file-type-java": 0xf4f9,
+ "file-type-javascript": 0xf557,
+ "file-type-julia": 0xf4aa,
+ "file-type-jupyter": 0xf512,
+ "file-type-karma": 0xf4c2,
+ "file-type-kotlin": 0xf4ab,
+ "file-type-latex": 0xf50a,
+ "file-type-liquid": 0xf53d,
+ "file-type-maven": 0xf551,
+ "file-type-mustache": 0xf50c,
+ "file-type-npm": 0xf518,
+ "file-type-nunjucks": 0xf533,
+ "file-type-ocaml": 0xf56b,
+ "file-type-odata": 0xf506,
+ "file-type-pdf": 0xf55c,
+ "file-type-perl": 0xf56d,
+ "file-type-platformio": 0xf52b,
+ "file-type-powershell": 0xf4f1,
+ "file-type-prettier": 0xf599,
+ "file-type-prisma": 0xf52f,
+ "file-type-prolog": 0xf545,
+ "file-type-puppet": 0xf4e7,
+ "file-type-python": 0xf4ac,
+ "file-type-reason": 0xf549,
+ "file-type-rescript": 0xf52d,
+ "file-type-rollup": 0xf4ad,
+ "file-type-rust": 0xf4ae,
+ "file-type-sass": 0xf4ff,
+ "file-type-sbt": 0xf54b,
+ "file-type-scala": 0xf4c9,
+ "file-type-slim": 0xf54f,
+ "file-type-stylus": 0xf529,
+ "file-type-sublime": 0xf508,
+ "file-type-svelte": 0xf559,
+ "file-type-swift": 0xf4af,
+ "file-type-terraform": 0xf4b0,
+ "file-type-typescript": 0xf558,
+ "file-type-vala": 0xf51c,
+ "file-type-vite": 0xf4b1,
+ "file-type-vsc": 0xf51a,
+ "file-type-vue": 0xf4b2,
+ "file-type-web-assembly": 0xf4cb,
+ "file-type-webpack": 0xf4b3,
+ "file-type-windows": 0xf4b4,
+ "file-type-yarn": 0xf520,
+ "file-type-zig": 0xf539,
+ "file-zip": 0xf3ad,
+ "files": 0xf3ae,
+ "film-reel": 0xf45c,
+ "film-strip": 0xf4b7,
+ "filter": 0xeaf1,
+ "flag": 0xf3af,
+ "flag-hill": 0xeb20,
+ "flame": 0xeaf2,
+ "flask": 0xea79,
+ "flask-slash-circle": 0xebe1,
+ "floppy-disc": 0xf3b0,
+ "focus-window": 0xf3b1,
+ "fold-dashed": 0xede9,
+ "folder": 0xf3b2,
+ "folder-active": 0xeaf6,
+ "folder-arrow-right-up": 0xeaed,
+ "folder-check": 0xeaf6,
+ "folder-dashed": 0xf58d,
+ "folder-library": 0xebdf,
+ "folder-open": 0xeaf7,
+ "folder-opened": 0xf3b2,
+ "folder-plus": 0xea80,
+ "folders": 0xeaec,
+ "fork": 0xf41f,
+ "funnel": 0xeaf1,
+ "funnel-simple": 0xeb83,
+ "game-controller": 0xf45e,
+ "game-controller-retro": 0xf45f,
+ "gauge": 0xeacd,
+ "gear": 0xf393,
+ "gem": 0xf3b3,
+ "gift": 0xeaf9,
+ "git-branch": 0xf3b4,
+ "git-commit": 0xf3b6,
+ "git-commit-horizontal": 0xf3b5,
+ "git-compare": 0xf3b7,
+ "git-fetch": 0xec1d,
+ "git-fork": 0xf3b8,
+ "git-merge": 0xf3b9,
+ "git-pull": 0xf3bf,
+ "git-pull-request": 0xf3be,
+ "git-pull-request-closed": 0xf3ba,
+ "git-pull-request-create": 0xf3bb,
+ "git-pull-request-done": 0xf3bc,
+ "git-pull-request-draft": 0xf3bd,
+ "git-push": 0xf3c0,
+ "github": 0xea84,
+ "github-actions": 0xeaff,
+ "globe": 0xf3c1,
+ "graduation-cap": 0xeb21,
+ "graph": 0xeb03,
+ "graph-line": 0xebe2,
+ "graph-scatter": 0xebe3,
+ "grid": 0xf460,
+ "grid-plus": 0xf461,
+ "grid-sparkle": 0xf462,
+ "gripper": 0xeb04,
+ "hamburger": 0xf463,
+ "hammer": 0xedab,
+ "hash": 0xf4c5,
+ "hat": 0xf464,
+ "headphones": 0xf465,
+ "headset": 0xf466,
+ "heart": 0xf3c2,
+ "hexagon": 0xf4dc,
+ "history": 0xea82,
+ "home": 0xeb06,
+ "hourglass": 0xedcf,
+ "house": 0xeb06,
+ "i-circle": 0xf3c3,
+ "image": 0xf3c5,
+ "image-square": 0xf3c4,
+ "inbox": 0xeb09,
+ "infinity": 0xed8e,
+ "info": 0xf3c3,
+ "inspect": 0xebd1,
+ "issue": 0xf3c6,
+ "issue-closed": 0xf383,
+ "issue-draft": 0xebd9,
+ "issues": 0xf3aa,
+ "joystick": 0xf467,
+ "json": 0xf555,
+ "kebab-horizontal": 0xea7c,
+ "kebab-vertical": 0xeb10,
+ "key": 0xeb11,
+ "keyboard": 0xedac,
+ "keyboard-tab": 0xf3c7,
+ "laptop": 0xf3c9,
+ "layers": 0xf3fc,
+ "layout-dialog": 0xf58f,
+ "layout-empty": 0xf590,
+ "layout-floating-window": 0xf591,
+ "layout-panel-bottom": 0xf3ca,
+ "layout-panel-bottom-dock": 0xec49,
+ "layout-panel-bottom-on": 0xebf2,
+ "layout-panel-bottom-undock": 0xf2dd,
+ "layout-panel-off": 0xf3ca,
+ "layout-sidebar-left": 0xf3cb,
+ "layout-sidebar-left-dock": 0xec4a,
+ "layout-sidebar-left-off": 0xf3cb,
+ "layout-sidebar-left-on": 0xebf3,
+ "layout-sidebar-left-undock": 0xf23a,
+ "layout-sidebar-right": 0xf3cc,
+ "layout-sidebar-right-dock": 0xec4b,
+ "layout-sidebar-right-off": 0xf3cc,
+ "layout-sidebar-right-on": 0xebf4,
+ "layout-sidebar-right-undock": 0xf23b,
+ "layout-split-horizontal": 0xf3cd,
+ "layout-split-horizontal-dashed": 0xec5b,
+ "layout-split-horizontal-right-dock": 0xf305,
+ "layout-split-horizontal-right-undock": 0xf306,
+ "layout-split-vertical": 0xf3ce,
+ "leaf": 0xf468,
+ "lego": 0xf469,
+ "library": 0xeb9c,
+ "lightbulb": 0xf50d,
+ "lightbulb-sparkle": 0xf3f4,
+ "lightning": 0xf3cf,
+ "link": 0xeb15,
+ "link-external": 0xf3b1,
+ "list-bullets": 0xeda5,
+ "list-checks": 0xeab3,
+ "list-filter": 0xeb83,
+ "list-ordered": 0xeb16,
+ "list-todo": 0xf3d0,
+ "list-todo-subtask": 0xf425,
+ "list-x": 0xeabf,
+ "loading": 0xedca,
+ "location": 0xf3d6,
+ "lock": 0xf3d1,
+ "lock-locked": 0xf3d1,
+ "lock-unlocked": 0xf3d2,
+ "logo-azure": 0xebd8,
+ "logo-azure-devops": 0xebe8,
+ "logo-figma": 0xf42a,
+ "logo-github": 0xea84,
+ "logo-gitlab": 0xf42b,
+ "logo-jira": 0xf4e3,
+ "logo-linear": 0xf42c,
+ "logo-markdown": 0xf319,
+ "logo-mcp": 0xec47,
+ "logo-microsoft-teams": 0xf4e4,
+ "logo-notion": 0xf42d,
+ "logo-python": 0xec39,
+ "logo-sentry": 0xf4e5,
+ "logo-slack": 0xf42e,
+ "logo-vscode": 0xec29,
+ "logo-vscode-insiders": 0xec2a,
+ "logo-x": 0xeb72,
+ "mac-mini": 0xf46a,
+ "magic-wand": 0xebcf,
+ "magnet": 0xebae,
+ "magnifying-glass": 0xf3d5,
+ "magnifying-glass-fuzzy": 0xec0d,
+ "magnifying-glass-minus": 0xf3d3,
+ "magnifying-glass-plus": 0xf3d4,
+ "magnifying-glass-slash-circle": 0xeb4e,
+ "magnifying-glass-sparkle": 0xec50,
+ "magnifyingGlass": 0xf3d5,
+ "magnifyingGlass-minus": 0xf3d3,
+ "magnifyingGlass-plus": 0xf3d4,
+ "magnifyingGlass-slash-circle": 0xeb4e,
+ "mail": 0xf3a9,
+ "map": 0xec05,
+ "map-pin": 0xf3d6,
+ "mark-github": 0xea84,
+ "markdown": 0xf55d,
+ "mask-happy": 0xf46b,
+ "masks-happy": 0xf46c,
+ "mcp": 0xec47,
+ "megaphone": 0xeb1e,
+ "mention": 0xf375,
+ "menu": 0xeb94,
+ "merge": 0xebab,
+ "mic": 0xf3d7,
+ "microscope": 0xea79,
+ "minus": 0xf3d9,
+ "minus-circle": 0xf3d8,
+ "minus-small": 0xf46d,
+ "mobile": 0xf3da,
+ "moon": 0xf3db,
+ "moon-sparkle": 0xf46e,
+ "moon-z": 0xf46f,
+ "more": 0xea7c,
+ "music": 0xf3dc,
+ "mute": 0xf3f6,
+ "new-file": 0xed8d,
+ "new-folder": 0xea80,
+ "newspaper": 0xf470,
+ "note": 0xeb26,
+ "one-circle": 0xf420,
+ "organization": 0xea7e,
+ "organization-filled": 0xea7e,
+ "owl": 0xf543,
+ "package": 0xf4e2,
+ "package-zipper": 0xf552,
+ "paint-roller": 0xf471,
+ "palette": 0xf4b8,
+ "paperclip": 0xec54,
+ "paperplane": 0xf3dd,
+ "paragraph": 0xf4c3,
+ "pass": 0xf383,
+ "pause": 0xead1,
+ "pause-circle": 0xf3de,
+ "paw": 0xf473,
+ "pen-nib": 0xf2e3,
+ "pencil": 0xea73,
+ "pencil-square": 0xeddd,
+ "pentagon": 0xf4de,
+ "people": 0xea7e,
+ "people-3": 0xf474,
+ "percent": 0xec33,
+ "person": 0xf3df,
+ "person-add": 0xebcd,
+ "person-chat-bubble": 0xeb96,
+ "person-circle": 0xeb99,
+ "person-follow": 0xebcd,
+ "person-plus": 0xebcd,
+ "piano": 0xec1a,
+ "pie-chart": 0xf37d,
+ "pilcrow": 0xeb7d,
+ "pin": 0xf3e0,
+ "pin-slash": 0xf40b,
+ "pipe": 0xf531,
+ "plan": 0xf3e1,
+ "plane": 0xf475,
+ "play": 0xeb2c,
+ "play-bug": 0xeb91,
+ "play-circle": 0xf3e2,
+ "play-slow": 0xf421,
+ "play-super-fast": 0xf422,
+ "playback-loop": 0xf40d,
+ "plays-bug": 0xebdc,
+ "plug": 0xf3e3,
+ "plug-slash": 0xead0,
+ "plus": 0xf3e5,
+ "plus-circle": 0xf3e4,
+ "plus-minus": 0xf302,
+ "pointer-arrow": 0xf3e6,
+ "pug": 0xf565,
+ "pulse": 0xeb31,
+ "puzzle-piece": 0xf476,
+ "question": 0xf2e5,
+ "question-circle": 0xf3e7,
+ "quote": 0xeb33,
+ "radar": 0xf477,
+ "radio-tower": 0xeb34,
+ "rect-magnifying-glass": 0xf351,
+ "rect-magnifyingGlass": 0xf351,
+ "redo": 0xeb37,
+ "refresh": 0xeb37,
+ "regex": 0xeb38,
+ "remote-control": 0xf58a,
+ "remove": 0xf3d9,
+ "remove-close": 0xf409,
+ "replace": 0xf351,
+ "replace-all": 0xf351,
+ "report": 0xeb42,
+ "return": 0xebea,
+ "review": 0xf2e7,
+ "robot": 0xf3e8,
+ "rocket": 0xeb44,
+ "rocking-chair": 0xf478,
+ "rss": 0xeb47,
+ "ruler": 0xea96,
+ "rules": 0xf414,
+ "run": 0xeb2c,
+ "satellite": 0xf479,
+ "scales": 0xeb12,
+ "seal": 0xf3ea,
+ "seal-check": 0xf3e9,
+ "seal-question": 0xeb76,
+ "search": 0xf3d5,
+ "search-stop": 0xeb4e,
+ "send": 0xf3dd,
+ "server": 0xf48f,
+ "servers": 0xeb50,
+ "settings": 0xf3f0,
+ "settings-gear": 0xf393,
+ "shapes-square-circle": 0xf4b9,
+ "share": 0xec25,
+ "shield": 0xf3ee,
+ "shield-check": 0xf3eb,
+ "shield-question": 0xf3ec,
+ "shield-x": 0xf3ed,
+ "shoe-fast": 0xf47b,
+ "shopping-bag": 0xf47c,
+ "shopping-basket": 0xf47d,
+ "signal": 0xf47e,
+ "skills": 0xf3f4,
+ "skills-capability": 0xf3f4,
+ "slash-circle": 0xf3ef,
+ "sliders": 0xf3f0,
+ "smartwatch": 0xf2e9,
+ "smiley-happy": 0xf3f1,
+ "smiley-happy-square": 0xf47f,
+ "smiley-neutral": 0xf3f2,
+ "smiley-plus": 0xeb35,
+ "smiley-sad": 0xf3f3,
+ "snowflake": 0xf480,
+ "soccer-ball": 0xf481,
+ "sort-ascending": 0xf2ea,
+ "sort-descending": 0xf2eb,
+ "source-control": 0xf3b4,
+ "sparkle": 0xf3f4,
+ "sparkles": 0xf3f4,
+ "speaker-hifi": 0xf482,
+ "speaker-waves": 0xf3f5,
+ "speaker-x": 0xf3f6,
+ "spinner": 0xedca,
+ "split": 0xf42f,
+ "split-horizontal": 0xf3cd,
+ "split-vertical": 0xf3ce,
+ "sprint": 0xf426,
+ "square": 0xf3f7,
+ "square-dashed": 0xf58e,
+ "square-dot": 0xf423,
+ "squares": 0xf3fb,
+ "squares-minus": 0xf3f8,
+ "squares-plus": 0xf3f9,
+ "squares-x": 0xf3fa,
+ "stack": 0xf3fc,
+ "star": 0xf3fd,
+ "star-empty": 0xf3fd,
+ "star-full": 0xeb59,
+ "status-done": 0xf383,
+ "status-draft": 0xedbb,
+ "status-needs-attention": 0xf3aa,
+ "stop": 0xed86,
+ "stop-circle": 0xf3fe,
+ "stopwatch": 0xf418,
+ "storefront": 0xf483,
+ "sun": 0xf3ff,
+ "swatches": 0xf484,
+ "symbol-folder": 0xf3b2,
+ "sync": 0xea77,
+ "t-shirt": 0xf485,
+ "table": 0xf4bb,
+ "tabs": 0xf2be,
+ "tag": 0xf400,
+ "tags-chevron-down": 0xf57f,
+ "tags-chevron-left": 0xf581,
+ "tags-chevron-right": 0xf583,
+ "tags-chevron-up": 0xf585,
+ "target": 0xebf8,
+ "terminal": 0xf50e,
+ "terminal-rectangle": 0xf401,
+ "text-aa": 0xf55a,
+ "text-ab": 0xeb2e,
+ "text-b": 0xeaa3,
+ "text-c": 0xf4cf,
+ "text-d": 0xf4cd,
+ "text-italic": 0xeb0d,
+ "text-j": 0xf4f8,
+ "text-r": 0xf4d2,
+ "text-s": 0xf524,
+ "text-strikethrough": 0xf525,
+ "text-t": 0xf4d0,
+ "text-t-square": 0xf402,
+ "text-tt": 0xeb69,
+ "text-y": 0xf4e0,
+ "thinking-high": 0xf427,
+ "thinking-low": 0xf428,
+ "thinking-medium": 0xf429,
+ "threads-parallel": 0xf40e,
+ "threads-single": 0xf40f,
+ "three-bars": 0xeb6a,
+ "thumbs-down": 0xf560,
+ "thumbs-up": 0xf561,
+ "thumbsdown": 0xf560,
+ "thumbsup": 0xf561,
+ "traffic-cone": 0xf34d,
+ "trafficCone": 0xf34d,
+ "trash": 0xf403,
+ "trashcan": 0xf403,
+ "tray": 0xeb09,
+ "treasure-chest": 0xf486,
+ "trending-down": 0xf487,
+ "trending-up": 0xf488,
+ "triangle-small-down": 0xeb6e,
+ "triangle-small-left": 0xeb6f,
+ "triangle-small-right": 0xeb70,
+ "triangle-small-up": 0xeb71,
+ "twig": 0xf504,
+ "unfold-dashed": 0xede8,
+ "unlock": 0xf3d2,
+ "unmute": 0xf3f5,
+ "unverified": 0xeb76,
+ "vault": 0xf489,
+ "verified": 0xf3e9,
+ "versions": 0xf404,
+ "video-camera": 0xf405,
+ "vm": 0xf3a8,
+ "vr": 0xf48a,
+ "vr-headset": 0xf562,
+ "vr-headset-head": 0xf563,
+ "wallet": 0xf48b,
+ "wand": 0xf3f4,
+ "warning": 0xea6c,
+ "watch": 0xeb7c,
+ "waveform": 0xf4c4,
+ "whole-word": 0xeb7e,
+ "window": 0xf406,
+ "window-pointer-arrow": 0xebd1,
+ "windows": 0xf407,
+ "wrench": 0xeb6d,
+ "x": 0xf409,
+ "x-circle": 0xf408,
+ "yarn": 0xf514,
+ "zap": 0xf3f4,
+ "zipper": 0xf552,
+ "zoom-in": 0xf3d4,
+ "zoom-out": 0xf3d3,
+ "zzz": 0xf48e,
+} as const;
+
+export const SAND_ICON_FILLED_CODE_POINTS_WINDOWS = {
+ "account": 0xeb99,
+ "add": 0xf3e5,
+ "agent": 0xf413,
+ "agent-circle": 0xf430,
+ "agent-square": 0xf431,
+ "agents": 0xf432,
+ "agents-swarm": 0xf412,
+ "alarm-clock": 0xf58c,
+ "alert": 0xea6c,
+ "archive": 0xea98,
+ "army-base": 0xf433,
+ "arrow-block-down": 0xf35d,
+ "arrow-block-left": 0xf35e,
+ "arrow-block-line-down": 0xf56f,
+ "arrow-block-line-left": 0xf571,
+ "arrow-block-line-right": 0xf573,
+ "arrow-block-line-up": 0xf575,
+ "arrow-block-right": 0xf35f,
+ "arrow-block-up": 0xf360,
+ "arrow-bracket-from-down": 0xf34e,
+ "arrow-bracket-from-left": 0xf34f,
+ "arrow-bracket-from-right": 0xf359,
+ "arrow-bracket-from-up": 0xec28,
+ "arrow-bracket-from-up-dashed": 0xec27,
+ "arrow-bracket-to-down": 0xf4e1,
+ "arrow-bracket-to-left": 0xf358,
+ "arrow-bracket-to-right": 0xf357,
+ "arrow-bracket-to-up": 0xf356,
+ "arrow-ccw": 0xead2,
+ "arrow-circle-down": 0xf361,
+ "arrow-circle-left": 0xf362,
+ "arrow-circle-right": 0xf363,
+ "arrow-circle-up": 0xf364,
+ "arrow-cw": 0xeb37,
+ "arrow-down": 0xf365,
+ "arrow-left": 0xf368,
+ "arrow-left-down": 0xf366,
+ "arrow-left-up": 0xf367,
+ "arrow-right": 0xf36b,
+ "arrow-right-down": 0xf369,
+ "arrow-right-up": 0xf36a,
+ "arrow-square-down": 0xf36c,
+ "arrow-square-from-down": 0xf355,
+ "arrow-square-from-left": 0xf354,
+ "arrow-square-from-right": 0xea6e,
+ "arrow-square-from-up": 0xebac,
+ "arrow-square-left": 0xf36f,
+ "arrow-square-left-down": 0xf36d,
+ "arrow-square-left-top": 0xf36e,
+ "arrow-square-left-up": 0xf36e,
+ "arrow-square-right": 0xf372,
+ "arrow-square-right-down": 0xf370,
+ "arrow-square-right-top": 0xf371,
+ "arrow-square-right-up": 0xf371,
+ "arrow-square-to-down": 0xedae,
+ "arrow-square-to-left": 0xf353,
+ "arrow-square-to-right": 0xea6f,
+ "arrow-square-to-up": 0xf352,
+ "arrow-square-up": 0xf373,
+ "arrow-swap": 0xebcb,
+ "arrow-u-up-left": 0xed84,
+ "arrow-u-up-right": 0xf31e,
+ "arrow-up": 0xf374,
+ "arrows-both-horizontal": 0xea99,
+ "arrows-both-vertical": 0xf2ca,
+ "arrows-ccw": 0xf30f,
+ "arrows-ccw-angular": 0xf2cc,
+ "arrows-contract": 0xf310,
+ "arrows-contract-simple": 0xf2cd,
+ "arrows-cw": 0xea77,
+ "arrows-down-up": 0xf2ce,
+ "arrows-expand": 0xf311,
+ "arrows-expand-simple": 0xf2cf,
+ "arrows-left-right": 0xebcb,
+ "arrows-out-cardinal": 0xeb22,
+ "asterisk": 0xedbf,
+ "at": 0xf375,
+ "atom": 0xf4bc,
+ "bandaid": 0xf435,
+ "banknote": 0xf500,
+ "banknotes-stack": 0xf436,
+ "barbell": 0xf437,
+ "basketball": 0xf438,
+ "beach-umbrella": 0xf439,
+ "beaker": 0xea79,
+ "beaker-stop": 0xebe1,
+ "beehouse": 0xf43a,
+ "bell": 0xeaa2,
+ "bell-dot": 0xeb9a,
+ "bell-slash": 0xec08,
+ "binary": 0xf556,
+ "binoculars": 0xeb68,
+ "bluetooth": 0xf43b,
+ "board-kanban": 0xf376,
+ "book": 0xf414,
+ "book-open": 0xf377,
+ "bookmark": 0xf378,
+ "books": 0xeb9c,
+ "bowtie": 0xf4f3,
+ "bracket": 0xf555,
+ "bracket-dot": 0xebe5,
+ "bracket-error": 0xebe6,
+ "brackets-curly": 0xf555,
+ "brackets-curly-dot": 0xebe5,
+ "brackets-curly-x": 0xebe6,
+ "brackets-square": 0xea8a,
+ "brain": 0xed87,
+ "brain-hourglass": 0xf43c,
+ "brain-simple": 0xf43d,
+ "brain-simplest": 0xf43e,
+ "brain-slash": 0xf43f,
+ "briefcase": 0xeaac,
+ "browser": 0xf379,
+ "browsers": 0xf37a,
+ "brush": 0xedb3,
+ "bug": 0xf37b,
+ "bugbot": 0xec59,
+ "building": 0xf440,
+ "buildings": 0xf441,
+ "bullseye": 0xebf8,
+ "calculator": 0xf442,
+ "calendar": 0xeab0,
+ "calendar-hourglass": 0xf415,
+ "camera": 0xf37c,
+ "car": 0xf443,
+ "cardholder": 0xf444,
+ "castle": 0xf445,
+ "cd": 0xf4b5,
+ "chart-bars": 0xeb03,
+ "chart-line": 0xebe2,
+ "chart-pie": 0xf37d,
+ "chart-pyramid": 0xf419,
+ "chart-scatter": 0xebe3,
+ "chat-bubble": 0xf381,
+ "chat-bubble-chevrons-left-right": 0xf37e,
+ "chat-bubble-ellipsis": 0xf37f,
+ "chat-bubble-exclamation": 0xeb42,
+ "chat-bubble-pencil": 0xedc3,
+ "chat-bubble-question": 0xf380,
+ "chat-bubbles": 0xf382,
+ "chat-bubbles-grid": 0xf424,
+ "chatBubble": 0xf381,
+ "chatBubble-ellipsis": 0xf37f,
+ "chatBubble-exclamation": 0xeb42,
+ "chatBubble-question": 0xf380,
+ "chatBubbles": 0xf382,
+ "check": 0xf385,
+ "check-circle": 0xf383,
+ "check-square": 0xf384,
+ "checks": 0xebb1,
+ "chef-hat": 0xf447,
+ "chess-king": 0xf448,
+ "chess-tower": 0xf449,
+ "chevron-circle-down": 0xf577,
+ "chevron-circle-left": 0xf579,
+ "chevron-circle-right": 0xf57b,
+ "chevron-circle-up": 0xf57d,
+ "chevron-down": 0xf387,
+ "chevron-down-small": 0xf386,
+ "chevron-left": 0xf389,
+ "chevron-left-small": 0xf388,
+ "chevron-right": 0xf38b,
+ "chevron-right-small": 0xf38a,
+ "chevron-up": 0xf38d,
+ "chevron-up-small": 0xf38c,
+ "chevrons-down": 0xeaf3,
+ "chevrons-down-up": 0xeaf5,
+ "chevrons-left": 0xedd4,
+ "chevrons-left-right": 0xf2d7,
+ "chevrons-right": 0xf31d,
+ "chevrons-right-dotted-left": 0xedc6,
+ "chevrons-up": 0xeaf4,
+ "chevrons-up-down": 0xedcb,
+ "chip": 0xec19,
+ "chip-simple": 0xf41a,
+ "circle": 0xf38f,
+ "circle-circle": 0xf38e,
+ "circle-dashed": 0xedbb,
+ "circles": 0xf390,
+ "circles-check": 0xec2e,
+ "clipboard": 0xedc9,
+ "clock": 0xf391,
+ "clone": 0xf399,
+ "close": 0xf409,
+ "cloud": 0xf392,
+ "cloud-arrow-down": 0xeac2,
+ "cloud-arrow-up": 0xeac3,
+ "cloud-download": 0xeac2,
+ "cloud-upload": 0xeac3,
+ "code": 0xf44a,
+ "code-brackets": 0xea8a,
+ "code-simple": 0xf4c1,
+ "cog": 0xf393,
+ "collection": 0xf395,
+ "collection-plus": 0xf394,
+ "color-mode": 0xf396,
+ "command": 0xf397,
+ "comment": 0xea6b,
+ "comment-dashed": 0xec0e,
+ "comment-discussion": 0xf382,
+ "comment-dot": 0xec0a,
+ "comments": 0xeac7,
+ "compass": 0xf398,
+ "compass-check": 0xebd7,
+ "compass-dot": 0xebd6,
+ "conversation": 0xf382,
+ "cookie": 0xf4f6,
+ "copilot": 0xf3f4,
+ "copy": 0xf399,
+ "corners-in": 0xeb4d,
+ "corners-out": 0xeb4c,
+ "corners-out-check": 0xf2da,
+ "corners-out-sparkle": 0xf44d,
+ "cost-high": 0xf41b,
+ "cost-low": 0xf41c,
+ "cost-medium": 0xf41d,
+ "credit-card": 0xf39a,
+ "cross-medical": 0xf44e,
+ "crosshair": 0xf44f,
+ "crown": 0xf53f,
+ "crystal-ball": 0xf450,
+ "cube": 0xf39d,
+ "cube-coordinates": 0xf451,
+ "cube-nodes": 0xf39b,
+ "cube-transparent": 0xf39c,
+ "currency-btc": 0xf452,
+ "currency-dollar": 0xf4c6,
+ "currency-eth": 0xf4b6,
+ "cursor-logo": 0xf39e,
+ "cursor-text": 0xf304,
+ "cutlery": 0xf455,
+ "cylinder": 0xf456,
+ "dashboard": 0xf457,
+ "database": 0xf39f,
+ "database-network": 0xf458,
+ "debug-pause": 0xead1,
+ "debug-restart": 0xead2,
+ "debug-start": 0xeb2c,
+ "debug-stop": 0xf3fe,
+ "deckchair-umbrella": 0xf459,
+ "desktop-download": 0xeac2,
+ "device-camera": 0xf37c,
+ "device-camera-video": 0xf405,
+ "device-desktop": 0xf3a8,
+ "device-mobile": 0xf3da,
+ "diagram": 0xf41e,
+ "diff": 0xf3a7,
+ "diff-added": 0xf3a0,
+ "diff-ignored": 0xf3a1,
+ "diff-modified": 0xf3a2,
+ "diff-multiple": 0xf3a3,
+ "diff-removed": 0xf3a4,
+ "diff-renamed": 0xf3a5,
+ "diff-single": 0xf3a6,
+ "diff-single-arrow-right-up": 0xec0b,
+ "diff-single-dot": 0xec0c,
+ "discard": 0xf409,
+ "display": 0xf3a8,
+ "display-check": 0xeb79,
+ "display-circle": 0xeb7a,
+ "display-connect": 0xeba9,
+ "display-play": 0xeb7b,
+ "display-waves": 0xf586,
+ "displays": 0xf588,
+ "dots-3-horizontal": 0xea7c,
+ "dots-3-vertical": 0xeb10,
+ "drop": 0xf4f5,
+ "easel": 0xf45a,
+ "edit": 0xea73,
+ "elephant": 0xf4d6,
+ "ellipsis": 0xea7c,
+ "envelope": 0xf3a9,
+ "envelope-open": 0xeb1b,
+ "eraser": 0xeda0,
+ "error": 0xf408,
+ "exclamation-circle": 0xf3aa,
+ "exclamation-triangle": 0xea6c,
+ "execution-parallel": 0xf410,
+ "execution-sequential": 0xf411,
+ "extensions": 0xf3ab,
+ "eye": 0xf3ac,
+ "eye-closed": 0xf338,
+ "eye-slash": 0xeae7,
+ "fast-backward": 0xf416,
+ "fast-forward": 0xf417,
+ "feedback": 0xf37f,
+ "file": 0xf3ad,
+ "file-add": 0xed8d,
+ "file-arrow-right-up": 0xeaee,
+ "file-binary": 0xf3ad,
+ "file-chevrons-left-right": 0xeae9,
+ "file-code": 0xf3ad,
+ "file-directory": 0xf3b2,
+ "file-directory-create": 0xea80,
+ "file-image": 0xeaea,
+ "file-list": 0xec53,
+ "file-lock": 0xeafa,
+ "file-media": 0xeaea,
+ "file-pdf": 0xeaeb,
+ "file-plus": 0xed8d,
+ "file-text": 0xf4bd,
+ "file-type-adobe-illustrator": 0xf4ed,
+ "file-type-adobe-photoshop": 0xf4eb,
+ "file-type-babel": 0xf53b,
+ "file-type-bazel": 0xf522,
+ "file-type-bevy": 0xf527,
+ "file-type-bicep": 0xf4fd,
+ "file-type-biomejs": 0xf593,
+ "file-type-bower": 0xf567,
+ "file-type-bun": 0xf595,
+ "file-type-c-plus-plus": 0xf50f,
+ "file-type-c-sharp": 0xf510,
+ "file-type-clojure": 0xf4d4,
+ "file-type-crystal": 0xf4d8,
+ "file-type-cuda": 0xf541,
+ "file-type-dart": 0xf597,
+ "file-type-docker": 0xf4a6,
+ "file-type-ejs": 0xf54d,
+ "file-type-elixir": 0xf4ef,
+ "file-type-eslint": 0xf535,
+ "file-type-f-sharp": 0xf4da,
+ "file-type-firebase": 0xf4fb,
+ "file-type-geckodriver": 0xf516,
+ "file-type-git-meta": 0xf4a7,
+ "file-type-go": 0xf55b,
+ "file-type-godot": 0xf51e,
+ "file-type-grails": 0xf502,
+ "file-type-graphql": 0xf4a8,
+ "file-type-groovy": 0xf537,
+ "file-type-grunt": 0xf569,
+ "file-type-gulp": 0xf547,
+ "file-type-haml": 0xf55f,
+ "file-type-handlebars": 0xf554,
+ "file-type-haskell": 0xf4e9,
+ "file-type-ionic": 0xf4a9,
+ "file-type-java": 0xf4f9,
+ "file-type-javascript": 0xf557,
+ "file-type-julia": 0xf4aa,
+ "file-type-jupyter": 0xf512,
+ "file-type-karma": 0xf4c2,
+ "file-type-kotlin": 0xf4ab,
+ "file-type-latex": 0xf50a,
+ "file-type-liquid": 0xf53d,
+ "file-type-maven": 0xf551,
+ "file-type-mustache": 0xf50c,
+ "file-type-npm": 0xf518,
+ "file-type-nunjucks": 0xf533,
+ "file-type-ocaml": 0xf56b,
+ "file-type-odata": 0xf506,
+ "file-type-pdf": 0xf55c,
+ "file-type-perl": 0xf56d,
+ "file-type-platformio": 0xf52b,
+ "file-type-powershell": 0xf4f1,
+ "file-type-prettier": 0xf599,
+ "file-type-prisma": 0xf52f,
+ "file-type-prolog": 0xf545,
+ "file-type-puppet": 0xf4e7,
+ "file-type-python": 0xf4ac,
+ "file-type-reason": 0xf549,
+ "file-type-rescript": 0xf52d,
+ "file-type-rollup": 0xf4ad,
+ "file-type-rust": 0xf4ae,
+ "file-type-sass": 0xf4ff,
+ "file-type-sbt": 0xf54b,
+ "file-type-scala": 0xf4c9,
+ "file-type-slim": 0xf54f,
+ "file-type-stylus": 0xf529,
+ "file-type-sublime": 0xf508,
+ "file-type-svelte": 0xf559,
+ "file-type-swift": 0xf4af,
+ "file-type-terraform": 0xf4b0,
+ "file-type-typescript": 0xf558,
+ "file-type-vala": 0xf51c,
+ "file-type-vite": 0xf4b1,
+ "file-type-vsc": 0xf51a,
+ "file-type-vue": 0xf4b2,
+ "file-type-web-assembly": 0xf4cb,
+ "file-type-webpack": 0xf4b3,
+ "file-type-windows": 0xf4b4,
+ "file-type-yarn": 0xf520,
+ "file-type-zig": 0xf539,
+ "file-zip": 0xf3ad,
+ "files": 0xf3ae,
+ "film-reel": 0xf45c,
+ "film-strip": 0xf4b7,
+ "filter": 0xeaf1,
+ "flag": 0xf3af,
+ "flag-hill": 0xeb20,
+ "flame": 0xeaf2,
+ "flask": 0xea79,
+ "flask-slash-circle": 0xebe1,
+ "floppy-disc": 0xf3b0,
+ "focus-window": 0xf3b1,
+ "fold-dashed": 0xede9,
+ "folder": 0xf3b2,
+ "folder-active": 0xeaf6,
+ "folder-arrow-right-up": 0xeaed,
+ "folder-check": 0xeaf6,
+ "folder-dashed": 0xf58d,
+ "folder-library": 0xebdf,
+ "folder-open": 0xeaf7,
+ "folder-opened": 0xf3b2,
+ "folder-plus": 0xea80,
+ "folders": 0xeaec,
+ "fork": 0xf41f,
+ "funnel": 0xeaf1,
+ "funnel-simple": 0xeb83,
+ "game-controller": 0xf45e,
+ "game-controller-retro": 0xf45f,
+ "gauge": 0xeacd,
+ "gear": 0xf393,
+ "gem": 0xf3b3,
+ "gift": 0xeaf9,
+ "git-branch": 0xf3b4,
+ "git-commit": 0xf3b6,
+ "git-commit-horizontal": 0xf3b5,
+ "git-compare": 0xf3b7,
+ "git-fetch": 0xec1d,
+ "git-fork": 0xf3b8,
+ "git-merge": 0xf3b9,
+ "git-pull": 0xf3bf,
+ "git-pull-request": 0xf3be,
+ "git-pull-request-closed": 0xf3ba,
+ "git-pull-request-create": 0xf3bb,
+ "git-pull-request-done": 0xf3bc,
+ "git-pull-request-draft": 0xf3bd,
+ "git-push": 0xf3c0,
+ "github": 0xea84,
+ "github-actions": 0xeaff,
+ "globe": 0xf3c1,
+ "graduation-cap": 0xeb21,
+ "graph": 0xeb03,
+ "graph-line": 0xebe2,
+ "graph-scatter": 0xebe3,
+ "grid": 0xf460,
+ "grid-plus": 0xf461,
+ "grid-sparkle": 0xf462,
+ "gripper": 0xeb04,
+ "hamburger": 0xf463,
+ "hammer": 0xedab,
+ "hash": 0xf4c5,
+ "hat": 0xf464,
+ "headphones": 0xf465,
+ "headset": 0xf466,
+ "heart": 0xf3c2,
+ "hexagon": 0xf4dc,
+ "history": 0xea82,
+ "home": 0xeb06,
+ "hourglass": 0xedcf,
+ "house": 0xeb06,
+ "i-circle": 0xf3c3,
+ "image": 0xf3c5,
+ "image-square": 0xf3c4,
+ "inbox": 0xeb09,
+ "infinity": 0xed8e,
+ "info": 0xf3c3,
+ "inspect": 0xebd1,
+ "issue": 0xf3c6,
+ "issue-closed": 0xf383,
+ "issue-draft": 0xebd9,
+ "issues": 0xf3aa,
+ "joystick": 0xf467,
+ "json": 0xf555,
+ "kebab-horizontal": 0xea7c,
+ "kebab-vertical": 0xeb10,
+ "key": 0xeb11,
+ "keyboard": 0xedac,
+ "keyboard-tab": 0xf3c7,
+ "laptop": 0xf3c9,
+ "layers": 0xf3fc,
+ "layout-dialog": 0xf58f,
+ "layout-empty": 0xf590,
+ "layout-floating-window": 0xf591,
+ "layout-panel-bottom": 0xf3ca,
+ "layout-panel-bottom-dock": 0xec49,
+ "layout-panel-bottom-on": 0xebf2,
+ "layout-panel-bottom-undock": 0xf2dd,
+ "layout-panel-off": 0xf3ca,
+ "layout-sidebar-left": 0xf3cb,
+ "layout-sidebar-left-dock": 0xec4a,
+ "layout-sidebar-left-off": 0xf3cb,
+ "layout-sidebar-left-on": 0xebf3,
+ "layout-sidebar-left-undock": 0xf23a,
+ "layout-sidebar-right": 0xf3cc,
+ "layout-sidebar-right-dock": 0xec4b,
+ "layout-sidebar-right-off": 0xf3cc,
+ "layout-sidebar-right-on": 0xebf4,
+ "layout-sidebar-right-undock": 0xf23b,
+ "layout-split-horizontal": 0xf3cd,
+ "layout-split-horizontal-dashed": 0xec5b,
+ "layout-split-horizontal-right-dock": 0xf305,
+ "layout-split-horizontal-right-undock": 0xf306,
+ "layout-split-vertical": 0xf3ce,
+ "leaf": 0xf468,
+ "lego": 0xf469,
+ "library": 0xeb9c,
+ "lightbulb": 0xf50d,
+ "lightbulb-sparkle": 0xf3f4,
+ "lightning": 0xf3cf,
+ "link": 0xeb15,
+ "link-external": 0xf3b1,
+ "list-bullets": 0xeda5,
+ "list-checks": 0xeab3,
+ "list-filter": 0xeb83,
+ "list-ordered": 0xeb16,
+ "list-todo": 0xf3d0,
+ "list-todo-subtask": 0xf425,
+ "list-x": 0xeabf,
+ "loading": 0xedca,
+ "location": 0xf3d6,
+ "lock": 0xf3d1,
+ "lock-locked": 0xf3d1,
+ "lock-unlocked": 0xf3d2,
+ "logo-azure": 0xebd8,
+ "logo-azure-devops": 0xebe8,
+ "logo-figma": 0xf42a,
+ "logo-github": 0xea84,
+ "logo-gitlab": 0xf42b,
+ "logo-jira": 0xf4e3,
+ "logo-linear": 0xf42c,
+ "logo-markdown": 0xf319,
+ "logo-mcp": 0xec47,
+ "logo-microsoft-teams": 0xf4e4,
+ "logo-notion": 0xf42d,
+ "logo-python": 0xec39,
+ "logo-sentry": 0xf4e5,
+ "logo-slack": 0xf42e,
+ "logo-vscode": 0xec29,
+ "logo-vscode-insiders": 0xec2a,
+ "logo-x": 0xeb72,
+ "mac-mini": 0xf46a,
+ "magic-wand": 0xebcf,
+ "magnet": 0xebae,
+ "magnifying-glass": 0xf3d5,
+ "magnifying-glass-fuzzy": 0xec0d,
+ "magnifying-glass-minus": 0xf3d3,
+ "magnifying-glass-plus": 0xf3d4,
+ "magnifying-glass-slash-circle": 0xeb4e,
+ "magnifying-glass-sparkle": 0xec50,
+ "magnifyingGlass": 0xf3d5,
+ "magnifyingGlass-minus": 0xf3d3,
+ "magnifyingGlass-plus": 0xf3d4,
+ "magnifyingGlass-slash-circle": 0xeb4e,
+ "mail": 0xf3a9,
+ "map": 0xec05,
+ "map-pin": 0xf3d6,
+ "mark-github": 0xea84,
+ "markdown": 0xf55d,
+ "mask-happy": 0xf46b,
+ "masks-happy": 0xf46c,
+ "mcp": 0xec47,
+ "megaphone": 0xeb1e,
+ "mention": 0xf375,
+ "menu": 0xeb94,
+ "merge": 0xebab,
+ "mic": 0xf3d7,
+ "microscope": 0xea79,
+ "minus": 0xf3d9,
+ "minus-circle": 0xf3d8,
+ "minus-small": 0xf46d,
+ "mobile": 0xf3da,
+ "moon": 0xf3db,
+ "moon-sparkle": 0xf46e,
+ "moon-z": 0xf46f,
+ "more": 0xea7c,
+ "music": 0xf3dc,
+ "mute": 0xf3f6,
+ "new-file": 0xed8d,
+ "new-folder": 0xea80,
+ "newspaper": 0xf470,
+ "note": 0xeb26,
+ "one-circle": 0xf420,
+ "organization": 0xea7e,
+ "organization-filled": 0xea7e,
+ "owl": 0xf543,
+ "package": 0xf4e2,
+ "package-zipper": 0xf552,
+ "paint-roller": 0xf471,
+ "palette": 0xf4b8,
+ "paperclip": 0xec54,
+ "paperplane": 0xf3dd,
+ "paragraph": 0xf4c3,
+ "pass": 0xf383,
+ "pause": 0xead1,
+ "pause-circle": 0xf3de,
+ "paw": 0xf473,
+ "pen-nib": 0xf2e3,
+ "pencil": 0xea73,
+ "pencil-square": 0xeddd,
+ "pentagon": 0xf4de,
+ "people": 0xea7e,
+ "people-3": 0xf474,
+ "percent": 0xec33,
+ "person": 0xf3df,
+ "person-add": 0xebcd,
+ "person-chat-bubble": 0xeb96,
+ "person-circle": 0xeb99,
+ "person-follow": 0xebcd,
+ "person-plus": 0xebcd,
+ "piano": 0xec1a,
+ "pie-chart": 0xf37d,
+ "pilcrow": 0xeb7d,
+ "pin": 0xf3e0,
+ "pin-slash": 0xf40b,
+ "pipe": 0xf531,
+ "plan": 0xf3e1,
+ "plane": 0xf475,
+ "play": 0xeb2c,
+ "play-bug": 0xeb91,
+ "play-circle": 0xf3e2,
+ "play-slow": 0xf421,
+ "play-super-fast": 0xf422,
+ "playback-loop": 0xf40d,
+ "plays-bug": 0xebdc,
+ "plug": 0xf3e3,
+ "plug-slash": 0xead0,
+ "plus": 0xf3e5,
+ "plus-circle": 0xf3e4,
+ "plus-minus": 0xf302,
+ "pointer-arrow": 0xf3e6,
+ "pug": 0xf565,
+ "pulse": 0xeb31,
+ "puzzle-piece": 0xf476,
+ "question": 0xf2e5,
+ "question-circle": 0xf3e7,
+ "quote": 0xeb33,
+ "radar": 0xf477,
+ "radio-tower": 0xeb34,
+ "rect-magnifying-glass": 0xf351,
+ "rect-magnifyingGlass": 0xf351,
+ "redo": 0xeb37,
+ "refresh": 0xeb37,
+ "regex": 0xeb38,
+ "remote-control": 0xf58a,
+ "remove": 0xf3d9,
+ "remove-close": 0xf409,
+ "replace": 0xf351,
+ "replace-all": 0xf351,
+ "report": 0xeb42,
+ "return": 0xebea,
+ "review": 0xf2e7,
+ "robot": 0xf3e8,
+ "rocket": 0xeb44,
+ "rocking-chair": 0xf478,
+ "rss": 0xeb47,
+ "ruler": 0xea96,
+ "rules": 0xf414,
+ "run": 0xeb2c,
+ "satellite": 0xf479,
+ "scales": 0xeb12,
+ "seal": 0xf3ea,
+ "seal-check": 0xf3e9,
+ "seal-question": 0xeb76,
+ "search": 0xf3d5,
+ "search-stop": 0xeb4e,
+ "send": 0xf3dd,
+ "server": 0xf48f,
+ "servers": 0xeb50,
+ "settings": 0xf3f0,
+ "settings-gear": 0xf393,
+ "shapes-square-circle": 0xf4b9,
+ "share": 0xec25,
+ "shield": 0xf3ee,
+ "shield-check": 0xf3eb,
+ "shield-question": 0xf3ec,
+ "shield-x": 0xf3ed,
+ "shoe-fast": 0xf47b,
+ "shopping-bag": 0xf47c,
+ "shopping-basket": 0xf47d,
+ "signal": 0xf47e,
+ "skills": 0xf3f4,
+ "skills-capability": 0xf3f4,
+ "slash-circle": 0xf3ef,
+ "sliders": 0xf3f0,
+ "smartwatch": 0xf2e9,
+ "smiley-happy": 0xf3f1,
+ "smiley-happy-square": 0xf47f,
+ "smiley-neutral": 0xf3f2,
+ "smiley-plus": 0xeb35,
+ "smiley-sad": 0xf3f3,
+ "snowflake": 0xf480,
+ "soccer-ball": 0xf481,
+ "sort-ascending": 0xf2ea,
+ "sort-descending": 0xf2eb,
+ "source-control": 0xf3b4,
+ "sparkle": 0xf3f4,
+ "sparkles": 0xf3f4,
+ "speaker-hifi": 0xf482,
+ "speaker-waves": 0xf3f5,
+ "speaker-x": 0xf3f6,
+ "spinner": 0xedca,
+ "split": 0xf42f,
+ "split-horizontal": 0xf3cd,
+ "split-vertical": 0xf3ce,
+ "sprint": 0xf426,
+ "square": 0xf3f7,
+ "square-dashed": 0xf58e,
+ "square-dot": 0xf423,
+ "squares": 0xf3fb,
+ "squares-minus": 0xf3f8,
+ "squares-plus": 0xf3f9,
+ "squares-x": 0xf3fa,
+ "stack": 0xf3fc,
+ "star": 0xf3fd,
+ "star-empty": 0xf3fd,
+ "star-full": 0xeb59,
+ "status-done": 0xf383,
+ "status-draft": 0xedbb,
+ "status-needs-attention": 0xf3aa,
+ "stop": 0xed86,
+ "stop-circle": 0xf3fe,
+ "stopwatch": 0xf418,
+ "storefront": 0xf483,
+ "sun": 0xf3ff,
+ "swatches": 0xf484,
+ "symbol-folder": 0xf3b2,
+ "sync": 0xea77,
+ "t-shirt": 0xf485,
+ "table": 0xf4bb,
+ "tabs": 0xf2be,
+ "tag": 0xf400,
+ "tags-chevron-down": 0xf57f,
+ "tags-chevron-left": 0xf581,
+ "tags-chevron-right": 0xf583,
+ "tags-chevron-up": 0xf585,
+ "target": 0xebf8,
+ "terminal": 0xf50e,
+ "terminal-rectangle": 0xf401,
+ "text-aa": 0xf55a,
+ "text-ab": 0xeb2e,
+ "text-b": 0xeaa3,
+ "text-c": 0xf4cf,
+ "text-d": 0xf4cd,
+ "text-italic": 0xeb0d,
+ "text-j": 0xf4f8,
+ "text-r": 0xf4d2,
+ "text-s": 0xf524,
+ "text-strikethrough": 0xf525,
+ "text-t": 0xf4d0,
+ "text-t-square": 0xf402,
+ "text-tt": 0xeb69,
+ "text-y": 0xf4e0,
+ "thinking-high": 0xf427,
+ "thinking-low": 0xf428,
+ "thinking-medium": 0xf429,
+ "threads-parallel": 0xf40e,
+ "threads-single": 0xf40f,
+ "three-bars": 0xeb6a,
+ "thumbs-down": 0xf560,
+ "thumbs-up": 0xf561,
+ "thumbsdown": 0xf560,
+ "thumbsup": 0xf561,
+ "traffic-cone": 0xf34d,
+ "trafficCone": 0xf34d,
+ "trash": 0xf403,
+ "trashcan": 0xf403,
+ "tray": 0xeb09,
+ "treasure-chest": 0xf486,
+ "trending-down": 0xf487,
+ "trending-up": 0xf488,
+ "triangle-small-down": 0xeb6e,
+ "triangle-small-left": 0xeb6f,
+ "triangle-small-right": 0xeb70,
+ "triangle-small-up": 0xeb71,
+ "twig": 0xf504,
+ "unfold-dashed": 0xede8,
+ "unlock": 0xf3d2,
+ "unmute": 0xf3f5,
+ "unverified": 0xeb76,
+ "vault": 0xf489,
+ "verified": 0xf3e9,
+ "versions": 0xf404,
+ "video-camera": 0xf405,
+ "vm": 0xf3a8,
+ "vr": 0xf48a,
+ "vr-headset": 0xf562,
+ "vr-headset-head": 0xf563,
+ "wallet": 0xf48b,
+ "wand": 0xf3f4,
+ "warning": 0xea6c,
+ "watch": 0xeb7c,
+ "waveform": 0xf4c4,
+ "whole-word": 0xeb7e,
+ "window": 0xf406,
+ "window-pointer-arrow": 0xebd1,
+ "windows": 0xf407,
+ "wrench": 0xeb6d,
+ "x": 0xf409,
+ "x-circle": 0xf408,
+ "yarn": 0xf514,
+ "zap": 0xf3f4,
+ "zipper": 0xf552,
+ "zoom-in": 0xf3d4,
+ "zoom-out": 0xf3d3,
+ "zzz": 0xf48e,
+} as const;
+
+// `computer` is the recovered product's semantic alias for the shipped
+// `device-desktop` glyph. It is retained because ComputerHeaderControl
+// already exposes that exact semantic name.
+export const SAND_ICON_ALIASES = {
+ computer: SAND_ICON_OUTLINE_CODE_POINTS["device-desktop"],
+} as const;
+export const SAND_ICON_ALIASES_WINDOWS = {
+ computer: SAND_ICON_OUTLINE_CODE_POINTS_WINDOWS["device-desktop"],
+} as const;
+
+export type SandIconName = keyof typeof SAND_ICON_OUTLINE_CODE_POINTS | keyof typeof SAND_ICON_ALIASES;
+export type SandIconPlatform = "mac" | "windows";
+export type SandIconVariant = "outline" | "filled";
+export type SandIconSize = "xs" | "sm" | "md" | "base" | "lg" | "xl" | "2xl" | number;
+export type SandIconColor =
+ | "primary" | "secondary" | "tertiary" | "quaternary"
+ | "git-added" | "git-modified" | "git-removed" | "git-untracked"
+ | "cyan" | "blue" | "red" | "green" | "success" | "danger"
+ | "yellow" | "magenta" | "orange" | "purple" | "accent" | "brand";
+
+export const SAND_ICON_FONT = {
+ family: "cursor-icons",
+ asset: "cursor-icons-16-f_W_ogc-.woff2",
+ bytes: 124084,
+ sha256: "2058c08b796a3f7ec9fdb219e16b21a350910a3e8cc231939600ee7efbf08bcb",
+} as const;
+
+export function sandIconPlatform(): SandIconPlatform {
+ return typeof navigator !== "undefined" && /win/i.test(navigator.platform) ? "windows" : "mac";
+}
+
+export function sandIconCodePoint(name: SandIconName, variant: SandIconVariant = "outline", platform: SandIconPlatform = sandIconPlatform()): number {
+ const aliases = platform === "windows" ? SAND_ICON_ALIASES_WINDOWS : SAND_ICON_ALIASES;
+ if (name in aliases) return aliases[name as keyof typeof aliases];
+ const table = variant === "filled"
+ ? platform === "windows" ? SAND_ICON_FILLED_CODE_POINTS_WINDOWS : SAND_ICON_FILLED_CODE_POINTS
+ : platform === "windows" ? SAND_ICON_OUTLINE_CODE_POINTS_WINDOWS : SAND_ICON_OUTLINE_CODE_POINTS;
+ return table[name as keyof typeof SAND_ICON_OUTLINE_CODE_POINTS];
+}
+
+export function sandIconGlyph(name: SandIconName, variant: SandIconVariant = "outline", platform?: SandIconPlatform): string {
+ return String.fromCodePoint(sandIconCodePoint(name, variant, platform));
+}
+
+export function sandIconStyle(size: SandIconSize = "sm", color?: SandIconColor): CSSProperties {
+ // @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=1222466
+ // @evidence recovered/frontend/app/assets/index-UbX-y3il.js#byteOffset=1539571
+ // Dr/TBt's shipped SandKit icon sizes are literal pixels. The unqualified
+ // foreground colors are also standalone tokens; appending `-primary` makes
+ // invalid variables such as --cursor-icon-secondary-primary and leaves the
+ // glyph to inherit an unrelated ancestor color.
+ const cssSize = typeof size === "number"
+ ? `${size}px`
+ : `${({ xs: 10, sm: 12, md: 14, base: 14, lg: 16, xl: 18, "2xl": 24 } as const)[size]}px`;
+ const semanticColor = color === "primary" || color === "secondary" || color === "tertiary" || color === "quaternary"
+ ? `var(--cursor-icon-${color})`
+ : color === "brand"
+ ? "var(--cursor-brand)"
+ : color == null
+ ? undefined
+ : `var(--cursor-icon-${color === "success" ? "green" : color === "danger" ? "red" : color}-primary)`;
+ return {
+ color: semanticColor,
+ fontFamily: SAND_ICON_FONT.family,
+ fontSize: cssSize,
+ lineHeight: 1,
+ };
+}
diff --git a/web/src/grok/sand-kit-primitives.css b/web/src/grok/sand-kit-primitives.css
new file mode 100644
index 0000000..3d127c7
--- /dev/null
+++ b/web/src/grok/sand-kit-primitives.css
@@ -0,0 +1,196 @@
+/*
+ * This file is intentionally limited to the shared kit primitive selectors.
+ * @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=2173060
+ * @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=2193087
+ * @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=2174833
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#byteOffset=54293
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#byteOffset=68389
+ */
+
+.sand-kit-button,
+.sand-kit-icon-button,
+.sand-inserted-chip {
+ box-sizing: border-box;
+ font-family: inherit;
+ -webkit-font-smoothing: antialiased;
+}
+
+.sand-kit-button {
+ align-items: center;
+ border: 0;
+ border-radius: var(--cursor-radius-base);
+ cursor: pointer;
+ display: inline-flex;
+ gap: var(--cursor-spacing-1);
+ justify-content: center;
+ min-height: var(--cursor-height-base);
+ padding: 0 var(--cursor-spacing-2);
+ color: var(--cursor-text-primary);
+ font-size: var(--cursor-font-size-base);
+ line-height: var(--cursor-line-height-base);
+ transition: background-color var(--cursor-duration-fast), border-color var(--cursor-duration-fast), color var(--cursor-duration-fast), opacity var(--cursor-duration-fast);
+}
+
+.sand-1iorvi4 {
+ min-height: var(--cursor-height-sm);
+ padding-inline: var(--cursor-spacing-2);
+ font-size: var(--cursor-font-size-sm);
+ line-height: var(--cursor-line-height-sm);
+}
+
+.sand-1yrsyyn {
+ min-height: var(--cursor-height-base);
+}
+
+.sand-163pfp {
+ border-radius: var(--cursor-radius-full);
+}
+
+.sand-1wclgxm {
+ background: var(--cursor-accent);
+ color: var(--cursor-base);
+}
+
+.sand-1tiofj7 {
+ background: var(--cursor-button-secondary-background);
+ color: var(--cursor-button-secondary-foreground);
+}
+
+.sand-18he5m,
+.sand-6y9aml {
+ background: var(--cursor-danger);
+ color: var(--cursor-base);
+}
+
+.sand-kit-button:hover:not(:disabled),
+.sand-kit-button:focus-visible:not(:disabled) {
+ background: var(--cursor-button-secondary-hover-background);
+ color: var(--cursor-text-primary);
+}
+
+.sand-1wclgxm:hover:not(:disabled),
+.sand-1wclgxm:focus-visible:not(:disabled),
+.sand-2uzfp6:hover:not(:disabled),
+.sand-2uzfp6:focus-visible:not(:disabled),
+.sand-18he5m:hover:not(:disabled),
+.sand-18he5m:focus-visible:not(:disabled),
+.sand-6y9aml:hover:not(:disabled),
+.sand-6y9aml:focus-visible:not(:disabled) {
+ filter: brightness(1.08);
+}
+
+.sand-kit-button:focus-visible,
+.sand-kit-icon-button:focus-visible {
+ outline: 1px solid var(--cursor-stroke-focused);
+ outline-offset: 1px;
+}
+
+.sand-kit-button:active:not(:disabled),
+.sand-kit-icon-button:active:not(:disabled) {
+ transform: translateY(1px);
+}
+
+.sand-ri19xs {
+ background: var(--cursor-bg-selected);
+ color: var(--cursor-text-primary);
+}
+
+.sand-kit-button:disabled,
+.sand-kit-icon-button:disabled {
+ cursor: default;
+ opacity: .56;
+}
+
+.sand-kit-icon-button {
+ align-items: center;
+ background: transparent;
+ border: 0;
+ border-radius: var(--cursor-radius-base);
+ color: var(--cursor-text-secondary);
+ cursor: pointer;
+ display: inline-flex;
+ height: var(--cursor-height-base);
+ justify-content: center;
+ padding: 0;
+ width: var(--cursor-height-base);
+ transition: background-color var(--cursor-duration-fast), color var(--cursor-duration-fast), opacity var(--cursor-duration-fast);
+}
+
+.sand-vy4d1p {
+ height: var(--cursor-height-sm);
+ width: var(--cursor-height-sm);
+}
+
+.sand-exx8yu {
+ height: var(--cursor-height-lg);
+ width: var(--cursor-height-lg);
+}
+
+.sand-149ho13 {
+ border-radius: var(--cursor-radius-full);
+}
+
+.sand-jbqb8w {
+ background: var(--cursor-bg-tertiary);
+ color: var(--cursor-text-primary);
+}
+
+.sand-kit-icon-button:hover:not(:disabled),
+.sand-kit-icon-button:focus-visible:not(:disabled) {
+ background: var(--cursor-bg-secondary);
+ color: var(--cursor-text-primary);
+}
+
+.sand-inserted-chip {
+ align-items: center;
+ background: var(--cursor-bg-tertiary);
+ border: 1px solid var(--cursor-stroke-tertiary);
+ border-radius: var(--cursor-radius-full);
+ color: var(--cursor-text-secondary);
+ display: inline-flex;
+ font-size: var(--cursor-font-size-sm);
+ gap: var(--cursor-spacing-1);
+ line-height: var(--cursor-line-height-sm);
+ min-height: var(--cursor-height-sm);
+ padding-inline: var(--cursor-spacing-2);
+ white-space: nowrap;
+}
+
+.sand-1yrsyyn.sand-inserted-chip {
+ min-height: var(--cursor-height-base);
+ font-size: var(--cursor-font-size-base);
+ line-height: var(--cursor-line-height-base);
+}
+
+.sand-luhinc {
+ background: var(--cursor-bg-accent-secondary);
+ border-color: var(--cursor-stroke-accent);
+ color: var(--cursor-text-primary);
+}
+
+.sand-1r8pydn {
+ background: transparent;
+ border-color: transparent;
+}
+
+.sand-2uzfp6.sand-inserted-chip {
+ background: var(--cursor-bg-green-secondary);
+ border-color: var(--cursor-stroke-green-secondary);
+}
+
+.sand-6y9aml.sand-inserted-chip {
+ background: var(--cursor-bg-yellow-secondary);
+ border-color: var(--cursor-stroke-yellow-secondary);
+}
+
+.sand-18he5m.sand-inserted-chip {
+ background: var(--cursor-bg-red-secondary);
+ border-color: var(--cursor-stroke-red-secondary);
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .sand-kit-button,
+ .sand-kit-icon-button {
+ transition-duration: 0ms;
+ }
+}
diff --git a/web/src/grok/sand-kit-primitives.tsx b/web/src/grok/sand-kit-primitives.tsx
new file mode 100644
index 0000000..e34cfc6
--- /dev/null
+++ b/web/src/grok/sand-kit-primitives.tsx
@@ -0,0 +1,226 @@
+import { forwardRef, type ButtonHTMLAttributes, type CSSProperties, type HTMLAttributes, type ReactNode } from "react";
+
+import "./sand-kit-primitives.css";
+import { sandIconGlyph, sandIconStyle } from "./sand-icon-registry";
+import type { SandIconColor, SandIconName, SandIconPlatform, SandIconSize, SandIconVariant } from "./sand-icon-registry";
+
+export { SAND_ICON_OUTLINE_CODE_POINTS as SAND_ICON_CODE_POINTS } from "./sand-icon-registry";
+export type { SandIconColor, SandIconName, SandIconPlatform, SandIconSize, SandIconVariant } from "./sand-icon-registry";
+
+// Immutable Mac renderer: index-UbX-y3il.js, SHA-256
+// ef4e9831b65d39633f09c9ad0c083b98b7ebf52e3bb558182aee5bde31f876fa.
+// @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=2173060 (sand-kit-icon-button contract)
+// @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=2193087 (sand-kit-button contract)
+// @evidence src/app/dist/renderer/assets/index-UbX-y3il.js#byteOffset=2174833 (pill/chip contract)
+// Windows equivalents: 2763354, 2788460, and 2765629 in recovered/frontend/app/assets/index-UbX-y3il.js.
+
+const KIT_BUTTON_BASE = "sand-kit-button sand-3nfvp2 sand-6s0dn4 sand-l56j7k sand-1jnr06f sand-2lah0s sand-9f619 sand-c342km sand-ng3xce sand-jbqb8w sand-uxw1ft sand-1ypdohk sand-tgyt42 sand-s2xxs2 sand-gdialr sand-9lcvmn sand-1k57tk5 sand-784prv sand-1t137rt sand-9v5kkp sand-4sht9k sand-1y3gkto";
+const KIT_BUTTON_SM = "sand-fifm61 sand-1d3mw78 sand-12oo3zp sand-1iorvi4 sand-1ug7bdz sand-jkvuk6 sand-11iknt3 sand-1kogg8i";
+const ICON_BUTTON_BASE = "sand-kit-icon-button sand-1n2onr6 sand-3nfvp2 sand-6s0dn4 sand-l56j7k sand-2lah0s sand-9f619 sand-exx8yu sand-1xpa7k sand-18d9i69 sand-1uhho1l sand-c342km sand-ng3xce sand-jbqb8w sand-1ypdohk sand-tgyt42 sand-s2xxs2 sand-gdialr sand-9lcvmn sand-1k57tk5 sand-784prv sand-1t137rt sand-9v5kkp sand-4sht9k sand-1y3gkto sand-vy4d1p sand-xk0z11 sand-1kogg8i sand-1r8pydn sand-1o0liin sand-1fx2joi sand-7n8uir sand-99e291 sand-1v0sr2s";
+const INSERTED_CHIP = "sand-inserted-chip";
+const PILL_LABEL = "sand-1lliihq sand-b3r6kr sand-uxw1ft sand-3d5spo sand-1kpknzs sand-18qloa2 sand-pzgpc2 sand-gdialr sand-9lcvmn";
+const BUTTON_SIZE_CLASSES = { sm: "sand-1iorvi4", md: "sand-1yrsyyn" } as const;
+const BUTTON_SHAPE_CLASSES = { rectangular: undefined, pill: "sand-163pfp" } as const;
+const BUTTON_SENTIMENT_CLASSES = {
+ neutral: {
+ primary: "sand-1wclgxm sand-1e15362 sand-1gzh0bn sand-xcaa6e sand-g7klql",
+ secondary: "sand-1tiofj7 sand-ex9vrg sand-wj1584 sand-tyxrsu sand-g7klql",
+ },
+ accent: {
+ primary: "sand-2uzfp6 sand-1p9r4uo sand-vygott sand-18ti0zn sand-1ksgq55",
+ secondary: "sand-ctg3rd sand-dpopdx sand-1fuijle sand-n3e42v sand-1ksgq55",
+ },
+ danger: {
+ primary: "sand-18he5m sand-io7yh0 sand-1kjf8sd sand-18ti0zn sand-1ww89vb",
+ secondary: "sand-6y9aml sand-tly4hf sand-1yeru7p sand-6rl5ky sand-1ww89vb",
+ },
+} as const;
+const ICON_SIZE_CLASSES = { sm: "sand-vy4d1p sand-xk0z11", md: "sand-gd8bvy", lg: "sand-exx8yu sand-18d9i69" } as const;
+const ICON_SHAPE_CLASSES = { square: "sand-1kogg8i", circle: "sand-149ho13" } as const;
+const ICON_VARIANT_CLASSES = { default: "sand-jbqb8w", ghost: "sand-jbqb8w sand-1r8pydn sand-7n8uir" } as const;
+const SELECTED_CLASSES = "sand-ri19xs sand-eazifr";
+const CHIP_VARIANT_CLASSES = { primary: "sand-luhinc sand-1q6ojev", secondary: undefined, ghost: "sand-1r8pydn" } as const;
+const CHIP_SENTIMENT_CLASSES = { neutral: undefined, accent: "sand-2uzfp6", danger: "sand-18he5m" } as const;
+
+export type SandButtonVariant = "primary" | "secondary";
+export type SandButtonSize = "sm" | "md";
+export type SandButtonShape = "rectangular" | "pill";
+export type SandSentiment = "neutral" | "accent" | "danger";
+export type SandIconButtonVariant = "default" | "ghost";
+export type SandIconButtonSize = "sm" | "md" | "lg";
+export type SandIconButtonShape = "square" | "circle";
+export type SandPrimitiveVariant = "primary" | "secondary" | "ghost";
+
+export interface SandIconProps {
+ readonly name: SandIconName;
+ readonly color?: SandIconColor;
+ readonly className?: string;
+ readonly platform?: SandIconPlatform;
+ readonly size?: SandIconSize;
+ readonly style?: CSSProperties;
+ readonly title?: string;
+ readonly variant?: SandIconVariant;
+}
+
+export function SandIcon({ className, color, name, platform, size = "sm", style, title, variant = "outline" }: SandIconProps): ReactNode {
+ return {sandIconGlyph(name, variant, platform)};
+}
+
+function joinClasses(...classes: readonly (string | undefined)[]): string {
+ return classes.filter((value): value is string => value != null && value.length > 0).join(" ");
+}
+
+export interface SandButtonProps extends Omit, "color"> {
+ readonly children?: ReactNode;
+ readonly pending?: boolean;
+ readonly leadingIcon?: SandIconName;
+ readonly trailingIcon?: SandIconName;
+ readonly variant?: SandButtonVariant;
+ readonly size?: SandButtonSize;
+ readonly shape?: SandButtonShape;
+ readonly sentiment?: SandSentiment;
+}
+
+export const SandButton = forwardRef(function SandButton({
+ children,
+ className,
+ disabled = false,
+ leadingIcon,
+ pending = false,
+ shape = "rectangular",
+ size = "md",
+ sentiment = "neutral",
+ trailingIcon,
+ variant = "primary",
+ type = "button",
+ ...buttonProps
+}, ref): ReactNode {
+ return ;
+});
+
+export interface SandIconButtonProps extends Omit, "color" | "children"> {
+ readonly icon: SandIconName;
+ readonly label?: string;
+ readonly pending?: boolean;
+ readonly platform?: SandIconPlatform;
+ readonly selected?: boolean;
+ readonly size?: SandIconButtonSize;
+ readonly shape?: SandIconButtonShape;
+ readonly variant?: SandIconButtonVariant;
+ readonly sentiment?: SandSentiment;
+}
+
+export const SandIconButton = forwardRef(function SandIconButton({
+ className,
+ disabled = false,
+ icon,
+ label,
+ pending = false,
+ platform,
+ selected = false,
+ sentiment = "neutral",
+ shape = "square",
+ size = "md",
+ title,
+ type = "button",
+ variant = "ghost",
+ ...buttonProps
+}, ref): ReactNode {
+ const resolvedLabel = label ?? buttonProps["aria-label"] ?? "";
+ return ;
+});
+
+export interface SandTagProps extends HTMLAttributes {
+ readonly children?: ReactNode;
+ readonly size?: SandButtonSize;
+ readonly shape?: SandButtonShape;
+ readonly variant?: SandPrimitiveVariant;
+ readonly sentiment?: SandSentiment;
+ readonly selected?: boolean;
+}
+
+export function SandTag({
+ children,
+ className,
+ selected = false,
+ shape = "pill",
+ size = "sm",
+ sentiment = "neutral",
+ variant = "secondary",
+ ...props
+}: SandTagProps): ReactNode {
+ return {children};
+}
+
+export interface SandBadgeProps extends SandTagProps {
+ readonly icon?: SandIconName;
+}
+
+export function SandBadge({ children, icon, ...props }: SandBadgeProps): ReactNode {
+ return
+ {icon == null ? null : }{children}
+ ;
+}
+
+export interface SandKeycapProps extends Omit {
+ readonly children?: ReactNode;
+}
+
+export function SandKeycap({ children, className, sentiment = "neutral", ...props }: SandKeycapProps): ReactNode {
+ return {children};
+}
diff --git a/web/src/grok/shell.css b/web/src/grok/shell.css
new file mode 100644
index 0000000..f2e7128
--- /dev/null
+++ b/web/src/grok/shell.css
@@ -0,0 +1,5 @@
+/* @evidence src/app/dist/renderer/assets/index-lCyB53CO.css#L1 */
+/* Generated from immutable index-lCyB53CO.css (5a25f934b7d3b7a55483cb5f2a1a05e21209aad0a09c82d07d2add054a6b7856).
+ * Regenerate only with scripts/extract-computer-shell-css.mjs; declarations and assets are shipped evidence. */
+@layer reset{@media(min-width:768px){html,body{overscroll-behavior-y:none}}}@property --x-backgroundColor{syntax: "*"; inherits: false;}@property --x-borderBottomColor{syntax: "*"; inherits: false;}@property --x-borderLeftColor{syntax: "*"; inherits: false;}@property --x-borderRightColor{syntax: "*"; inherits: false;}@property --x-borderTopColor{syntax: "*"; inherits: false;}@property --x-boxShadow{syntax: "*"; inherits: false;}@property --x-color{syntax: "*"; inherits: false;}@property --x-flexBasis{syntax: "*"; inherits: false;}@property --x-left{syntax: "*"; inherits: false;}@property --x-maskComposite{syntax: "*"; inherits: false;}@property --x-maskSize{syntax: "*"; inherits: false;}@property --x-maxWidth{syntax: "*"; inherits: false;}@property --x-minWidth{syntax: "*"; inherits: false;}@property --x-top{syntax: "*"; inherits: false;}@property --x-WebkitMaskComposite{syntax: "*"; inherits: false;}@property --x-WebkitMaskImage{syntax: "*"; inherits: false;}@property --x-width{syntax: "*"; inherits: false;}@property --x-zIndex{syntax: "*"; inherits: false;}@keyframes ui-1wc8ddo-B{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:root,.ui-1lzgia1{--cursor-accent:#599CE7;--cursor-added:#70B489;--cursor-base:#F0F0F0;--cursor-bg-accent:var(--cursor-accent);--cursor-bg-accent-hover:color-mix(in srgb, var(--cursor-base) 10%, var(--cursor-accent));--cursor-bg-accent-quaternary:color-mix(in srgb, var(--cursor-accent) 8%, transparent);--cursor-bg-accent-secondary:color-mix(in srgb, var(--cursor-accent) 24%, transparent);--cursor-bg-accent-tertiary:color-mix(in srgb, var(--cursor-accent) 12%, transparent);--cursor-bg-active:color-mix(in srgb, var(--cursor-base) 16%, transparent);--cursor-bg-blue-primary:var(--cursor-blue);--cursor-bg-blue-secondary:color-mix(in srgb, var(--cursor-blue) 12%, transparent);--cursor-bg-card:var(--cursor-bg-quaternary);--cursor-bg-chrome:var(--cursor-chrome);--cursor-bg-cyan-primary:var(--cursor-cyan);--cursor-bg-cyan-secondary:color-mix(in srgb, var(--cursor-cyan) 12%, transparent);--cursor-bg-diff-inserted:var(--cursor-diff-added-line-background);--cursor-bg-diff-removed:var(--cursor-diff-removed-line-background);--cursor-bg-editor:var(--cursor-editor);--cursor-bg-elevated:var(--cursor-editor);--cursor-bg-focused:color-mix(in srgb, var(--cursor-base) 22%, transparent);--cursor-bg-git-added-hover:color-mix(in srgb, var(--cursor-base) 10%, var(--cursor-added));--cursor-bg-git-added-primary:var(--cursor-added);--cursor-bg-git-added-quaternary:color-mix(in srgb, var(--cursor-added) 8%, transparent);--cursor-bg-git-added-secondary:color-mix(in srgb, var(--cursor-added) 24%, transparent);--cursor-bg-git-added-tertiary:color-mix(in srgb, var(--cursor-added) 12%, transparent);--cursor-bg-git-modified-hover:color-mix(in srgb, var(--cursor-base) 10%, var(--cursor-modified));--cursor-bg-git-modified-primary:var(--cursor-modified);--cursor-bg-git-modified-quaternary:color-mix(in srgb, var(--cursor-modified) 8%, transparent);--cursor-bg-git-modified-secondary:color-mix(in srgb, var(--cursor-modified) 24%, transparent);--cursor-bg-git-modified-tertiary:color-mix(in srgb, var(--cursor-modified) 12%, transparent);--cursor-bg-git-removed-hover:color-mix(in srgb, var(--cursor-base) 10%, var(--cursor-removed));--cursor-bg-git-removed-primary:var(--cursor-removed);--cursor-bg-git-removed-quaternary:color-mix(in srgb, var(--cursor-removed) 8%, transparent);--cursor-bg-git-removed-secondary:color-mix(in srgb, var(--cursor-removed) 24%, transparent);--cursor-bg-git-removed-tertiary:color-mix(in srgb, var(--cursor-removed) 12%, transparent);--cursor-bg-git-untracked-hover:color-mix(in srgb, var(--cursor-base) 10%, var(--cursor-untracked));--cursor-bg-git-untracked-primary:var(--cursor-untracked);--cursor-bg-git-untracked-quaternary:color-mix(in srgb, var(--cursor-untracked) 8%, transparent);--cursor-bg-git-untracked-secondary:color-mix(in srgb, var(--cursor-untracked) 24%, transparent);--cursor-bg-git-untracked-tertiary:color-mix(in srgb, var(--cursor-untracked) 12%, transparent);--cursor-bg-green-primary:var(--cursor-green);--cursor-bg-green-secondary:color-mix(in srgb, var(--cursor-green) 12%, transparent);--cursor-bg-input:var(--cursor-editor);--cursor-bg-input-surface:var(--cursor-bg-quaternary);--cursor-bg-magenta-primary:var(--cursor-magenta);--cursor-bg-magenta-secondary:color-mix(in srgb, var(--cursor-magenta) 12%, transparent);--cursor-bg-orange-primary:var(--cursor-orange);--cursor-bg-orange-secondary:color-mix(in srgb, var(--cursor-orange) 12%, transparent);--cursor-bg-primary:color-mix(in srgb, var(--cursor-base) 20%, transparent);--cursor-bg-purple-primary:var(--cursor-purple);--cursor-bg-purple-secondary:color-mix(in srgb, var(--cursor-purple) 12%, transparent);--cursor-bg-purple-tertiary:color-mix(in srgb, var(--cursor-purple) 8%, transparent);--cursor-bg-quaternary:color-mix(in srgb, var(--cursor-base) 6%, transparent);--cursor-bg-quinary:color-mix(in srgb, var(--cursor-base) 4%, transparent);--cursor-bg-red-primary:var(--cursor-red);--cursor-bg-red-secondary:color-mix(in srgb, var(--cursor-red) 12%, transparent);--cursor-bg-secondary:color-mix(in srgb, var(--cursor-base) 14%, transparent);--cursor-bg-sidebar:var(--cursor-sidebar);--cursor-bg-tertiary:color-mix(in srgb, var(--cursor-base) 8%, transparent);--cursor-bg-yellow-primary:var(--cursor-yellow);--cursor-bg-yellow-secondary:color-mix(in srgb, var(--cursor-yellow) 12%, transparent);--cursor-blue:#7BAFE9;--cursor-button-background:var(--vscode-button-background);--cursor-button-foreground:var(--vscode-button-foreground);--cursor-button-hover-background:var(--vscode-button-hoverBackground);--cursor-button-secondary-background:var(--cursor-bg-tertiary);--cursor-button-secondary-foreground:var(--cursor-text-primary);--cursor-button-secondary-hover-background:var(--cursor-bg-secondary);--cursor-chrome:#141414;--cursor-command-center-active-background:var(--cursor-bg-secondary);--cursor-command-center-active-border:var(--cursor-stroke-primary);--cursor-command-center-active-foreground:var(--cursor-text-secondary);--cursor-command-center-background:var(--cursor-bg-tertiary);--cursor-command-center-border:var(--cursor-stroke-secondary);--cursor-command-center-foreground:var(--cursor-text-secondary);--cursor-command-center-inactive-border:var(--cursor-stroke-secondary);--cursor-command-center-inactive-foreground:var(--cursor-text-tertiary);--cursor-cyan:#81A1C1;--cursor-editor:#181818;--cursor-editor-bracket-match-background:color-mix(in srgb, var(--cursor-success) 22%, transparent);--cursor-editor-bracket-match-border:color-mix(in srgb, var(--cursor-base) 52%, transparent);--cursor-editor-cursor-foreground:var(--cursor-text-primary);--cursor-editor-find-match-background:color-mix(in srgb, var(--cursor-warn) 72%, transparent);--cursor-editor-find-match-highlight-background:color-mix(in srgb, var(--cursor-warn) 32%, transparent);--cursor-editor-foreground:var(--cursor-text-primary);--cursor-editor-gutter-background:var(--cursor-editor);--cursor-editor-inactive-selection-background:color-mix(in srgb, var(--cursor-accent) 30%, transparent);--cursor-editor-indent-guide-active-background:color-mix(in srgb, var(--cursor-base) 40%, transparent);--cursor-editor-indent-guide-background:color-mix(in srgb, var(--cursor-base) 22%, transparent);--cursor-editor-line-highlight-background:color-mix(in srgb, var(--cursor-base) 8%, transparent);--cursor-editor-line-number-active-foreground:var(--cursor-text-primary);--cursor-editor-line-number-foreground:var(--cursor-text-tertiary);--cursor-editor-selection-background:color-mix(in srgb, var(--cursor-accent) 42%, transparent);--cursor-editor-selection-highlight-background:color-mix(in srgb, var(--cursor-accent) 32%, transparent);--cursor-editor-whitespace-foreground:color-mix(in srgb, var(--cursor-base) 22%, transparent);--cursor-editor-widget-background:var(--cursor-bg-elevated);--cursor-editor-widget-border:var(--cursor-stroke-secondary);--cursor-editor-widget-foreground:var(--cursor-text-primary);--cursor-focus:#F0F0F0;--cursor-foreground:var(--cursor-base);--cursor-green:#3FA266;--cursor-icon-accent-primary:var(--cursor-accent);--cursor-icon-accent-secondary:color-mix(in srgb, var(--cursor-accent) 70%, transparent);--cursor-icon-blue-primary:var(--cursor-blue);--cursor-icon-blue-secondary:color-mix(in srgb, var(--cursor-blue) 70%, transparent);--cursor-icon-cyan-primary:var(--cursor-cyan);--cursor-icon-cyan-secondary:color-mix(in srgb, var(--cursor-cyan) 70%, transparent);--cursor-icon-git-added-primary:var(--cursor-added);--cursor-icon-git-added-quaternary:color-mix(in srgb, var(--cursor-added) 32%, transparent);--cursor-icon-git-added-secondary:color-mix(in srgb, var(--cursor-added) 70%, transparent);--cursor-icon-git-added-tertiary:color-mix(in srgb, var(--cursor-added) 56%, transparent);--cursor-icon-git-modified-primary:var(--cursor-modified);--cursor-icon-git-modified-quaternary:color-mix(in srgb, var(--cursor-modified) 32%, transparent);--cursor-icon-git-modified-secondary:color-mix(in srgb, var(--cursor-modified) 70%, transparent);--cursor-icon-git-modified-tertiary:color-mix(in srgb, var(--cursor-modified) 56%, transparent);--cursor-icon-git-removed-primary:var(--cursor-removed);--cursor-icon-git-removed-quaternary:color-mix(in srgb, var(--cursor-removed) 32%, transparent);--cursor-icon-git-removed-secondary:color-mix(in srgb, var(--cursor-removed) 70%, transparent);--cursor-icon-git-removed-tertiary:color-mix(in srgb, var(--cursor-removed) 56%, transparent);--cursor-icon-git-untracked-primary:var(--cursor-untracked);--cursor-icon-git-untracked-quaternary:color-mix(in srgb, var(--cursor-untracked) 32%, transparent);--cursor-icon-git-untracked-secondary:color-mix(in srgb, var(--cursor-untracked) 70%, transparent);--cursor-icon-git-untracked-tertiary:color-mix(in srgb, var(--cursor-untracked) 56%, transparent);--cursor-icon-green-primary:var(--cursor-green);--cursor-icon-green-secondary:color-mix(in srgb, var(--cursor-green) 70%, transparent);--cursor-icon-magenta-primary:var(--cursor-magenta);--cursor-icon-magenta-secondary:color-mix(in srgb, var(--cursor-magenta) 70%, transparent);--cursor-icon-orange-primary:var(--cursor-orange);--cursor-icon-orange-secondary:color-mix(in srgb, var(--cursor-orange) 70%, transparent);--cursor-icon-primary:var(--cursor-base);--cursor-icon-purple-primary:var(--cursor-purple);--cursor-icon-purple-secondary:color-mix(in srgb, var(--cursor-purple) 70%, transparent);--cursor-icon-quaternary:color-mix(in srgb, var(--cursor-base) 28%, transparent);--cursor-icon-red-primary:var(--cursor-red);--cursor-icon-red-secondary:color-mix(in srgb, var(--cursor-red) 70%, transparent);--cursor-icon-secondary:color-mix(in srgb, var(--cursor-base) 66%, transparent);--cursor-icon-tertiary:color-mix(in srgb, var(--cursor-base) 52%, transparent);--cursor-icon-yellow-primary:var(--cursor-yellow);--cursor-icon-yellow-secondary:color-mix(in srgb, var(--cursor-yellow) 70%, transparent);--cursor-input-border:var(--cursor-stroke-secondary);--cursor-input-placeholder-foreground:var(--cursor-text-quaternary);--cursor-magenta:#B48EAD;--cursor-modified:#F1B467;--cursor-orange:#D08770;--cursor-progress-bar-background:var(--cursor-accent);--cursor-purple:#9386F2;--cursor-red:#FC6B83;--cursor-removed:#FC6B83;--cursor-sidebar:#181818;--cursor-stroke-blue-primary:color-mix(in srgb, var(--cursor-blue) 56%, transparent);--cursor-stroke-blue-secondary:color-mix(in srgb, var(--cursor-blue) 32%, transparent);--cursor-stroke-cyan-primary:color-mix(in srgb, var(--cursor-cyan) 56%, transparent);--cursor-stroke-cyan-secondary:color-mix(in srgb, var(--cursor-cyan) 32%, transparent);--cursor-stroke-focused:color-mix(in srgb, var(--cursor-focus) 15%, transparent);--cursor-stroke-git-added:color-mix(in srgb, var(--cursor-added) 56%, transparent);--cursor-stroke-git-modified:color-mix(in srgb, var(--cursor-modified) 56%, transparent);--cursor-stroke-git-removed:color-mix(in srgb, var(--cursor-removed) 56%, transparent);--cursor-stroke-git-untracked:color-mix(in srgb, var(--cursor-untracked) 56%, transparent);--cursor-stroke-green-primary:color-mix(in srgb, var(--cursor-green) 56%, transparent);--cursor-stroke-green-secondary:color-mix(in srgb, var(--cursor-green) 32%, transparent);--cursor-stroke-high-contrast:color-mix(in srgb, var(--cursor-base) 0%, transparent);--cursor-stroke-magenta-primary:color-mix(in srgb, var(--cursor-magenta) 56%, transparent);--cursor-stroke-magenta-secondary:color-mix(in srgb, var(--cursor-magenta) 32%, transparent);--cursor-stroke-orange-primary:color-mix(in srgb, var(--cursor-orange) 56%, transparent);--cursor-stroke-orange-secondary:color-mix(in srgb, var(--cursor-orange) 32%, transparent);--cursor-stroke-primary:color-mix(in srgb, var(--cursor-base) 20%, transparent);--cursor-stroke-quaternary:color-mix(in srgb, var(--cursor-base) 4%, transparent);--cursor-stroke-red-primary:color-mix(in srgb, var(--cursor-red) 56%, transparent);--cursor-stroke-red-secondary:color-mix(in srgb, var(--cursor-red) 32%, transparent);--cursor-stroke-secondary:color-mix(in srgb, var(--cursor-base) 12%, transparent);--cursor-stroke-tertiary:color-mix(in srgb, var(--cursor-base) 8%, transparent);--cursor-stroke-tertiary-opaque:color-mix(in srgb, var(--cursor-base) 8%, var(--cursor-chrome));--cursor-stroke-yellow-primary:color-mix(in srgb, var(--cursor-yellow) 56%, transparent);--cursor-stroke-yellow-secondary:color-mix(in srgb, var(--cursor-yellow) 32%, transparent);--cursor-success:#3FA266;--cursor-syntax-background:#181818;--cursor-syntax-comment:#E4E4E45E;--cursor-syntax-constant:#f8c762;--cursor-syntax-foreground:#d6d6dd;--cursor-syntax-function:#efb080;--cursor-syntax-keyword:#82d2ce;--cursor-syntax-link:#87c3ff;--cursor-syntax-number:#ebc88d;--cursor-syntax-parameter:#d6d6dd;--cursor-syntax-punctuation:#d6d6dd;--cursor-syntax-string:#e394dc;--cursor-syntax-string-expression:#e394dc;--cursor-terminal-ansi-black:#242424;--cursor-terminal-ansi-blue:#81A1C1;--cursor-terminal-ansi-bright-black:#F0F0F099;--cursor-terminal-ansi-bright-blue:#87A6C4;--cursor-terminal-ansi-bright-cyan:#88C0D0;--cursor-terminal-ansi-bright-green:#70B489;--cursor-terminal-ansi-bright-magenta:#B48EAD;--cursor-terminal-ansi-bright-red:#FC6B83;--cursor-terminal-ansi-bright-white:#F0F0F0;--cursor-terminal-ansi-bright-yellow:#F1B467;--cursor-terminal-ansi-cyan:#88C0D0;--cursor-terminal-ansi-green:#3FA266;--cursor-terminal-ansi-magenta:#B48EAD;--cursor-terminal-ansi-red:#FC6B83;--cursor-terminal-ansi-white:#F0F0F0;--cursor-terminal-ansi-yellow:#D2943E;--cursor-terminal-background:var(--cursor-chrome);--cursor-terminal-foreground:var(--cursor-text-primary);--cursor-terminal-selection-background:color-mix(in srgb, var(--cursor-base) 12%, transparent);--cursor-text-accent:var(--cursor-accent);--cursor-text-active:var(--cursor-text-primary);--cursor-text-blue-primary:var(--cursor-blue);--cursor-text-blue-secondary:color-mix(in srgb, var(--cursor-blue) 78%, transparent);--cursor-text-code-block-background:var(--cursor-bg-elevated);--cursor-text-cyan-primary:var(--cursor-cyan);--cursor-text-cyan-secondary:color-mix(in srgb, var(--cursor-cyan) 78%, transparent);--cursor-text-focused:var(--cursor-text-primary);--cursor-text-git-added-primary:var(--cursor-added);--cursor-text-git-added-quaternary:color-mix(in srgb, var(--cursor-added) 40%, transparent);--cursor-text-git-added-secondary:color-mix(in srgb, var(--cursor-added) 78%, transparent);--cursor-text-git-added-tertiary:color-mix(in srgb, var(--cursor-added) 64%, transparent);--cursor-text-git-modified-primary:var(--cursor-modified);--cursor-text-git-modified-quaternary:color-mix(in srgb, var(--cursor-modified) 40%, transparent);--cursor-text-git-modified-secondary:color-mix(in srgb, var(--cursor-modified) 78%, transparent);--cursor-text-git-modified-tertiary:color-mix(in srgb, var(--cursor-modified) 64%, transparent);--cursor-text-git-removed-primary:var(--cursor-removed);--cursor-text-git-removed-quaternary:color-mix(in srgb, var(--cursor-removed) 40%, transparent);--cursor-text-git-removed-secondary:color-mix(in srgb, var(--cursor-removed) 78%, transparent);--cursor-text-git-removed-tertiary:color-mix(in srgb, var(--cursor-removed) 64%, transparent);--cursor-text-git-untracked-primary:var(--cursor-untracked);--cursor-text-git-untracked-quaternary:color-mix(in srgb, var(--cursor-untracked) 40%, transparent);--cursor-text-git-untracked-secondary:color-mix(in srgb, var(--cursor-untracked) 78%, transparent);--cursor-text-git-untracked-tertiary:color-mix(in srgb, var(--cursor-untracked) 64%, transparent);--cursor-text-green-primary:var(--cursor-green);--cursor-text-green-secondary:color-mix(in srgb, var(--cursor-green) 78%, transparent);--cursor-text-invert:var(--cursor-editor);--cursor-text-link:var(--cursor-text-blue-primary);--cursor-text-link-active:var(--cursor-accent);--cursor-text-magenta-primary:var(--cursor-magenta);--cursor-text-magenta-secondary:color-mix(in srgb, var(--cursor-magenta) 78%, transparent);--cursor-text-orange-primary:var(--cursor-orange);--cursor-text-orange-secondary:color-mix(in srgb, var(--cursor-orange) 78%, transparent);--cursor-text-primary:var(--cursor-base);--cursor-text-purple-primary:var(--cursor-purple);--cursor-text-purple-secondary:color-mix(in srgb, var(--cursor-purple) 78%, transparent);--cursor-text-quaternary:color-mix(in srgb, var(--cursor-base) 36%, transparent);--cursor-text-red-primary:var(--cursor-red);--cursor-text-red-secondary:color-mix(in srgb, var(--cursor-red) 78%, transparent);--cursor-text-secondary:color-mix(in srgb, var(--cursor-base) 74%, transparent);--cursor-text-tertiary:color-mix(in srgb, var(--cursor-base) 60%, transparent);--cursor-text-yellow-primary:var(--cursor-yellow);--cursor-text-yellow-secondary:color-mix(in srgb, var(--cursor-yellow) 78%, transparent);--cursor-titlebar-active-foreground:var(--cursor-text-secondary);--cursor-titlebar-inactive-foreground:var(--cursor-text-tertiary);--cursor-toolbar-hover-background:var(--cursor-bg-tertiary);--cursor-untracked:#88C0D0;--cursor-warn:#F1B467;--cursor-yellow:#F1B467}:root,.ui-135pyq{--cursor-action-label:#191c22;--cursor-brand:#F54E00;--cursor-danger:#E34671;--cursor-diff-added-line-background:#3FA26633;--cursor-diff-added-text-background:#3FA26622;--cursor-diff-removed-line-background:#B8004933;--cursor-diff-removed-text-background:#B8004922}:root,.ui-gjyyxu{--cursor-box-shadow-base:0px 0px 8px 2px var(--cursor-shadow-primary);--cursor-box-shadow-lg:inset 0px 0px 4px 0px rgba(255, 255, 255, .05), 0px 0px 3px 0px var(--cursor-shadow-secondary), 0px 16px 24px 0px var(--cursor-shadow-tertiary);--cursor-box-shadow-popup:0 8px 16px 0 var(--widget-shadow, rgba(20, 20, 20, .12));--cursor-box-shadow-sm:0px 2px 8px 0px var(--cursor-shadow-secondary);--cursor-box-shadow-soft:0px 0px 8px 2px var(--cursor-shadow-tertiary);--cursor-box-shadow-workbench:0 0 8px 2px color-mix(in srgb, var(--vscode-widget-shadow) 40%, transparent);--cursor-box-shadow-xl:inset 0px 0px 4px 0px rgba(255, 255, 255, .05), 0px 0px 6px 8px var(--cursor-shadow-secondary), 0px 24px 16px 6px var(--cursor-shadow-tertiary)}:root,.ui-1edrit9{--cursor-duration-fast:.1s;--cursor-duration-instant:50ms;--cursor-duration-normal:.15s;--cursor-duration-slow:.2s;--cursor-duration-slower:.3s}:root,.ui-1nru5dy{--cursor-easing-default:ease;--cursor-easing-in:ease-in;--cursor-easing-in-out:ease-in-out;--cursor-easing-in-out-strong:cubic-bezier(.77, 0, .175, 1);--cursor-easing-in-strong:cubic-bezier(.895, .03, .685, .22);--cursor-easing-out:ease-out;--cursor-easing-out-quint:cubic-bezier(.16, 1, .3, 1);--cursor-easing-out-strong:cubic-bezier(.165, .84, .44, 1)}:root,.ui-crgxve{--cursor-elevation-1:1;--cursor-elevation-2:2}:root,.ui-1c1envi{--cursor-font-family-mono:var(--cursor-font-family-mono, var(--monaco-monospace-font, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace));--cursor-font-family-sans:var(--cursor-font-family, var(--vscode-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif))}:root,.ui-qruemj{--cursor-font-size-base:13px;--cursor-font-size-lg:14px;--cursor-font-size-sm:12px;--cursor-font-size-xs:11px}:root,.ui-gur81n{--cursor-height-base:28px;--cursor-height-lg:32px;--cursor-height-sm:24px;--cursor-height-xs:20px}:root,.ui-nip2w{--cursor-letter-spacing-2xl:-.46px;--cursor-letter-spacing-3xl:-.26px;--cursor-letter-spacing-base:-.08px;--cursor-letter-spacing-lg:-.15px;--cursor-letter-spacing-sm:0px;--cursor-letter-spacing-xl:.08px;--cursor-letter-spacing-xs:.07px}:root,.ui-1no9adk{--cursor-line-height-base:18px;--cursor-line-height-lg:22px;--cursor-line-height-sm:16px;--cursor-line-height-xs:14px}:root,.ui-ja9h2x{--cursor-radius-2xl:14px;--cursor-radius-3xl:16px;--cursor-radius-4xl:18px;--cursor-radius-base:6px;--cursor-radius-full:9999px;--cursor-radius-lg:8px;--cursor-radius-none:0px;--cursor-radius-sm:4px;--cursor-radius-xl:12px;--cursor-radius-xs:2px}:root,.ui-11ok2i0{--cursor-scrollbar-horizontal-size:var(--vscode-scrollbar-horizontal-size, 12px);--cursor-scrollbar-shadow:var(--cursor-shadow-primary);--cursor-scrollbar-thumb-active-background:color-mix(in srgb, var(--cursor-base) 26%, transparent);--cursor-scrollbar-thumb-background:color-mix(in srgb, var(--cursor-base) 14%, transparent);--cursor-scrollbar-thumb-hover-background:color-mix(in srgb, var(--cursor-base) 22%, transparent);--cursor-scrollbar-vertical-size:var(--vscode-scrollbar-vertical-size, 14px)}:root,.ui-vsdeee{--cursor-shadow-primary:color-mix(in srgb, #000000 20%, transparent);--cursor-shadow-secondary:color-mix(in srgb, var(--cursor-shadow-primary) 60%, transparent);--cursor-shadow-tertiary:color-mix(in srgb, var(--cursor-shadow-primary) 30%, transparent);--cursor-shadow-workbench:0px 0px 8px 2px color-mix(in srgb, var(--cursor-shadow-primary) 40%, transparent)}:root,.ui-au7cpu{--cursor-spacing-0-25:1px;--cursor-spacing-0-5:2px;--cursor-spacing-0-75:3px;--cursor-spacing-1:4px;--cursor-spacing-1-25:5px;--cursor-spacing-1-5:6px;--cursor-spacing-1-75:7px;--cursor-spacing-10:40px;--cursor-spacing-11:44px;--cursor-spacing-12:48px;--cursor-spacing-13:52px;--cursor-spacing-14:56px;--cursor-spacing-15:60px;--cursor-spacing-16:64px;--cursor-spacing-17:68px;--cursor-spacing-18:72px;--cursor-spacing-19:76px;--cursor-spacing-2:8px;--cursor-spacing-2-25:9px;--cursor-spacing-2-5:10px;--cursor-spacing-2-75:11px;--cursor-spacing-20:80px;--cursor-spacing-3:12px;--cursor-spacing-3-25:13px;--cursor-spacing-3-5:14px;--cursor-spacing-3-75:15px;--cursor-spacing-4:16px;--cursor-spacing-4-25:17px;--cursor-spacing-4-5:18px;--cursor-spacing-4-75:19px;--cursor-spacing-5:20px;--cursor-spacing-5-5:22px;--cursor-spacing-6:24px;--cursor-spacing-6-5:26px;--cursor-spacing-7:28px;--cursor-spacing-7-5:30px;--cursor-spacing-8:32px;--cursor-spacing-8-5:34px;--cursor-spacing-9:36px;--cursor-spacing-9-5:38px;--cursor-spacing-ne-0-25:-1px;--cursor-spacing-ne-0-5:-2px;--cursor-spacing-ne-0-75:-3px;--cursor-spacing-ne-1:-4px;--cursor-spacing-ne-1-25:-5px;--cursor-spacing-ne-1-5:-6px;--cursor-spacing-ne-1-75:-7px;--cursor-spacing-ne-2:-8px;--cursor-spacing-ne-2-25:-9px;--cursor-spacing-ne-2-5:-10px;--cursor-spacing-ne-2-75:-11px;--cursor-spacing-ne-3:-12px;--cursor-spacing-ne-3-25:-13px;--cursor-spacing-ne-3-5:-14px;--cursor-spacing-ne-3-75:-15px;--cursor-spacing-ne-4:-16px;--cursor-spacing-ne-4-25:-17px;--cursor-spacing-ne-4-5:-18px;--cursor-spacing-ne-4-75:-19px;--cursor-spacing-ne-5:-20px}:root,.ui-1uburmg{--ui-press-scale:.98}:root,.ui-bgnvjd{--ui-tool-call-card-bg:var(--cursor-bg-editor)}.ui-1u4itkb{--icon-size:.75rem}.ui-1q5xvfy{--icon-weight:400}.ui-pt2l8r .ui-icon-button[data-size=lg]{border-radius:var(--cursor-radius-base)}.ui-lh3980{-moz-osx-font-smoothing:grayscale}.ui-vmahel{-webkit-font-smoothing:antialiased}.ui-1winvzj{-webkit-user-select:none}.ui-6s0dn4{align-items:center}.ui-lmf4m6{animation-duration:var(--cursor-spinner-sync-duration,1s)}.ui-a4qsjk{animation-iteration-count:infinite}.ui-138fvbv{animation-name:ui-1wc8ddo-B}.ui-1esw782{animation-timing-function:linear}.ui-1heor9g{color:inherit}.ui-1hn9r2r{color:var(--cursor-icon-yellow-primary)}.ui-19aaqeu{color:var(--cursor-text-secondary)}.ui-4b2ntj{color:var(--cursor-text-tertiary)}.ui-1izesbo{color:var(--cursor-text-yellow-primary)}.ui-3nfvp2{display:inline-flex}.ui-1qt6sjn{font-family:cursor-icons}.ui-1acoasx{font-family:var(--cursor-font-family-sans)}.ui-11wthnw{font-size:var(--cursor-font-size-base)}.ui-fc7y3v{font-size:var(--cursor-font-size-lg)}.ui-1wm8ruf{font-size:var(--cursor-font-size-sm)}.ui-1tachi3{font-size:var(--icon-size)}.ui-1j61x8r{font-style:normal}.ui-1yl5bsf{font-weight:var(--cursor-font-weight-medium,500)}.ui-20ajya{font-weight:var(--cursor-font-weight-normal,400)}.ui-etm3q0{font-weight:var(--icon-weight)}.ui-l56j7k{justify-content:center}.ui-vu1jfw{letter-spacing:var(--cursor-letter-spacing-base)}.ui-1bignsj{letter-spacing:var(--cursor-letter-spacing-lg)}.ui-14s4slr{letter-spacing:var(--cursor-letter-spacing-sm)}.ui-o5v014{line-height:1}.ui-1ja60sm{line-height:var(--cursor-line-height-base)}.ui-1yxxptd{line-height:var(--cursor-line-height-lg)}.ui-spwq11{line-height:var(--cursor-line-height-sm)}.ui-2b8uid{text-align:center}.ui-krqix3{text-decoration-line:none}.ui-1403hyl{text-rendering:auto}.ui-6mezaz{text-transform:none}.ui-87ps6o{-webkit-user-select:none;-moz-user-select:none;user-select:none}.ui-xymvpz{vertical-align:middle}.ui-16rd43c .md-color-swatch,.ui-b4qz09 .ui-icon-button[data-size=lg]{box-sizing:border-box}.ui-1n3qxzx :is(.ui-icon:not([data-color]),.ui-codicon){color:var(--cursor-icon-secondary)}.ui-11djd58 .ui-icon{color:var(--cursor-icon-tertiary)}.ui-zkea7x>.ui-icon{position:relative}.ui-1smq5r2>.ui-icon{z-index:1}.ui-higkf7{height:var(--icon-size)}.ui-at24cr{margin-bottom:0}.ui-j3b58b{margin-left:0}.ui-1yf7rl7{margin-right:0}.ui-dj266r{margin-top:0}.ui-18d9i69{padding-bottom:0}.ui-1uhho1l{padding-left:0}.ui-1xpa7k{padding-right:0}.ui-exx8yu{padding-top:0}.ui-1oai4fc{width:var(--icon-size)}.ui-1vr4f00>.ui-icon-button:last-child{margin-right:var(--cursor-spacing-ne-1-5)}.ui-bbiggo>.ui-icon-button:last-child{margin-right:var(--cursor-spacing-ne-1)}.ui-160b9zw .ui-icon-button[data-size=lg]{min-height:calc(100% - 2*var(--tab-container-padding))}.ui-14azuvp .ui-icon-button[data-size=lg]{min-width:calc(2*var(--cursor-spacing-1-5) + var(--cursor-spacing-3))}.ui-1f1gs5k .ui-icon-button[data-size=lg]{width:calc(2*var(--cursor-spacing-1-5) + var(--cursor-spacing-3))}.ui-1ehclkv:before{box-sizing:inherit}.ui-1yj7g93:before{content:var(--cursor-icon-content)}@font-face{font-family:cursor-icons;font-display:block;src:url(./cursor-icons-16-f_W_ogc-.woff2) format("woff2")}@property --x---sand-activity-mark-ink{syntax: "*"; inherits: false;}@property --x---sand-activity-mark-ink-from{syntax: "*"; inherits: false;}@property --x---sand-activity-mark-ink-to{syntax: "*"; inherits: false;}@property --x-borderRadius{syntax: "*"; inherits: false;}@property --x-bottom{syntax: "*"; inherits: false;}@property --x-gap{syntax: "*"; inherits: false;}@property --x-height{syntax: "*"; inherits: false;}@property --x-insetInlineEnd{syntax: "*"; inherits: false;}@property --x-insetInlineStart{syntax: "*"; inherits: false;}@property --x-marginBottom{syntax: "*"; inherits: false;}@property --x-maskImage{syntax: "*"; inherits: false;}@property --x-maxHeight{syntax: "*"; inherits: false;}@property --x-minHeight{syntax: "*"; inherits: false;}@property --x-paddingBottom{syntax: "*"; inherits: false;}@property --x-paddingLeft{syntax: "*"; inherits: false;}@property --x-paddingRight{syntax: "*"; inherits: false;}@property --x-paddingTop{syntax: "*"; inherits: false;}@property --x-transform{syntax: "*"; inherits: false;}@keyframes sand-18re5ia-B{0%{opacity:0}to{opacity:1}}@keyframes sand-1im2lgs-B{0%{opacity:0;transform:translateY(12px) scale(.94)}55%{opacity:1}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes sand-9wdec0-B{0%{transform:rotate(-90deg) scale(.85);animation-timing-function:cubic-bezier(.333,0,.667,.333)}17.857142857142858%{transform:rotate(-90deg) scale(.74375);animation-timing-function:cubic-bezier(.333,.667,.667,1)}46.42857142857143%{transform:rotate(-90deg) scale(.6375);animation-timing-function:cubic-bezier(.333,1,.667,1)}to{transform:rotate(-90deg) scale(.85)}}@keyframes sand-1wc8ddo-B{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes sand-18mpaig-B{0%{transform:translate(-100%)}to{transform:translate(340%)}}:root,.sand-1wuigm2{--sand-bg-base:#fcfcfc;--sand-bg-subtle:#f7f7f7;--sand-bg-elevated:#fcfcfc;--sand-bg-fade-base:#fcfcfc00;--sand-bg-fade-subtle:#f7f7f700;--sand-bg-scrim:#14141480;--sand-bg-scrim-heavy:#141414e5;--sand-text-primary:#141414;--sand-text-secondary:#14141499;--sand-text-tertiary:#14141466;--sand-text-disabled:#1414144d;--sand-text-on-primary:#fcfcfc;--sand-text-on-color:#fcfcfc;--sand-text-neutral:#3d3d3d;--sand-text-neutral-disabled:#77777721;--sand-text-accent:#0c64c1;--sand-text-accent-disabled:#1084fe2b;--sand-text-success:#009957;--sand-text-success-disabled:#00c97221;--sand-text-warning:#c27400;--sand-text-warning-disabled:#ff980021;--sand-text-danger:#c21d2e;--sand-text-danger-disabled:#ff263c2b;--sand-text-supplementary1:#c24e00;--sand-text-supplementary1-disabled:#ff670021;--sand-text-supplementary2:#734f2e;--sand-text-supplementary2-disabled:#97683d21;--sand-text-supplementary3:#008f7e;--sand-text-supplementary3-disabled:#00bca621;--sand-text-supplementary4:#6e44c1;--sand-text-supplementary4-disabled:#9159fe21;--sand-text-supplementary5:#c22476;--sand-text-supplementary5-disabled:#ff309b21;--sand-text-shimmer-base:#14141466;--sand-text-shimmer-highlight:#141414;--sand-border-subtle:#1414140d;--sand-border-weak:#1414141a;--sand-border-default:#14141426;--sand-border-strong:#1414144d;--sand-border-focus:#14141466;--sand-border-accent:#459ffe;--sand-border-accent-subtle:#1084fe2b;--sand-border-success:#38d591;--sand-border-success-subtle:#00c9722b;--sand-border-warning:#ffaf38;--sand-border-warning-subtle:#ff98002b;--sand-border-danger:#ff5667;--sand-border-danger-subtle:#ff263c2b;--sand-border-supplementary5-subtle:#ff309b2b;--sand-border-cutout-on-base:#fcfcfc;--sand-border-cutout-on-subtle:#f7f7f7;--sand-border-cutout-on-elevated:#fcfcfc;--sand-fill-primary:#070707;--sand-fill-primary-hover:#2f2f2f;--sand-fill-primary-disabled:#14141426;--sand-fill-secondary:#77777717;--sand-fill-secondary-hover:#7777772b;--sand-fill-secondary-disabled:#77777710;--sand-fill-secondary-solid:#f3f3f3;--sand-fill-secondary-solid-hover:#eeeeee;--sand-fill-ghost-hover:#77777717;--sand-fill-ghost-selected:#7777772b;--sand-fill-elevated:#fcfcfc;--sand-fill-elevated-hover:#77777717;--sand-fill-bubble-agent:#eeeeee;--sand-fill-bubble-user:#070707;--sand-fill-bubble-user-disabled:#14141426;--sand-fill-control-checked:#070707;--sand-fill-control-checked-hover:#2f2f2f;--sand-fill-control-checked-disabled:#14141426;--sand-fill-control-track:#1414141a;--sand-fill-control-track-disabled:#77777710;--sand-fill-neutral:#777777;--sand-fill-neutral-hover:#5a5a5a;--sand-fill-neutral-disabled:#7777772b;--sand-fill-neutral-subtle:#77777717;--sand-fill-accent:#1084fe;--sand-fill-accent-hover:#0c64c1;--sand-fill-accent-disabled:#1084fe2b;--sand-fill-accent-subtle:#1084fe17;--sand-fill-accent-subtle-hover:#1084fe2b;--sand-fill-accent-subtle-disabled:#1084fe10;--sand-fill-success:#00c972;--sand-fill-success-hover:#009957;--sand-fill-success-disabled:#00c9722b;--sand-fill-success-subtle:#00c97217;--sand-fill-success-subtle-hover:#00c9722b;--sand-fill-success-subtle-disabled:#00c97210;--sand-fill-warning:#ff9800;--sand-fill-warning-hover:#c27400;--sand-fill-warning-disabled:#ff98002b;--sand-fill-warning-subtle:#ff980017;--sand-fill-warning-subtle-hover:#ff98002b;--sand-fill-warning-subtle-disabled:#ff980010;--sand-fill-danger:#ff263c;--sand-fill-danger-hover:#c21d2e;--sand-fill-danger-disabled:#ff263c2b;--sand-fill-danger-subtle:#ff263c17;--sand-fill-danger-subtle-hover:#ff263c2b;--sand-fill-danger-subtle-disabled:#ff263c10;--sand-fill-supplementary1:#ff6700;--sand-fill-supplementary1-hover:#c24e00;--sand-fill-supplementary1-disabled:#ff67002b;--sand-fill-supplementary1-subtle:#ff670017;--sand-fill-supplementary2:#97683d;--sand-fill-supplementary2-hover:#734f2e;--sand-fill-supplementary2-disabled:#97683d2b;--sand-fill-supplementary2-subtle:#97683d17;--sand-fill-supplementary3:#00bca6;--sand-fill-supplementary3-hover:#008f7e;--sand-fill-supplementary3-disabled:#00bca62b;--sand-fill-supplementary3-subtle:#00bca617;--sand-fill-supplementary4:#9159fe;--sand-fill-supplementary4-hover:#6e44c1;--sand-fill-supplementary4-disabled:#9159fe2b;--sand-fill-supplementary4-subtle:#9159fe17;--sand-fill-supplementary5:#ff309b;--sand-fill-supplementary5-hover:#c22476;--sand-fill-supplementary5-disabled:#ff309b2b;--sand-fill-supplementary5-subtle:#ff309b17;--sand-shadow-control:#0000001f;--sand-shadow-inline-ambient:#00000014;--sand-shadow-inline-key:#0000000f;--sand-shadow-popover-ambient:#0000001a;--sand-shadow-popover-key:#0000001a;--sand-shadow-modal-ambient:#0000001a;--sand-shadow-modal-key:#0000001a;--sand-shadow-window-ambient:#0000008f;--sand-shadow-window-edge:#0000001a;--sand-shadow-ring:#e4e4e40a}:root,.sand-1ywxvvw{--sand-font-weight-regular:400;--sand-font-weight-medium:500;--sand-font-weight-semibold:600}.sand-10a8y8t:not(#\#){inset:0}.sand-1ghz6dp:not(#\#){margin:0}.sand-1717udv:not(#\#){padding:0}.sand-c7ga6q:not(#\#){padding:12px}.sand-ggk2y7:not(#\#){padding:24px}.sand-e8ttls:not(#\#){padding:8px}.sand-a0y8cy:not(#\#){padding:var(--cursor-spacing-2-5)}.sand-qz0629:not(#\#):not(#\#){border-color:var(--cursor-stroke-tertiary)}.sand-zewv6b:not(#\#):not(#\#){border-color:var(--cursor-text-quaternary)}.sand-fnq37j:not(#\#):not(#\#){border-color:var(--sand-border-default)}.sand-1q4ynmn:not(#\#):not(#\#){border-radius:10px}.sand-4pepcl:not(#\#):not(#\#){border-radius:12px}.sand-n5hx6u:not(#\#):not(#\#){border-radius:15px}.sand-gqmno8:not(#\#):not(#\#){border-radius:16px}.sand-16rqkct:not(#\#):not(#\#){border-radius:50%}.sand-1kogg8i:not(#\#):not(#\#){border-radius:6px}.sand-ur7f20:not(#\#):not(#\#){border-radius:8px}.sand-1i4c3av:not(#\#):not(#\#){border-radius:var(--cursor-radius-full)}.sand-1pkpdue:not(#\#):not(#\#){border-radius:var(--cursor-radius-xl)}.sand-t9pb60:not(#\#):not(#\#){border-radius:6px}.sand-149ho13:not(#\#):not(#\#){border-radius:9999px}.sand-ng3xce:not(#\#):not(#\#){border-style:none}.sand-1y0btm7:not(#\#):not(#\#){border-style:solid}.sand-4hv7ue:not(#\#):not(#\#){border-width:.5px}.sand-c342km:not(#\#):not(#\#){border-width:0}.sand-1v2ro7d:not(#\#):not(#\#){gap:12px}.sand-ou54vl:not(#\#):not(#\#){gap:16px}.sand-195vfkc:not(#\#):not(#\#){gap:2px}.sand-1jnr06f:not(#\#):not(#\#){gap:4px}.sand-17d4w8g:not(#\#):not(#\#){gap:6px}.sand-167g77z:not(#\#):not(#\#){gap:8px}.sand-137clkk:not(#\#):not(#\#){gap:var(--cursor-spacing-0-5)}.sand-pkkfsy:not(#\#):not(#\#){gap:var(--cursor-spacing-1-5)}.sand-11twubx:not(#\#):not(#\#){gap:var(--cursor-spacing-1)}.sand-1dbef6d:not(#\#):not(#\#){gap:var(--cursor-spacing-2-5)}.sand-1k3v4rp:not(#\#):not(#\#){grid-column:3}.sand-1ms6mhf:not(#\#):not(#\#){grid-row:1}.sand-b3r6kr:not(#\#):not(#\#){overflow:hidden}.sand-12ffz05:not(#\#):not(#\#){padding-block:var(--cursor-spacing-2)}.sand-w3enoh:not(#\#):not(#\#){padding-inline:var(--cursor-spacing-2-5)}.sand-omy3lu:not(#\#):not(#\#){transition:background-color.12s ease}.sand-pzuper:not(#\#):not(#\#){transition:opacity.09s ease}.sand-qwldcu:not(#\#):not(#\#){transition:opacity.16s ease}.sand-u4a3u5:not(#\#):not(#\#){transition:transform.5s cubic-bezier(.19,1,.22,1),opacity.09s ease}.sand-qwupev:not(#\#):not(#\#){transition:width.24s cubic-bezier(.22,1,.36,1)}@media(prefers-reduced-motion:reduce){.sand-9kvfbb.sand-9kvfbb:not(#\#):not(#\#){transition:none}}@media(prefers-reduced-motion:reduce){.sand-nyiixm.sand-nyiixm:not(#\#):not(#\#){transition:opacity.09s ease}}.sand-avu8j0:not(#\#):not(#\#):not(#\#){-webkit-app-region:drag}.sand-lvsv26:not(#\#):not(#\#):not(#\#){-webkit-app-region:no-drag}.sand-1lugfcp:not(#\#):not(#\#):not(#\#){-webkit-appearance:none}.sand-1ua5tub:not(#\#):not(#\#):not(#\#){-webkit-box-orient:vertical}.sand-1h7i4cw:not(#\#):not(#\#):not(#\#){-webkit-line-clamp:2}.sand-6s0dn4:not(#\#):not(#\#):not(#\#){align-items:center}.sand-1cy8zhl:not(#\#):not(#\#):not(#\#){align-items:flex-start}.sand-kh2ocl:not(#\#):not(#\#):not(#\#){align-self:stretch}.sand-b8lv0f:not(#\#):not(#\#):not(#\#){animation-duration:.28s}.sand-of6966:not(#\#):not(#\#):not(#\#){animation-duration:.7s}.sand-1sbju2s:not(#\#):not(#\#):not(#\#){animation-duration:1.4s}.sand-1u6ievf:not(#\#):not(#\#):not(#\#){animation-fill-mode:both}.sand-a4qsjk:not(#\#):not(#\#):not(#\#){animation-iteration-count:infinite}.sand-9q055v:not(#\#):not(#\#):not(#\#){animation-name:sand-18mpaig-B}.sand-r5sbw0:not(#\#):not(#\#):not(#\#){animation-name:sand-1wc8ddo-B}.sand-18imfhs:not(#\#):not(#\#):not(#\#){animation-name:sand-9wdec0-B}.sand-4hg4is:not(#\#):not(#\#):not(#\#){animation-timing-function:ease-in-out}.sand-1esw782:not(#\#):not(#\#):not(#\#){animation-timing-function:linear}.sand-1wfn6di:not(#\#):not(#\#):not(#\#){app-region:drag}.sand-482pwi:not(#\#):not(#\#):not(#\#){app-region:no-drag}.sand-jyslct:not(#\#):not(#\#):not(#\#){appearance:none}.sand-d83jor:not(#\#):not(#\#):not(#\#){aspect-ratio:1280/ 800}.sand-3wg7rn:not(#\#):not(#\#):not(#\#){background-color:#fdfdfd}.sand-n5dbpy:not(#\#):not(#\#):not(#\#){background-color:color-mix(in srgb,currentColor 10%,transparent)}.sand-s0v71k:not(#\#):not(#\#):not(#\#){background-color:color-mix(in srgb,var(--cursor-yellow) 22%,transparent)}.sand-twfq29:not(#\#):not(#\#):not(#\#){background-color:currentColor}.sand-8qq8ib:not(#\#):not(#\#):not(#\#){background-color:#0000008c}.sand-14gmceu:not(#\#):not(#\#):not(#\#){background-color:#141414f2}.sand-6r4lm7:not(#\#):not(#\#):not(#\#){background-color:#f7eaea0d}.sand-v1id1i:not(#\#):not(#\#):not(#\#){background-color:#f9850021}.sand-jbqb8w:not(#\#):not(#\#):not(#\#){background-color:transparent}.sand-1gxx7xa:not(#\#):not(#\#):not(#\#){background-color:var(--cursor-bg-accent)}.sand-1ua6jya:not(#\#):not(#\#):not(#\#){background-color:var(--cursor-bg-editor)}.sand-1h27yg5:not(#\#):not(#\#):not(#\#){background-color:var(--cursor-bg-green-primary)}.sand-1buh4up:not(#\#):not(#\#):not(#\#){background-color:var(--cursor-bg-green-secondary)}.sand-1qfxjfa:not(#\#):not(#\#):not(#\#){background-color:var(--cursor-bg-purple-primary)}.sand-1ciwos8:not(#\#):not(#\#):not(#\#){background-color:var(--cursor-bg-quinary)}.sand-i07v4r:not(#\#):not(#\#):not(#\#){background-color:var(--cursor-bg-tertiary)}.sand-1xvwvse:not(#\#):not(#\#):not(#\#){background-color:var(--cursor-bg-yellow-secondary)}.sand-mak4db:not(#\#):not(#\#):not(#\#){background-color:var(--cursor-text-primary)}.sand-xa9ouo:not(#\#):not(#\#):not(#\#){background-color:var(--cursor-text-tertiary)}.sand-10j2od:not(#\#):not(#\#):not(#\#){background-color:var(--cursor-yellow)}.sand-vvtkfd:not(#\#):not(#\#):not(#\#){background-color:var(--sand-bg-base)}.sand-1846v19:not(#\#):not(#\#):not(#\#){background-color:var(--sand-bg-scrim-heavy)}.sand-qjr0ry:not(#\#):not(#\#):not(#\#){background-color:var(--sand-border-weak)}.sand-1g0q52m:not(#\#):not(#\#):not(#\#){background-color:var(--sand-fill-bubble-agent)}.sand-1wclgxm:not(#\#):not(#\#):not(#\#){background-color:var(--sand-fill-primary)}.sand-1tiofj7:not(#\#):not(#\#):not(#\#){background-color:var(--sand-fill-secondary)}.sand-j04kma:not(#\#):not(#\#):not(#\#){box-shadow:inset 0 0 0 .5px #fcfcfc1a}.sand-egtswm:not(#\#):not(#\#):not(#\#){box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--cursor-text-primary) 8%,transparent)}.sand-u624df:not(#\#):not(#\#):not(#\#){box-shadow:inset 0 0 0 1px var(--cursor-stroke-tertiary)}.sand-1ahgo13:not(#\#):not(#\#):not(#\#){box-shadow:inset 0 0 0 .5px var(--sand-border-weak)}.sand-yb0u61:not(#\#):not(#\#):not(#\#){box-shadow:var(--cursor-shadow-md)}.sand-9f619:not(#\#):not(#\#):not(#\#){box-sizing:border-box}.sand-b78v21:not(#\#):not(#\#):not(#\#){color:#141414}.sand-5a26a2:not(#\#):not(#\#):not(#\#){color:#fcfcfc}.sand-n0e0ga:not(#\#):not(#\#):not(#\#){color:#ffbd3b}.sand-fungia:not(#\#):not(#\#):not(#\#){color:#fff}.sand-1heor9g:not(#\#):not(#\#):not(#\#){color:inherit}.sand-p7q3dj:not(#\#):not(#\#):not(#\#){color:#fcfcfc66}.sand-102cea3:not(#\#):not(#\#):not(#\#){color:#fcfcfc99}.sand-99e291:not(#\#):not(#\#):not(#\#){color:#ffffffd9}.sand-1tc92z3:not(#\#):not(#\#):not(#\#){color:var(--cursor-bg-editor)}.sand-1w5rjie:not(#\#):not(#\#):not(#\#){color:var(--cursor-text-green-primary)}.sand-70xvah:not(#\#):not(#\#):not(#\#){color:var(--cursor-text-invert)}.sand-1wd3ewq:not(#\#):not(#\#):not(#\#){color:var(--cursor-text-primary)}.sand-19aaqeu:not(#\#):not(#\#):not(#\#){color:var(--cursor-text-secondary)}.sand-4b2ntj:not(#\#):not(#\#):not(#\#){color:var(--cursor-text-tertiary)}.sand-1izesbo:not(#\#):not(#\#):not(#\#){color:var(--cursor-text-yellow-primary)}.sand-18ti0zn:not(#\#):not(#\#):not(#\#){color:var(--sand-text-on-color)}.sand-xcaa6e:not(#\#):not(#\#):not(#\#){color:var(--sand-text-on-primary)}.sand-tyxrsu:not(#\#):not(#\#):not(#\#){color:var(--sand-text-primary)}.sand-1o0liin:not(#\#):not(#\#):not(#\#){color:var(--sand-text-secondary)}.sand-pqogu8:not(#\#):not(#\#):not(#\#){container-type:size}.sand-icojor:not(#\#):not(#\#):not(#\#){cursor:col-resize}.sand-1ypdohk:not(#\#):not(#\#):not(#\#){cursor:pointer}.sand-104kibb:not(#\#):not(#\#):not(#\#){display:-webkit-box}.sand-1lliihq:not(#\#):not(#\#):not(#\#){display:block}.sand-78zum5:not(#\#):not(#\#):not(#\#){display:flex}.sand-3nfvp2:not(#\#):not(#\#):not(#\#){display:inline-flex}.sand-55qf4y:not(#\#):not(#\#):not(#\#){filter:drop-shadow(0 1px 1.2px rgba(0,0,0,.35))}.sand-ykynuu:not(#\#):not(#\#):not(#\#){flex-basis:160px}.sand-dl72j9:not(#\#):not(#\#):not(#\#){flex-basis:auto}.sand-dt5ytf:not(#\#):not(#\#):not(#\#){flex-direction:column}.sand-1c4vz4f:not(#\#):not(#\#):not(#\#){flex-grow:0}.sand-1iyjqo2:not(#\#):not(#\#):not(#\#){flex-grow:1}.sand-2lah0s:not(#\#):not(#\#):not(#\#){flex-shrink:0}.sand-s83m0k:not(#\#):not(#\#):not(#\#){flex-shrink:1}.sand-1a02dak:not(#\#):not(#\#):not(#\#){flex-wrap:wrap}.sand-jb2p0i:not(#\#):not(#\#):not(#\#){font-family:inherit}.sand-fifm61:not(#\#):not(#\#):not(#\#){font-size:12px}.sand-4z9k3i:not(#\#):not(#\#):not(#\#){font-size:13px}.sand-fc7y3v:not(#\#):not(#\#):not(#\#){font-size:var(--cursor-font-size-lg)}.sand-1k6tqyu:not(#\#):not(#\#):not(#\#){font-weight:var(--sand-font-weight-regular)}.sand-l56j7k:not(#\#):not(#\#):not(#\#){justify-content:center}.sand-13a6bvl:not(#\#):not(#\#):not(#\#){justify-content:flex-end}.sand-1qughib:not(#\#):not(#\#):not(#\#){justify-content:space-between}.sand-12oo3zp:not(#\#):not(#\#):not(#\#){letter-spacing:0}.sand-1d3mw78:not(#\#):not(#\#):not(#\#){line-height:16px}.sand-d4r4e8:not(#\#):not(#\#):not(#\#){line-height:18px}.sand-1yxxptd:not(#\#):not(#\#):not(#\#){line-height:var(--cursor-line-height-lg)}.sand-l1xv1r:not(#\#):not(#\#):not(#\#){object-fit:cover}.sand-g01cxk:not(#\#):not(#\#):not(#\#){opacity:0}.sand-1hc1fzr:not(#\#):not(#\#):not(#\#){opacity:1}.sand-1i4knns:not(#\#):not(#\#):not(#\#){opacity:var(--sand-computer-open-reveal,0)}.sand-1uczgqu:not(#\#):not(#\#):not(#\#){outline-color:transparent}.sand-4sht9k:not(#\#):not(#\#):not(#\#){outline-color:var(--sand-border-focus)}.sand-1wfwxd8:not(#\#):not(#\#):not(#\#){outline-offset:0}.sand-1y3gkto:not(#\#):not(#\#):not(#\#){outline-offset:1px}.sand-1t137rt:not(#\#):not(#\#):not(#\#){outline-style:none}.sand-1k57tk5:not(#\#):not(#\#):not(#\#){outline-width:0}.sand-j0a0fe:not(#\#):not(#\#):not(#\#){overflow-wrap:anywhere}.sand-67bb7w:not(#\#):not(#\#):not(#\#){pointer-events:auto}.sand-47corl:not(#\#):not(#\#):not(#\#){pointer-events:none}.sand-10l6tqk:not(#\#):not(#\#):not(#\#){position:absolute}.sand-ixxii4:not(#\#):not(#\#):not(#\#){position:fixed}.sand-1n2onr6:not(#\#):not(#\#):not(#\#){position:relative}.sand-2b8uid:not(#\#):not(#\#):not(#\#){text-align:center}.sand-dpxx8g:not(#\#):not(#\#):not(#\#){text-align:left}.sand-krqix3:not(#\#):not(#\#):not(#\#){text-decoration-line:none}.sand-lyipyv:not(#\#):not(#\#):not(#\#){text-overflow:ellipsis}.sand-ggy1nq:not(#\#):not(#\#):not(#\#){touch-action:manipulation}.sand-5ve5x3:not(#\#):not(#\#):not(#\#){touch-action:none}.sand-1hj3fc7:not(#\#):not(#\#):not(#\#){transform-origin:0 0}.sand-1g0ag68:not(#\#):not(#\#):not(#\#){transform-origin:center}.sand-fs3179:not(#\#):not(#\#):not(#\#){transform:rotate(-90deg) scale(.85)}.sand-18a52ng:not(#\#):not(#\#):not(#\#){transform:scale(var(--sand-computer-preview-fit,0))}.sand-gdialr:not(#\#):not(#\#):not(#\#){transition-duration:.12s}.sand-bb3pvg:not(#\#):not(#\#):not(#\#){transition-duration:.14s}.sand-1eaenvl:not(#\#):not(#\#):not(#\#){transition-property:background-color,border-color,color}.sand-s2xxs2:not(#\#):not(#\#):not(#\#){transition-property:background-color,color}.sand-19991ni:not(#\#):not(#\#):not(#\#){transition-property:opacity}.sand-1pbvl4h:not(#\#):not(#\#):not(#\#){transition-timing-function:cubic-bezier(.16,1,.3,1)}.sand-9lcvmn:not(#\#):not(#\#):not(#\#){transition-timing-function:ease-out}.sand-87ps6o:not(#\#):not(#\#):not(#\#){-webkit-user-select:none;user-select:none}.sand-lshs6z:not(#\#):not(#\#):not(#\#){visibility:hidden}.sand-uxw1ft:not(#\#):not(#\#):not(#\#){white-space:nowrap}.sand-1q1rmc8:not(#\#):not(#\#):not(#\#){will-change:transform,opacity}.sand-1so62im:not(#\#):not(#\#):not(#\#){will-change:transform}.sand-htitgo:not(#\#):not(#\#):not(#\#){z-index:2}.sand-zkaem6:not(#\#):not(#\#):not(#\#){z-index:3}.sand-f5e64p:not(#\#):not(#\#):not(#\#){z-index:40}.sand-1u8a7rm:not(#\#):not(#\#):not(#\#){z-index:5}.sand-1t642l6.sand-1t642l6:where(.sand--default-marker:hover *):not(#\#):not(#\#):not(#\#){opacity:1}.sand-xlogw.sand-xlogw:where(.sand--default-marker:is(.sand-info-pane[data-open]) *):not(#\#):not(#\#):not(#\#){-webkit-app-region:var(--sand-app-region)}.sand-1jsghw4.sand-1jsghw4:where(.sand--default-marker:is(.sand-thread-root-group) *):not(#\#):not(#\#):not(#\#){align-self:auto}.sand-1jy3azn.sand-1jy3azn:where(.sand--default-marker:is(.sand-transcript-row[data-role=user]) *):not(#\#):not(#\#):not(#\#){align-self:flex-end}.sand-nh2nfu.sand-nh2nfu:where(.sand--default-marker:is(.sand-transcript-row[data-enter=new]) *):not(#\#):not(#\#):not(#\#){animation-duration:.24s}.sand-z7gpas.sand-z7gpas:where(.sand--default-marker:is(.sand-transcript-row[data-enter=new]) *):not(#\#):not(#\#):not(#\#){animation-fill-mode:backwards}.sand-1x1dhk.sand-1x1dhk:where(.sand--default-marker:is(.sand-transcript-row[data-enter=new]) *):not(#\#):not(#\#):not(#\#){animation-name:sand-1im2lgs-B}.sand-1e4qpq1.sand-1e4qpq1:where(.sand--default-marker:is(.sand-transcript-row[data-enter=new]) *):not(#\#):not(#\#):not(#\#){animation-timing-function:cubic-bezier(.23,1,.32,1)}.sand-1kc055u:hover:not(:disabled):not(#\#):not(#\#):not(#\#){background-color:#fff}.sand-65ythk.sand-65ythk:where(.sand--default-marker:is([data-role=user]) *):not(#\#):not(#\#):not(#\#){background-color:color-mix(in srgb,currentColor 24%,transparent)}.sand-1i2krav.sand-1i2krav:where(.sand--default-marker:is([data-role=user]) *):not(#\#):not(#\#):not(#\#){background-color:color-mix(in srgb,currentColor 34%,transparent)}.sand-pp4zd3:hover:not(:disabled):not(#\#):not(#\#):not(#\#){background-color:color-mix(in srgb,var(--cursor-bg-tertiary) 76%,transparent)}.sand-y5l4bz:hover:not(:disabled):not(#\#):not(#\#):not(#\#){background-color:#f7eaea1a}.sand-1y49cd9:hover:not(:disabled):not(#\#):not(#\#):not(#\#){background-color:var(--cursor-bg-accent-hover)}.sand-11n3mlv:hover:not(:disabled):not(#\#):not(#\#):not(#\#){background-color:var(--cursor-bg-purple-primary)}.sand-1vzksul.sand-1vzksul:where(.sand--default-marker:is(.sand-link-hover-card:focus-visible) *):not(#\#):not(#\#):not(#\#){background-color:var(--cursor-bg-quaternary)}.sand-oli092:hover:not(:disabled):not(#\#):not(#\#):not(#\#){background-color:var(--cursor-bg-tertiary)}.sand-11s1588.sand-11s1588:where(.sand--default-marker:is(.sand-info-pane__resize-handle:hover) *):not(#\#):not(#\#):not(#\#){background-color:var(--cursor-stroke-primary)}.sand-1qd9jm1:hover:not(:disabled):not(#\#):not(#\#):not(#\#){background-color:var(--cursor-text-secondary)}.sand-1r8pydn:hover:not(:disabled):not(#\#):not(#\#):not(#\#){background-color:var(--sand-fill-ghost-hover)}.sand-1e15362:hover:not(:disabled):not(#\#):not(#\#):not(#\#){background-color:var(--sand-fill-primary-hover)}.sand-ex9vrg:hover:not(:disabled):not(#\#):not(#\#):not(#\#){background-color:var(--sand-fill-secondary-hover)}.sand-o0til3.sand-o0til3:where(.sand--default-marker:is(.sand-org-chart-network__node:focus-visible) *):not(#\#):not(#\#):not(#\#){box-shadow:0 0 0 2px var(--cursor-bg-editor),0 0 0 4px var(--cursor-icon-accent-primary),0 0 0 6px var(--cursor-stroke-secondary)}.sand-1v6edb8.sand-1v6edb8:where(.sand--default-marker:is(.sand-org-chart-network__node:focus-visible) *):not(#\#):not(#\#):not(#\#){box-shadow:0 0 0 2px var(--cursor-bg-editor),0 0 0 4px var(--cursor-stroke-secondary)}.sand-js1wst:focus-visible:not(#\#):not(#\#):not(#\#){box-shadow:inset 0 0 0 1.5px var(--cursor-icon-accent-primary)}.sand-1v0sr2s:hover:not(:disabled):not(#\#):not(#\#):not(#\#){color:#fff}.sand-tp1uuy.sand-tp1uuy:where(.sand--default-marker:is([data-role=user]) *):not(#\#):not(#\#):not(#\#){color:color-mix(in srgb,var(--cursor-text-link) 65%,var(--cursor-text-invert))}.sand-dw34h5.sand-dw34h5:where(.sand--default-marker:is([data-role=user]) *):not(#\#):not(#\#):not(#\#){color:currentColor}.sand-1dsx48b:hover:not(:disabled):not(#\#):not(#\#):not(#\#){color:var(--cursor-text-primary)}.sand-1abnqxm:hover:not(:disabled):not(#\#):not(#\#):not(#\#){color:var(--cursor-text-secondary)}.sand-hn7xur:hover:not(:disabled):not(#\#):not(#\#):not(#\#){color:var(--sand-text-on-color)}.sand-1fx2joi:hover:not(:disabled):not(#\#):not(#\#):not(#\#){color:var(--sand-text-primary)}.sand-gy48t7.sand-gy48t7:where(.sand--default-marker[data-focused=true] *):not(#\#):not(#\#):not(#\#){display:inline-flex}.sand-1w1fagr.sand-1w1fagr:where(.sand--default-marker:is([data-standalone-emoji]) *):not(#\#):not(#\#):not(#\#){line-height:inherit}.sand-iwaow4.sand-iwaow4:where(.sand--default-marker:is(.sand-thread-root-group) *):not(#\#):not(#\#):not(#\#){margin-inline-start:0}.sand-javwx2.sand-javwx2:where(.sand--default-marker:is(.sand-transcript-row[data-role=user]) *):not(#\#):not(#\#):not(#\#){margin-inline-start:auto}.sand-o77nbk.sand-o77nbk:where(.sand--default-marker:is([data-role=user]) *):not(#\#):not(#\#):not(#\#){object-position:right center}.sand-15udmaw.sand-15udmaw:where(.sand--default-marker:is(.sand-thread-affordance:hover,.sand-thread-affordance:focus-visible) *):not(#\#):not(#\#):not(#\#){opacity:0}.sand-11iuvcu.sand-11iuvcu:where(.sand--default-marker:is(.sand-editable-avatar__button:focus-visible) *):not(#\#):not(#\#):not(#\#){opacity:1}.sand-15stfbk.sand-15stfbk:where(.sand--default-marker:is(.sand-agent-character__shape:focus-visible) *):not(#\#):not(#\#):not(#\#){opacity:1}.sand-18w85s.sand-18w85s:where(.sand--default-marker:is(.sand-prompt-attachment:hover) *):not(#\#):not(#\#):not(#\#){opacity:1}.sand-1k8kjig.sand-1k8kjig:where(.sand--default-marker:is(.sand-editable-avatar:hover) *):not(#\#):not(#\#):not(#\#){opacity:1}.sand-1m82r8.sand-1m82r8:where(.sand--default-marker:is(.sand-group-member-row:hover) *):not(#\#):not(#\#):not(#\#){opacity:1}.sand-1unrs2p.sand-1unrs2p:where(.sand--default-marker:is(.sand-message-action-anchor:hover,.sand-message-action-anchor:focus-within,.sand-message-action-anchor--menu-open):not([data-peeking] *) *):not(#\#):not(#\#):not(#\#){opacity:1}.sand-1v0snhv.sand-1v0snhv:where(.sand--default-marker:is(.sand-avatar-trigger__button:focus-visible) *):not(#\#):not(#\#):not(#\#){opacity:1}.sand-1x4ln44.sand-1x4ln44:where(.sand--default-marker:is(.sand-agent-character__shape:hover) *):not(#\#):not(#\#):not(#\#){opacity:1}.sand-2s7snv.sand-2s7snv:where(.sand--default-marker:is(.sand-attachment-chip:hover) *):not(#\#):not(#\#):not(#\#){opacity:1}.sand-qcwuys.sand-qcwuys:where(.sand--default-marker:is(.sand-avatar-trigger__button:hover) *):not(#\#):not(#\#):not(#\#){opacity:1}.sand-ufldet.sand-ufldet:where(.sand--default-marker:is(.sand-thread-affordance:hover,.sand-thread-affordance:focus-visible) *):not(#\#):not(#\#):not(#\#){opacity:1}.sand-yn4j07.sand-yn4j07:where(.sand--default-marker:is(.sand-editable-avatar__button:hover:not(:disabled)) *):not(#\#):not(#\#):not(#\#){opacity:1}.sand-1725o6r:focus-visible:not(#\#):not(#\#):not(#\#){outline-color:var(--cursor-stroke-focused)}.sand-7s97pk:focus-visible:not(#\#):not(#\#):not(#\#){outline-offset:2px}.sand-i5y0ii:focus-visible:not(#\#):not(#\#):not(#\#){outline-style:none}.sand-9v5kkp:focus-visible:not(#\#):not(#\#):not(#\#){outline-style:solid}.sand-784prv:focus-visible:not(#\#):not(#\#):not(#\#){outline-width:2px}.sand-fuufzc.sand-fuufzc:where(.sand--default-marker:is(.sand-group-member-row:hover) *):not(#\#):not(#\#):not(#\#){pointer-events:auto}.sand-rlv35n.sand-rlv35n:where(.sand--default-marker:is(.sand-message-action-anchor:hover,.sand-message-action-anchor:focus-within,.sand-message-action-anchor--menu-open):not([data-peeking] *) *):not(#\#):not(#\#):not(#\#){pointer-events:auto}.sand-1xmi0w3.sand-1xmi0w3:where(.sand--default-marker:is([data-role=user]) *):not(#\#):not(#\#):not(#\#){text-decoration-line:underline}.sand-u4dwyt.sand-u4dwyt:where(.sand--default-marker:is(.sand-transcript-row[data-enter=new]) *):not(#\#):not(#\#):not(#\#){transform-origin:0 100%}.sand-1xarvej.sand-1xarvej:where(.sand--default-marker:is(.sand-transcript-row[data-enter=new][data-role=user]) *):not(#\#):not(#\#):not(#\#){transform-origin:100% 100%}.sand-ba0exv.sand-ba0exv:where(.sand--default-marker:is([data-peeking]) *):not(#\#):not(#\#):not(#\#){will-change:transform,opacity}.sand-euoelj.sand-euoelj:where(.sand--default-marker:is([data-peeking]) *):not(#\#):not(#\#):not(#\#){will-change:transform}.sand-1gzh0bn:disabled:not(#\#):not(#\#):not(#\#){background-color:var(--sand-fill-primary-disabled)}.sand-wj1584:disabled:not(#\#):not(#\#):not(#\#){background-color:var(--sand-fill-secondary-disabled)}.sand-g7klql:disabled:not(#\#):not(#\#):not(#\#){color:color-mix(in srgb,var(--sand-text-primary) 30%,transparent)}.sand-7n8uir:disabled:not(#\#):not(#\#):not(#\#){color:var(--sand-text-disabled)}.sand-tgyt42:disabled:not(#\#):not(#\#):not(#\#){cursor:default}.sand-1s07b3s:disabled:not(#\#):not(#\#):not(#\#){cursor:not-allowed}.sand-uhm2yv:disabled:not(#\#):not(#\#):not(#\#){opacity:.56}.sand-aqnwrm:disabled:not(#\#):not(#\#):not(#\#){pointer-events:none}@media(prefers-reduced-motion:reduce){.sand-1aquc0h.sand-1aquc0h:not(#\#):not(#\#):not(#\#){animation-name:none}}@media(prefers-reduced-motion:reduce){.sand-11gebw9.sand-11gebw9:not(#\#):not(#\#):not(#\#){opacity:.7}}@media(prefers-reduced-motion:reduce){.sand-1efgrdp.sand-1efgrdp.sand-1efgrdp:where(.sand--default-marker:is(.sand-transcript-row[data-enter=new]) *):not(#\#):not(#\#):not(#\#){animation-duration:.12s}}@media(prefers-reduced-motion:reduce){.sand-xnp86f.sand-xnp86f.sand-xnp86f:where(.sand--default-marker:is(.sand-transcript-row[data-enter=new]) *):not(#\#):not(#\#):not(#\#){animation-name:sand-18re5ia-B}}@media(hover:hover)and (pointer:fine){.sand-rufiuu.sand-rufiuu.sand-rufiuu:where(.sand--default-marker:is(.sand-link-hover-card:hover) *):not(#\#):not(#\#):not(#\#){background-color:var(--cursor-bg-quaternary)}}@media(hover:hover)and (pointer:fine){.sand-11cn5f1.sand-11cn5f1.sand-11cn5f1:where(.sand--default-marker:is(.sand-mermaid-figure:hover) *):not(#\#):not(#\#):not(#\#){opacity:1}}@media(hover:hover)and (pointer:fine){.sand-o8ljoj.sand-o8ljoj.sand-o8ljoj:where(.sand--default-marker:is(.sand-code-figure:hover) *):not(#\#):not(#\#):not(#\#){opacity:1}}@media(hover:hover)and (pointer:fine){.sand-1nn4xpi.sand-1nn4xpi.sand-1nn4xpi:where(.sand--default-marker:is(.sand-code-figure:hover) *):not(#\#):not(#\#):not(#\#){pointer-events:auto}}.sand-16stqrj:not(#\#):not(#\#):not(#\#):not(#\#){border-bottom-color:transparent}.sand-1jfuf7k:not(#\#):not(#\#):not(#\#):not(#\#){border-bottom-color:var(--cursor-stroke-secondary)}.sand-1q0q8m5:not(#\#):not(#\#):not(#\#):not(#\#){border-bottom-style:solid}.sand-so031l:not(#\#):not(#\#):not(#\#):not(#\#){border-bottom-width:1px}.sand-1g4hjc:not(#\#):not(#\#):not(#\#):not(#\#){border-left-color:transparent}.sand-1l09f48:not(#\#):not(#\#):not(#\#):not(#\#){border-left-color:var(--cursor-stroke-secondary)}.sand-19ypqd9:not(#\#):not(#\#):not(#\#):not(#\#){border-left-style:solid}.sand-e0pwq:not(#\#):not(#\#):not(#\#):not(#\#){border-left-width:1px}.sand-he5wa1:not(#\#):not(#\#):not(#\#):not(#\#){border-right-color:transparent}.sand-hnkhp4:not(#\#):not(#\#):not(#\#):not(#\#){border-right-color:var(--cursor-stroke-secondary)}.sand-32b0ac:not(#\#):not(#\#):not(#\#):not(#\#){border-right-style:solid}.sand-s1s249:not(#\#):not(#\#):not(#\#):not(#\#){border-right-width:1px}.sand-1v8p93f:not(#\#):not(#\#):not(#\#):not(#\#){border-top-color:transparent}.sand-2kampu:not(#\#):not(#\#):not(#\#):not(#\#){border-top-color:var(--cursor-stroke-secondary)}.sand-4usyfx:not(#\#):not(#\#):not(#\#):not(#\#){border-top-color:var(--cursor-text-secondary)}.sand-13fuv20:not(#\#):not(#\#):not(#\#):not(#\#){border-top-style:solid}.sand-178xt8z:not(#\#):not(#\#):not(#\#):not(#\#){border-top-width:1px}.sand-1ey2m1c:not(#\#):not(#\#):not(#\#):not(#\#){bottom:0}.sand-5yr21d:not(#\#):not(#\#):not(#\#):not(#\#){height:100%}.sand-ch40qd:not(#\#):not(#\#):not(#\#):not(#\#){height:122px}.sand-mix8c7:not(#\#):not(#\#):not(#\#):not(#\#){height:18px}.sand-xk0z11:not(#\#):not(#\#):not(#\#):not(#\#){height:24px}.sand-1fgtraw:not(#\#):not(#\#):not(#\#):not(#\#){height:28px}.sand-10w6t97:not(#\#):not(#\#):not(#\#):not(#\#){height:32px}.sand-n3w4p2:not(#\#):not(#\#):not(#\#):not(#\#){height:44px}.sand-ols6we:not(#\#):not(#\#):not(#\#):not(#\#){height:6px}.sand-14kp3v7:not(#\#):not(#\#):not(#\#):not(#\#){height:var(--sand-titlebar-block,38px)}.sand-1ct5tfr:not(#\#):not(#\#):not(#\#):not(#\#){left:-4.32px}.sand-u96u03:not(#\#):not(#\#):not(#\#):not(#\#){left:0}.sand-1nrll8i:not(#\#):not(#\#):not(#\#):not(#\#){left:50%}.sand-at24cr:not(#\#):not(#\#):not(#\#):not(#\#){margin-bottom:0}.sand-1e56ztr:not(#\#):not(#\#):not(#\#):not(#\#){margin-bottom:8px}.sand-j3b58b:not(#\#):not(#\#):not(#\#):not(#\#){margin-left:0}.sand-8x9d4c:not(#\#):not(#\#):not(#\#):not(#\#){margin-left:auto}.sand-1x862rh:not(#\#):not(#\#):not(#\#):not(#\#){margin-right:-4px}.sand-1yf7rl7:not(#\#):not(#\#):not(#\#):not(#\#){margin-right:0}.sand-dj266r:not(#\#):not(#\#):not(#\#):not(#\#){margin-top:0}.sand-14vqqas:not(#\#):not(#\#):not(#\#):not(#\#){margin-top:12px}.sand-1k70j0n:not(#\#):not(#\#):not(#\#):not(#\#){margin-top:6px}.sand-193iq5w:not(#\#):not(#\#):not(#\#):not(#\#){max-width:100%}.sand-18qnofl:not(#\#):not(#\#):not(#\#):not(#\#){max-width:160px}.sand-1usz39j:not(#\#):not(#\#):not(#\#):not(#\#){max-width:calc(100vw - 16px)}.sand-1uxagwj:not(#\#):not(#\#):not(#\#):not(#\#){max-width:max(0px,calc(100vw - var(--sand-sidebar-width,280px) - var(--sand-chat-min-width,424px)))}.sand-2lwn1j:not(#\#):not(#\#):not(#\#):not(#\#){min-height:0}.sand-euugli:not(#\#):not(#\#):not(#\#):not(#\#){min-width:0}.sand-10wlt62:not(#\#):not(#\#):not(#\#):not(#\#){overflow-y:hidden}.sand-18d9i69:not(#\#):not(#\#):not(#\#):not(#\#){padding-bottom:0}.sand-1a8lsjc:not(#\#):not(#\#):not(#\#):not(#\#){padding-bottom:10px}.sand-1120s5i:not(#\#):not(#\#):not(#\#):not(#\#){padding-bottom:2px}.sand-jkvuk6:not(#\#):not(#\#):not(#\#):not(#\#){padding-bottom:4px}.sand-10b6aqq:not(#\#):not(#\#):not(#\#):not(#\#){padding-bottom:6px}.sand-1uhho1l:not(#\#):not(#\#):not(#\#):not(#\#){padding-left:0}.sand-1lqa7cf:not(#\#):not(#\#):not(#\#):not(#\#){padding-left:10px}.sand-f18ygs:not(#\#):not(#\#):not(#\#):not(#\#){padding-left:12px}.sand-6wrskw:not(#\#):not(#\#):not(#\#):not(#\#){padding-left:4px}.sand-11iknt3:not(#\#):not(#\#):not(#\#):not(#\#){padding-left:6px}.sand-163pfp:not(#\#):not(#\#):not(#\#):not(#\#){padding-left:8px}.sand-1xpa7k:not(#\#):not(#\#):not(#\#):not(#\#){padding-right:0}.sand-cicffo:not(#\#):not(#\#):not(#\#):not(#\#){padding-right:10px}.sand-1ug7bdz:not(#\#):not(#\#):not(#\#):not(#\#){padding-right:6px}.sand-y13l1i:not(#\#):not(#\#):not(#\#):not(#\#){padding-right:8px}.sand-j9b1aj:not(#\#):not(#\#):not(#\#):not(#\#){padding-right:calc(12px + var(--sand-window-controls-inset,0px))}.sand-lkep63:not(#\#):not(#\#):not(#\#):not(#\#){padding-right:calc(8px + var(--sand-window-controls-inset,0px))}.sand-exx8yu:not(#\#):not(#\#):not(#\#):not(#\#){padding-top:0}.sand-889kno:not(#\#):not(#\#):not(#\#):not(#\#){padding-top:10px}.sand-1nn3v0j:not(#\#):not(#\#):not(#\#):not(#\#){padding-top:2px}.sand-1iorvi4:not(#\#):not(#\#):not(#\#):not(#\#){padding-top:4px}.sand-1yrsyyn:not(#\#):not(#\#):not(#\#):not(#\#){padding-top:6px}.sand-wc5g4n:not(#\#):not(#\#):not(#\#):not(#\#){top:-4.32px}.sand-13vifvy:not(#\#):not(#\#):not(#\#):not(#\#){top:0}.sand-wa60dl:not(#\#):not(#\#):not(#\#):not(#\#){top:50%}.sand-nalus7:not(#\#):not(#\#):not(#\#):not(#\#){width:0}.sand-h8yej3:not(#\#):not(#\#):not(#\#):not(#\#){width:100%}.sand-1fsd2vl:not(#\#):not(#\#):not(#\#):not(#\#){width:10px}.sand-1xp8n7a:not(#\#):not(#\#):not(#\#):not(#\#){width:18px}.sand-weiyed:not(#\#):not(#\#):not(#\#):not(#\#){width:237px}.sand-vy4d1p:not(#\#):not(#\#):not(#\#):not(#\#){width:24px}.sand-gd8bvy:not(#\#):not(#\#):not(#\#):not(#\#){width:28px}.sand-xljpkc:not(#\#):not(#\#):not(#\#):not(#\#){width:30%}.sand-5c4s84:not(#\#):not(#\#):not(#\#):not(#\#){width:324px}.sand-1691je0:not(#\#):not(#\#):not(#\#):not(#\#){width:34px}.sand-1cvmir6:not(#\#):not(#\#):not(#\#):not(#\#){width:360px}.sand-1v4s8kt:not(#\#):not(#\#):not(#\#):not(#\#){width:6px}.sand-9c3od3:not(#\#):not(#\#):not(#\#):not(#\#){width:calc(var(--sand-info-pane-width,320px) + max(0px,calc(var(--sand-window-controls-inset,0px) - 140px)))}.sand-4v8ngr:not(#\#):not(#\#):not(#\#):not(#\#){width:.5px}.sand-19oyhso.sand-19oyhso:where(.sand--default-marker:is(.sand-thread-root-group) *):not(#\#):not(#\#):not(#\#):not(#\#){border-bottom-left-radius:0}.sand-z5ie3w.sand-z5ie3w:where(.sand--default-marker:is(.sand-thread-root-group) *):not(#\#):not(#\#):not(#\#):not(#\#){border-bottom-right-radius:0}.sand-1sl1sun.sand-1sl1sun:where(.sand--default-marker:is(.sand-transcript-row[data-has-reply]) *):not(#\#):not(#\#):not(#\#):not(#\#){margin-top:0}.sand-qprlqo.sand-qprlqo:where(.sand--default-marker:is(.sand-thread-root-group) *):not(#\#):not(#\#):not(#\#):not(#\#){max-width:100%}:root{color:var(--cursor-text-primary);background:var(--cursor-bg-editor);font-family:var(--cursor-font-family-sans);font-weight:var(--sand-font-weight-regular);-webkit-font-smoothing:antialiased;-webkit-user-select:none;user-select:none}html,body{width:100%;height:100%;overflow:hidden}.sand-shell,.sand-shell *{box-sizing:border-box}@property --sand-activity-mark-ink{syntax: ""; inherits: true; initial-value: #000000;}@property --sand-activity-mark-ink-from{syntax: ""; inherits: true; initial-value: #000000;}@property --sand-activity-mark-ink-to{syntax: ""; inherits: true; initial-value: #000000;}
+
diff --git a/web/src/grok/transcript-utility-parity.css b/web/src/grok/transcript-utility-parity.css
new file mode 100644
index 0000000..81fcd7e
--- /dev/null
+++ b/web/src/grok/transcript-utility-parity.css
@@ -0,0 +1,371 @@
+/*
+ * Exact first-party transcript utility rules extracted from the immutable renderer stylesheet.
+ * @evidence src/app/dist/renderer/assets/index-lCyB53CO.css
+ * Immutable CSS SHA-256: 5a25f934b7d3b7a55483cb5f2a1a05e21209aad0a09c82d07d2add054a6b7856
+ * Consumer: conversation/workspace/transcript.tsx utility classes; generated/editor/font blocks excluded.
+ */
+
+.sand-1qugcng:not(#\#):not(#\#) {
+ border-color: color-mix(in srgb, var(--cursor-base) 30%, transparent);
+}
+.sand-9r1u3d:not(#\#):not(#\#) {
+ border-color: transparent;
+}
+.sand-qz0629:not(#\#):not(#\#) {
+ border-color: var(--cursor-stroke-tertiary);
+}
+.sand-12oqio5:not(#\#):not(#\#) {
+ border-radius: 4px;
+}
+.sand-1e1y6u3:not(#\#):not(#\#) {
+ border-radius: var(--cursor-radius-sm);
+}
+.sand-t9pb60:not(#\#):not(#\#) {
+ border-radius: 6px;
+}
+.sand-1y0btm7:not(#\#):not(#\#) {
+ border-style: solid;
+}
+.sand-mkeg23:not(#\#):not(#\#) {
+ border-width: 1px;
+}
+.sand-qjedn3:not(#\#):not(#\#) {
+ border-width: .5px;
+}
+.sand-11twubx:not(#\#):not(#\#) {
+ gap: var(--cursor-spacing-1);
+}
+.sand-rxpjvj:not(#\#):not(#\#) {
+ margin-inline: 0;
+}
+.sand-b3r6kr:not(#\#):not(#\#) {
+ overflow: hidden;
+}
+.sand-t970qd:not(#\#):not(#\#) {
+ padding-block: 0;
+}
+.sand-y3jwiz:not(#\#):not(#\#) {
+ padding-block: var(--cursor-spacing-1);
+}
+.sand-1bfovwe:not(#\#):not(#\#) {
+ padding-inline: var(--cursor-spacing-0-5);
+}
+.sand-13e3tqs:not(#\#):not(#\#) {
+ padding-inline: var(--cursor-spacing-2);
+}
+.sand-6s0dn4:not(#\#):not(#\#):not(#\#) {
+ align-items: center;
+}
+.sand-pvyfi4:not(#\#):not(#\#):not(#\#) {
+ align-self: flex-end;
+}
+.sand-1hhjprl:not(#\#):not(#\#):not(#\#) {
+ background-color: color-mix(in srgb, var(--cursor-text-primary) 10%, transparent);
+}
+.sand-1ua6jya:not(#\#):not(#\#):not(#\#) {
+ background-color: var(--cursor-bg-editor);
+}
+.sand-1nyy9xd:not(#\#):not(#\#):not(#\#) {
+ background-color: var(--cursor-foreground);
+}
+.sand-1uspnb1:not(#\#):not(#\#):not(#\#) {
+ background-color: var(--sand-floating-control-surface);
+}
+.sand-18o3ruo:not(#\#):not(#\#):not(#\#) {
+ background-image: none;
+}
+.sand-1mwwwfo:not(#\#):not(#\#):not(#\#) {
+ border-collapse: collapse;
+}
+.sand-4n2izg:not(#\#):not(#\#):not(#\#) {
+ border-inline-start-color: var(--cursor-stroke-tertiary);
+}
+.sand-1t7ytsu:not(#\#):not(#\#):not(#\#) {
+ border-inline-start-style: solid;
+}
+.sand-yumdvf:not(#\#):not(#\#):not(#\#) {
+ border-inline-start-width: 2px;
+}
+.sand-12sv23o:not(#\#):not(#\#):not(#\#) {
+ box-shadow: 0 1px 3px 0 var(--sand-shadow-control);
+}
+.sand-9f619:not(#\#):not(#\#):not(#\#) {
+ box-sizing: border-box;
+}
+.sand-1heor9g:not(#\#):not(#\#):not(#\#) {
+ color: inherit;
+}
+.sand-1mh7f6w:not(#\#):not(#\#):not(#\#) {
+ color: var(--cursor-icon-secondary);
+}
+.sand-kbann2:not(#\#):not(#\#):not(#\#) {
+ color: var(--cursor-text-accent);
+}
+.sand-70xvah:not(#\#):not(#\#):not(#\#) {
+ color: var(--cursor-text-invert);
+}
+.sand-l1v4ol:not(#\#):not(#\#):not(#\#) {
+ color: var(--cursor-text-link);
+}
+.sand-pmgbkh:not(#\#):not(#\#):not(#\#) {
+ color: var(--cursor-text-red-primary,#ff5f57);
+}
+.sand-19aaqeu:not(#\#):not(#\#):not(#\#) {
+ color: var(--cursor-text-secondary);
+}
+.sand-4b2ntj:not(#\#):not(#\#):not(#\#) {
+ color: var(--cursor-text-tertiary);
+}
+.sand-6rl5ky:not(#\#):not(#\#):not(#\#) {
+ color: var(--sand-text-danger);
+}
+.sand-1o0liin:not(#\#):not(#\#):not(#\#) {
+ color: var(--sand-text-secondary);
+}
+.sand-78zum5:not(#\#):not(#\#):not(#\#) {
+ display: flex;
+}
+.sand-3nfvp2:not(#\#):not(#\#):not(#\#) {
+ display: inline-flex;
+}
+.sand-2lah0s:not(#\#):not(#\#):not(#\#) {
+ flex-shrink: 0;
+}
+.sand-1a02dak:not(#\#):not(#\#):not(#\#) {
+ flex-wrap: wrap;
+}
+.sand-67nlm8:not(#\#):not(#\#):not(#\#) {
+ font-family: var(--cursor-font-family-mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace);
+}
+.sand-eb7xqv:not(#\#):not(#\#):not(#\#) {
+ font-size: .9em;
+}
+.sand-140imcn:not(#\#):not(#\#):not(#\#) {
+ font-size: 1.06em;
+}
+.sand-1b5m78i:not(#\#):not(#\#):not(#\#) {
+ font-size: 1.12em;
+}
+.sand-10siri3:not(#\#):not(#\#):not(#\#) {
+ font-size: 1.2em;
+}
+.sand-1wm8ruf:not(#\#):not(#\#):not(#\#) {
+ font-size: var(--cursor-font-size-sm);
+}
+.sand-y5h43f:not(#\#):not(#\#):not(#\#) {
+ font-size: var(--cursor-font-size-xs);
+}
+.sand-1rhlpx6:not(#\#):not(#\#):not(#\#) {
+ font-weight: var(--sand-font-weight-medium);
+}
+.sand-xzm5a7:not(#\#):not(#\#):not(#\#) {
+ font-weight: var(--sand-font-weight-semibold);
+}
+.sand-l56j7k:not(#\#):not(#\#):not(#\#) {
+ justify-content: center;
+}
+.sand-13a6bvl:not(#\#):not(#\#):not(#\#) {
+ justify-content: flex-end;
+}
+.sand-1ja60sm:not(#\#):not(#\#):not(#\#) {
+ line-height: var(--cursor-line-height-base);
+}
+.sand-19ji09o:not(#\#):not(#\#):not(#\#) {
+ line-height: var(--cursor-line-height-xs);
+}
+.sand-43c9pm:not(#\#):not(#\#):not(#\#) {
+ list-style-position: outside;
+}
+.sand-3yw8vx:not(#\#):not(#\#):not(#\#) {
+ list-style-type: decimal;
+}
+.sand-taz4m5:not(#\#):not(#\#):not(#\#) {
+ list-style-type: disc;
+}
+.sand-wbqysy:not(#\#):not(#\#):not(#\#) {
+ margin-inline-end: var(--cursor-spacing-1-5);
+}
+.sand-1hc1fzr:not(#\#):not(#\#):not(#\#) {
+ opacity: 1;
+}
+.sand-8fiw5y:not(#\#):not(#\#):not(#\#) {
+ padding-inline-start: var(--cursor-spacing-3);
+}
+.sand-92arao:not(#\#):not(#\#):not(#\#) {
+ padding-inline-start: var(--cursor-spacing-5);
+}
+.sand-67bb7w:not(#\#):not(#\#):not(#\#) {
+ pointer-events: auto;
+}
+.sand-10l6tqk:not(#\#):not(#\#):not(#\#) {
+ position: absolute;
+}
+.sand-dpxx8g:not(#\#):not(#\#):not(#\#) {
+ text-align: left;
+}
+.sand-krqix3:not(#\#):not(#\#):not(#\#) {
+ text-decoration-line: none;
+}
+.sand-ltd7ks:not(#\#):not(#\#):not(#\#) {
+ transition-delay:
+ 0s,
+ .15s,
+ .15s;
+}
+.sand-s9c323:not(#\#):not(#\#):not(#\#) {
+ transition-duration:
+ .15s,
+ .2s,
+ .2s;
+}
+.sand-fe0yzn:not(#\#):not(#\#):not(#\#) {
+ transition-duration:
+ var(--cursor-duration-fast),
+ var(--cursor-duration-fast),
+ var(--cursor-duration-instant),
+ var(--cursor-duration-normal);
+}
+.sand-cdv909:not(#\#):not(#\#):not(#\#) {
+ transition-property:
+ color,
+ background-color,
+ transform,
+ opacity;
+}
+.sand-8m7ss9:not(#\#):not(#\#):not(#\#) {
+ transition-property:
+ opacity,
+ max-height,
+ margin-top;
+}
+.sand-16ges1v:not(#\#):not(#\#):not(#\#) {
+ transition-timing-function:
+ ease-out,
+ cubic-bezier(.77, 0, .175, 1),
+ cubic-bezier(.77, 0, .175, 1);
+}
+.sand-523cq2:not(#\#):not(#\#):not(#\#) {
+ vertical-align: -3px;
+}
+.sand-16dsc37:not(#\#):not(#\#):not(#\#) {
+ vertical-align: top;
+}
+.sand-eaf4i8:not(#\#):not(#\#):not(#\#) {
+ white-space: normal;
+}
+.sand-1ifrsg7:hover:not(#\#):not(#\#):not(#\#) {
+ background-image: linear-gradient(var(--cursor-bg-quaternary), var(--cursor-bg-quaternary));
+}
+.sand-1sur9pj:hover:not(#\#):not(#\#):not(#\#) {
+ text-decoration-line: underline;
+}
+@media (hover: hover) and (pointer: fine) {
+ .sand-m072we.sand-m072we:not(#\#):not(#\#):not(#\#) {
+ opacity: 0;
+ }
+}
+@media (hover: hover) and (pointer: fine) {
+ .sand-14ux7ur.sand-14ux7ur:not(#\#):not(#\#):not(#\#) {
+ pointer-events: none;
+ }
+}
+@media (prefers-reduced-motion: reduce) {
+ .sand-hj7x8a.sand-hj7x8a:not(#\#):not(#\#):not(#\#) {
+ transition-delay: 0s;
+ }
+}
+@media (prefers-reduced-motion: reduce) {
+ .sand-sagj69.sand-sagj69:not(#\#):not(#\#):not(#\#) {
+ transition-duration: .01ms;
+ }
+}
+@media (prefers-reduced-motion: reduce) {
+ .sand-oddwdg.sand-oddwdg:not(#\#):not(#\#):not(#\#) {
+ transition-duration: .15s;
+ }
+}
+@media (prefers-reduced-motion: reduce) {
+ .sand-1ympp8d.sand-1ympp8d:not(#\#):not(#\#):not(#\#) {
+ transition-property: opacity;
+ }
+}
+@media (prefers-reduced-motion: reduce) {
+ .sand-1rrsdy6.sand-1rrsdy6:not(#\#):not(#\#):not(#\#) {
+ transition-timing-function: ease-out;
+ }
+}
+@media (hover: hover) and (pointer: fine) {
+ .sand-1yas17b.sand-1yas17b:focus-visible:not(#\#):not(#\#):not(#\#) {
+ opacity: 1;
+ }
+}
+@media (hover: hover) and (pointer: fine) {
+ .sand-o8ljoj.sand-o8ljoj.sand-o8ljoj:where(.sand--default-marker:is(.sand-code-figure:hover) *):not(#\#):not(#\#):not(#\#) {
+ opacity: 1;
+ }
+}
+@media (hover: hover) and (pointer: fine) {
+ .sand-1nn4xpi.sand-1nn4xpi.sand-1nn4xpi:where(.sand--default-marker:is(.sand-code-figure:hover) *):not(#\#):not(#\#):not(#\#) {
+ pointer-events: auto;
+ }
+}
+@media (hover: hover) and (pointer: fine) {
+ .sand-q1nbte.sand-q1nbte:focus-visible:not(#\#):not(#\#):not(#\#) {
+ pointer-events: auto;
+ }
+}
+.sand-17fyfba:not(#\#):not(#\#):not(#\#):not(#\#) {
+ border-bottom-color: var(--cursor-stroke-tertiary);
+}
+.sand-1sy0etr:not(#\#):not(#\#):not(#\#):not(#\#) {
+ border-bottom-style: none;
+}
+.sand-1q0q8m5:not(#\#):not(#\#):not(#\#):not(#\#) {
+ border-bottom-style: solid;
+}
+.sand-so031l:not(#\#):not(#\#):not(#\#):not(#\#) {
+ border-bottom-width: 1px;
+}
+.sand-1b16gh4:not(#\#):not(#\#):not(#\#):not(#\#) {
+ border-left-style: none;
+}
+.sand-11pwa6s:not(#\#):not(#\#):not(#\#):not(#\#) {
+ border-right-style: none;
+}
+.sand-1aeic0j:not(#\#):not(#\#):not(#\#):not(#\#) {
+ border-top-color: var(--cursor-stroke-tertiary);
+}
+.sand-13fuv20:not(#\#):not(#\#):not(#\#):not(#\#) {
+ border-top-style: solid;
+}
+.sand-178xt8z:not(#\#):not(#\#):not(#\#):not(#\#) {
+ border-top-width: 1px;
+}
+.sand-lup9mm:not(#\#):not(#\#):not(#\#):not(#\#) {
+ height: 16px;
+}
+.sand-at24cr:not(#\#):not(#\#):not(#\#):not(#\#) {
+ margin-bottom: 0;
+}
+.sand-dj266r:not(#\#):not(#\#):not(#\#):not(#\#) {
+ margin-top: 0;
+}
+.sand-1om1abp:not(#\#):not(#\#):not(#\#):not(#\#) {
+ margin-top: var(--cursor-spacing-1);
+}
+.sand-h4j8nf:not(#\#):not(#\#):not(#\#):not(#\#) {
+ max-height: 32px;
+}
+.sand-1s3hisn:not(#\#):not(#\#):not(#\#):not(#\#) {
+ right: var(--cursor-spacing-1-5);
+}
+.sand-1jgjl8u:not(#\#):not(#\#):not(#\#):not(#\#) {
+ top: var(--cursor-spacing-1-5);
+}
+.sand-1kky2od:not(#\#):not(#\#):not(#\#):not(#\#) {
+ width: 16px;
+}
+.sand-kwbhjd:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::marker {
+ color: var(--cursor-text-secondary);
+}
+
diff --git a/web/src/main.tsx b/web/src/main.tsx
new file mode 100644
index 0000000..1b8c3d9
--- /dev/null
+++ b/web/src/main.tsx
@@ -0,0 +1,21 @@
+import React from "react";
+import ReactDOM from "react-dom/client";
+import { App } from "./App";
+import "./grok/shell.css";
+import "./grok/production.css";
+import "./grok/conversation.css";
+import "./grok/transcript-utility-parity.css";
+import "./grok/host.css";
+import { createRuntimeThemeInstaller, type ThemeDocument } from "./grok/runtime-theme-token-installer";
+
+createRuntimeThemeInstaller(document as unknown as ThemeDocument, "dark");
+
+ReactDOM.createRoot(document.getElementById("root")!).render(
+
+
+
+);
+
+if ("serviceWorker" in navigator) {
+ navigator.serviceWorker.register("/sw.js").catch(() => undefined);
+}
diff --git a/web/src/styles.css b/web/src/styles.css
new file mode 100644
index 0000000..4e600ad
--- /dev/null
+++ b/web/src/styles.css
@@ -0,0 +1,299 @@
+/* Grok Bot 0.18 shell tokens (dark) + conversation/computer layout. */
+:root {
+ color-scheme: dark;
+ --cursor-accent: #599CE7;
+ --cursor-base: #F0F0F0;
+ --cursor-chrome: #141414;
+ --cursor-editor: #181818;
+ --cursor-added: #70B489;
+ --cursor-danger: #fc6b83;
+ --cursor-bg-editor: var(--cursor-editor);
+ --cursor-bg-chrome: var(--cursor-chrome);
+ --cursor-bg-secondary: color-mix(in srgb, var(--cursor-base) 8%, transparent);
+ --cursor-bg-tertiary: color-mix(in srgb, var(--cursor-base) 10%, transparent);
+ --cursor-bg-quaternary: color-mix(in srgb, var(--cursor-base) 6%, transparent);
+ --cursor-bg-input-surface: var(--cursor-bg-quaternary);
+ --cursor-text-primary: var(--cursor-base);
+ --cursor-text-secondary: color-mix(in srgb, var(--cursor-base) 74%, transparent);
+ --cursor-text-tertiary: color-mix(in srgb, var(--cursor-base) 60%, transparent);
+ --cursor-text-quaternary: color-mix(in srgb, var(--cursor-base) 44%, transparent);
+ --cursor-input-placeholder-foreground: var(--cursor-text-quaternary);
+ --cursor-stroke-tertiary: color-mix(in srgb, var(--cursor-base) 12%, transparent);
+ --cursor-stroke-secondary: color-mix(in srgb, var(--cursor-base) 16%, transparent);
+ --cursor-stroke-focused: #a9c85d;
+ --cursor-radius-base: 6px;
+ --cursor-radius-lg: 8px;
+ --cursor-radius-full: 999px;
+ --cursor-font-family-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
+ --cursor-font-size-lg: 14px;
+ --cursor-font-size-base: 13px;
+ --cursor-font-size-xs: 11px;
+ --cursor-spacing-0-75: 6px;
+ --cursor-box-shadow-sm: 0 2px 8px #0006;
+ --sand-fill-primary: #d8fa78;
+ --sand-fill-secondary: color-mix(in srgb, var(--cursor-base) 12%, transparent);
+ --sand-fill-accent: #c7ec6b;
+ --sand-fill-success: #70B489;
+ --sand-fill-bubble-agent: #20231f;
+ --sand-fill-bubble-user: #2a2d27;
+ --sand-text-on-color: #171914;
+ --sand-border-weak: var(--cursor-stroke-tertiary);
+ --safe-top: env(safe-area-inset-top, 0px);
+ --safe-bottom: env(safe-area-inset-bottom, 0px);
+}
+
+* { box-sizing: border-box; }
+html, body, #root { width: 100%; height: 100%; margin: 0; overflow: hidden; }
+button, textarea, input { font: inherit; color: inherit; }
+button { cursor: pointer; }
+textarea, input { font-size: 16px; }
+.sand-shell {
+ display: grid;
+ grid-template-columns: 280px minmax(0, 1fr);
+ width: 100%;
+ height: 100dvh;
+ color: var(--cursor-text-primary);
+ background: var(--cursor-bg-editor);
+ font-family: var(--cursor-font-family-sans);
+}
+.sand-shell button:disabled { cursor: not-allowed; }
+
+.sand-agents-sidebar {
+ position: relative;
+ z-index: 3;
+ display: flex;
+ flex-direction: column;
+ min-width: 0;
+ min-height: 0;
+ background: var(--cursor-bg-chrome);
+ border-right: 1px solid var(--cursor-stroke-tertiary);
+ padding-top: var(--safe-top);
+}
+.sand-agents-sidebar__header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ height: 50px;
+ padding: 0 12px 0 16px;
+ border-bottom: 1px solid var(--cursor-stroke-tertiary);
+}
+.sand-agents-sidebar__header strong { font-size: var(--cursor-font-size-lg); }
+.sand-agents-sidebar__new {
+ width: 28px; height: 28px; padding: 0;
+ color: var(--cursor-text-secondary);
+ background: transparent; border: 0; border-radius: var(--cursor-radius-lg);
+}
+.sand-agents-sidebar__new:hover { background: var(--cursor-bg-secondary); }
+.sand-agents-create {
+ display: flex; gap: 6px; padding: 8px 12px;
+}
+.sand-agents-create input {
+ flex: 1; min-width: 0; min-height: 32px; padding: 6px 8px;
+ color: var(--cursor-text-primary);
+ background: var(--cursor-bg-input-surface);
+ border: 1px solid var(--cursor-stroke-secondary);
+ border-radius: var(--cursor-radius-base);
+ outline: none;
+}
+.sand-agents-create button {
+ padding: 0 10px; min-height: 32px;
+ color: var(--sand-text-on-color);
+ background: var(--sand-fill-primary);
+ border: 0; border-radius: var(--cursor-radius-base);
+ font-weight: 600;
+}
+.sand-agents-list {
+ display: grid;
+ flex: 1 1 auto;
+ gap: var(--cursor-spacing-0-75);
+ min-height: 0;
+ overflow: auto;
+ padding: 4px 12px 24px;
+}
+.sand-agents-section__empty {
+ display: flex; align-items: center; min-height: 30px; padding: 8px;
+ color: var(--cursor-text-tertiary); font-size: var(--cursor-font-size-xs);
+}
+.sand-agent-item {
+ position: relative;
+ display: grid;
+ grid-template-columns: 34px minmax(0, 1fr) auto;
+ gap: 9px;
+ align-items: center;
+ width: 100%;
+ min-height: 58px;
+ padding: 8px;
+ color: var(--cursor-text-primary);
+ text-align: left;
+ background: transparent;
+ border: 0;
+ border-radius: var(--cursor-radius-lg);
+ cursor: pointer;
+ touch-action: manipulation;
+}
+.sand-agent-item:hover, .sand-agent-item[aria-current="true"] { background: var(--cursor-bg-secondary); }
+.sand-agent-item__avatar {
+ display: grid; place-items: center; width: 34px; height: 34px;
+ color: var(--sand-text-on-color); background: var(--sand-fill-accent);
+ border-radius: var(--cursor-radius-lg); font-weight: 700;
+}
+.sand-agent-item__body { display: grid; gap: 4px; min-width: 0; }
+.sand-agent-item__name, .sand-agent-item__preview { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
+.sand-agent-item__name { font-size: var(--cursor-font-size-base); }
+.sand-agent-item__preview { color: var(--cursor-text-tertiary); font-size: var(--cursor-font-size-xs); font-weight: 400; }
+.sand-kit-status-dot {
+ width: 8px; height: 8px; border-radius: var(--cursor-radius-full); background: #3a3a3a;
+}
+.sand-kit-status-dot[data-status="working"] { background: var(--sand-fill-success); }
+.sand-agents-sidebar__footer {
+ display: flex; align-items: center; gap: 8px;
+ padding: 10px 12px calc(10px + var(--safe-bottom));
+ border-top: 1px solid var(--cursor-stroke-tertiary);
+}
+.sand-agents-sidebar__footer small { display: block; color: var(--cursor-text-tertiary); }
+
+.sand-chat-stage {
+ position: relative; z-index: 1;
+ display: flex; flex: 1 1 0; flex-direction: column;
+ width: 100%; min-width: 0; min-height: 0; overflow: hidden;
+ background: var(--cursor-bg-editor);
+}
+.sand-chat-header {
+ display: flex; align-items: center; justify-content: space-between; gap: 8px;
+ min-width: 0; min-height: calc(51px + var(--safe-top));
+ padding: var(--safe-top) 16px 0;
+ border-bottom: 1px solid var(--cursor-stroke-tertiary);
+}
+.sand-chat-header__menu {
+ display: none; width: 32px; height: 32px; padding: 0;
+ color: var(--cursor-text-secondary); background: transparent; border: 0; border-radius: var(--cursor-radius-lg);
+}
+.sand-chat-header__identity { display: flex; align-items: center; gap: 9px; padding: 5px 7px; min-width: 0; }
+.sand-chat-header__avatar {
+ display: grid; place-items: center; width: 28px; height: 28px;
+ color: var(--sand-text-on-color); background: var(--sand-fill-accent);
+ border-radius: var(--cursor-radius-lg); font-weight: 700;
+}
+.sand-chat-header__identity small { display: block; color: var(--cursor-text-tertiary); }
+.sand-chat-header__controls { display: inline-flex; align-items: center; gap: 2px; flex-shrink: 0; }
+.sand-chat-header__controls button {
+ min-height: 32px; padding: 4px 8px;
+ color: var(--cursor-text-secondary); background: transparent;
+ border: 0; border-radius: var(--cursor-radius-lg);
+}
+.sand-chat-header__controls button:hover { background: var(--cursor-bg-secondary); }
+.sand-chat-header__controls .danger { color: var(--cursor-danger); }
+
+.sand-virtual-transcript {
+ flex: 1 1 0; min-height: 0; overflow: auto;
+ padding: 28px max(30px, calc((100% - 690px) / 2));
+ outline: none;
+}
+.sand-transcript-row { margin: 0 0 22px; }
+.sand-transcript-row--user { display: flex; justify-content: flex-end; }
+.sand-message {
+ box-sizing: border-box;
+ max-width: min(88%, 640px, calc(100% - 82px));
+ padding: 8px 12px;
+ overflow-wrap: anywhere;
+ color: var(--cursor-text-primary);
+ background: var(--sand-fill-bubble-agent);
+ border-radius: 18px;
+ white-space: pre-wrap;
+ line-height: 1.45;
+ font-size: var(--cursor-font-size-base);
+}
+.sand-transcript-row--user .sand-message { background: var(--sand-fill-bubble-user); }
+.sand-activity { margin: 0 0 10px; color: var(--cursor-text-tertiary); font-size: var(--cursor-font-size-xs); }
+.sand-typing-indicator { display: flex; gap: 4px; width: max-content; padding: 10px 12px; background: #20231f; border-radius: 14px; }
+.sand-typing-indicator span { width: 5px; height: 5px; background: #9ba392; border-radius: 50%; }
+.sand-question {
+ margin: 0 max(30px, calc((100% - 690px) / 2)) 8px;
+ padding: 12px;
+ border: 1px solid var(--cursor-stroke-tertiary);
+ border-radius: 14px;
+ background: color-mix(in srgb, var(--sand-fill-accent) 8%, var(--cursor-bg-editor));
+}
+.sand-question p { margin: 0 0 8px; }
+.sand-question__options { display: flex; flex-wrap: wrap; gap: 8px; }
+.sand-question__options button {
+ min-height: 36px; padding: 6px 12px; border: 0; border-radius: 999px;
+ background: var(--sand-fill-primary); color: var(--sand-text-on-color); font-weight: 600;
+}
+
+.sand-chat-input-dock {
+ display: flex; flex: 0 0 auto; flex-direction: column;
+ width: 100%; min-width: 0;
+ padding: 8px max(24px, calc((100% - 700px) / 2)) calc(18px + var(--safe-bottom));
+}
+.sand-prompt-shell {
+ position: relative; padding: 9px;
+ background: var(--cursor-bg-input-surface);
+ border: 1px solid var(--cursor-stroke-secondary);
+ border-radius: 16px;
+ box-shadow: var(--cursor-box-shadow-sm);
+}
+.sand-prompt-field {
+ display: block; box-sizing: border-box; width: 100%; min-height: 48px; resize: none;
+ color: var(--cursor-text-primary); background: transparent; border: 0; outline: none; line-height: 1.4;
+}
+.sand-prompt-field::placeholder { color: var(--cursor-input-placeholder-foreground); }
+.sand-prompt-actions-row { display: flex; align-items: center; justify-content: flex-end; }
+.sand-prompt-send {
+ display: grid; place-items: center; width: 30px; height: 30px; padding: 0;
+ color: var(--sand-text-on-color); background: var(--sand-fill-primary);
+ border: 0; border-radius: 50%;
+}
+.sand-prompt-send:disabled { cursor: not-allowed; opacity: .4; }
+
+.sand-computer-pane {
+ position: fixed; inset: 0 0 0 auto; z-index: 20;
+ display: flex; flex-direction: column; width: min(52vw, 720px);
+ background: #0d0f0c; border-left: 1px solid var(--cursor-stroke-tertiary);
+ padding-top: var(--safe-top);
+}
+.sand-computer-pane[hidden] { display: none !important; }
+.sand-computer-pane__top {
+ display: flex; align-items: center; justify-content: space-between;
+ min-height: 51px; padding: 0 12px;
+ background: var(--cursor-bg-chrome);
+ border-bottom: 1px solid var(--cursor-stroke-tertiary);
+}
+.sand-computer-pane iframe { flex: 1; width: 100%; border: 0; background: #111; }
+.sand-computer-pane__status {
+ margin: 0; padding: 8px 12px calc(8px + var(--safe-bottom));
+ color: var(--cursor-text-tertiary); font-size: var(--cursor-font-size-xs);
+ background: var(--cursor-bg-chrome);
+}
+
+.sand-tabbar { display: none; }
+.sand-backdrop { display: none; }
+
+@media (max-width: 860px) {
+ .sand-shell { grid-template-columns: 1fr; }
+ .sand-agents-sidebar {
+ position: fixed; z-index: 9; inset: 0 auto 0 0; width: min(86vw, 320px);
+ transform: translateX(-105%);
+ transition: transform .22s cubic-bezier(.22, 1, .36, 1);
+ }
+ .sand-agents-sidebar.is-open { transform: none; }
+ .sand-chat-header__menu { display: inline-flex; }
+ .sand-computer-pane { inset: 0; width: 100%; }
+ .sand-tabbar {
+ display: grid; grid-template-columns: 1fr 1fr;
+ position: fixed; left: 0; right: 0; bottom: 0; z-index: 6;
+ padding: 6px 8px calc(6px + var(--safe-bottom));
+ background: color-mix(in srgb, var(--cursor-bg-chrome) 92%, transparent);
+ border-top: 1px solid var(--cursor-stroke-tertiary);
+ }
+ .sand-tabbar button {
+ min-height: 44px; border: 0; border-radius: 12px;
+ background: transparent; color: var(--cursor-text-tertiary); font-weight: 600;
+ }
+ .sand-tabbar button[aria-current="true"] { color: var(--cursor-text-primary); background: var(--cursor-bg-secondary); }
+ .sand-chat-input-dock { padding-bottom: calc(64px + var(--safe-bottom)); }
+ .sand-backdrop {
+ display: block; position: fixed; inset: 0; z-index: 8; background: #0008;
+ }
+ .sand-backdrop[hidden] { display: none !important; }
+}
diff --git a/web/src/vite-env.d.ts b/web/src/vite-env.d.ts
new file mode 100644
index 0000000..11f02fe
--- /dev/null
+++ b/web/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/web/styles.css b/web/styles.css
new file mode 100644
index 0000000..02a7634
--- /dev/null
+++ b/web/styles.css
@@ -0,0 +1,255 @@
+:root {
+ color-scheme: dark;
+ --bg: #181818;
+ --chrome: #141414;
+ --text: #f0f0f0;
+ --text-2: color-mix(in srgb, #f0f0f0 74%, transparent);
+ --text-3: color-mix(in srgb, #f0f0f0 60%, transparent);
+ --stroke: color-mix(in srgb, #f0f0f0 12%, transparent);
+ --fill: color-mix(in srgb, #f0f0f0 14%, transparent);
+ --bubble: #222;
+ --user: #2c2c2c;
+ --accent: #c7ec6b;
+ --danger: #fc6b83;
+ --radius: 18px;
+ --safe-top: env(safe-area-inset-top, 0px);
+ --safe-bottom: env(safe-area-inset-bottom, 0px);
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
+}
+
+* { box-sizing: border-box; }
+html, body { width: 100%; height: 100%; margin: 0; overflow: hidden; background: var(--bg); color: var(--text); }
+button, textarea { font: inherit; color: inherit; }
+button { cursor: pointer; }
+textarea { font-size: 16px; } /* iOS: avoid zoom */
+
+.shell {
+ display: grid;
+ grid-template-columns: 280px minmax(0, 1fr);
+ height: 100dvh;
+ height: 100svh;
+ background: var(--bg);
+}
+
+.sidebar {
+ display: flex;
+ flex-direction: column;
+ min-height: 0;
+ background: var(--chrome);
+ border-right: 1px solid var(--stroke);
+ padding-top: var(--safe-top);
+}
+.sidebar-header, .chat-header, .computer-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ min-height: 51px;
+ padding: 0 12px;
+ border-bottom: 1px solid var(--stroke);
+}
+.session-list { flex: 1; overflow: auto; padding: 8px; }
+.session-item {
+ display: grid;
+ gap: 4px;
+ width: 100%;
+ min-height: 58px;
+ padding: 10px;
+ text-align: left;
+ background: transparent;
+ border: 0;
+ border-radius: 12px;
+}
+.session-item:hover, .session-item.active { background: var(--fill); }
+.session-item small { color: var(--text-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
+.sidebar-footer {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ padding: 10px 12px calc(10px + var(--safe-bottom));
+ border-top: 1px solid var(--stroke);
+}
+.sidebar-footer small, .identity small, #header-status { color: var(--text-3); display: block; }
+
+.avatar {
+ display: grid;
+ place-items: center;
+ width: 34px;
+ height: 34px;
+ border-radius: 10px;
+ background: var(--accent);
+ color: #141414;
+ font-weight: 700;
+}
+.avatar.sm { width: 28px; height: 28px; font-size: 13px; }
+
+.stage { display: flex; flex-direction: column; min-width: 0; min-height: 0; }
+.chat-header { padding-top: var(--safe-top); min-height: calc(51px + var(--safe-top)); }
+.identity { display: flex; align-items: center; gap: 9px; min-width: 0; }
+.header-actions { display: flex; gap: 4px; }
+
+.transcript {
+ flex: 1;
+ overflow: auto;
+ padding: 24px max(16px, calc((100% - 690px) / 2)) 12px;
+ outline: none;
+ -webkit-overflow-scrolling: touch;
+}
+.row { display: flex; margin: 0 0 18px; }
+.row.user { justify-content: flex-end; }
+.bubble {
+ max-width: min(88%, 640px);
+ padding: 8px 12px;
+ border-radius: var(--radius);
+ background: var(--bubble);
+ overflow-wrap: anywhere;
+ white-space: pre-wrap;
+ line-height: 1.45;
+}
+.row.user .bubble { background: var(--user); }
+.activity {
+ margin: 0 0 10px;
+ color: var(--text-3);
+ font-size: 12px;
+}
+.plan {
+ margin: 0 0 16px;
+ padding: 10px 12px;
+ border: 1px solid var(--stroke);
+ border-radius: 12px;
+ font-size: 13px;
+}
+.plan li { margin: 4px 0; }
+.plan .done { color: var(--text-3); text-decoration: line-through; }
+.typing { display: flex; gap: 4px; padding: 10px 12px; width: max-content; background: var(--bubble); border-radius: 14px; }
+.typing i { width: 5px; height: 5px; border-radius: 50%; background: #9ba392; animation: blink 1s infinite; }
+.typing i:nth-child(2) { animation-delay: .15s; }
+.typing i:nth-child(3) { animation-delay: .3s; }
+@keyframes blink { 50% { opacity: .35; } }
+
+.question-card {
+ margin: 0 max(16px, calc((100% - 690px) / 2)) 8px;
+ padding: 12px;
+ border: 1px solid var(--stroke);
+ border-radius: 14px;
+ background: color-mix(in srgb, var(--accent) 8%, var(--bg));
+}
+.question-card p { margin: 0 0 8px; }
+.options { display: flex; flex-wrap: wrap; gap: 8px; }
+.options button {
+ min-height: 44px;
+ padding: 8px 12px;
+ border: 0;
+ border-radius: 999px;
+ background: var(--accent);
+ color: #141414;
+ font-weight: 600;
+}
+
+.composer {
+ padding: 8px max(16px, calc((100% - 700px) / 2)) calc(12px + var(--safe-bottom));
+}
+.prompt-shell {
+ display: flex;
+ align-items: flex-end;
+ gap: 8px;
+ padding: 9px;
+ background: color-mix(in srgb, #f0f0f0 6%, var(--bg));
+ border: 1px solid var(--stroke);
+ border-radius: 16px;
+}
+#prompt {
+ flex: 1;
+ min-height: 44px;
+ max-height: 30vh;
+ resize: none;
+ background: transparent;
+ border: 0;
+ outline: none;
+ line-height: 1.4;
+ color: var(--text);
+}
+#prompt::placeholder { color: var(--text-3); }
+.send-btn {
+ width: 36px;
+ height: 36px;
+ border: 0;
+ border-radius: 999px;
+ background: var(--text);
+ color: var(--bg);
+ font-size: 18px;
+ line-height: 1;
+}
+.send-btn:disabled { opacity: .35; }
+
+.icon-btn, .text-btn {
+ min-height: 36px;
+ padding: 6px 10px;
+ background: transparent;
+ border: 0;
+ border-radius: 10px;
+ color: var(--text-2);
+}
+.icon-btn:hover, .text-btn:hover { background: var(--fill); }
+.text-btn.danger { color: var(--danger); }
+.hidden { display: none !important; }
+
+.computer-pane {
+ position: fixed;
+ inset: 0;
+ z-index: 20;
+ display: flex;
+ flex-direction: column;
+ background: #000;
+ padding-top: var(--safe-top);
+}
+.computer-pane[hidden] { display: none !important; }
+.computer-header { background: var(--chrome); }
+.computer-pane iframe { flex: 1; width: 100%; border: 0; background: #111; }
+.computer-status { margin: 0; padding: 8px 12px calc(8px + var(--safe-bottom)); color: var(--text-3); font-size: 12px; background: var(--chrome); }
+
+.tabbar { display: none; }
+.menu-btn { display: none; }
+.backdrop {
+ position: fixed;
+ inset: 0;
+ z-index: 8;
+ background: #0008;
+}
+
+@media (max-width: 860px) {
+ .shell { grid-template-columns: 1fr; }
+ .sidebar {
+ position: fixed;
+ z-index: 9;
+ inset: 0 auto 0 0;
+ width: min(86vw, 320px);
+ transform: translateX(-105%);
+ transition: transform .22s cubic-bezier(.22, 1, .36, 1);
+ }
+ .sidebar.open { transform: none; }
+ .menu-btn { display: inline-flex; }
+ .tabbar {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ position: fixed;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 6;
+ padding: 6px 8px calc(6px + var(--safe-bottom));
+ background: color-mix(in srgb, var(--chrome) 92%, transparent);
+ backdrop-filter: blur(16px);
+ border-top: 1px solid var(--stroke);
+ }
+ .tab {
+ min-height: 44px;
+ border: 0;
+ border-radius: 12px;
+ background: transparent;
+ color: var(--text-3);
+ font-weight: 600;
+ }
+ .tab.active { color: var(--text); background: var(--fill); }
+ .composer { padding-bottom: calc(64px + var(--safe-bottom)); }
+ .header-actions #computer-btn { display: none; }
+}
diff --git a/web/sw.js b/web/sw.js
new file mode 100644
index 0000000..d63e0d3
--- /dev/null
+++ b/web/sw.js
@@ -0,0 +1,33 @@
+const CACHE = "grokboy-web-v1";
+const PRECACHE = ["/", "/styles.css", "/app.js", "/manifest.webmanifest", "/icon.svg"];
+
+self.addEventListener("install", (event) => {
+ event.waitUntil(caches.open(CACHE).then((cache) => cache.addAll(PRECACHE)));
+ self.skipWaiting();
+});
+
+self.addEventListener("activate", (event) => {
+ event.waitUntil(
+ caches.keys().then((keys) =>
+ Promise.all(keys.filter((k) => k !== CACHE).map((k) => caches.delete(k)))
+ )
+ );
+ self.clients.claim();
+});
+
+self.addEventListener("fetch", (event) => {
+ const url = new URL(event.request.url);
+ if (url.pathname.startsWith("/api/") || url.pathname.startsWith("/novnc")) {
+ return;
+ }
+ if (event.request.method !== "GET") return;
+ event.respondWith(
+ fetch(event.request)
+ .then((response) => {
+ const copy = response.clone();
+ caches.open(CACHE).then((cache) => cache.put(event.request, copy));
+ return response;
+ })
+ .catch(() => caches.match(event.request))
+ );
+});
diff --git a/web/tsconfig.json b/web/tsconfig.json
new file mode 100644
index 0000000..14e5242
--- /dev/null
+++ b/web/tsconfig.json
@@ -0,0 +1,19 @@
+{
+ "compilerOptions": {
+ "target": "ES2022",
+ "useDefineForClassFields": true,
+ "lib": ["ES2022", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "isolatedModules": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+ "jsx": "react-jsx",
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true
+ },
+ "include": ["src"]
+}
diff --git a/web/vite.config.ts b/web/vite.config.ts
new file mode 100644
index 0000000..1ee6eac
--- /dev/null
+++ b/web/vite.config.ts
@@ -0,0 +1,16 @@
+import { defineConfig } from "vite";
+import react from "@vitejs/plugin-react";
+
+export default defineConfig({
+ plugins: [react()],
+ server: {
+ port: 5173,
+ proxy: {
+ "/api": "http://127.0.0.1:8787",
+ "/novnc": { target: "http://127.0.0.1:8787", ws: true },
+ },
+ },
+ preview: {
+ port: 4173,
+ },
+});