avatars plus other changes
All checks were successful
Build Org Website / build (push) Successful in 51s
All checks were successful
Build Org Website / build (push) Successful in 51s
This commit is contained in:
@@ -103,6 +103,17 @@
|
||||
}
|
||||
};
|
||||
|
||||
const AVATAR_REGISTRY = window.MemoryAvatarRegistry || {
|
||||
fallback: "z",
|
||||
characters: CHARACTER_REGISTRY,
|
||||
get(character) {
|
||||
return this.characters[character] || this.characters[this.fallback] || {};
|
||||
},
|
||||
source(character) {
|
||||
return this.get(character).avatar || "";
|
||||
}
|
||||
};
|
||||
|
||||
const familyLayers = [
|
||||
"Layer 0: surface website - notes, pages, tools, normal navigation.",
|
||||
"Layer 1: casual hidden jokes - aphy notices clicks, typos, tabs, and old-web habits.",
|
||||
@@ -642,9 +653,15 @@
|
||||
return `<svg width="36" height="36" viewBox="0 0 36 36" aria-hidden="true" focusable="false"><rect x="2" y="2" width="32" height="32" rx="10" fill="${secondary}" opacity=".34"></rect><circle cx="18" cy="18" r="15" fill="${accent}" opacity=".18"></circle>${motif}<path d="M10 29c1.6-5.1 5-7.4 8.2-7.4S25 23.9 27 29" fill="${clothes}" opacity=".94"></path><path d="M9.5 16.4c.2-6.4 4.1-10.3 8.8-10.3s8.2 3.8 8.4 10.3c-2-2-4.4-3.1-7.2-3.1-3.7 0-6.7 1.1-10 3.1z" fill="${hair}"></path><path d="M10.6 17.8c0-5.3 3.4-8.7 7.7-8.7s7.7 3.4 7.7 8.7c0 5.9-3.3 9.7-7.7 9.7s-7.7-3.8-7.7-9.7z" fill="${skin}"></path><path d="M10.7 16.2c2.4-4.2 6.5-5.3 12.1-4.4 1.1.8 2.2 2.2 3 4.1-3.6-.7-6.5-2.2-8.8-4.1-1.3 2-3.5 3.6-6.3 4.4z" fill="${hair}"></path>${eye}<circle cx="12.4" cy="20" r="1.25" fill="#ef8e8e" opacity=".34"></circle><circle cx="24.2" cy="20" r="1.25" fill="#ef8e8e" opacity=".34"></circle><path d="${mouth}" stroke="#3f2d29" stroke-width="1.45" stroke-linecap="round" fill="none"></path><text x="28.8" y="31.4" text-anchor="middle" font-size="7" fill="#fff7e8" font-family="monospace">${symbol}</text></svg>`;
|
||||
}
|
||||
|
||||
function avatarHtml(character, text) {
|
||||
function avatarHtml(character, text, size = "small", extraClass = "") {
|
||||
const config = CHARACTER_REGISTRY[character] || CHARACTER_REGISTRY.z;
|
||||
return `<span class="hidden-avatar" style="--hidden-avatar-color:${config.territoryColor || "#d3a64d"}" title="${escapeHtml(config.displayLabel || character)}">${avatarSvg(character, avatarExpression(character, text))}</span>`;
|
||||
const portrait = AVATAR_REGISTRY.get(character);
|
||||
const expression = avatarExpression(character, text);
|
||||
const src = AVATAR_REGISTRY.source(character, expression);
|
||||
const color = portrait.glow || portrait.accent || config.territoryColor || "#d3a64d";
|
||||
const label = config.displayLabel || portrait.displayLabel || character;
|
||||
const fallback = escapeHtml(config.symbol || "?");
|
||||
return `<span class="hidden-avatar hidden-avatar--${escapeHtml(size)} ${escapeHtml(extraClass)}" style="--hidden-avatar-color:${escapeHtml(color)}" title="${escapeHtml(label)}" data-character="${escapeHtml(character)}" data-expression="${escapeHtml(expression)}"><img src="${escapeHtml(src)}" alt="" loading="lazy" decoding="async" onerror="this.hidden=true;this.nextElementSibling.hidden=false"><span class="hidden-avatar__fallback" hidden>${fallback}</span></span>`;
|
||||
}
|
||||
|
||||
function toast(message, duration, character) {
|
||||
|
||||
Reference in New Issue
Block a user