@usenavii/core 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/prng.ts","../src/parts/palette.ts","../src/parts/anchor.ts","../src/parts/body.ts","../src/parts/eyes.ts","../src/parts/mouth.ts","../src/parts/antenna.ts","../src/parts/accessory.ts","../src/parts/background.ts","../src/parts/topper.ts","../src/parts/outfit.ts","../src/parts/index.ts","../src/select.ts","../src/animate.ts","../src/render.ts","../src/group.ts","../src/seed.ts","../src/build.ts","../src/index.ts"],"names":["seed"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Seed → stable PRNG stream.\n *\n * cyrb53 hashes a string seed into two 32-bit halves; sfc32 turns those into\n * a stateful uniform-distribution generator. Same seed → same stream → same avatar.\n */\n\nexport function cyrb53(input: string, salt = 0): [number, number] {\n let h1 = 0xdeadbeef ^ salt;\n let h2 = 0x41c6ce57 ^ salt;\n for (let i = 0; i < input.length; i++) {\n const ch = input.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507);\n h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909);\n h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507);\n h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909);\n return [h1 >>> 0, h2 >>> 0];\n}\n\nexport interface Rng {\n next(): number;\n int(maxExclusive: number): number;\n pick<T>(arr: readonly T[]): T;\n bool(probabilityTrue?: number): boolean;\n range(min: number, max: number): number;\n}\n\nexport function createRng(seed: string): Rng {\n const [a, b] = cyrb53(seed, 0);\n const [c, d] = cyrb53(seed, 1);\n\n let s0 = a >>> 0;\n let s1 = b >>> 0;\n let s2 = c >>> 0;\n let s3 = d >>> 0;\n\n function sfc32(): number {\n s0 |= 0; s1 |= 0; s2 |= 0; s3 |= 0;\n const t = ((s0 + s1) | 0) + s3 | 0;\n s3 = (s3 + 1) | 0;\n s0 = s1 ^ (s1 >>> 9);\n s1 = (s2 + (s2 << 3)) | 0;\n s2 = (s2 << 21) | (s2 >>> 11);\n s2 = (s2 + t) | 0;\n return (t >>> 0) / 4294967296;\n }\n\n const rng: Rng = {\n next: sfc32,\n int(maxExclusive) {\n return Math.floor(sfc32() * maxExclusive);\n },\n pick(arr) {\n if (arr.length === 0) throw new Error('cannot pick from empty array');\n return arr[Math.floor(sfc32() * arr.length)] as (typeof arr)[number];\n },\n bool(probabilityTrue = 0.5) {\n return sfc32() < probabilityTrue;\n },\n range(min, max) {\n return min + sfc32() * (max - min);\n },\n };\n\n return rng;\n}\n","import type { Palette } from '../types.js';\n\n/**\n * Palette set seeded from the Comms360 \"Pulse\" mascot DNA, extended to provide\n * enough hue variety for identity-level differentiation across many users.\n *\n * `bodyFrom`/`bodyTo` feed the radial gradient. `ink` is the line/face color\n * (dark complement of the body). `accent` is used for antenna sparks and other\n * highlights. `blush` is the cheek tint.\n */\nexport const PALETTES: readonly Palette[] = [\n { id: 'indigo', bodyFrom: '#818CF8', bodyTo: '#6366F1', accent: '#FFFFFF', ink: '#1E1B4B', blush: '#F9A8D4' },\n { id: 'mint', bodyFrom: '#6EE7B7', bodyTo: '#34D399', accent: '#ECFDF5', ink: '#064E3B', blush: '#FBCFE8' },\n { id: 'amber', bodyFrom: '#FCD34D', bodyTo: '#F59E0B', accent: '#FFF7ED', ink: '#78350F', blush: '#FB7185' },\n { id: 'sky', bodyFrom: '#93C5FD', bodyTo: '#3B82F6', accent: '#FFFFFF', ink: '#1E3A8A', blush: '#F9A8D4' },\n { id: 'violet', bodyFrom: '#C084FC', bodyTo: '#A855F7', accent: '#FAE8FF', ink: '#4C1D95', blush: '#F472B6' },\n { id: 'cyan', bodyFrom: '#67E8F9', bodyTo: '#06B6D4', accent: '#ECFEFF', ink: '#164E63', blush: '#F9A8D4' },\n { id: 'rose', bodyFrom: '#FDA4AF', bodyTo: '#F43F5E', accent: '#FFE4E6', ink: '#881337', blush: '#FECDD3' },\n { id: 'lime', bodyFrom: '#BEF264', bodyTo: '#84CC16', accent: '#F7FEE7', ink: '#365314', blush: '#FCA5A5' },\n { id: 'peach', bodyFrom: '#FDBA74', bodyTo: '#F97316', accent: '#FFF7ED', ink: '#7C2D12', blush: '#FECACA' },\n { id: 'teal', bodyFrom: '#5EEAD4', bodyTo: '#14B8A6', accent: '#F0FDFA', ink: '#134E4A', blush: '#FBCFE8' },\n { id: 'sand', bodyFrom: '#FDE68A', bodyTo: '#EAB308', accent: '#FEFCE8', ink: '#713F12', blush: '#FCA5A5' },\n { id: 'plum', bodyFrom: '#D8B4FE', bodyTo: '#9333EA', accent: '#F5F3FF', ink: '#3B0764', blush: '#F0ABFC' },\n { id: 'coral', bodyFrom: '#FCA5A5', bodyTo: '#EF4444', accent: '#FEF2F2', ink: '#7F1D1D', blush: '#FECACA' },\n { id: 'forest', bodyFrom: '#86EFAC', bodyTo: '#16A34A', accent: '#F0FDF4', ink: '#14532D', blush: '#FBCFE8' },\n { id: 'slate', bodyFrom: '#CBD5E1', bodyTo: '#64748B', accent: '#F8FAFC', ink: '#0F172A', blush: '#FBCFE8' },\n { id: 'fuchsia', bodyFrom: '#F0ABFC', bodyTo: '#D946EF', accent: '#FDF4FF', ink: '#701A75', blush: '#FBCFE8' },\n // v0.4 additions — broader brand fit\n { id: 'terracotta', bodyFrom: '#FBBF9C', bodyTo: '#C2410C', accent: '#FFF7ED', ink: '#7C2D12', blush: '#FECACA' },\n { id: 'navy', bodyFrom: '#93C5FD', bodyTo: '#1E3A8A', accent: '#EFF6FF', ink: '#172554', blush: '#FBCFE8' },\n { id: 'lavender', bodyFrom: '#DDD6FE', bodyTo: '#7C3AED', accent: '#F5F3FF', ink: '#3B0764', blush: '#F5D0FE' },\n { id: 'charcoal', bodyFrom: '#9CA3AF', bodyTo: '#374151', accent: '#F9FAFB', ink: '#030712', blush: '#FBCFE8' },\n { id: 'butter', bodyFrom: '#FEF9C3', bodyTo: '#FACC15', accent: '#FEFCE8', ink: '#713F12', blush: '#FCA5A5' },\n { id: 'aqua', bodyFrom: '#A5F3FC', bodyTo: '#0891B2', accent: '#ECFEFF', ink: '#083344', blush: '#FBCFE8' },\n];\n\nexport const PALETTE_BY_ID: Record<string, Palette> = Object.fromEntries(\n PALETTES.map((p) => [p.id, p]),\n);\n","import type { BodyShapeId } from '../types.js';\n\n/**\n * Face anchors define where features attach for each body silhouette.\n *\n * Without anchors, every body wears the same face at the same coordinates and\n * the avatar reads as \"AI-generated.\" With anchors, a tall egg-shaped body has\n * a higher, narrower face than a squat mushroom-shaped one, and antenna mounts\n * follow each silhouette's actual apex.\n *\n * All coordinates are in the 100x100 viewBox.\n */\nexport interface FaceAnchor {\n /** Center of the face for symmetry math. */\n cx: number;\n /** Vertical line where eyes sit. */\n eyeY: number;\n /** Horizontal distance from cx to each eye center. */\n eyeOffset: number;\n /** Vertical eye size scale (1.0 = baseline). */\n eyeScale: number;\n /** Vertical line where the mouth sits. */\n mouthY: number;\n /** Mouth horizontal half-width (smile arc spans cx ± this). */\n mouthSpan: number;\n /** Where the antenna / topper mounts on the body. */\n topperX: number;\n topperY: number;\n /** Body's lowest point — used by ground shadow. */\n groundY: number;\n /** Body's leftmost / rightmost extents at the eye line — for cheek blush placement. */\n cheekY: number;\n cheekOffset: number;\n}\n\nexport const ANCHORS: Record<BodyShapeId, FaceAnchor> = {\n orb: {\n cx: 50, eyeY: 52, eyeOffset: 10, eyeScale: 1.0,\n mouthY: 62, mouthSpan: 7,\n topperX: 50, topperY: 22,\n groundY: 86,\n cheekY: 58, cheekOffset: 18,\n },\n tall: {\n cx: 50, eyeY: 49, eyeOffset: 8, eyeScale: 1.05,\n mouthY: 60, mouthSpan: 6,\n topperX: 50, topperY: 18,\n groundY: 91,\n cheekY: 55, cheekOffset: 14,\n },\n squat: {\n cx: 50, eyeY: 56, eyeOffset: 11, eyeScale: 0.95,\n mouthY: 66, mouthSpan: 8,\n topperX: 50, topperY: 30,\n groundY: 86,\n cheekY: 62, cheekOffset: 20,\n },\n pear: {\n cx: 50, eyeY: 51, eyeOffset: 9, eyeScale: 1.0,\n mouthY: 60, mouthSpan: 6.5,\n topperX: 50, topperY: 24,\n groundY: 90,\n cheekY: 57, cheekOffset: 15,\n },\n pebble: {\n cx: 50, eyeY: 54, eyeOffset: 10.5, eyeScale: 1.0,\n mouthY: 63, mouthSpan: 7.5,\n topperX: 53, topperY: 23,\n groundY: 85,\n cheekY: 59, cheekOffset: 19,\n },\n dumpling: {\n cx: 50, eyeY: 58, eyeOffset: 11, eyeScale: 0.98,\n mouthY: 68, mouthSpan: 8,\n topperX: 50, topperY: 32,\n groundY: 88,\n cheekY: 64, cheekOffset: 21,\n },\n taro: {\n cx: 50, eyeY: 50, eyeOffset: 9, eyeScale: 1.02,\n mouthY: 60, mouthSpan: 6.5,\n topperX: 50, topperY: 14,\n groundY: 91,\n cheekY: 55, cheekOffset: 14,\n },\n wisp: {\n cx: 50, eyeY: 47, eyeOffset: 7.5, eyeScale: 1.08,\n mouthY: 58, mouthSpan: 5.5,\n topperX: 50, topperY: 12,\n groundY: 94,\n cheekY: 53, cheekOffset: 12,\n },\n};\n","import type { BodyShapeId, Palette } from '../types.js';\nimport { ANCHORS, type FaceAnchor } from './anchor.js';\n\n/**\n * Body silhouettes as SVG paths.\n *\n * Each shape is hand-tuned so the silhouettes read as distinct creatures of\n * the same species — different proportions, not just stretched ellipses.\n * Paths are pre-baked rather than generated so they can be replaced 1:1 by an\n * illustrator's exports without touching the renderer.\n */\n\nconst BODY_PATHS: Record<BodyShapeId, string> = {\n // Orb — true round, slight under-bulge for grounded feel\n orb: 'M50 20 C72 20 84 36 84 54 C84 73 70 86 50 86 C30 86 16 73 16 54 C16 36 28 20 50 20 Z',\n\n // Tall — egg pointing up, narrow shoulders, fuller bottom\n tall: 'M50 15 C66 15 74 30 74 48 C74 70 66 91 50 91 C34 91 26 70 26 48 C26 30 34 15 50 15 Z',\n\n // Squat — wide mushroom cap, low waist\n squat: 'M50 28 C74 28 88 42 88 60 C88 78 74 86 50 86 C26 86 12 78 12 60 C12 42 26 28 50 28 Z',\n\n // Pear — narrow top, broad rounded bottom\n pear: 'M50 18 C62 18 70 32 70 46 C70 56 80 66 80 76 C80 86 68 90 50 90 C32 90 20 86 20 76 C20 66 30 56 30 46 C30 32 38 18 50 18 Z',\n\n // Pebble — asymmetric river stone, slight tilt right\n pebble: 'M52 19 C72 21 86 36 84 56 C82 73 68 85 50 85 C30 85 16 72 16 54 C16 35 32 17 52 19 Z',\n\n // Dumpling — round bottom-heavy, narrow shoulders, sits low\n dumpling: 'M50 30 C62 30 70 38 70 48 C70 56 78 64 80 72 C82 82 70 88 50 88 C30 88 18 82 20 72 C22 64 30 56 30 48 C30 38 38 30 50 30 Z',\n\n // Taro — gourd shape: small head bulge, fuller bottom\n taro: 'M50 14 C58 14 64 22 64 30 C64 36 60 40 60 46 C60 54 76 60 78 76 C80 88 66 91 50 91 C34 91 20 88 22 76 C24 60 40 54 40 46 C40 40 36 36 36 30 C36 22 42 14 50 14 Z',\n\n // Wisp — tall narrow body, slight bottom flare, ghost-like\n wisp: 'M50 12 C60 12 66 24 66 40 C66 60 74 78 70 90 C64 96 36 96 30 90 C26 78 34 60 34 40 C34 24 40 12 50 12 Z',\n};\n\nexport function bodyAnchor(id: BodyShapeId): FaceAnchor {\n return ANCHORS[id];\n}\n\nexport function renderBodyDefs(_id: BodyShapeId, _palette: Palette, gradId: string): string {\n return `\n<radialGradient id=\"${gradId}\" cx=\"42%\" cy=\"32%\" r=\"68%\">\n <stop offset=\"0%\" stop-color=\"${_palette.bodyFrom}\" />\n <stop offset=\"100%\" stop-color=\"${_palette.bodyTo}\" />\n</radialGradient>`.trim();\n}\n\nexport function renderBody(id: BodyShapeId, palette: Palette, gradId: string): string {\n const d = BODY_PATHS[id];\n const a = ANCHORS[id];\n const outlineColor = withAlpha(palette.ink, 0.18);\n\n return [\n // Ground shadow — soft ellipse just below body, grounds the figure\n `<ellipse cx=\"${a.cx}\" cy=\"${a.groundY + 4}\" rx=\"22\" ry=\"2.6\" fill=\"${palette.ink}\" opacity=\"0.16\" />`,\n // Body fill\n `<path d=\"${d}\" fill=\"url(#${gradId})\" stroke=\"${outlineColor}\" stroke-width=\"0.7\" />`,\n // Sheen — small light spot upper-left, scaled to body\n `<ellipse cx=\"${a.cx - 12}\" cy=\"${a.eyeY - 14}\" rx=\"11\" ry=\"7\" fill=\"#FFFFFF\" opacity=\"0.22\" transform=\"rotate(-18 ${a.cx - 12} ${a.eyeY - 14})\" />`,\n ].join('');\n}\n\n/** Inline rgba() from hex — keeps SVG self-contained. */\nfunction withAlpha(hex: string, alpha: number): string {\n const h = hex.replace('#', '');\n const v = h.length === 3 ? h.split('').map((c) => c + c).join('') : h;\n const part = v.slice(0, 6);\n const r = parseInt(part.slice(0, 2), 16);\n const g = parseInt(part.slice(2, 4), 16);\n const b = parseInt(part.slice(4, 6), 16);\n return `rgba(${r},${g},${b},${alpha})`;\n}\n","import type { EyeStyleId, Palette } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\n/**\n * Eyes consume the FaceAnchor: position, gap, and vertical scale all flex\n * with the body silhouette. Style id determines shape only.\n */\nexport function renderEyes(id: EyeStyleId, palette: Palette, anchor: FaceAnchor): string {\n const lx = anchor.cx - anchor.eyeOffset;\n const rx = anchor.cx + anchor.eyeOffset;\n const y = anchor.eyeY;\n const s = anchor.eyeScale;\n const ink = palette.ink;\n\n switch (id) {\n case 'round':\n return [\n sclera(lx, y, 4 * s, 4.5 * s),\n sclera(rx, y, 4 * s, 4.5 * s),\n pupil(lx, y, 2.2 * s, ink),\n pupil(rx, y, 2.2 * s, ink),\n glint(lx + 1, y - 1),\n glint(rx + 1, y - 1),\n ].join('');\n\n case 'wide':\n return [\n sclera(lx, y, 5 * s, 5.5 * s),\n sclera(rx, y, 5 * s, 5.5 * s),\n pupil(lx, y + 0.5, 3 * s, ink),\n pupil(rx, y + 0.5, 3 * s, ink),\n glint(lx + 1.2, y - 0.5),\n glint(rx + 1.2, y - 0.5),\n ].join('');\n\n case 'squint':\n return [\n arc(lx - 4.5, y, lx, y - 3.5, lx + 4.5, y, ink, 1.8),\n arc(rx - 4.5, y, rx, y - 3.5, rx + 4.5, y, ink, 1.8),\n ].join('');\n\n case 'wink':\n return [\n sclera(lx, y, 4 * s, 4.5 * s),\n pupil(lx, y, 2.2 * s, ink),\n glint(lx + 1, y - 1),\n arc(rx - 4, y, rx, y - 3.5, rx + 4, y, ink, 1.8),\n ].join('');\n\n case 'sleepy':\n return [\n // Heavier upper lid — half-closed\n `<path d=\"M${lx - 4} ${y - 0.5} Q${lx} ${y + 2} ${lx + 4} ${y - 0.5}\" stroke=\"${ink}\" stroke-width=\"1.7\" stroke-linecap=\"round\" fill=\"none\" />`,\n `<path d=\"M${rx - 4} ${y - 0.5} Q${rx} ${y + 2} ${rx + 4} ${y - 0.5}\" stroke=\"${ink}\" stroke-width=\"1.7\" stroke-linecap=\"round\" fill=\"none\" />`,\n // tiny visible pupils\n `<circle cx=\"${lx}\" cy=\"${y + 0.5}\" r=\"0.9\" fill=\"${ink}\" />`,\n `<circle cx=\"${rx}\" cy=\"${y + 0.5}\" r=\"0.9\" fill=\"${ink}\" />`,\n ].join('');\n\n case 'star':\n return [starEye(lx, y, ink), starEye(rx, y, ink)].join('');\n\n case 'heart':\n return [heartEye(lx, y, ink), heartEye(rx, y, ink)].join('');\n\n case 'oval':\n // Vertical oval pupils (cute, anime-ish)\n return [\n sclera(lx, y, 4.5 * s, 5 * s),\n sclera(rx, y, 4.5 * s, 5 * s),\n `<ellipse cx=\"${lx}\" cy=\"${y}\" rx=\"${1.6 * s}\" ry=\"${3 * s}\" fill=\"${ink}\" />`,\n `<ellipse cx=\"${rx}\" cy=\"${y}\" rx=\"${1.6 * s}\" ry=\"${3 * s}\" fill=\"${ink}\" />`,\n glint(lx + 0.8, y - 1.5),\n glint(rx + 0.8, y - 1.5),\n ].join('');\n\n case 'dot':\n // Minimal dot eyes\n return [\n `<circle cx=\"${lx}\" cy=\"${y}\" r=\"${1.4 * s}\" fill=\"${ink}\" />`,\n `<circle cx=\"${rx}\" cy=\"${y}\" r=\"${1.4 * s}\" fill=\"${ink}\" />`,\n ].join('');\n\n case 'cross':\n // X eyes (cartoon \"knocked out\" — works for laughing too)\n return [crossEye(lx, y, ink), crossEye(rx, y, ink)].join('');\n }\n}\n\nfunction heartEye(cx: number, cy: number, color: string): string {\n // Two small circles + triangle below = heart silhouette\n const s = 2;\n return `<path d=\"M${cx} ${cy + s * 1.4} L${cx - s * 1.8} ${cy - s * 0.2} A${s} ${s} 0 0 1 ${cx} ${cy - s * 0.6} A${s} ${s} 0 0 1 ${cx + s * 1.8} ${cy - s * 0.2} Z\" fill=\"${color}\" />`;\n}\n\nfunction crossEye(cx: number, cy: number, color: string): string {\n const s = 2.4;\n return `<g stroke=\"${color}\" stroke-width=\"1.6\" stroke-linecap=\"round\"><line x1=\"${cx - s}\" y1=\"${cy - s}\" x2=\"${cx + s}\" y2=\"${cy + s}\" /><line x1=\"${cx - s}\" y1=\"${cy + s}\" x2=\"${cx + s}\" y2=\"${cy - s}\" /></g>`;\n}\n\nfunction sclera(cx: number, cy: number, rx: number, ry: number): string {\n return `<ellipse cx=\"${cx}\" cy=\"${cy}\" rx=\"${rx}\" ry=\"${ry}\" fill=\"#FFFFFF\" />`;\n}\n\nfunction pupil(cx: number, cy: number, r: number, color: string): string {\n return `<circle cx=\"${cx}\" cy=\"${cy}\" r=\"${r}\" fill=\"${color}\" />`;\n}\n\nfunction glint(cx: number, cy: number): string {\n return `<circle cx=\"${cx}\" cy=\"${cy}\" r=\"0.8\" fill=\"#FFFFFF\" />`;\n}\n\nfunction arc(x1: number, y1: number, cx: number, cy: number, x2: number, y2: number, stroke: string, width: number): string {\n return `<path d=\"M${x1} ${y1} Q${cx} ${cy} ${x2} ${y2}\" stroke=\"${stroke}\" stroke-width=\"${width}\" stroke-linecap=\"round\" fill=\"none\" />`;\n}\n\nfunction starEye(cx: number, cy: number, color: string): string {\n const s = 3;\n return `<path d=\"M${cx} ${cy - s} L${cx + s * 0.35} ${cy - s * 0.35} L${cx + s} ${cy} L${cx + s * 0.35} ${cy + s * 0.35} L${cx} ${cy + s} L${cx - s * 0.35} ${cy + s * 0.35} L${cx - s} ${cy} L${cx - s * 0.35} ${cy - s * 0.35} Z\" fill=\"${color}\" />`;\n}\n","import type { MouthStyleId, Palette } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\nexport function renderMouth(id: MouthStyleId, palette: Palette, anchor: FaceAnchor, curveScale = 1): string {\n const cx = anchor.cx;\n const y = anchor.mouthY;\n const w = anchor.mouthSpan * curveScale;\n const ink = palette.ink;\n\n switch (id) {\n case 'smile':\n return `<path d=\"M${cx - w} ${y} Q${cx} ${y + 5} ${cx + w} ${y}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`;\n case 'grin':\n return `<path d=\"M${cx - w - 1} ${y - 2} Q${cx} ${y + 7} ${cx + w + 1} ${y - 2}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`;\n case 'open':\n return [\n `<path d=\"M${cx - w - 1} ${y - 2} Q${cx} ${y + 9} ${cx + w + 1} ${y - 2}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"${ink}\" fill-opacity=\"0.55\" />`,\n `<ellipse cx=\"${cx}\" cy=\"${y + 3}\" rx=\"${w * 0.55}\" ry=\"1.8\" fill=\"#F472B6\" opacity=\"0.75\" />`,\n ].join('');\n case 'flat':\n return `<path d=\"M${cx - w + 1} ${y} L${cx + w - 1} ${y}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`;\n case 'smirk':\n return `<path d=\"M${cx - w} ${y} Q${cx} ${y + 3} ${cx + w + 1} ${y - 2}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`;\n case 'awe':\n return `<ellipse cx=\"${cx}\" cy=\"${y + 1}\" rx=\"${w * 0.45}\" ry=\"3.2\" fill=\"${ink}\" opacity=\"0.85\" />`;\n\n case 'tongue':\n return [\n `<path d=\"M${cx - w} ${y} Q${cx} ${y + 6} ${cx + w} ${y}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`,\n `<path d=\"M${cx - 2} ${y + 4} Q${cx} ${y + 9} ${cx + 2} ${y + 4} Z\" fill=\"#F472B6\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n ].join('');\n\n case 'tooth':\n return [\n `<path d=\"M${cx - w} ${y} Q${cx} ${y + 5} ${cx + w} ${y}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`,\n `<rect x=\"${cx - 1.2}\" y=\"${y + 0.4}\" width=\"2.4\" height=\"2.6\" rx=\"0.4\" fill=\"#FFFFFF\" stroke=\"${ink}\" stroke-width=\"0.4\" />`,\n ].join('');\n\n case 'wave':\n // Wavy mouth (silly / playful)\n return `<path d=\"M${cx - w} ${y + 1} Q${cx - w / 2} ${y - 1.5} ${cx} ${y + 1} Q${cx + w / 2} ${y + 3.5} ${cx + w} ${y + 1}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`;\n\n case 'dot':\n // Tiny dot mouth (cute, minimalist)\n return `<circle cx=\"${cx}\" cy=\"${y + 1}\" r=\"1.2\" fill=\"${ink}\" />`;\n }\n}\n","import type { AntennaStyleId, Palette } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\n/**\n * Antenna mounts at anchor.topperX / topperY (body's apex).\n */\nexport function renderAntenna(id: AntennaStyleId, anchor: FaceAnchor, palette: Palette): string {\n if (id === 'none') return '';\n\n const cx = anchor.topperX;\n const topY = anchor.topperY;\n const color = palette.accent;\n const ink = palette.ink;\n\n switch (id) {\n case 'classic':\n return [\n `<path d=\"M${cx} ${topY} Q${cx + 1} ${topY - 5} ${cx + 2.5} ${topY - 9}\" stroke=\"${ink}\" stroke-width=\"1.2\" stroke-linecap=\"round\" fill=\"none\" opacity=\"0.55\" />`,\n `<circle class=\"spark\" cx=\"${cx + 2.5}\" cy=\"${topY - 10}\" r=\"2.6\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n ].join('');\n case 'curl':\n return [\n `<path d=\"M${cx} ${topY} Q${cx + 6} ${topY - 4} ${cx + 1} ${topY - 8} Q${cx - 4} ${topY - 11} ${cx + 1} ${topY - 14}\" stroke=\"${ink}\" stroke-width=\"1.2\" stroke-linecap=\"round\" fill=\"none\" opacity=\"0.55\" />`,\n `<circle class=\"spark\" cx=\"${cx + 1}\" cy=\"${topY - 14}\" r=\"2.2\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n ].join('');\n case 'double':\n return [\n `<path d=\"M${cx - 4} ${topY} Q${cx - 5} ${topY - 4} ${cx - 5.5} ${topY - 8}\" stroke=\"${ink}\" stroke-width=\"1.1\" stroke-linecap=\"round\" fill=\"none\" opacity=\"0.55\" />`,\n `<path d=\"M${cx + 4} ${topY} Q${cx + 5} ${topY - 4} ${cx + 5.5} ${topY - 8}\" stroke=\"${ink}\" stroke-width=\"1.1\" stroke-linecap=\"round\" fill=\"none\" opacity=\"0.55\" />`,\n `<circle class=\"spark\" cx=\"${cx - 5.5}\" cy=\"${topY - 9}\" r=\"2.1\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.5\" opacity=\"0.95\" />`,\n `<circle class=\"spark\" cx=\"${cx + 5.5}\" cy=\"${topY - 9}\" r=\"2.1\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.5\" opacity=\"0.95\" />`,\n ].join('');\n case 'spike':\n return [\n `<path class=\"spark\" d=\"M${cx - 2.5} ${topY - 1} L${cx + 1} ${topY - 11} L${cx + 4.5} ${topY - 1} Z\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n ].join('');\n }\n}\n","import type { AccessoryId, Palette } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\nexport function renderAccessory(id: AccessoryId, palette: Palette, anchor: FaceAnchor): string {\n switch (id) {\n case 'none':\n return '';\n case 'blush': {\n const lx = anchor.cx - anchor.cheekOffset;\n const rx = anchor.cx + anchor.cheekOffset;\n const y = anchor.cheekY;\n return [\n `<ellipse cx=\"${lx}\" cy=\"${y}\" rx=\"3.6\" ry=\"2.2\" fill=\"${palette.blush}\" opacity=\"0.5\" />`,\n `<ellipse cx=\"${rx}\" cy=\"${y}\" rx=\"3.6\" ry=\"2.2\" fill=\"${palette.blush}\" opacity=\"0.5\" />`,\n ].join('');\n }\n case 'freckles': {\n const lx = anchor.cx - 8;\n const rx = anchor.cx + 8;\n const y = anchor.cheekY;\n return [\n dot(lx, y, palette.ink),\n dot(lx + 3, y + 1.5, palette.ink),\n dot(rx, y, palette.ink),\n dot(rx - 3, y + 1.5, palette.ink),\n ].join('');\n }\n case 'sparkle':\n return [\n sparkle(76, anchor.eyeY - 18, 3, palette),\n sparkle(24, anchor.eyeY - 16, 2.5, palette),\n sparkle(82, anchor.cheekY + 2, 2, palette),\n ].join('');\n\n case 'glasses': {\n // Round-frame glasses over both eyes\n const lx = anchor.cx - anchor.eyeOffset;\n const rx = anchor.cx + anchor.eyeOffset;\n const y = anchor.eyeY;\n const r = 6;\n return [\n `<circle cx=\"${lx}\" cy=\"${y}\" r=\"${r}\" fill=\"none\" stroke=\"${palette.ink}\" stroke-width=\"1.2\" />`,\n `<circle cx=\"${rx}\" cy=\"${y}\" r=\"${r}\" fill=\"none\" stroke=\"${palette.ink}\" stroke-width=\"1.2\" />`,\n `<line x1=\"${lx + r}\" y1=\"${y}\" x2=\"${rx - r}\" y2=\"${y}\" stroke=\"${palette.ink}\" stroke-width=\"1.2\" />`,\n // subtle lens fill\n `<circle cx=\"${lx}\" cy=\"${y}\" r=\"${r - 1}\" fill=\"#FFFFFF\" opacity=\"0.18\" />`,\n `<circle cx=\"${rx}\" cy=\"${y}\" r=\"${r - 1}\" fill=\"#FFFFFF\" opacity=\"0.18\" />`,\n ].join('');\n }\n\n case 'eyepatch': {\n // Patch over right eye, strap across head\n const rx = anchor.cx + anchor.eyeOffset;\n const y = anchor.eyeY;\n return [\n `<ellipse cx=\"${rx}\" cy=\"${y}\" rx=\"6\" ry=\"5.2\" fill=\"${palette.ink}\" />`,\n `<path d=\"M${rx - 6} ${y - 4} L${anchor.cx - 18} ${anchor.eyeY - 8}\" stroke=\"${palette.ink}\" stroke-width=\"0.9\" />`,\n `<path d=\"M${rx + 6} ${y - 3} L${anchor.cx + 22} ${anchor.eyeY - 6}\" stroke=\"${palette.ink}\" stroke-width=\"0.9\" />`,\n ].join('');\n }\n\n case 'mole': {\n // Small beauty mark below left cheek\n return `<circle cx=\"${anchor.cx - anchor.cheekOffset * 0.6}\" cy=\"${anchor.cheekY + 2}\" r=\"0.9\" fill=\"${palette.ink}\" />`;\n }\n }\n\n function dot(cx: number, cy: number, color: string): string {\n return `<circle cx=\"${cx}\" cy=\"${cy}\" r=\"0.85\" fill=\"${color}\" opacity=\"0.55\" />`;\n }\n\n function sparkle(cx: number, cy: number, s: number, p: Palette): string {\n return `<path d=\"M${cx} ${cy - s} L${cx + s * 0.3} ${cy - s * 0.3} L${cx + s} ${cy} L${cx + s * 0.3} ${cy + s * 0.3} L${cx} ${cy + s} L${cx - s * 0.3} ${cy + s * 0.3} L${cx - s} ${cy} L${cx - s * 0.3} ${cy - s * 0.3} Z\" fill=\"${p.accent}\" stroke=\"${p.ink}\" stroke-width=\"0.3\" opacity=\"0.9\" />`;\n }\n}\n","import type { BackgroundId, Palette } from '../types.js';\n\nexport function renderBackground(id: BackgroundId, palette: Palette, override?: string): string {\n const color = override ?? palette.bodyFrom;\n switch (id) {\n case 'none':\n return '';\n case 'solid':\n return `<rect x=\"0\" y=\"0\" width=\"100\" height=\"100\" fill=\"${color}\" opacity=\"0.18\" />`;\n case 'ring':\n return [\n `<circle cx=\"50\" cy=\"50\" r=\"48\" fill=\"${color}\" opacity=\"0.14\" />`,\n `<circle cx=\"50\" cy=\"50\" r=\"46\" fill=\"none\" stroke=\"${palette.accent}\" stroke-width=\"0.6\" opacity=\"0.4\" />`,\n ].join('');\n }\n}\n","import type { Palette, TopperId } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\n/**\n * Topper = the layer that sits behind/above the body silhouette: ears, horns,\n * tufts, caps. This is independent from antenna (which is a small spark).\n * Toppers significantly increase identity diversity.\n */\nexport function renderTopper(id: TopperId, anchor: FaceAnchor, palette: Palette): string {\n if (id === 'none') return '';\n\n const cx = anchor.topperX;\n const topY = anchor.topperY;\n const ink = palette.ink;\n\n switch (id) {\n case 'ears':\n // Pointy ears flanking the apex\n return [\n `<path d=\"M${cx - 16} ${topY + 6} L${cx - 11} ${topY - 5} L${cx - 6} ${topY + 8} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n `<path d=\"M${cx + 6} ${topY + 8} L${cx + 11} ${topY - 5} L${cx + 16} ${topY + 6} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n // inner ear blush\n `<path d=\"M${cx - 14} ${topY + 4} L${cx - 11} ${topY - 1} L${cx - 8} ${topY + 5} Z\" fill=\"${palette.blush}\" opacity=\"0.65\" />`,\n `<path d=\"M${cx + 8} ${topY + 5} L${cx + 11} ${topY - 1} L${cx + 14} ${topY + 4} Z\" fill=\"${palette.blush}\" opacity=\"0.65\" />`,\n ].join('');\n\n case 'roundEars':\n return [\n `<circle cx=\"${cx - 13}\" cy=\"${topY + 2}\" r=\"6\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n `<circle cx=\"${cx + 13}\" cy=\"${topY + 2}\" r=\"6\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n `<circle cx=\"${cx - 13}\" cy=\"${topY + 2}\" r=\"3\" fill=\"${palette.blush}\" opacity=\"0.6\" />`,\n `<circle cx=\"${cx + 13}\" cy=\"${topY + 2}\" r=\"3\" fill=\"${palette.blush}\" opacity=\"0.6\" />`,\n ].join('');\n\n case 'horn':\n // Single short horn off-center\n return [\n `<path d=\"M${cx - 1} ${topY + 2} Q${cx} ${topY - 6} ${cx + 4} ${topY - 10} Q${cx + 6} ${topY - 4} ${cx + 3} ${topY + 2} Z\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n ].join('');\n\n case 'horns':\n // Two stubby horns\n return [\n `<path d=\"M${cx - 7} ${topY + 4} Q${cx - 8} ${topY - 4} ${cx - 4} ${topY - 7} Q${cx - 2} ${topY - 1} ${cx - 3} ${topY + 4} Z\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n `<path d=\"M${cx + 3} ${topY + 4} Q${cx + 2} ${topY - 1} ${cx + 4} ${topY - 7} Q${cx + 8} ${topY - 4} ${cx + 7} ${topY + 4} Z\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n ].join('');\n\n case 'tuft':\n // Hair tuft / single curl\n return [\n `<path d=\"M${cx} ${topY + 2} Q${cx - 2} ${topY - 4} ${cx + 1} ${topY - 8} Q${cx + 6} ${topY - 5} ${cx + 4} ${topY + 1} Z\" fill=\"${ink}\" opacity=\"0.85\" />`,\n ].join('');\n\n case 'cap':\n // Beanie / cap\n return [\n `<path d=\"M${cx - 16} ${topY + 6} Q${cx - 16} ${topY - 8} ${cx} ${topY - 8} Q${cx + 16} ${topY - 8} ${cx + 16} ${topY + 6} Z\" fill=\"${palette.ink}\" opacity=\"0.92\" />`,\n `<rect x=\"${cx - 16}\" y=\"${topY + 5}\" width=\"32\" height=\"2.5\" rx=\"1\" fill=\"${palette.accent}\" opacity=\"0.85\" />`,\n `<circle cx=\"${cx}\" cy=\"${topY - 9}\" r=\"2.2\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.5\" />`,\n ].join('');\n\n case 'leaf':\n // Small leaf sprig — wholesome\n return [\n `<path d=\"M${cx - 1} ${topY + 2} Q${cx - 6} ${topY - 4} ${cx - 1} ${topY - 8} Q${cx + 3} ${topY - 4} ${cx - 1} ${topY + 2} Z\" fill=\"#22C55E\" stroke=\"${ink}\" stroke-width=\"0.4\" opacity=\"0.95\" />`,\n `<path d=\"M${cx + 1} ${topY + 2} Q${cx + 5} ${topY - 2} ${cx + 6} ${topY - 6}\" stroke=\"#16A34A\" stroke-width=\"1\" fill=\"none\" stroke-linecap=\"round\" />`,\n ].join('');\n\n case 'headband':\n // Sweatband across forehead\n return [\n `<path d=\"M${cx - 18} ${topY + 8} Q${cx} ${topY + 2} ${cx + 18} ${topY + 8} L${cx + 18} ${topY + 12} Q${cx} ${topY + 6} ${cx - 18} ${topY + 12} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n `<rect x=\"${cx - 2}\" y=\"${topY + 4}\" width=\"4\" height=\"4\" rx=\"1\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.4\" />`,\n ].join('');\n\n case 'halo':\n // Floating ring above head\n return [\n `<ellipse cx=\"${cx}\" cy=\"${topY - 6}\" rx=\"11\" ry=\"2.5\" fill=\"none\" stroke=\"#FACC15\" stroke-width=\"2\" opacity=\"0.95\" />`,\n `<ellipse cx=\"${cx}\" cy=\"${topY - 6}\" rx=\"8.5\" ry=\"1.6\" fill=\"none\" stroke=\"#FDE68A\" stroke-width=\"0.6\" opacity=\"0.7\" />`,\n ].join('');\n\n case 'crown':\n // Three-point crown\n return [\n `<path d=\"M${cx - 11} ${topY + 4} L${cx - 11} ${topY - 4} L${cx - 6} ${topY + 1} L${cx} ${topY - 7} L${cx + 6} ${topY + 1} L${cx + 11} ${topY - 4} L${cx + 11} ${topY + 4} Z\" fill=\"#FACC15\" stroke=\"${ink}\" stroke-width=\"0.7\" />`,\n `<circle cx=\"${cx - 11}\" cy=\"${topY - 4}\" r=\"1.4\" fill=\"#EF4444\" stroke=\"${ink}\" stroke-width=\"0.3\" />`,\n `<circle cx=\"${cx}\" cy=\"${topY - 7}\" r=\"1.6\" fill=\"#EF4444\" stroke=\"${ink}\" stroke-width=\"0.3\" />`,\n `<circle cx=\"${cx + 11}\" cy=\"${topY - 4}\" r=\"1.4\" fill=\"#EF4444\" stroke=\"${ink}\" stroke-width=\"0.3\" />`,\n ].join('');\n\n case 'antlers':\n // Branching antlers\n return [\n `<path d=\"M${cx - 5} ${topY + 4} L${cx - 6} ${topY - 4} M${cx - 6} ${topY - 4} L${cx - 10} ${topY - 6} M${cx - 6} ${topY - 4} L${cx - 6} ${topY - 9} M${cx - 6} ${topY - 9} L${cx - 8} ${topY - 11} M${cx - 6} ${topY - 9} L${cx - 3} ${topY - 11}\" stroke=\"${ink}\" stroke-width=\"1.3\" stroke-linecap=\"round\" fill=\"none\" />`,\n `<path d=\"M${cx + 5} ${topY + 4} L${cx + 6} ${topY - 4} M${cx + 6} ${topY - 4} L${cx + 10} ${topY - 6} M${cx + 6} ${topY - 4} L${cx + 6} ${topY - 9} M${cx + 6} ${topY - 9} L${cx + 8} ${topY - 11} M${cx + 6} ${topY - 9} L${cx + 3} ${topY - 11}\" stroke=\"${ink}\" stroke-width=\"1.3\" stroke-linecap=\"round\" fill=\"none\" />`,\n ].join('');\n }\n}\n","import type { OutfitId, Palette } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\n/**\n * Outfit = chest/neck-area decoration that sits BELOW the face but on top\n * of the body silhouette. Anchored to the bottom-front of the body so it\n * reads as \"worn\", not \"floating\".\n *\n * Z-order: rendered AFTER body + face but BEFORE accessories (so a\n * sunflower boutonnière sits on top of the body but a sparkle accessory\n * can still hover above the chest).\n */\nexport function renderOutfit(id: OutfitId, anchor: FaceAnchor, palette: Palette): string {\n if (id === 'none') return '';\n\n // Chest anchor: centered horizontally on the body, vertically positioned\n // just below the chin (~70% down from mouth to ground).\n const cx = anchor.cx;\n const cy = anchor.mouthY + (anchor.groundY - anchor.mouthY) * 0.55;\n const ink = palette.ink;\n const accent = palette.accent;\n\n switch (id) {\n case 'collar':\n // Two short triangles meeting at center — dress shirt collar peek\n return [\n `<path d=\"M${cx - 9} ${cy} L${cx - 2} ${cy - 4} L${cx - 2} ${cy + 5} Z\" fill=\"${accent}\" stroke=\"${ink}\" stroke-width=\"0.7\" />`,\n `<path d=\"M${cx + 9} ${cy} L${cx + 2} ${cy - 4} L${cx + 2} ${cy + 5} Z\" fill=\"${accent}\" stroke=\"${ink}\" stroke-width=\"0.7\" />`,\n // tiny button at center\n `<circle cx=\"${cx}\" cy=\"${cy + 4}\" r=\"0.9\" fill=\"${ink}\" />`,\n ].join('');\n\n case 'scarf':\n // Wrap with two tails hanging\n return [\n // wrap band\n `<path d=\"M${cx - 14} ${cy - 2} Q${cx} ${cy + 3} ${cx + 14} ${cy - 2} L${cx + 14} ${cy + 3} Q${cx} ${cy + 8} ${cx - 14} ${cy + 3} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n // tail 1 (left)\n `<path d=\"M${cx - 6} ${cy + 5} L${cx - 9} ${cy + 12} L${cx - 4} ${cy + 12} L${cx - 2} ${cy + 5} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.5\" />`,\n // tail 2 (slightly right)\n `<path d=\"M${cx + 1} ${cy + 6} L${cx + 4} ${cy + 13} L${cx - 1} ${cy + 13} L${cx - 2} ${cy + 6} Z\" fill=\"${palette.bodyFrom}\" stroke=\"${ink}\" stroke-width=\"0.5\" />`,\n ].join('');\n\n case 'bowtie':\n // Two triangles meeting at a center knot\n return [\n // left wing\n `<path d=\"M${cx - 1} ${cy} L${cx - 9} ${cy - 4} L${cx - 9} ${cy + 4} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.7\" />`,\n // right wing\n `<path d=\"M${cx + 1} ${cy} L${cx + 9} ${cy - 4} L${cx + 9} ${cy + 4} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.7\" />`,\n // center knot\n `<rect x=\"${cx - 1.4}\" y=\"${cy - 2.4}\" width=\"2.8\" height=\"4.8\" rx=\"0.8\" fill=\"${palette.bodyFrom}\" stroke=\"${ink}\" stroke-width=\"0.5\" />`,\n ].join('');\n\n case 'sunflower':\n // Sunflower boutonnière pinned to chest (off-center, like a real one)\n {\n const fx = cx - 8;\n const fy = cy + 2;\n const petals: string[] = [];\n // 8 petals around center\n for (let i = 0; i < 8; i++) {\n const a = (i / 8) * Math.PI * 2;\n const px = fx + Math.cos(a) * 3.2;\n const py = fy + Math.sin(a) * 3.2;\n petals.push(\n `<ellipse cx=\"${px.toFixed(2)}\" cy=\"${py.toFixed(2)}\" rx=\"2.4\" ry=\"1.3\" fill=\"#FACC15\" stroke=\"${ink}\" stroke-width=\"0.35\" transform=\"rotate(${(a * 180 / Math.PI).toFixed(1)} ${px.toFixed(2)} ${py.toFixed(2)})\" />`,\n );\n }\n return [\n // stem (tucked behind)\n `<path d=\"M${fx + 2} ${fy + 2} Q${fx + 4} ${fy + 6} ${fx + 1} ${fy + 10}\" stroke=\"#16A34A\" stroke-width=\"1.1\" fill=\"none\" stroke-linecap=\"round\" />`,\n // leaf\n `<path d=\"M${fx + 3} ${fy + 6} Q${fx + 7} ${fy + 4} ${fx + 6} ${fy + 8} Q${fx + 4} ${fy + 8} ${fx + 3} ${fy + 6} Z\" fill=\"#22C55E\" stroke=\"${ink}\" stroke-width=\"0.35\" />`,\n ...petals,\n // center disc\n `<circle cx=\"${fx}\" cy=\"${fy}\" r=\"2\" fill=\"#92400E\" stroke=\"${ink}\" stroke-width=\"0.4\" />`,\n // texture dots on disc\n `<circle cx=\"${fx - 0.6}\" cy=\"${fy - 0.5}\" r=\"0.4\" fill=\"#451A03\" />`,\n `<circle cx=\"${fx + 0.7}\" cy=\"${fy + 0.3}\" r=\"0.4\" fill=\"#451A03\" />`,\n `<circle cx=\"${fx - 0.4}\" cy=\"${fy + 0.8}\" r=\"0.4\" fill=\"#451A03\" />`,\n ].join('');\n }\n\n case 'necklace':\n // Thin curved chain w/ a small pendant\n return [\n // chain (curve from collarbone left → drop → right)\n `<path d=\"M${cx - 10} ${cy} Q${cx} ${cy + 8} ${cx + 10} ${cy}\" stroke=\"${accent}\" stroke-width=\"0.8\" fill=\"none\" stroke-linecap=\"round\" />`,\n // pendant\n `<circle cx=\"${cx}\" cy=\"${cy + 7}\" r=\"1.6\" fill=\"${accent}\" stroke=\"${ink}\" stroke-width=\"0.5\" />`,\n `<circle cx=\"${cx}\" cy=\"${cy + 7}\" r=\"0.7\" fill=\"${palette.blush}\" />`,\n ].join('');\n }\n}\n","export * from './palette.js';\nexport * from './body.js';\nexport * from './eyes.js';\nexport * from './mouth.js';\nexport * from './antenna.js';\nexport * from './accessory.js';\nexport * from './background.js';\nexport * from './topper.js';\nexport * from './outfit.js';\nexport * from './anchor.js';\n\nimport type {\n AccessoryId,\n AntennaStyleId,\n BackgroundId,\n BodyShapeId,\n EyeStyleId,\n MouthStyleId,\n OutfitId,\n TopperId,\n} from '../types.js';\n\nexport const BODY_IDS: readonly BodyShapeId[] = [\n 'orb', 'tall', 'squat', 'pear', 'pebble',\n 'dumpling', 'taro', 'wisp',\n];\nexport const EYE_IDS: readonly EyeStyleId[] = [\n 'round', 'wide', 'squint', 'wink', 'sleepy', 'star',\n 'heart', 'oval', 'dot', 'cross',\n];\nexport const MOUTH_IDS: readonly MouthStyleId[] = [\n 'smile', 'grin', 'open', 'flat', 'smirk', 'awe',\n 'tongue', 'tooth', 'wave', 'dot',\n];\nexport const ANTENNA_IDS: readonly AntennaStyleId[] = ['none', 'classic', 'curl', 'double', 'spike'];\nexport const ACCESSORY_IDS: readonly AccessoryId[] = [\n 'none', 'blush', 'freckles', 'sparkle',\n 'glasses', 'eyepatch', 'mole',\n];\nexport const BACKGROUND_IDS: readonly BackgroundId[] = ['none', 'solid', 'ring'];\nexport const TOPPER_IDS: readonly TopperId[] = [\n // 'none' weighted ~2× so plain-headed avatars stay common\n 'none', 'none', 'ears', 'roundEars', 'horn', 'horns', 'tuft', 'cap', 'leaf',\n 'headband', 'halo', 'crown', 'antlers',\n];\nexport const OUTFIT_IDS: readonly OutfitId[] = [\n // 'none' weighted heavy — most avatars stay plain-chested\n 'none', 'none', 'none', 'collar', 'scarf', 'bowtie', 'sunflower', 'necklace',\n];\n","import { createRng } from './prng.js';\nimport {\n ACCESSORY_IDS,\n ANTENNA_IDS,\n BACKGROUND_IDS,\n BODY_IDS,\n EYE_IDS,\n MOUTH_IDS,\n PALETTES,\n PALETTE_BY_ID,\n TOPPER_IDS,\n} from './parts/index.js';\nimport type { AvatarOptions, AvatarSpec, BackgroundId } from './types.js';\n\n/**\n * Seed → AvatarSpec.\n *\n * The PRNG is drawn in a fixed order so that adding new parts later doesn't\n * shift existing seeds' selections. Append new picks at the end of this\n * function; never insert in the middle.\n */\nexport function selectAvatar(seed: string, options: AvatarOptions = {}): AvatarSpec {\n const rng = createRng(seed);\n\n const paletteOverride = options.paletteId ? PALETTE_BY_ID[options.paletteId] : undefined;\n const palette = paletteOverride ?? rng.pick(PALETTES);\n\n const body = rng.pick(BODY_IDS);\n const eyes = rng.pick(EYE_IDS);\n const mouth = rng.pick(MOUTH_IDS);\n const antenna = rng.pick(ANTENNA_IDS);\n const accessory = rng.pick(ACCESSORY_IDS);\n\n let background: BackgroundId;\n if (typeof options.background === 'string') {\n background = options.background;\n } else if (options.background && typeof options.background === 'object') {\n background = 'solid';\n } else {\n background = rng.pick(BACKGROUND_IDS);\n }\n\n // Topper drawn last so existing seeds keep their other parts identical.\n const topperRaw = rng.pick(TOPPER_IDS);\n // If antenna already mounts something on the apex, suppress topper to avoid\n // visual collision — keeps silhouettes legible.\n const topper = antenna !== 'none' && topperRaw !== 'none' && topperRaw !== 'leaf'\n ? 'none'\n : topperRaw;\n\n // Continuous tweaks — appended to the RNG stream so existing seeds keep the\n // selections above unchanged when these were introduced.\n const hueShift = Math.round(rng.range(-30, 30));\n const bodyScale = Number(rng.range(0.92, 1.08).toFixed(3));\n const eyeGapShift = Number(rng.range(-2, 2).toFixed(2));\n const mouthCurveScale = Number(rng.range(0.85, 1.15).toFixed(3));\n const antennaTilt = Math.round(rng.range(-8, 8));\n\n // Outfit is intentionally NOT drawn from the seed — it's a decorator slot,\n // only set via build() / builder UI. Keeps seeded thumbs visually light.\n return {\n seed, palette, body, eyes, mouth, antenna, accessory, background, topper,\n outfit: 'none',\n hueShift, bodyScale, eyeGapShift, mouthCurveScale, antennaTilt,\n };\n}\n","import type { AvatarSpec } from './types.js';\nimport { createRng } from './prng.js';\n\n/**\n * Emits a <style> block scoped via a per-avatar class wrapper. The renderer\n * wraps animated content in `<g class=\"n-<id>\">`; CSS rules below target\n * descendants of that class so multiple avatars in the same SVG document\n * (e.g. a /group call) don't share blink/float timing.\n *\n * Delays are seeded so a grid desyncs naturally.\n *\n * Respects prefers-reduced-motion: animations collapse to a single keyframe.\n */\nexport function renderAnimationStyle(spec: AvatarSpec, scopeClass: string): string {\n const rng = createRng(`anim:${spec.seed}`);\n const floatDelay = (rng.next() * 2).toFixed(2);\n const blinkDelay = (rng.next() * 5).toFixed(2);\n const pulseDelay = (rng.next() * 1.5).toFixed(2);\n const twinkleDelay = (rng.next() * 1.8).toFixed(2);\n const swayDelay = (rng.next() * 2.4).toFixed(2);\n\n return `<style>\n .${scopeClass} .body { animation: n-float 3.4s ease-in-out infinite; animation-delay: ${floatDelay}s; transform-origin: 50px 80px; transform-box: view-box; }\n .${scopeClass} .eyes { animation: n-blink 5.4s ease-in-out infinite; animation-delay: ${blinkDelay}s; transform-origin: 50px 52px; transform-box: view-box; }\n .${scopeClass} .antenna { animation: n-sway 3.6s ease-in-out infinite; animation-delay: ${swayDelay}s; transform-origin: 50% 100%; transform-box: fill-box; }\n .${scopeClass} .spark { animation: n-pulse 1.9s ease-in-out infinite; animation-delay: ${pulseDelay}s; transform-origin: center; transform-box: fill-box; }\n .${scopeClass} .sparkle { animation: n-twinkle 2.2s ease-in-out infinite; animation-delay: ${twinkleDelay}s; transform-origin: center; transform-box: fill-box; }\n @keyframes n-float {\n 0%, 100% { transform: translateY(0) rotate(0deg) scale(1, 1); }\n 25% { transform: translateY(-2px) rotate(-1.6deg) scale(1.025, 0.975); }\n 50% { transform: translateY(-4.5px) rotate(0deg) scale(0.985, 1.025); }\n 75% { transform: translateY(-2px) rotate(1.6deg) scale(1.025, 0.975); }\n }\n @keyframes n-blink {\n 0%, 85%, 91%, 100% { transform: scaleY(1); }\n 87%, 89%, 93%, 95% { transform: scaleY(0.06); }\n }\n @keyframes n-sway {\n 0%, 100% { transform: rotate(0deg); }\n 25% { transform: rotate(-5deg); }\n 75% { transform: rotate(5deg); }\n }\n @keyframes n-pulse {\n 0%, 100% { opacity: 0.55; transform: scale(1); }\n 50% { opacity: 1; transform: scale(1.32); }\n }\n @keyframes n-twinkle {\n 0%, 100% { opacity: 0.3; transform: rotate(0deg) scale(0.85); }\n 50% { opacity: 1; transform: rotate(180deg) scale(1.12); }\n }\n @media (prefers-reduced-motion: reduce) {\n .${scopeClass} .body, .${scopeClass} .eyes, .${scopeClass} .antenna, .${scopeClass} .spark, .${scopeClass} .sparkle { animation: none; }\n }\n </style>`;\n}\n","import {\n renderAccessory,\n renderAntenna,\n renderBackground,\n renderBody,\n renderBodyDefs,\n renderEyes,\n renderMouth,\n renderTopper,\n renderOutfit,\n} from './parts/index.js';\nimport { ANCHORS, type FaceAnchor } from './parts/anchor.js';\nimport { renderAnimationStyle } from './animate.js';\nimport type { AvatarOptions, AvatarSpec } from './types.js';\n\n/**\n * AvatarSpec → SVG string.\n *\n * Output is a self-contained <svg> element. Gradient + filter ids are\n * namespaced with a hash of the seed so multiple Navii avatars can coexist\n * on the same page without id collisions. When `options.animated` is true,\n * an inline <style> block is emitted with seeded delays so a grid desyncs\n * naturally.\n *\n * Continuous params (hueShift, bodyScale, eyeGapShift, mouthCurveScale,\n * antennaTilt) are applied here so each avatar reads as an individual,\n * not a stamped-out combination of discrete picks.\n *\n * For composing multiple avatars into one SVG (groups), use `renderAvatarInner`\n * which omits the outer <svg> wrapper.\n */\nexport function renderAvatar(spec: AvatarSpec, options: AvatarOptions = {}): string {\n const size = options.size ?? 96;\n const titleAttrs = options.title\n ? ` role=\"img\" aria-label=\"${escapeXml(options.title)}\"`\n : ' aria-hidden=\"true\"';\n\n return [\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\" width=\"${size}\" height=\"${size}\"${titleAttrs}>`,\n options.title ? `<title>${escapeXml(options.title)}</title>` : '',\n renderAvatarInner(spec, options),\n `</svg>`,\n ].join('');\n}\n\nexport function renderAvatarInner(spec: AvatarSpec, options: AvatarOptions = {}): string {\n const animated = options.animated === true;\n const id = stableId(spec.seed);\n const scopeClass = `n-${id}`;\n const gradId = `navii-grad-${id}`;\n const hueId = `navii-hue-${id}`;\n const bgOverride = typeof options.background === 'object' ? options.background.color : undefined;\n\n const baseAnchor = ANCHORS[spec.body];\n const anchor: FaceAnchor = {\n ...baseAnchor,\n eyeOffset: baseAnchor.eyeOffset + (spec.eyeGapShift ?? 0),\n };\n\n const antennaSvg = renderAntenna(spec.antenna, anchor, spec.palette);\n const accessorySvg = renderAccessory(spec.accessory, spec.palette, anchor);\n\n const bodyMarkup = renderBody(spec.body, spec.palette, gradId);\n const bodyTransform = transformBody(spec.bodyScale ?? 1, anchor);\n const bodyFilter = spec.hueShift && spec.hueShift !== 0 ? ` filter=\"url(#${hueId})\"` : '';\n const bodyWrapped = `<g${bodyTransform}${bodyFilter}><g class=\"body\">${bodyMarkup}</g></g>`;\n\n const antennaWrapped = antennaSvg\n ? `<g${transformAntenna(spec.antennaTilt ?? 0, anchor)}><g class=\"antenna\">${antennaSvg}</g></g>`\n : '';\n\n const tileBg = resolveTileBg(options.tileBg, spec.palette);\n const tileCircle = tileBg ? `<circle cx=\"50\" cy=\"50\" r=\"50\" fill=\"${tileBg}\" />` : '';\n\n const outfitSvg = renderOutfit(spec.outfit ?? 'none', anchor, spec.palette);\n\n const parts = [\n tileCircle,\n renderBackground(spec.background, spec.palette, bgOverride),\n bodyWrapped,\n // outfit sits on the body but below the face, so face features stay readable\n outfitSvg,\n renderTopper(spec.topper, anchor, spec.palette),\n wrap('eyes', renderEyes(spec.eyes, spec.palette, anchor)),\n renderMouth(spec.mouth, spec.palette, anchor, spec.mouthCurveScale ?? 1),\n antennaWrapped,\n accessorySvg && spec.accessory === 'sparkle'\n ? wrap('sparkle', accessorySvg)\n : accessorySvg,\n ].join('');\n\n const defs = [\n renderBodyDefs(spec.body, spec.palette, gradId),\n spec.hueShift && spec.hueShift !== 0\n ? `<filter id=\"${hueId}\" color-interpolation-filters=\"sRGB\"><feColorMatrix type=\"hueRotate\" values=\"${spec.hueShift}\" /></filter>`\n : '',\n ].join('');\n\n return [\n `<defs>${defs}</defs>`,\n animated ? renderAnimationStyle(spec, scopeClass) : '',\n animated ? `<g class=\"${scopeClass}\">${parts}</g>` : parts,\n ].join('');\n}\n\nfunction resolveTileBg(raw: string | undefined, palette: { accent: string; bodyFrom: string }): string | undefined {\n if (!raw) return undefined;\n if (raw === 'auto') return palette.accent;\n return raw;\n}\n\nfunction transformBody(scale: number, anchor: FaceAnchor): string {\n if (Math.abs(scale - 1) < 0.001) return '';\n // Scale around the body's ground point so the figure doesn't drift up/down.\n return ` transform=\"translate(${anchor.cx} ${anchor.groundY}) scale(${scale}) translate(${-anchor.cx} ${-anchor.groundY})\"`;\n}\n\nfunction transformAntenna(deg: number, anchor: FaceAnchor): string {\n if (deg === 0) return '';\n return ` transform=\"rotate(${deg} ${anchor.topperX} ${anchor.topperY + 2})\"`;\n}\n\nfunction wrap(cls: string, inner: string): string {\n if (!inner) return inner;\n return `<g class=\"${cls}\">${inner}</g>`;\n}\n\nfunction stableId(seed: string): string {\n let h = 5381;\n for (let i = 0; i < seed.length; i++) h = ((h << 5) + h + seed.charCodeAt(i)) | 0;\n return (h >>> 0).toString(36);\n}\n\nfunction escapeXml(s: string): string {\n return s\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n}\n","import { renderAvatarInner } from './render.js';\nimport { selectAvatar } from './select.js';\nimport type { AvatarOptions } from './types.js';\n\nexport interface GroupOptions extends AvatarOptions {\n /** Per-avatar size in px. Default 64. */\n size?: number;\n /** Fraction of size each tile overlaps the previous one. 0 = no overlap, 0.6 = heavy stack. Default 0.3. */\n overlap?: number;\n /** Max tiles to render. Extra seeds collapse into a \"+N\" counter tile. Default = all seeds. */\n max?: number;\n /** Background color for the \"+N\" counter tile. */\n counterFill?: string;\n /** Text color for the \"+N\" counter tile. */\n counterInk?: string;\n /** Optional ring around each tile (border). Default: white-ish for visual separation when overlapping. */\n ring?: string;\n /** Solid (or near-solid) fill behind each avatar inside the clip — prevents underlying avatars showing through gaps when tiles overlap. Default `#ffffff`. Use `'transparent'` to skip. */\n tileBg?: string;\n}\n\n/**\n * Renders N seeded avatars in a horizontal overlapping stack, with an optional\n * \"+N\" counter tile when `max` is exceeded.\n *\n * Each avatar is placed in its own 100x100 viewBox via nested <svg> so the\n * existing renderer is reused without changes. A circular clip per tile\n * crops to a disc — typical avatar UI.\n */\nexport function renderGroup(seeds: string[], options: GroupOptions = {}): string {\n if (!Array.isArray(seeds) || seeds.length === 0) {\n throw new Error('navii: renderGroup requires at least one seed');\n }\n const size = options.size ?? 64;\n const overlap = clamp(options.overlap ?? 0.3, 0, 0.7);\n const max = options.max ?? seeds.length;\n const ring = options.ring ?? '#ffffff';\n const tileBg = options.tileBg ?? '#ffffff';\n const counterFill = options.counterFill ?? '#E5E7EB';\n const counterInk = options.counterInk ?? '#374151';\n\n const visibleSeeds = seeds.slice(0, Math.max(0, max - (seeds.length > max ? 1 : 0)));\n const overflow = seeds.length - visibleSeeds.length;\n const tileCount = visibleSeeds.length + (overflow > 0 ? 1 : 0);\n\n const step = size * (1 - overlap);\n const totalWidth = tileCount > 0 ? step * (tileCount - 1) + size : 0;\n\n // Per-tile clip + ring share generic ids since each is scoped inside its own\n // nested <svg>, isolating ids per tile.\n const tiles = visibleSeeds.map((seed, i) => {\n const x = i * step;\n const spec = selectAvatar(seed, options);\n const bgCircle = tileBg !== 'transparent'\n ? `<circle cx=\"50\" cy=\"50\" r=\"50\" fill=\"${tileBg}\" />`\n : '';\n return `<svg x=\"${x}\" y=\"0\" width=\"${size}\" height=\"${size}\" viewBox=\"0 0 100 100\" overflow=\"visible\">\n <defs><clipPath id=\"navii-clip\"><circle cx=\"50\" cy=\"50\" r=\"50\" /></clipPath></defs>\n <g clip-path=\"url(#navii-clip)\">${bgCircle}${renderAvatarInner(spec, options)}</g>\n <circle cx=\"50\" cy=\"50\" r=\"49\" fill=\"none\" stroke=\"${ring}\" stroke-width=\"2\" />\n </svg>`;\n });\n\n if (overflow > 0) {\n const x = visibleSeeds.length * step;\n tiles.push(`<svg x=\"${x}\" y=\"0\" width=\"${size}\" height=\"${size}\" viewBox=\"0 0 100 100\" overflow=\"visible\">\n <circle cx=\"50\" cy=\"50\" r=\"50\" fill=\"${counterFill}\" />\n <text x=\"50\" y=\"50\" text-anchor=\"middle\" dominant-baseline=\"central\" font-family=\"-apple-system, system-ui, sans-serif\" font-weight=\"600\" font-size=\"34\" fill=\"${counterInk}\">+${overflow}</text>\n <circle cx=\"50\" cy=\"50\" r=\"49\" fill=\"none\" stroke=\"${ring}\" stroke-width=\"2\" />\n </svg>`);\n }\n\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${totalWidth} ${size}\" width=\"${totalWidth}\" height=\"${size}\" aria-hidden=\"true\">${tiles.join('')}</svg>`;\n}\n\nfunction clamp(n: number, lo: number, hi: number): number {\n return Math.max(lo, Math.min(hi, n));\n}\n","/**\n * Seed helper — composes the most stable identifier from a user-shaped\n * object into a single string for `createAvatar`.\n *\n * Priority: `id` → `email` → `name + createdAt` → `name` alone.\n *\n * The whole point: stop devs accidentally passing a display name. Names\n * collide; ids and emails don't. When only a name is available, composing\n * it with `createdAt` makes the result globally unique while remaining\n * stable across renders (assuming `createdAt` is set once at signup).\n */\n\nexport interface SeedFields {\n /** Stable primary key (database id, UUID, OAuth sub). Best choice. */\n id?: string | number | null | undefined;\n /** Email. Stable + unique. Good fallback when id isn't available client-side. */\n email?: string | null | undefined;\n /** Display name. Collision-prone — only acceptable composed with `createdAt`. */\n name?: string | null | undefined;\n /** Account creation time. Combined with `name` to bake uniqueness in at signup. */\n createdAt?: string | number | Date | null | undefined;\n}\n\n/**\n * Compose a stable seed string from the most unique field available.\n *\n * @example\n * ```ts\n * const s = seed({ id: user.id, email: user.email, name: user.name });\n * createAvatar(s);\n * ```\n *\n * @example If only a name exists, pass `createdAt` to avoid collisions:\n * ```ts\n * seed({ name: 'Alice', createdAt: user.createdAt });\n * // → \"Alice|1700000000000\"\n * ```\n *\n * @throws if no usable field is provided.\n */\nexport function seed(fields: SeedFields): string {\n if (fields.id !== null && fields.id !== undefined && String(fields.id).length > 0) {\n return String(fields.id);\n }\n if (fields.email && fields.email.length > 0) {\n return fields.email;\n }\n if (fields.name && fields.name.length > 0) {\n if (fields.createdAt !== null && fields.createdAt !== undefined) {\n const ts = fields.createdAt instanceof Date\n ? fields.createdAt.getTime()\n : typeof fields.createdAt === 'number'\n ? fields.createdAt\n : Date.parse(fields.createdAt as string);\n if (Number.isFinite(ts)) return `${fields.name}|${ts}`;\n return `${fields.name}|${fields.createdAt}`;\n }\n return fields.name;\n }\n throw new Error('navii: seed() requires at least one of { id, email, name }');\n}\n","import { PALETTES, PALETTE_BY_ID } from './parts/palette.js';\nimport { renderAvatar } from './render.js';\nimport type {\n AccessoryId,\n AntennaStyleId,\n AvatarOptions,\n AvatarSpec,\n BackgroundId,\n BodyShapeId,\n EyeStyleId,\n MouthStyleId,\n OutfitId,\n TopperId,\n} from './types.js';\n\n/**\n * Direct construction of an avatar from explicit part choices — no seed.\n *\n * Use when you need a SPECIFIC mascot rather than a deterministic one\n * derived from a user id. Common uses: brand mascots, logo marks, fixed\n * tests, designer curation, gallery hero shots.\n *\n * Any field left unspecified falls back to its first variant (mostly the\n * neutral / \"none\" option). Continuous params default to 0 / 1 (no tweak).\n */\nexport interface BuildSpec {\n palette?: string;\n body?: BodyShapeId;\n eyes?: EyeStyleId;\n mouth?: MouthStyleId;\n antenna?: AntennaStyleId;\n accessory?: AccessoryId;\n background?: BackgroundId;\n topper?: TopperId;\n outfit?: OutfitId;\n hueShift?: number;\n bodyScale?: number;\n eyeGapShift?: number;\n mouthCurveScale?: number;\n antennaTilt?: number;\n}\n\n/**\n * Build an SVG avatar from explicit part choices.\n *\n * @example\n * ```ts\n * const svg = build({\n * body: 'tall',\n * eyes: 'star',\n * mouth: 'grin',\n * palette: 'violet',\n * topper: 'crown',\n * }, { size: 192 });\n * ```\n *\n * Pass `AvatarOptions` (size, title, animated, tileBg) as the second arg —\n * same shape as `createAvatar`'s options.\n */\nexport function build(spec: BuildSpec = {}, options: AvatarOptions = {}): string {\n const palette = spec.palette ? (PALETTE_BY_ID[spec.palette] ?? PALETTES[0]!) : PALETTES[0]!;\n\n const resolved: AvatarSpec = {\n seed: '__build__',\n palette,\n body: spec.body ?? 'orb',\n eyes: spec.eyes ?? 'round',\n mouth: spec.mouth ?? 'smile',\n antenna: spec.antenna ?? 'none',\n accessory: spec.accessory ?? 'none',\n background: spec.background ?? 'none',\n topper: spec.topper ?? 'none',\n outfit: spec.outfit ?? 'none',\n hueShift: spec.hueShift ?? 0,\n bodyScale: spec.bodyScale ?? 1,\n eyeGapShift: spec.eyeGapShift ?? 0,\n mouthCurveScale: spec.mouthCurveScale ?? 1,\n antennaTilt: spec.antennaTilt ?? 0,\n };\n\n return renderAvatar(resolved, options);\n}\n","export * from './types.js';\nexport { createRng, cyrb53 } from './prng.js';\nexport { selectAvatar } from './select.js';\nexport { renderAvatar, renderAvatarInner } from './render.js';\nexport { renderGroup, type GroupOptions } from './group.js';\nexport { seed, type SeedFields } from './seed.js';\nexport { build, type BuildSpec } from './build.js';\n\nimport { selectAvatar } from './select.js';\nimport { renderAvatar } from './render.js';\nimport { renderGroup } from './group.js';\nimport { seed } from './seed.js';\nimport { build } from './build.js';\nimport type { AvatarOptions } from './types.js';\n\n/**\n * Render a deterministic mascot avatar from a seed.\n *\n * Same seed in → same SVG out, byte-identical, forever.\n *\n * @param seed Stable unique identifier per user. Recommended order: `user.id`\n * → UUID → `user.email`. **Avoid display names** — two users called \"Alice\"\n * would get the same avatar. **Never pass `Date.now()`** or any value that\n * changes between renders; the avatar would change every refresh.\n * See {@link seed} for a helper that picks the right field automatically.\n *\n * @param options.size Output size in px. Default 96. Range 16–1024.\n * @param options.paletteId Force a color family (e.g. `'mint'`).\n * @param options.background `'none' | 'solid' | 'ring'` or `{ color }`.\n * @param options.tileBg Opaque disc behind the avatar. Color or `'auto'`.\n * @param options.title Accessible label (sets `<title>` + `aria-label`).\n * @param options.animated Emit idle motion (float, blink, sway, twinkle).\n *\n * @returns Self-contained `<svg>` string. Safe to embed via `<img src=\"data:image/svg+xml;...\">`\n * or to insert into the DOM directly.\n *\n * @example\n * ```ts\n * const svg = createAvatar(user.id, { size: 96, animated: true });\n * ```\n */\nexport function createAvatar(seed: string, options: AvatarOptions = {}): string {\n if (typeof seed !== 'string' || seed.length === 0) {\n throw new Error('navii: seed must be a non-empty string');\n }\n return renderAvatar(selectAvatar(seed, options), options);\n}\n\n/**\n * Generate a random avatar without supplying a seed.\n *\n * Picks a fresh UUID seed via `crypto.randomUUID()` (or a `Math.random()`\n * fallback when WebCrypto is unavailable) and renders the avatar. The seed\n * is returned alongside the SVG so callers can **persist it** — e.g. save\n * to the user's profile so future renders are stable.\n *\n * Use for: \"spin again\" UX, dev/demo seeding, lazy onboarding flows where\n * the user gets an avatar before picking one.\n *\n * Each call returns a different avatar — DO NOT call inline in a render\n * function or the avatar will change every re-render. Stabilize with a\n * `useState`/`useMemo` init or persist the returned seed:\n *\n * @example\n * ```ts\n * const { svg, seed } = Navii.random({ size: 96 });\n * saveToProfile(user.id, { naviiSeed: seed });\n * ```\n *\n * @example React\n * ```tsx\n * const [random] = useState(() => Navii.random());\n * return <Navii seed={random.seed} />;\n * ```\n */\nexport function random(options: AvatarOptions = {}): { svg: string; seed: string } {\n const seed = randomSeed();\n return { svg: createAvatar(seed, options), seed };\n}\n\nfunction randomSeed(): string {\n const c = globalThis.crypto;\n if (c && typeof c.randomUUID === 'function') return c.randomUUID();\n return (\n Math.random().toString(36).slice(2) +\n Math.random().toString(36).slice(2)\n );\n}\n\n/**\n * Convenience namespace — bundles every public function under one import.\n *\n * @example\n * ```ts\n * import { Navii } from '@usenavii/core';\n *\n * Navii.create(user.id);\n * Navii.seed({ id: user.id, email: user.email });\n * Navii.build({ body: 'tall', eyes: 'star', palette: 'violet' });\n * Navii.group([user1.id, user2.id, user3.id]);\n * ```\n */\nexport const Navii = {\n create: createAvatar,\n random,\n render: renderAvatar,\n select: selectAvatar,\n group: renderGroup,\n seed,\n build,\n} as const;\n"]}
1
+ {"version":3,"sources":["../src/prng.ts","../src/parts/palette.ts","../src/parts/anchor.ts","../src/parts/body.ts","../src/parts/eyes.ts","../src/parts/mouth.ts","../src/parts/antenna.ts","../src/parts/accessory.ts","../src/parts/background.ts","../src/parts/topper.ts","../src/parts/outfit.ts","../src/parts/index.ts","../src/packs/office.ts","../src/packs/office-bright.ts","../src/packs/halloween.ts","../src/packs/pastel.ts","../src/packs/neon.ts","../src/packs/mono.ts","../src/packs/earth.ts","../src/packs/index.ts","../src/select.ts","../src/animate.ts","../src/render.ts","../src/group.ts","../src/seed.ts","../src/build.ts","../src/index.ts"],"names":["seed","palettes"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Seed → stable PRNG stream.\n *\n * cyrb53 hashes a string seed into two 32-bit halves; sfc32 turns those into\n * a stateful uniform-distribution generator. Same seed → same stream → same avatar.\n */\n\nexport function cyrb53(input: string, salt = 0): [number, number] {\n let h1 = 0xdeadbeef ^ salt;\n let h2 = 0x41c6ce57 ^ salt;\n for (let i = 0; i < input.length; i++) {\n const ch = input.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507);\n h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909);\n h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507);\n h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909);\n return [h1 >>> 0, h2 >>> 0];\n}\n\nexport interface Rng {\n next(): number;\n int(maxExclusive: number): number;\n pick<T>(arr: readonly T[]): T;\n bool(probabilityTrue?: number): boolean;\n range(min: number, max: number): number;\n}\n\nexport function createRng(seed: string): Rng {\n const [a, b] = cyrb53(seed, 0);\n const [c, d] = cyrb53(seed, 1);\n\n let s0 = a >>> 0;\n let s1 = b >>> 0;\n let s2 = c >>> 0;\n let s3 = d >>> 0;\n\n function sfc32(): number {\n s0 |= 0; s1 |= 0; s2 |= 0; s3 |= 0;\n const t = ((s0 + s1) | 0) + s3 | 0;\n s3 = (s3 + 1) | 0;\n s0 = s1 ^ (s1 >>> 9);\n s1 = (s2 + (s2 << 3)) | 0;\n s2 = (s2 << 21) | (s2 >>> 11);\n s2 = (s2 + t) | 0;\n return (t >>> 0) / 4294967296;\n }\n\n const rng: Rng = {\n next: sfc32,\n int(maxExclusive) {\n return Math.floor(sfc32() * maxExclusive);\n },\n pick(arr) {\n if (arr.length === 0) throw new Error('cannot pick from empty array');\n return arr[Math.floor(sfc32() * arr.length)] as (typeof arr)[number];\n },\n bool(probabilityTrue = 0.5) {\n return sfc32() < probabilityTrue;\n },\n range(min, max) {\n return min + sfc32() * (max - min);\n },\n };\n\n return rng;\n}\n","import type { Palette } from '../types.js';\n\n/**\n * Palette set seeded from the Comms360 \"Pulse\" mascot DNA, extended to provide\n * enough hue variety for identity-level differentiation across many users.\n *\n * `bodyFrom`/`bodyTo` feed the radial gradient. `ink` is the line/face color\n * (dark complement of the body). `accent` is used for antenna sparks and other\n * highlights. `blush` is the cheek tint.\n */\nexport const PALETTES: readonly Palette[] = [\n { id: 'indigo', bodyFrom: '#818CF8', bodyTo: '#6366F1', accent: '#FFFFFF', ink: '#1E1B4B', blush: '#F9A8D4' },\n { id: 'mint', bodyFrom: '#6EE7B7', bodyTo: '#34D399', accent: '#ECFDF5', ink: '#064E3B', blush: '#FBCFE8' },\n { id: 'amber', bodyFrom: '#FCD34D', bodyTo: '#F59E0B', accent: '#FFF7ED', ink: '#78350F', blush: '#FB7185' },\n { id: 'sky', bodyFrom: '#93C5FD', bodyTo: '#3B82F6', accent: '#FFFFFF', ink: '#1E3A8A', blush: '#F9A8D4' },\n { id: 'violet', bodyFrom: '#C084FC', bodyTo: '#A855F7', accent: '#FAE8FF', ink: '#4C1D95', blush: '#F472B6' },\n { id: 'cyan', bodyFrom: '#67E8F9', bodyTo: '#06B6D4', accent: '#ECFEFF', ink: '#164E63', blush: '#F9A8D4' },\n { id: 'rose', bodyFrom: '#FDA4AF', bodyTo: '#F43F5E', accent: '#FFE4E6', ink: '#881337', blush: '#FECDD3' },\n { id: 'lime', bodyFrom: '#BEF264', bodyTo: '#84CC16', accent: '#F7FEE7', ink: '#365314', blush: '#FCA5A5' },\n { id: 'peach', bodyFrom: '#FDBA74', bodyTo: '#F97316', accent: '#FFF7ED', ink: '#7C2D12', blush: '#FECACA' },\n { id: 'teal', bodyFrom: '#5EEAD4', bodyTo: '#14B8A6', accent: '#F0FDFA', ink: '#134E4A', blush: '#FBCFE8' },\n { id: 'sand', bodyFrom: '#FDE68A', bodyTo: '#EAB308', accent: '#FEFCE8', ink: '#713F12', blush: '#FCA5A5' },\n { id: 'plum', bodyFrom: '#D8B4FE', bodyTo: '#9333EA', accent: '#F5F3FF', ink: '#3B0764', blush: '#F0ABFC' },\n { id: 'coral', bodyFrom: '#FCA5A5', bodyTo: '#EF4444', accent: '#FEF2F2', ink: '#7F1D1D', blush: '#FECACA' },\n { id: 'forest', bodyFrom: '#86EFAC', bodyTo: '#16A34A', accent: '#F0FDF4', ink: '#14532D', blush: '#FBCFE8' },\n { id: 'slate', bodyFrom: '#CBD5E1', bodyTo: '#64748B', accent: '#F8FAFC', ink: '#0F172A', blush: '#FBCFE8' },\n { id: 'fuchsia', bodyFrom: '#F0ABFC', bodyTo: '#D946EF', accent: '#FDF4FF', ink: '#701A75', blush: '#FBCFE8' },\n // v0.4 additions — broader brand fit\n { id: 'terracotta', bodyFrom: '#FBBF9C', bodyTo: '#C2410C', accent: '#FFF7ED', ink: '#7C2D12', blush: '#FECACA' },\n { id: 'navy', bodyFrom: '#93C5FD', bodyTo: '#1E3A8A', accent: '#EFF6FF', ink: '#172554', blush: '#FBCFE8' },\n { id: 'lavender', bodyFrom: '#DDD6FE', bodyTo: '#7C3AED', accent: '#F5F3FF', ink: '#3B0764', blush: '#F5D0FE' },\n { id: 'charcoal', bodyFrom: '#9CA3AF', bodyTo: '#374151', accent: '#F9FAFB', ink: '#030712', blush: '#FBCFE8' },\n { id: 'butter', bodyFrom: '#FEF9C3', bodyTo: '#FACC15', accent: '#FEFCE8', ink: '#713F12', blush: '#FCA5A5' },\n { id: 'aqua', bodyFrom: '#A5F3FC', bodyTo: '#0891B2', accent: '#ECFEFF', ink: '#083344', blush: '#FBCFE8' },\n];\n\nexport const PALETTE_BY_ID: Record<string, Palette> = Object.fromEntries(\n PALETTES.map((p) => [p.id, p]),\n);\n","import type { BodyShapeId } from '../types.js';\n\n/**\n * Face anchors define where features attach for each body silhouette.\n *\n * Without anchors, every body wears the same face at the same coordinates and\n * the avatar reads as \"AI-generated.\" With anchors, a tall egg-shaped body has\n * a higher, narrower face than a squat mushroom-shaped one, and antenna mounts\n * follow each silhouette's actual apex.\n *\n * All coordinates are in the 100x100 viewBox.\n */\nexport interface FaceAnchor {\n /** Center of the face for symmetry math. */\n cx: number;\n /** Vertical line where eyes sit. */\n eyeY: number;\n /** Horizontal distance from cx to each eye center. */\n eyeOffset: number;\n /** Vertical eye size scale (1.0 = baseline). */\n eyeScale: number;\n /** Vertical line where the mouth sits. */\n mouthY: number;\n /** Mouth horizontal half-width (smile arc spans cx ± this). */\n mouthSpan: number;\n /** Where the antenna / topper mounts on the body. */\n topperX: number;\n topperY: number;\n /** Body's lowest point — used by ground shadow. */\n groundY: number;\n /** Body's leftmost / rightmost extents at the eye line — for cheek blush placement. */\n cheekY: number;\n cheekOffset: number;\n}\n\nexport const ANCHORS: Record<BodyShapeId, FaceAnchor> = {\n orb: {\n cx: 50, eyeY: 52, eyeOffset: 10, eyeScale: 1.0,\n mouthY: 62, mouthSpan: 7,\n topperX: 50, topperY: 22,\n groundY: 86,\n cheekY: 58, cheekOffset: 18,\n },\n tall: {\n cx: 50, eyeY: 49, eyeOffset: 8, eyeScale: 1.05,\n mouthY: 60, mouthSpan: 6,\n topperX: 50, topperY: 18,\n groundY: 91,\n cheekY: 55, cheekOffset: 14,\n },\n squat: {\n cx: 50, eyeY: 56, eyeOffset: 11, eyeScale: 0.95,\n mouthY: 66, mouthSpan: 8,\n topperX: 50, topperY: 30,\n groundY: 86,\n cheekY: 62, cheekOffset: 20,\n },\n pear: {\n cx: 50, eyeY: 51, eyeOffset: 9, eyeScale: 1.0,\n mouthY: 60, mouthSpan: 6.5,\n topperX: 50, topperY: 24,\n groundY: 90,\n cheekY: 57, cheekOffset: 15,\n },\n pebble: {\n cx: 50, eyeY: 54, eyeOffset: 10.5, eyeScale: 1.0,\n mouthY: 63, mouthSpan: 7.5,\n topperX: 53, topperY: 23,\n groundY: 85,\n cheekY: 59, cheekOffset: 19,\n },\n dumpling: {\n cx: 50, eyeY: 58, eyeOffset: 11, eyeScale: 0.98,\n mouthY: 68, mouthSpan: 8,\n topperX: 50, topperY: 32,\n groundY: 88,\n cheekY: 64, cheekOffset: 21,\n },\n taro: {\n cx: 50, eyeY: 50, eyeOffset: 9, eyeScale: 1.02,\n mouthY: 60, mouthSpan: 6.5,\n topperX: 50, topperY: 14,\n groundY: 91,\n cheekY: 55, cheekOffset: 14,\n },\n wisp: {\n cx: 50, eyeY: 47, eyeOffset: 7.5, eyeScale: 1.08,\n mouthY: 58, mouthSpan: 5.5,\n topperX: 50, topperY: 12,\n groundY: 94,\n cheekY: 53, cheekOffset: 12,\n },\n // Squircle — FULL-BLEED. Body fills 0-100, face composed as ID portrait:\n // upper-third eye line, lower-third mouth, generous cheek/eye spread.\n squircle: {\n cx: 50, eyeY: 44, eyeOffset: 13, eyeScale: 1.0,\n mouthY: 62, mouthSpan: 8,\n topperX: 50, topperY: 8,\n groundY: 98,\n cheekY: 52, cheekOffset: 24,\n },\n // Pumpkin — round body w/ slight horizontal lobing. Face mid-low, stem on top.\n pumpkin: {\n cx: 50, eyeY: 52, eyeOffset: 11, eyeScale: 1.0,\n mouthY: 66, mouthSpan: 9,\n topperX: 50, topperY: 18,\n groundY: 88,\n cheekY: 60, cheekOffset: 20,\n },\n // Ghost — tall wavy silhouette. Face high (under the \"hood\"), wavy hem below.\n ghost: {\n cx: 50, eyeY: 42, eyeOffset: 8, eyeScale: 1.05,\n mouthY: 54, mouthSpan: 6,\n topperX: 50, topperY: 12,\n groundY: 92,\n cheekY: 50, cheekOffset: 14,\n },\n // SkullHead — slightly elongated egg w/ deep eye sockets.\n skullHead: {\n cx: 50, eyeY: 50, eyeOffset: 10, eyeScale: 1.0,\n mouthY: 70, mouthSpan: 7,\n topperX: 50, topperY: 16,\n groundY: 90,\n cheekY: 60, cheekOffset: 16,\n },\n};\n","import type { BodyShapeId, Palette } from '../types.js';\nimport { ANCHORS, type FaceAnchor } from './anchor.js';\n\n/**\n * Body silhouettes as SVG paths.\n *\n * Each shape is hand-tuned so the silhouettes read as distinct creatures of\n * the same species — different proportions, not just stretched ellipses.\n * Paths are pre-baked rather than generated so they can be replaced 1:1 by an\n * illustrator's exports without touching the renderer.\n */\n\nconst BODY_PATHS: Record<BodyShapeId, string> = {\n // Orb — true round, slight under-bulge for grounded feel\n orb: 'M50 20 C72 20 84 36 84 54 C84 73 70 86 50 86 C30 86 16 73 16 54 C16 36 28 20 50 20 Z',\n\n // Tall — egg pointing up, narrow shoulders, fuller bottom\n tall: 'M50 15 C66 15 74 30 74 48 C74 70 66 91 50 91 C34 91 26 70 26 48 C26 30 34 15 50 15 Z',\n\n // Squat — wide mushroom cap, low waist\n squat: 'M50 28 C74 28 88 42 88 60 C88 78 74 86 50 86 C26 86 12 78 12 60 C12 42 26 28 50 28 Z',\n\n // Pear — narrow top, broad rounded bottom\n pear: 'M50 18 C62 18 70 32 70 46 C70 56 80 66 80 76 C80 86 68 90 50 90 C32 90 20 86 20 76 C20 66 30 56 30 46 C30 32 38 18 50 18 Z',\n\n // Pebble — asymmetric river stone, slight tilt right\n pebble: 'M52 19 C72 21 86 36 84 56 C82 73 68 85 50 85 C30 85 16 72 16 54 C16 35 32 17 52 19 Z',\n\n // Dumpling — round bottom-heavy, narrow shoulders, sits low\n dumpling: 'M50 30 C62 30 70 38 70 48 C70 56 78 64 80 72 C82 82 70 88 50 88 C30 88 18 82 20 72 C22 64 30 56 30 48 C30 38 38 30 50 30 Z',\n\n // Taro — gourd shape: small head bulge, fuller bottom\n taro: 'M50 14 C58 14 64 22 64 30 C64 36 60 40 60 46 C60 54 76 60 78 76 C80 88 66 91 50 91 C34 91 20 88 22 76 C24 60 40 54 40 46 C40 40 36 36 36 30 C36 22 42 14 50 14 Z',\n\n // Wisp — tall narrow body, slight bottom flare, ghost-like\n wisp: 'M50 12 C60 12 66 24 66 40 C66 60 74 78 70 90 C64 96 36 96 30 90 C26 78 34 60 34 40 C34 24 40 12 50 12 Z',\n\n // Squircle — FULL-BLEED corporate plate. Fills entire viewport with tight\n // corner radius (~4px). Reads as a tile / ID photo not a contained avatar.\n // Pairs with `flat: true` packs (Office) — face floats on a wall of color.\n squircle: 'M4 0 C2 0 0 2 0 4 C0 35 0 65 0 96 C0 98 2 100 4 100 C35 100 65 100 96 100 C98 100 100 98 100 96 C100 65 100 35 100 4 C100 2 98 0 96 0 C65 0 35 0 4 0 Z',\n\n // Pumpkin — round, slightly wider than tall, with subtle horizontal \"lobes\"\n // for the iconic carved-pumpkin gourd shape. Stem area kept clear at top.\n pumpkin: 'M50 18 C70 18 86 30 86 52 C86 74 70 88 50 88 C30 88 14 74 14 52 C14 30 30 18 50 18 Z',\n\n // Ghost — soft rounded top with wavy bottom hem (3 humps), evoking a sheet.\n ghost: 'M50 12 C68 12 78 24 78 42 C78 60 80 76 80 88 L74 84 L68 90 L62 84 L56 90 L50 84 L44 90 L38 84 L32 90 L26 84 L20 88 C20 76 22 60 22 42 C22 24 32 12 50 12 Z',\n\n // SkullHead — egg-ish shape, slight pinch at jaw for skull silhouette.\n skullHead: 'M50 16 C68 16 80 30 80 50 C80 64 76 72 70 78 L68 86 L60 88 L60 82 L40 82 L40 88 L32 86 L30 78 C24 72 20 64 20 50 C20 30 32 16 50 16 Z',\n};\n\nexport function bodyAnchor(id: BodyShapeId): FaceAnchor {\n return ANCHORS[id];\n}\n\nexport function renderBodyDefs(\n _id: BodyShapeId,\n palette: Palette,\n gradId: string,\n opts?: { flat?: boolean },\n): string {\n if (opts?.flat) {\n // Flat mode: identical stop colors = solid fill, no 3D gloss.\n return `<radialGradient id=\"${gradId}\"><stop offset=\"0%\" stop-color=\"${palette.bodyFrom}\" /><stop offset=\"100%\" stop-color=\"${palette.bodyFrom}\" /></radialGradient>`;\n }\n return `\n<radialGradient id=\"${gradId}\" cx=\"42%\" cy=\"32%\" r=\"68%\">\n <stop offset=\"0%\" stop-color=\"${palette.bodyFrom}\" />\n <stop offset=\"100%\" stop-color=\"${palette.bodyTo}\" />\n</radialGradient>`.trim();\n}\n\nexport function renderBody(\n id: BodyShapeId,\n palette: Palette,\n gradId: string,\n opts?: { flat?: boolean },\n): string {\n const d = BODY_PATHS[id];\n const a = ANCHORS[id];\n const flat = opts?.flat === true;\n const outlineColor = withAlpha(palette.ink, 0.18);\n\n const parts: string[] = [];\n if (!flat) {\n // Ground shadow — soft ellipse just below body, grounds the figure\n parts.push(\n `<ellipse cx=\"${a.cx}\" cy=\"${a.groundY + 4}\" rx=\"22\" ry=\"2.6\" fill=\"${palette.ink}\" opacity=\"0.16\" />`,\n );\n }\n // Body fill — no stroke in flat mode (full-bleed bodies don't have room for it)\n parts.push(\n flat\n ? `<path d=\"${d}\" fill=\"url(#${gradId})\" />`\n : `<path d=\"${d}\" fill=\"url(#${gradId})\" stroke=\"${outlineColor}\" stroke-width=\"0.7\" />`,\n );\n if (!flat) {\n // Sheen — small light spot upper-left, scaled to body\n parts.push(\n `<ellipse cx=\"${a.cx - 12}\" cy=\"${a.eyeY - 14}\" rx=\"11\" ry=\"7\" fill=\"#FFFFFF\" opacity=\"0.22\" transform=\"rotate(-18 ${a.cx - 12} ${a.eyeY - 14})\" />`,\n );\n }\n return parts.join('');\n}\n\n/** Inline rgba() from hex — keeps SVG self-contained. */\nfunction withAlpha(hex: string, alpha: number): string {\n const h = hex.replace('#', '');\n const v = h.length === 3 ? h.split('').map((c) => c + c).join('') : h;\n const part = v.slice(0, 6);\n const r = parseInt(part.slice(0, 2), 16);\n const g = parseInt(part.slice(2, 4), 16);\n const b = parseInt(part.slice(4, 6), 16);\n return `rgba(${r},${g},${b},${alpha})`;\n}\n","import type { EyeStyleId, Palette } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\n/**\n * Eyes consume the FaceAnchor: position, gap, and vertical scale all flex\n * with the body silhouette. Style id determines shape only.\n */\nexport function renderEyes(\n id: EyeStyleId,\n palette: Palette,\n anchor: FaceAnchor,\n opts?: { strokeMul?: number },\n): string {\n const lx = anchor.cx - anchor.eyeOffset;\n const rx = anchor.cx + anchor.eyeOffset;\n const y = anchor.eyeY;\n const s = anchor.eyeScale;\n const ink = palette.ink;\n const sw = opts?.strokeMul ?? 1;\n\n switch (id) {\n case 'round':\n return [\n sclera(lx, y, 4 * s, 4.5 * s),\n sclera(rx, y, 4 * s, 4.5 * s),\n pupil(lx, y, 2.2 * s, ink),\n pupil(rx, y, 2.2 * s, ink),\n glint(lx + 1, y - 1),\n glint(rx + 1, y - 1),\n ].join('');\n\n case 'wide':\n return [\n sclera(lx, y, 5 * s, 5.5 * s),\n sclera(rx, y, 5 * s, 5.5 * s),\n pupil(lx, y + 0.5, 3 * s, ink),\n pupil(rx, y + 0.5, 3 * s, ink),\n glint(lx + 1.2, y - 0.5),\n glint(rx + 1.2, y - 0.5),\n ].join('');\n\n case 'squint':\n return [\n arc(lx - 4.5, y, lx, y - 3.5, lx + 4.5, y, ink, 1.8 * sw),\n arc(rx - 4.5, y, rx, y - 3.5, rx + 4.5, y, ink, 1.8 * sw),\n ].join('');\n\n case 'wink':\n return [\n sclera(lx, y, 4 * s, 4.5 * s),\n pupil(lx, y, 2.2 * s, ink),\n glint(lx + 1, y - 1),\n arc(rx - 4, y, rx, y - 3.5, rx + 4, y, ink, 1.8 * sw),\n ].join('');\n\n case 'sleepy':\n return [\n // Heavier upper lid — half-closed\n `<path d=\"M${lx - 4} ${y - 0.5} Q${lx} ${y + 2} ${lx + 4} ${y - 0.5}\" stroke=\"${ink}\" stroke-width=\"${1.7 * sw}\" stroke-linecap=\"round\" fill=\"none\" />`,\n `<path d=\"M${rx - 4} ${y - 0.5} Q${rx} ${y + 2} ${rx + 4} ${y - 0.5}\" stroke=\"${ink}\" stroke-width=\"${1.7 * sw}\" stroke-linecap=\"round\" fill=\"none\" />`,\n // tiny visible pupils\n `<circle cx=\"${lx}\" cy=\"${y + 0.5}\" r=\"${0.9 * sw}\" fill=\"${ink}\" />`,\n `<circle cx=\"${rx}\" cy=\"${y + 0.5}\" r=\"${0.9 * sw}\" fill=\"${ink}\" />`,\n ].join('');\n\n case 'star':\n return [starEye(lx, y, ink), starEye(rx, y, ink)].join('');\n\n case 'heart':\n return [heartEye(lx, y, ink), heartEye(rx, y, ink)].join('');\n\n case 'oval':\n // Vertical oval pupils (cute, anime-ish)\n return [\n sclera(lx, y, 4.5 * s, 5 * s),\n sclera(rx, y, 4.5 * s, 5 * s),\n `<ellipse cx=\"${lx}\" cy=\"${y}\" rx=\"${1.6 * s}\" ry=\"${3 * s}\" fill=\"${ink}\" />`,\n `<ellipse cx=\"${rx}\" cy=\"${y}\" rx=\"${1.6 * s}\" ry=\"${3 * s}\" fill=\"${ink}\" />`,\n glint(lx + 0.8, y - 1.5),\n glint(rx + 0.8, y - 1.5),\n ].join('');\n\n case 'dot':\n // Minimal dot eyes — scale radius by sw so bold-stroke packs get bigger dots\n return [\n `<circle cx=\"${lx}\" cy=\"${y}\" r=\"${1.4 * s * sw}\" fill=\"${ink}\" />`,\n `<circle cx=\"${rx}\" cy=\"${y}\" r=\"${1.4 * s * sw}\" fill=\"${ink}\" />`,\n ].join('');\n\n case 'cross':\n // X eyes (cartoon \"knocked out\" — works for laughing too)\n return [crossEye(lx, y, ink, sw), crossEye(rx, y, ink, sw)].join('');\n }\n}\n\nfunction heartEye(cx: number, cy: number, color: string): string {\n // Two small circles + triangle below = heart silhouette\n const s = 2;\n return `<path d=\"M${cx} ${cy + s * 1.4} L${cx - s * 1.8} ${cy - s * 0.2} A${s} ${s} 0 0 1 ${cx} ${cy - s * 0.6} A${s} ${s} 0 0 1 ${cx + s * 1.8} ${cy - s * 0.2} Z\" fill=\"${color}\" />`;\n}\n\nfunction crossEye(cx: number, cy: number, color: string, sw: number = 1): string {\n const s = 2.4;\n return `<g stroke=\"${color}\" stroke-width=\"${1.6 * sw}\" stroke-linecap=\"round\"><line x1=\"${cx - s}\" y1=\"${cy - s}\" x2=\"${cx + s}\" y2=\"${cy + s}\" /><line x1=\"${cx - s}\" y1=\"${cy + s}\" x2=\"${cx + s}\" y2=\"${cy - s}\" /></g>`;\n}\n\nfunction sclera(cx: number, cy: number, rx: number, ry: number): string {\n return `<ellipse cx=\"${cx}\" cy=\"${cy}\" rx=\"${rx}\" ry=\"${ry}\" fill=\"#FFFFFF\" />`;\n}\n\nfunction pupil(cx: number, cy: number, r: number, color: string): string {\n return `<circle cx=\"${cx}\" cy=\"${cy}\" r=\"${r}\" fill=\"${color}\" />`;\n}\n\nfunction glint(cx: number, cy: number): string {\n return `<circle cx=\"${cx}\" cy=\"${cy}\" r=\"0.8\" fill=\"#FFFFFF\" />`;\n}\n\nfunction arc(x1: number, y1: number, cx: number, cy: number, x2: number, y2: number, stroke: string, width: number): string {\n return `<path d=\"M${x1} ${y1} Q${cx} ${cy} ${x2} ${y2}\" stroke=\"${stroke}\" stroke-width=\"${width}\" stroke-linecap=\"round\" fill=\"none\" />`;\n}\n\nfunction starEye(cx: number, cy: number, color: string): string {\n const s = 3;\n return `<path d=\"M${cx} ${cy - s} L${cx + s * 0.35} ${cy - s * 0.35} L${cx + s} ${cy} L${cx + s * 0.35} ${cy + s * 0.35} L${cx} ${cy + s} L${cx - s * 0.35} ${cy + s * 0.35} L${cx - s} ${cy} L${cx - s * 0.35} ${cy - s * 0.35} Z\" fill=\"${color}\" />`;\n}\n","import type { MouthStyleId, Palette } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\nexport function renderMouth(\n id: MouthStyleId,\n palette: Palette,\n anchor: FaceAnchor,\n curveScale = 1,\n opts?: { strokeMul?: number },\n): string {\n const cx = anchor.cx;\n const y = anchor.mouthY;\n const w = anchor.mouthSpan * curveScale;\n const ink = palette.ink;\n const sw = opts?.strokeMul ?? 1;\n const base = 1.8 * sw;\n\n switch (id) {\n case 'smile':\n return `<path d=\"M${cx - w} ${y} Q${cx} ${y + 5} ${cx + w} ${y}\" stroke=\"${ink}\" stroke-width=\"${base}\" stroke-linecap=\"round\" fill=\"none\" />`;\n case 'grin':\n return `<path d=\"M${cx - w - 1} ${y - 2} Q${cx} ${y + 7} ${cx + w + 1} ${y - 2}\" stroke=\"${ink}\" stroke-width=\"${base}\" stroke-linecap=\"round\" fill=\"none\" />`;\n case 'open':\n return [\n `<path d=\"M${cx - w - 1} ${y - 2} Q${cx} ${y + 9} ${cx + w + 1} ${y - 2}\" stroke=\"${ink}\" stroke-width=\"${base}\" stroke-linecap=\"round\" fill=\"${ink}\" fill-opacity=\"0.55\" />`,\n `<ellipse cx=\"${cx}\" cy=\"${y + 3}\" rx=\"${w * 0.55}\" ry=\"1.8\" fill=\"#F472B6\" opacity=\"0.75\" />`,\n ].join('');\n case 'flat':\n return `<path d=\"M${cx - w + 1} ${y} L${cx + w - 1} ${y}\" stroke=\"${ink}\" stroke-width=\"${base}\" stroke-linecap=\"round\" fill=\"none\" />`;\n case 'smirk':\n return `<path d=\"M${cx - w} ${y} Q${cx} ${y + 3} ${cx + w + 1} ${y - 2}\" stroke=\"${ink}\" stroke-width=\"${base}\" stroke-linecap=\"round\" fill=\"none\" />`;\n case 'awe':\n return `<ellipse cx=\"${cx}\" cy=\"${y + 1}\" rx=\"${w * 0.45}\" ry=\"3.2\" fill=\"${ink}\" opacity=\"0.85\" />`;\n\n case 'tongue':\n return [\n `<path d=\"M${cx - w} ${y} Q${cx} ${y + 6} ${cx + w} ${y}\" stroke=\"${ink}\" stroke-width=\"${base}\" stroke-linecap=\"round\" fill=\"none\" />`,\n `<path d=\"M${cx - 2} ${y + 4} Q${cx} ${y + 9} ${cx + 2} ${y + 4} Z\" fill=\"#F472B6\" stroke=\"${ink}\" stroke-width=\"${0.6 * sw}\" />`,\n ].join('');\n\n case 'tooth':\n return [\n `<path d=\"M${cx - w} ${y} Q${cx} ${y + 5} ${cx + w} ${y}\" stroke=\"${ink}\" stroke-width=\"${base}\" stroke-linecap=\"round\" fill=\"none\" />`,\n `<rect x=\"${cx - 1.2}\" y=\"${y + 0.4}\" width=\"2.4\" height=\"2.6\" rx=\"0.4\" fill=\"#FFFFFF\" stroke=\"${ink}\" stroke-width=\"${0.4 * sw}\" />`,\n ].join('');\n\n case 'wave':\n // Wavy mouth (silly / playful)\n return `<path d=\"M${cx - w} ${y + 1} Q${cx - w / 2} ${y - 1.5} ${cx} ${y + 1} Q${cx + w / 2} ${y + 3.5} ${cx + w} ${y + 1}\" stroke=\"${ink}\" stroke-width=\"${base}\" stroke-linecap=\"round\" fill=\"none\" />`;\n\n case 'dot':\n // Tiny dot mouth — radius scales with stroke multiplier\n return `<circle cx=\"${cx}\" cy=\"${y + 1}\" r=\"${1.2 * sw}\" fill=\"${ink}\" />`;\n\n case 'jagged': {\n // Carved-pumpkin grin — zigzag with sharp triangular teeth.\n // Filled silhouette in ink so it reads at small sizes.\n const half = w + 1;\n const top = y - 1;\n const bot = y + 5;\n // 5 alternating peaks across the span\n const step = (half * 2) / 8;\n const x0 = cx - half;\n const points: string[] = [];\n points.push(`${x0} ${top}`);\n for (let i = 1; i <= 8; i++) {\n const px = x0 + step * i;\n const py = i % 2 === 1 ? bot : top;\n points.push(`${px.toFixed(2)} ${py}`);\n }\n return `<path d=\"M${points.join(' L')} L${cx + half} ${top} Z\" fill=\"${ink}\" />`;\n }\n\n case 'fangs': {\n // Small straight-line mouth with two pointy fangs hanging down.\n const half = w - 1;\n return [\n `<path d=\"M${cx - half} ${y} L${cx + half} ${y}\" stroke=\"${ink}\" stroke-width=\"${base}\" stroke-linecap=\"round\" fill=\"none\" />`,\n // Left fang\n `<path d=\"M${cx - 2.5} ${y + 0.4} L${cx - 1.2} ${y + 4.5} L${cx - 0.2} ${y + 0.4} Z\" fill=\"#FFFFFF\" stroke=\"${ink}\" stroke-width=\"${0.5 * sw}\" />`,\n // Right fang\n `<path d=\"M${cx + 0.2} ${y + 0.4} L${cx + 1.2} ${y + 4.5} L${cx + 2.5} ${y + 0.4} Z\" fill=\"#FFFFFF\" stroke=\"${ink}\" stroke-width=\"${0.5 * sw}\" />`,\n ].join('');\n }\n }\n}\n","import type { AntennaStyleId, Palette } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\n/**\n * Antenna mounts at anchor.topperX / topperY (body's apex).\n */\nexport function renderAntenna(id: AntennaStyleId, anchor: FaceAnchor, palette: Palette): string {\n if (id === 'none') return '';\n\n const cx = anchor.topperX;\n const topY = anchor.topperY;\n const color = palette.accent;\n const ink = palette.ink;\n\n switch (id) {\n case 'classic':\n return [\n `<path d=\"M${cx} ${topY} Q${cx + 1} ${topY - 5} ${cx + 2.5} ${topY - 9}\" stroke=\"${ink}\" stroke-width=\"1.2\" stroke-linecap=\"round\" fill=\"none\" opacity=\"0.55\" />`,\n `<circle class=\"spark\" cx=\"${cx + 2.5}\" cy=\"${topY - 10}\" r=\"2.6\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n ].join('');\n case 'curl':\n return [\n `<path d=\"M${cx} ${topY} Q${cx + 6} ${topY - 4} ${cx + 1} ${topY - 8} Q${cx - 4} ${topY - 11} ${cx + 1} ${topY - 14}\" stroke=\"${ink}\" stroke-width=\"1.2\" stroke-linecap=\"round\" fill=\"none\" opacity=\"0.55\" />`,\n `<circle class=\"spark\" cx=\"${cx + 1}\" cy=\"${topY - 14}\" r=\"2.2\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n ].join('');\n case 'double':\n return [\n `<path d=\"M${cx - 4} ${topY} Q${cx - 5} ${topY - 4} ${cx - 5.5} ${topY - 8}\" stroke=\"${ink}\" stroke-width=\"1.1\" stroke-linecap=\"round\" fill=\"none\" opacity=\"0.55\" />`,\n `<path d=\"M${cx + 4} ${topY} Q${cx + 5} ${topY - 4} ${cx + 5.5} ${topY - 8}\" stroke=\"${ink}\" stroke-width=\"1.1\" stroke-linecap=\"round\" fill=\"none\" opacity=\"0.55\" />`,\n `<circle class=\"spark\" cx=\"${cx - 5.5}\" cy=\"${topY - 9}\" r=\"2.1\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.5\" opacity=\"0.95\" />`,\n `<circle class=\"spark\" cx=\"${cx + 5.5}\" cy=\"${topY - 9}\" r=\"2.1\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.5\" opacity=\"0.95\" />`,\n ].join('');\n case 'spike':\n return [\n `<path class=\"spark\" d=\"M${cx - 2.5} ${topY - 1} L${cx + 1} ${topY - 11} L${cx + 4.5} ${topY - 1} Z\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n ].join('');\n }\n}\n","import type { AccessoryId, Palette } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\nexport function renderAccessory(\n id: AccessoryId,\n palette: Palette,\n anchor: FaceAnchor,\n opts?: { strokeMul?: number },\n): string {\n const sw = opts?.strokeMul ?? 1;\n switch (id) {\n case 'none':\n return '';\n case 'blush': {\n const lx = anchor.cx - anchor.cheekOffset;\n const rx = anchor.cx + anchor.cheekOffset;\n const y = anchor.cheekY;\n return [\n `<ellipse cx=\"${lx}\" cy=\"${y}\" rx=\"3.6\" ry=\"2.2\" fill=\"${palette.blush}\" opacity=\"0.5\" />`,\n `<ellipse cx=\"${rx}\" cy=\"${y}\" rx=\"3.6\" ry=\"2.2\" fill=\"${palette.blush}\" opacity=\"0.5\" />`,\n ].join('');\n }\n case 'freckles': {\n const lx = anchor.cx - 8;\n const rx = anchor.cx + 8;\n const y = anchor.cheekY;\n return [\n dot(lx, y, palette.ink),\n dot(lx + 3, y + 1.5, palette.ink),\n dot(rx, y, palette.ink),\n dot(rx - 3, y + 1.5, palette.ink),\n ].join('');\n }\n case 'sparkle':\n return [\n sparkle(76, anchor.eyeY - 18, 3, palette),\n sparkle(24, anchor.eyeY - 16, 2.5, palette),\n sparkle(82, anchor.cheekY + 2, 2, palette),\n ].join('');\n\n case 'glasses': {\n // Round-frame glasses over both eyes\n const lx = anchor.cx - anchor.eyeOffset;\n const rx = anchor.cx + anchor.eyeOffset;\n const y = anchor.eyeY;\n const r = 6;\n const gw = 1.2 * sw;\n return [\n `<circle cx=\"${lx}\" cy=\"${y}\" r=\"${r}\" fill=\"none\" stroke=\"${palette.ink}\" stroke-width=\"${gw}\" />`,\n `<circle cx=\"${rx}\" cy=\"${y}\" r=\"${r}\" fill=\"none\" stroke=\"${palette.ink}\" stroke-width=\"${gw}\" />`,\n `<line x1=\"${lx + r}\" y1=\"${y}\" x2=\"${rx - r}\" y2=\"${y}\" stroke=\"${palette.ink}\" stroke-width=\"${gw}\" />`,\n // subtle lens fill\n `<circle cx=\"${lx}\" cy=\"${y}\" r=\"${r - 1}\" fill=\"#FFFFFF\" opacity=\"0.18\" />`,\n `<circle cx=\"${rx}\" cy=\"${y}\" r=\"${r - 1}\" fill=\"#FFFFFF\" opacity=\"0.18\" />`,\n ].join('');\n }\n\n case 'eyepatch': {\n // Patch over right eye, strap across head\n const rx = anchor.cx + anchor.eyeOffset;\n const y = anchor.eyeY;\n return [\n `<ellipse cx=\"${rx}\" cy=\"${y}\" rx=\"6\" ry=\"5.2\" fill=\"${palette.ink}\" />`,\n `<path d=\"M${rx - 6} ${y - 4} L${anchor.cx - 18} ${anchor.eyeY - 8}\" stroke=\"${palette.ink}\" stroke-width=\"0.9\" />`,\n `<path d=\"M${rx + 6} ${y - 3} L${anchor.cx + 22} ${anchor.eyeY - 6}\" stroke=\"${palette.ink}\" stroke-width=\"0.9\" />`,\n ].join('');\n }\n\n case 'mole': {\n // Small beauty mark below left cheek\n return `<circle cx=\"${anchor.cx - anchor.cheekOffset * 0.6}\" cy=\"${anchor.cheekY + 2}\" r=\"0.9\" fill=\"${palette.ink}\" />`;\n }\n\n case 'earring': {\n // Pair of small drop earrings — sit at the outer cheek edge, near jawline\n const ex = anchor.cheekOffset + 4;\n const ey = anchor.cheekY + 4;\n const lx = anchor.cx - ex;\n const rx = anchor.cx + ex;\n return [\n // Left earring — small stud + drop\n `<circle cx=\"${lx}\" cy=\"${ey}\" r=\"${1.1 * sw}\" fill=\"${palette.accent}\" stroke=\"${palette.ink}\" stroke-width=\"${0.4 * sw}\" />`,\n `<ellipse cx=\"${lx}\" cy=\"${ey + 3.2}\" rx=\"${1.3 * sw}\" ry=\"${2 * sw}\" fill=\"${palette.accent}\" stroke=\"${palette.ink}\" stroke-width=\"${0.4 * sw}\" />`,\n // Right earring\n `<circle cx=\"${rx}\" cy=\"${ey}\" r=\"${1.1 * sw}\" fill=\"${palette.accent}\" stroke=\"${palette.ink}\" stroke-width=\"${0.4 * sw}\" />`,\n `<ellipse cx=\"${rx}\" cy=\"${ey + 3.2}\" rx=\"${1.3 * sw}\" ry=\"${2 * sw}\" fill=\"${palette.accent}\" stroke=\"${palette.ink}\" stroke-width=\"${0.4 * sw}\" />`,\n ].join('');\n }\n }\n\n function dot(cx: number, cy: number, color: string): string {\n return `<circle cx=\"${cx}\" cy=\"${cy}\" r=\"0.85\" fill=\"${color}\" opacity=\"0.55\" />`;\n }\n\n function sparkle(cx: number, cy: number, s: number, p: Palette): string {\n return `<path d=\"M${cx} ${cy - s} L${cx + s * 0.3} ${cy - s * 0.3} L${cx + s} ${cy} L${cx + s * 0.3} ${cy + s * 0.3} L${cx} ${cy + s} L${cx - s * 0.3} ${cy + s * 0.3} L${cx - s} ${cy} L${cx - s * 0.3} ${cy - s * 0.3} Z\" fill=\"${p.accent}\" stroke=\"${p.ink}\" stroke-width=\"0.3\" opacity=\"0.9\" />`;\n }\n}\n","import type { BackgroundId, Palette } from '../types.js';\n\nexport function renderBackground(id: BackgroundId, palette: Palette, override?: string): string {\n const color = override ?? palette.bodyFrom;\n switch (id) {\n case 'none':\n return '';\n case 'solid':\n return `<rect x=\"0\" y=\"0\" width=\"100\" height=\"100\" fill=\"${color}\" opacity=\"0.18\" />`;\n case 'ring':\n return [\n `<circle cx=\"50\" cy=\"50\" r=\"48\" fill=\"${color}\" opacity=\"0.14\" />`,\n `<circle cx=\"50\" cy=\"50\" r=\"46\" fill=\"none\" stroke=\"${palette.accent}\" stroke-width=\"0.6\" opacity=\"0.4\" />`,\n ].join('');\n }\n}\n","import type { Palette, TopperId } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\n/**\n * Topper = the layer that sits behind/above the body silhouette: ears, horns,\n * tufts, caps. This is independent from antenna (which is a small spark).\n * Toppers significantly increase identity diversity.\n */\nexport function renderTopper(id: TopperId, anchor: FaceAnchor, palette: Palette): string {\n if (id === 'none') return '';\n\n const cx = anchor.topperX;\n const topY = anchor.topperY;\n const ink = palette.ink;\n\n switch (id) {\n case 'ears':\n // Pointy ears flanking the apex\n return [\n `<path d=\"M${cx - 16} ${topY + 6} L${cx - 11} ${topY - 5} L${cx - 6} ${topY + 8} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n `<path d=\"M${cx + 6} ${topY + 8} L${cx + 11} ${topY - 5} L${cx + 16} ${topY + 6} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n // inner ear blush\n `<path d=\"M${cx - 14} ${topY + 4} L${cx - 11} ${topY - 1} L${cx - 8} ${topY + 5} Z\" fill=\"${palette.blush}\" opacity=\"0.65\" />`,\n `<path d=\"M${cx + 8} ${topY + 5} L${cx + 11} ${topY - 1} L${cx + 14} ${topY + 4} Z\" fill=\"${palette.blush}\" opacity=\"0.65\" />`,\n ].join('');\n\n case 'roundEars':\n return [\n `<circle cx=\"${cx - 13}\" cy=\"${topY + 2}\" r=\"6\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n `<circle cx=\"${cx + 13}\" cy=\"${topY + 2}\" r=\"6\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n `<circle cx=\"${cx - 13}\" cy=\"${topY + 2}\" r=\"3\" fill=\"${palette.blush}\" opacity=\"0.6\" />`,\n `<circle cx=\"${cx + 13}\" cy=\"${topY + 2}\" r=\"3\" fill=\"${palette.blush}\" opacity=\"0.6\" />`,\n ].join('');\n\n case 'horn':\n // Single short horn off-center\n return [\n `<path d=\"M${cx - 1} ${topY + 2} Q${cx} ${topY - 6} ${cx + 4} ${topY - 10} Q${cx + 6} ${topY - 4} ${cx + 3} ${topY + 2} Z\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n ].join('');\n\n case 'horns':\n // Two stubby horns\n return [\n `<path d=\"M${cx - 7} ${topY + 4} Q${cx - 8} ${topY - 4} ${cx - 4} ${topY - 7} Q${cx - 2} ${topY - 1} ${cx - 3} ${topY + 4} Z\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n `<path d=\"M${cx + 3} ${topY + 4} Q${cx + 2} ${topY - 1} ${cx + 4} ${topY - 7} Q${cx + 8} ${topY - 4} ${cx + 7} ${topY + 4} Z\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n ].join('');\n\n case 'tuft':\n // Hair tuft / single curl\n return [\n `<path d=\"M${cx} ${topY + 2} Q${cx - 2} ${topY - 4} ${cx + 1} ${topY - 8} Q${cx + 6} ${topY - 5} ${cx + 4} ${topY + 1} Z\" fill=\"${ink}\" opacity=\"0.85\" />`,\n ].join('');\n\n case 'cap':\n // Beanie / cap\n return [\n `<path d=\"M${cx - 16} ${topY + 6} Q${cx - 16} ${topY - 8} ${cx} ${topY - 8} Q${cx + 16} ${topY - 8} ${cx + 16} ${topY + 6} Z\" fill=\"${palette.ink}\" opacity=\"0.92\" />`,\n `<rect x=\"${cx - 16}\" y=\"${topY + 5}\" width=\"32\" height=\"2.5\" rx=\"1\" fill=\"${palette.accent}\" opacity=\"0.85\" />`,\n `<circle cx=\"${cx}\" cy=\"${topY - 9}\" r=\"2.2\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.5\" />`,\n ].join('');\n\n case 'leaf':\n // Small leaf sprig — wholesome\n return [\n `<path d=\"M${cx - 1} ${topY + 2} Q${cx - 6} ${topY - 4} ${cx - 1} ${topY - 8} Q${cx + 3} ${topY - 4} ${cx - 1} ${topY + 2} Z\" fill=\"#22C55E\" stroke=\"${ink}\" stroke-width=\"0.4\" opacity=\"0.95\" />`,\n `<path d=\"M${cx + 1} ${topY + 2} Q${cx + 5} ${topY - 2} ${cx + 6} ${topY - 6}\" stroke=\"#16A34A\" stroke-width=\"1\" fill=\"none\" stroke-linecap=\"round\" />`,\n ].join('');\n\n case 'headband':\n // Sweatband across forehead\n return [\n `<path d=\"M${cx - 18} ${topY + 8} Q${cx} ${topY + 2} ${cx + 18} ${topY + 8} L${cx + 18} ${topY + 12} Q${cx} ${topY + 6} ${cx - 18} ${topY + 12} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n `<rect x=\"${cx - 2}\" y=\"${topY + 4}\" width=\"4\" height=\"4\" rx=\"1\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.4\" />`,\n ].join('');\n\n case 'halo':\n // Floating ring above head\n return [\n `<ellipse cx=\"${cx}\" cy=\"${topY - 6}\" rx=\"11\" ry=\"2.5\" fill=\"none\" stroke=\"#FACC15\" stroke-width=\"2\" opacity=\"0.95\" />`,\n `<ellipse cx=\"${cx}\" cy=\"${topY - 6}\" rx=\"8.5\" ry=\"1.6\" fill=\"none\" stroke=\"#FDE68A\" stroke-width=\"0.6\" opacity=\"0.7\" />`,\n ].join('');\n\n case 'crown':\n // Three-point crown\n return [\n `<path d=\"M${cx - 11} ${topY + 4} L${cx - 11} ${topY - 4} L${cx - 6} ${topY + 1} L${cx} ${topY - 7} L${cx + 6} ${topY + 1} L${cx + 11} ${topY - 4} L${cx + 11} ${topY + 4} Z\" fill=\"#FACC15\" stroke=\"${ink}\" stroke-width=\"0.7\" />`,\n `<circle cx=\"${cx - 11}\" cy=\"${topY - 4}\" r=\"1.4\" fill=\"#EF4444\" stroke=\"${ink}\" stroke-width=\"0.3\" />`,\n `<circle cx=\"${cx}\" cy=\"${topY - 7}\" r=\"1.6\" fill=\"#EF4444\" stroke=\"${ink}\" stroke-width=\"0.3\" />`,\n `<circle cx=\"${cx + 11}\" cy=\"${topY - 4}\" r=\"1.4\" fill=\"#EF4444\" stroke=\"${ink}\" stroke-width=\"0.3\" />`,\n ].join('');\n\n case 'antlers':\n // Branching antlers\n return [\n `<path d=\"M${cx - 5} ${topY + 4} L${cx - 6} ${topY - 4} M${cx - 6} ${topY - 4} L${cx - 10} ${topY - 6} M${cx - 6} ${topY - 4} L${cx - 6} ${topY - 9} M${cx - 6} ${topY - 9} L${cx - 8} ${topY - 11} M${cx - 6} ${topY - 9} L${cx - 3} ${topY - 11}\" stroke=\"${ink}\" stroke-width=\"1.3\" stroke-linecap=\"round\" fill=\"none\" />`,\n `<path d=\"M${cx + 5} ${topY + 4} L${cx + 6} ${topY - 4} M${cx + 6} ${topY - 4} L${cx + 10} ${topY - 6} M${cx + 6} ${topY - 4} L${cx + 6} ${topY - 9} M${cx + 6} ${topY - 9} L${cx + 8} ${topY - 11} M${cx + 6} ${topY - 9} L${cx + 3} ${topY - 11}\" stroke=\"${ink}\" stroke-width=\"1.3\" stroke-linecap=\"round\" fill=\"none\" />`,\n ].join('');\n\n case 'bob': {\n // Chin-length bob — hair frames forehead + temples. Reads as a hair\n // silhouette on top of the head. Works for full-bleed (Office) and\n // standard bodies — anchored to topperY + extends down to face area.\n const eyeY = anchor.eyeY;\n const tt = topY - 4; // top of hair\n const bt = eyeY + 6; // hair drops to mid-cheek level\n return [\n // Main hair cap — slightly asymmetric for soft look\n `<path d=\"M${cx - 24} ${bt} Q${cx - 26} ${eyeY - 4} ${cx - 22} ${tt + 4} Q${cx - 14} ${tt - 2} ${cx} ${tt - 3} Q${cx + 14} ${tt - 2} ${cx + 22} ${tt + 4} Q${cx + 26} ${eyeY - 4} ${cx + 24} ${bt} Q${cx + 18} ${eyeY + 2} ${cx + 14} ${eyeY - 2} Q${cx} ${eyeY - 8} ${cx - 14} ${eyeY - 2} Q${cx - 18} ${eyeY + 2} ${cx - 24} ${bt} Z\" fill=\"${ink}\" opacity=\"0.92\" />`,\n // Subtle highlight strand\n `<path d=\"M${cx - 14} ${tt + 4} Q${cx - 6} ${tt + 2} ${cx + 2} ${tt + 6}\" stroke=\"${palette.accent}\" stroke-width=\"0.6\" fill=\"none\" opacity=\"0.25\" />`,\n ].join('');\n }\n\n case 'bun': {\n // Top knot bun — small disc above the head, with a soft hair base\n // hugging the crown.\n const baseY = topY + 4;\n const bunY = topY - 8;\n return [\n // Hair base on crown\n `<path d=\"M${cx - 16} ${baseY} Q${cx} ${topY - 4} ${cx + 16} ${baseY} Q${cx + 12} ${baseY - 4} ${cx} ${baseY - 6} Q${cx - 12} ${baseY - 4} ${cx - 16} ${baseY} Z\" fill=\"${ink}\" opacity=\"0.92\" />`,\n // Bun disc\n `<ellipse cx=\"${cx}\" cy=\"${bunY}\" rx=\"6\" ry=\"5\" fill=\"${ink}\" opacity=\"0.95\" />`,\n // Bun wrap detail\n `<ellipse cx=\"${cx}\" cy=\"${bunY - 0.5}\" rx=\"3.5\" ry=\"2.5\" fill=\"none\" stroke=\"${palette.accent}\" stroke-width=\"0.4\" opacity=\"0.4\" />`,\n ].join('');\n }\n\n case 'witchHat': {\n // Tall pointed witch hat — cone + brim + band w/ buckle. Sits on apex,\n // tilts slightly for stylized silhouette.\n const tipY = topY - 26;\n const baseY = topY + 2;\n return [\n // Cone — slight curve, tilts right\n `<path d=\"M${cx - 14} ${baseY} Q${cx - 4} ${baseY - 10} ${cx + 4} ${tipY} Q${cx + 2} ${baseY - 4} ${cx + 14} ${baseY} Z\" fill=\"${ink}\" opacity=\"0.96\" />`,\n // Brim — wide flat oval w/ slight curve\n `<ellipse cx=\"${cx}\" cy=\"${baseY + 2}\" rx=\"22\" ry=\"3.4\" fill=\"${ink}\" opacity=\"0.96\" />`,\n // Band across cone base\n `<rect x=\"${cx - 14}\" y=\"${baseY - 4}\" width=\"28\" height=\"3\" fill=\"${palette.accent}\" opacity=\"0.85\" />`,\n // Buckle\n `<rect x=\"${cx - 2}\" y=\"${baseY - 4}\" width=\"4\" height=\"3\" fill=\"${palette.bodyFrom}\" stroke=\"${ink}\" stroke-width=\"0.4\" />`,\n // Star/moon sparkle near tip\n `<circle cx=\"${cx + 2}\" cy=\"${tipY + 6}\" r=\"0.9\" fill=\"${palette.accent}\" opacity=\"0.9\" />`,\n ].join('');\n }\n\n case 'pumpkinStem': {\n // Curled green stem + small leaf — sits on top of a pumpkin body.\n return [\n // Main stem — slightly curved\n `<path d=\"M${cx - 2} ${topY + 4} Q${cx} ${topY - 2} ${cx + 1} ${topY - 8} L${cx + 3} ${topY - 8} Q${cx + 4} ${topY} ${cx + 2} ${topY + 4} Z\" fill=\"#3F6F2C\" stroke=\"${ink}\" stroke-width=\"0.5\" />`,\n // Leaf curling off\n `<path d=\"M${cx + 3} ${topY - 4} Q${cx + 9} ${topY - 8} ${cx + 12} ${topY - 4} Q${cx + 8} ${topY - 2} ${cx + 3} ${topY - 2} Z\" fill=\"#4A8035\" stroke=\"${ink}\" stroke-width=\"0.4\" />`,\n // Vein on leaf\n `<path d=\"M${cx + 5} ${topY - 3} L${cx + 11} ${topY - 5}\" stroke=\"#2D5020\" stroke-width=\"0.4\" />`,\n ].join('');\n }\n\n case 'ghostSheet': {\n // Drapey sheet \"hood\" — extra fabric over the head, suggesting a draped\n // ghost. Two soft fold lines for texture.\n return [\n // Sheet cap — wider than body, hangs lower at sides\n `<path d=\"M${cx - 22} ${topY + 8} Q${cx - 26} ${topY - 4} ${cx - 14} ${topY - 10} Q${cx} ${topY - 14} ${cx + 14} ${topY - 10} Q${cx + 26} ${topY - 4} ${cx + 22} ${topY + 8} Q${cx + 12} ${topY + 4} ${cx} ${topY + 6} Q${cx - 12} ${topY + 4} ${cx - 22} ${topY + 8} Z\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.9\" />`,\n // Fold shadows\n `<path d=\"M${cx - 12} ${topY - 6} Q${cx - 10} ${topY - 2} ${cx - 14} ${topY + 4}\" stroke=\"${ink}\" stroke-width=\"0.45\" fill=\"none\" opacity=\"0.35\" />`,\n `<path d=\"M${cx + 12} ${topY - 6} Q${cx + 10} ${topY - 2} ${cx + 14} ${topY + 4}\" stroke=\"${ink}\" stroke-width=\"0.45\" fill=\"none\" opacity=\"0.35\" />`,\n ].join('');\n }\n\n case 'ponytail': {\n // Sleek pulled-back hair + side ponytail. Reads as hair (not a helmet)\n // by keeping the forehead hairline tight + giving the tail an obvious\n // tied-off base ring and a long tapered strand.\n const eyeY = anchor.eyeY;\n const fh = eyeY - 7; // forehead hairline\n const crownY = topY; // top of head\n const baseX = cx + 18; // ponytail tie x\n const baseY = crownY + 6; // ponytail tie y\n return [\n // Sleek hair cap — narrower than bob, hugs the crown, soft hairline.\n `<path d=\"M${cx - 22} ${fh} Q${cx - 24} ${crownY - 2} ${cx - 12} ${crownY - 4} L${cx + 14} ${crownY - 4} Q${cx + 24} ${crownY} ${cx + 22} ${fh} Q${cx + 10} ${fh - 1} ${cx} ${fh + 2} Q${cx - 10} ${fh - 1} ${cx - 22} ${fh} Z\" fill=\"${ink}\" opacity=\"0.94\" />`,\n // Subtle highlight sweeping back toward the tie\n `<path d=\"M${cx - 12} ${crownY - 2} Q${cx} ${crownY - 3} ${baseX - 2} ${baseY - 2}\" stroke=\"${palette.accent}\" stroke-width=\"0.5\" fill=\"none\" opacity=\"0.3\" />`,\n // Ponytail tie — small ring where the hair gathers\n `<ellipse cx=\"${baseX}\" cy=\"${baseY}\" rx=\"3\" ry=\"2.4\" fill=\"${ink}\" opacity=\"0.95\" />`,\n `<ellipse cx=\"${baseX}\" cy=\"${baseY}\" rx=\"1.4\" ry=\"1.1\" fill=\"${palette.accent}\" opacity=\"0.32\" />`,\n // Tail — long tapered strand curving down and slightly out\n `<path d=\"M${baseX - 1} ${baseY + 2} Q${baseX + 5} ${baseY + 10} ${baseX + 8} ${baseY + 20} Q${baseX + 9} ${baseY + 28} ${baseX + 4} ${baseY + 30} Q${baseX + 1} ${baseY + 22} ${baseX - 3} ${baseY + 12} Z\" fill=\"${ink}\" opacity=\"0.92\" />`,\n // Inner highlight following the tail's flow direction\n `<path d=\"M${baseX + 2} ${baseY + 6} Q${baseX + 5} ${baseY + 16} ${baseX + 6} ${baseY + 24}\" stroke=\"${palette.accent}\" stroke-width=\"0.5\" fill=\"none\" opacity=\"0.25\" />`,\n ].join('');\n }\n }\n}\n","import type { OutfitId, Palette } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\n/**\n * Outfit = chest/neck-area decoration that sits BELOW the face but on top\n * of the body silhouette. Anchored to the bottom-front of the body so it\n * reads as \"worn\", not \"floating\".\n *\n * Z-order: rendered AFTER body + face but BEFORE accessories (so a\n * sunflower boutonnière sits on top of the body but a sparkle accessory\n * can still hover above the chest).\n */\nexport function renderOutfit(id: OutfitId, anchor: FaceAnchor, palette: Palette): string {\n if (id === 'none') return '';\n\n // Chest anchor: centered horizontally on the body, vertically positioned\n // just below the chin (~70% down from mouth to ground).\n const cx = anchor.cx;\n const cy = anchor.mouthY + (anchor.groundY - anchor.mouthY) * 0.55;\n const ink = palette.ink;\n const accent = palette.accent;\n\n switch (id) {\n case 'collar':\n // Two short triangles meeting at center — dress shirt collar peek\n return [\n `<path d=\"M${cx - 9} ${cy} L${cx - 2} ${cy - 4} L${cx - 2} ${cy + 5} Z\" fill=\"${accent}\" stroke=\"${ink}\" stroke-width=\"0.7\" />`,\n `<path d=\"M${cx + 9} ${cy} L${cx + 2} ${cy - 4} L${cx + 2} ${cy + 5} Z\" fill=\"${accent}\" stroke=\"${ink}\" stroke-width=\"0.7\" />`,\n // tiny button at center\n `<circle cx=\"${cx}\" cy=\"${cy + 4}\" r=\"0.9\" fill=\"${ink}\" />`,\n ].join('');\n\n case 'scarf':\n // Wrap with two tails hanging\n return [\n // wrap band\n `<path d=\"M${cx - 14} ${cy - 2} Q${cx} ${cy + 3} ${cx + 14} ${cy - 2} L${cx + 14} ${cy + 3} Q${cx} ${cy + 8} ${cx - 14} ${cy + 3} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n // tail 1 (left)\n `<path d=\"M${cx - 6} ${cy + 5} L${cx - 9} ${cy + 12} L${cx - 4} ${cy + 12} L${cx - 2} ${cy + 5} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.5\" />`,\n // tail 2 (slightly right)\n `<path d=\"M${cx + 1} ${cy + 6} L${cx + 4} ${cy + 13} L${cx - 1} ${cy + 13} L${cx - 2} ${cy + 6} Z\" fill=\"${palette.bodyFrom}\" stroke=\"${ink}\" stroke-width=\"0.5\" />`,\n ].join('');\n\n case 'bowtie':\n // Two triangles meeting at a center knot\n return [\n // left wing\n `<path d=\"M${cx - 1} ${cy} L${cx - 9} ${cy - 4} L${cx - 9} ${cy + 4} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.7\" />`,\n // right wing\n `<path d=\"M${cx + 1} ${cy} L${cx + 9} ${cy - 4} L${cx + 9} ${cy + 4} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.7\" />`,\n // center knot\n `<rect x=\"${cx - 1.4}\" y=\"${cy - 2.4}\" width=\"2.8\" height=\"4.8\" rx=\"0.8\" fill=\"${palette.bodyFrom}\" stroke=\"${ink}\" stroke-width=\"0.5\" />`,\n ].join('');\n\n case 'sunflower':\n // Sunflower boutonnière pinned to chest (off-center, like a real one)\n {\n const fx = cx - 8;\n const fy = cy + 2;\n const petals: string[] = [];\n // 8 petals around center\n for (let i = 0; i < 8; i++) {\n const a = (i / 8) * Math.PI * 2;\n const px = fx + Math.cos(a) * 3.2;\n const py = fy + Math.sin(a) * 3.2;\n petals.push(\n `<ellipse cx=\"${px.toFixed(2)}\" cy=\"${py.toFixed(2)}\" rx=\"2.4\" ry=\"1.3\" fill=\"#FACC15\" stroke=\"${ink}\" stroke-width=\"0.35\" transform=\"rotate(${(a * 180 / Math.PI).toFixed(1)} ${px.toFixed(2)} ${py.toFixed(2)})\" />`,\n );\n }\n return [\n // stem (tucked behind)\n `<path d=\"M${fx + 2} ${fy + 2} Q${fx + 4} ${fy + 6} ${fx + 1} ${fy + 10}\" stroke=\"#16A34A\" stroke-width=\"1.1\" fill=\"none\" stroke-linecap=\"round\" />`,\n // leaf\n `<path d=\"M${fx + 3} ${fy + 6} Q${fx + 7} ${fy + 4} ${fx + 6} ${fy + 8} Q${fx + 4} ${fy + 8} ${fx + 3} ${fy + 6} Z\" fill=\"#22C55E\" stroke=\"${ink}\" stroke-width=\"0.35\" />`,\n ...petals,\n // center disc\n `<circle cx=\"${fx}\" cy=\"${fy}\" r=\"2\" fill=\"#92400E\" stroke=\"${ink}\" stroke-width=\"0.4\" />`,\n // texture dots on disc\n `<circle cx=\"${fx - 0.6}\" cy=\"${fy - 0.5}\" r=\"0.4\" fill=\"#451A03\" />`,\n `<circle cx=\"${fx + 0.7}\" cy=\"${fy + 0.3}\" r=\"0.4\" fill=\"#451A03\" />`,\n `<circle cx=\"${fx - 0.4}\" cy=\"${fy + 0.8}\" r=\"0.4\" fill=\"#451A03\" />`,\n ].join('');\n }\n\n case 'necklace':\n // Thin curved chain w/ a small pendant\n return [\n // chain (curve from collarbone left → drop → right)\n `<path d=\"M${cx - 10} ${cy} Q${cx} ${cy + 8} ${cx + 10} ${cy}\" stroke=\"${accent}\" stroke-width=\"0.8\" fill=\"none\" stroke-linecap=\"round\" />`,\n // pendant\n `<circle cx=\"${cx}\" cy=\"${cy + 7}\" r=\"1.6\" fill=\"${accent}\" stroke=\"${ink}\" stroke-width=\"0.5\" />`,\n `<circle cx=\"${cx}\" cy=\"${cy + 7}\" r=\"0.7\" fill=\"${palette.blush}\" />`,\n ].join('');\n\n case 'tie':\n // Necktie — small knot at neckline + tapered blade hanging below.\n // Dressy / corporate signal. Uses palette.bodyTo as tie color, palette.accent\n // as the shirt collar peek behind it.\n {\n const knotTop = cy - 3;\n const knotBot = cy + 1;\n return [\n // Shirt-collar peek behind the tie (so tie reads as worn over a shirt)\n `<path d=\"M${cx - 11} ${cy - 2} L${cx - 3} ${knotBot} L${cx + 3} ${knotBot} L${cx + 11} ${cy - 2} L${cx + 6} ${cy + 6} L${cx - 6} ${cy + 6} Z\" fill=\"${accent}\" stroke=\"${ink}\" stroke-width=\"0.55\" />`,\n // Knot — small trapezoid centered\n `<path d=\"M${cx - 3.2} ${knotTop} L${cx + 3.2} ${knotTop} L${cx + 2.4} ${knotBot} L${cx - 2.4} ${knotBot} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.5\" />`,\n // Blade — narrower at top, widens, then pointed tip at bottom\n `<path d=\"M${cx - 2.4} ${knotBot} L${cx + 2.4} ${knotBot} L${cx + 3.4} ${cy + 6} L${cx + 2.8} ${cy + 12} L${cx} ${cy + 15} L${cx - 2.8} ${cy + 12} L${cx - 3.4} ${cy + 6} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.5\" />`,\n // Subtle highlight stripe down the blade\n `<path d=\"M${cx} ${knotBot + 0.5} L${cx} ${cy + 13.5}\" stroke=\"${ink}\" stroke-width=\"0.35\" opacity=\"0.35\" />`,\n ].join('');\n }\n }\n}\n","export * from './palette.js';\nexport * from './body.js';\nexport * from './eyes.js';\nexport * from './mouth.js';\nexport * from './antenna.js';\nexport * from './accessory.js';\nexport * from './background.js';\nexport * from './topper.js';\nexport * from './outfit.js';\nexport * from './anchor.js';\n\nimport type {\n AccessoryId,\n AntennaStyleId,\n BackgroundId,\n BodyShapeId,\n EyeStyleId,\n MouthStyleId,\n OutfitId,\n TopperId,\n} from '../types.js';\n\nexport const BODY_IDS: readonly BodyShapeId[] = [\n 'orb', 'tall', 'squat', 'pear', 'pebble',\n 'dumpling', 'taro', 'wisp',\n // NOTE: 'squircle' is intentionally NOT in the base pool — pack-only body so\n // existing seeds keep their original picks (no determinism shift). Packs can\n // opt-in via `picks.body: ['squircle']`.\n];\nexport const EYE_IDS: readonly EyeStyleId[] = [\n 'round', 'wide', 'squint', 'wink', 'sleepy', 'star',\n 'heart', 'oval', 'dot', 'cross',\n];\nexport const MOUTH_IDS: readonly MouthStyleId[] = [\n 'smile', 'grin', 'open', 'flat', 'smirk', 'awe',\n 'tongue', 'tooth', 'wave', 'dot',\n];\nexport const ANTENNA_IDS: readonly AntennaStyleId[] = ['none', 'classic', 'curl', 'double', 'spike'];\nexport const ACCESSORY_IDS: readonly AccessoryId[] = [\n 'none', 'blush', 'freckles', 'sparkle',\n 'glasses', 'eyepatch', 'mole',\n];\nexport const BACKGROUND_IDS: readonly BackgroundId[] = ['none', 'solid', 'ring'];\nexport const TOPPER_IDS: readonly TopperId[] = [\n // 'none' weighted ~2× so plain-headed avatars stay common\n 'none', 'none', 'ears', 'roundEars', 'horn', 'horns', 'tuft', 'cap', 'leaf',\n 'headband', 'halo', 'crown', 'antlers',\n];\nexport const OUTFIT_IDS: readonly OutfitId[] = [\n // 'none' weighted heavy — most avatars stay plain-chested\n 'none', 'none', 'none', 'collar', 'scarf', 'bowtie', 'sunflower', 'necklace', 'tie',\n];\n","import type { Pack } from './types.js';\nimport type { Palette } from '../types.js';\n\n/**\n * Office pack — corporate ID-badge aesthetic.\n *\n * Visual rules:\n * - FLAT render (no radial gradient, no sheen, no ground shadow)\n * - Pure WHITE plate background — replaces seeded background entirely\n * - Squircle body only (rounded square, ID-card silhouette)\n * - Muted dusty palettes — desaturated corporate tones (no playful brights)\n * - Necktie outfit always — corporate signature\n * - Conservative face: neutral mouth, simple eyes, no antenna\n * - Exclusive palette pool — seeded picks never leak into off-theme base colors\n */\nconst palettes: Palette[] = [\n // Near-grayscale with cool blue undertone\n { id: 'office:graphite', bodyFrom: '#989BA2', bodyTo: '#696D72', accent: '#FFFFFF', ink: '#1A1C1F', blush: '#A09D99' },\n // Warm stone — barely tinted neutral\n { id: 'office:stone', bodyFrom: '#A5A29D', bodyTo: '#74726F', accent: '#FFFFFF', ink: '#1C1B19', blush: '#A8A5A0' },\n // Muted sage — barely-green grey\n { id: 'office:sage', bodyFrom: '#9EA299', bodyTo: '#6F726B', accent: '#FFFFFF', ink: '#1B1D19', blush: '#A3A099' },\n // Taupe — desaturated warm grey\n { id: 'office:taupe', bodyFrom: '#ACA098', bodyTo: '#78716C', accent: '#FFFFFF', ink: '#1E1B18', blush: '#AFA59C' },\n // Cool slate — neutral grey with hint of blue\n { id: 'office:slate', bodyFrom: '#9DA2AA', bodyTo: '#6C7077', accent: '#FFFFFF', ink: '#1A1C20', blush: '#A0A2A6' },\n];\n\nexport const officePack: Pack = {\n id: 'office',\n name: 'Office',\n description: 'Corporate ID-badge. Flat, muted, square silhouette. Mix of professional outfits + hairstyles.',\n emoji: '💼',\n palettes,\n paletteExclusive: true,\n flat: true,\n bgColor: '#FFFFFF',\n featureStroke: 1.35,\n picks: {\n body: ['squircle'],\n eyes: ['dot', 'sleepy', 'squint'],\n mouth: ['flat', 'dot'],\n antenna: ['none'],\n // Gender + style variety comes from accessory + outfit mix, NOT hair toppers\n // (hair rendered as solid silhouettes reads as helmets at small sizes).\n accessory: ['none', 'glasses', 'mole', 'freckles', 'earring', 'earring'],\n topper: ['none'],\n background: ['solid'],\n // Outfit mix — tie reads masc, necklace/bowtie/collar neutral-or-femme. No scarf (too bulky).\n outfit: ['tie', 'necklace', 'collar', 'bowtie'],\n },\n styleHints: {\n masc: {\n outfit: ['tie', 'bowtie'],\n accessory: ['none', 'glasses', 'mole', 'freckles'],\n },\n femme: {\n outfit: ['necklace'],\n accessory: ['earring', 'glasses', 'mole'],\n },\n neutral: {\n outfit: ['collar', 'bowtie', 'necklace'],\n accessory: ['none', 'glasses', 'freckles'],\n },\n },\n};\n","import type { Pack } from './types.js';\nimport type { Palette } from '../types.js';\n\n/**\n * Office Bright — vivid sibling of the muted Office pack.\n *\n * Same structure as `office` (flat squircle, pure white plate, ID-photo\n * composition, necktie/necklace outfit pool, bolder feature strokes) — only\n * the palettes differ. Saturated brand-style colors for teams that want their\n * avatars to POP off a dashboard.\n *\n * Use cases: marketing tools, design SaaS, product team pages where playful\n * energy still belongs (vs muted Office for finance/legal/enterprise).\n */\nconst palettes: Palette[] = [\n // Cobalt — vibrant deep blue\n { id: 'office-bright:cobalt', bodyFrom: '#4F8DFF', bodyTo: '#1E40AF', accent: '#FFFFFF', ink: '#0A1638', blush: '#7BA7FF' },\n // Emerald — vivid green\n { id: 'office-bright:emerald', bodyFrom: '#3CCB85', bodyTo: '#047857', accent: '#FFFFFF', ink: '#062418', blush: '#76DAA8' },\n // Fuchsia — hot magenta-pink\n { id: 'office-bright:fuchsia', bodyFrom: '#F0529C', bodyTo: '#BE185D', accent: '#FFFFFF', ink: '#3A0820', blush: '#F58FBC' },\n // Amber — vivid orange-yellow\n { id: 'office-bright:amber', bodyFrom: '#FFB347', bodyTo: '#C2700B', accent: '#FFFFFF', ink: '#3B1F03', blush: '#FFC97A' },\n // Violet — saturated purple\n { id: 'office-bright:violet', bodyFrom: '#9F7AEA', bodyTo: '#6D28D9', accent: '#FFFFFF', ink: '#1A0A3A', blush: '#BFA0F0' },\n];\n\nexport const officeBrightPack: Pack = {\n id: 'office-bright',\n name: 'Office Bright',\n description: 'Vivid corporate variant of Office. Saturated brand-style palettes, same flat ID-badge composition.',\n emoji: '🎨',\n palettes,\n paletteExclusive: true,\n flat: true,\n bgColor: '#FFFFFF',\n featureStroke: 1.35,\n picks: {\n body: ['squircle'],\n eyes: ['dot', 'sleepy', 'squint'],\n mouth: ['flat', 'dot'],\n antenna: ['none'],\n accessory: ['none', 'glasses', 'mole', 'freckles', 'earring', 'earring'],\n topper: ['none'],\n background: ['solid'],\n outfit: ['tie', 'necklace', 'collar', 'bowtie'],\n },\n styleHints: {\n masc: {\n outfit: ['tie', 'bowtie'],\n accessory: ['none', 'glasses', 'mole', 'freckles'],\n },\n femme: {\n outfit: ['necklace'],\n accessory: ['earring', 'glasses', 'mole'],\n },\n neutral: {\n outfit: ['collar', 'bowtie', 'necklace'],\n accessory: ['none', 'glasses', 'freckles'],\n },\n },\n};\n","import type { Pack } from './types.js';\nimport type { Palette } from '../types.js';\n\n/**\n * Halloween pack — full themed treatment.\n *\n * Visual rules (Office method, Halloween content):\n * - Pack-only bodies: pumpkin, ghost, skullHead\n * - Pack-only mouths: jagged (carved-pumpkin grin), fangs\n * - Pack-only toppers: witchHat, pumpkinStem, ghostSheet\n * - Flat render — no 3D gradient, editorial illustration look\n * - Dark night-sky plate bg — replaces seeded ring/solid\n * - Bolder feature strokes (1.4× for graphic impact)\n * - Palette exclusive — no off-theme leak\n *\n * Style hints:\n * - classic → pumpkin body + triangle/dot eyes + jagged mouth + stem topper\n * - creepy → skullHead body + cross/dot eyes + fangs mouth + horns/antlers\n * - cute → ghost body + dot/sleepy eyes + dot mouth + sheet/none topper\n */\nconst palettes: Palette[] = [\n // Vivid pumpkin orange — high saturation against dark plate\n { id: 'halloween:pumpkin', bodyFrom: '#FF8C2A', bodyTo: '#D85A00', accent: '#FFE9C4', ink: '#1A0700', blush: '#FFA76A' },\n // Electric witch purple\n { id: 'halloween:witch', bodyFrom: '#B266FF', bodyTo: '#6A1FB8', accent: '#F0D9FF', ink: '#0E031F', blush: '#D6A0FF' },\n // Acid slime — radioactive Halloween green\n { id: 'halloween:slime', bodyFrom: '#B3F23A', bodyTo: '#5E9F00', accent: '#E8FFB8', ink: '#091300', blush: '#D8FF7C' },\n // Blood crimson — deep saturated red\n { id: 'halloween:blood', bodyFrom: '#E83248', bodyTo: '#8E0014', accent: '#FFD6DA', ink: '#1F0004', blush: '#FF8A98' },\n // Bone — pale warm white, ghost-like\n { id: 'halloween:bone', bodyFrom: '#F5EEDB', bodyTo: '#C8B89A', accent: '#FFFEF5', ink: '#1A1612', blush: '#E8D9B8' },\n];\n\nexport const halloweenPack: Pack = {\n id: 'halloween',\n name: 'Halloween',\n description: 'Spooky themed pack. Pumpkin/ghost/skull bodies, jagged grins, witch hats, dark night plate.',\n emoji: '🎃',\n palettes,\n paletteExclusive: true,\n flat: true,\n bgColor: '#0E0A1A', // deep night-purple\n featureStroke: 1.4,\n picks: {\n body: ['pumpkin', 'ghost', 'skullHead'],\n eyes: ['cross', 'dot', 'sleepy', 'wide'],\n mouth: ['jagged', 'fangs', 'flat', 'dot'],\n antenna: ['none'],\n accessory: ['none', 'sparkle', 'eyepatch', 'mole'],\n topper: ['none', 'witchHat', 'pumpkinStem', 'ghostSheet', 'horns', 'antlers'],\n background: ['solid'],\n outfit: ['none', 'collar', 'scarf'],\n },\n styleHints: {\n // 'masc' → creepy / skeletal vibe\n masc: {\n outfit: ['none', 'collar'],\n accessory: ['none', 'eyepatch'],\n topper: ['horns', 'antlers', 'witchHat'],\n },\n // 'femme' → witchy / sparkly vibe\n femme: {\n outfit: ['none', 'scarf'],\n accessory: ['sparkle', 'mole'],\n topper: ['witchHat', 'ghostSheet', 'pumpkinStem'],\n },\n // 'neutral' → balanced classic Halloween — pumpkin or none topper\n neutral: {\n outfit: ['none'],\n accessory: ['none', 'sparkle'],\n topper: ['none', 'witchHat', 'pumpkinStem'],\n },\n },\n};\n","import type { Pack } from './types.js';\nimport type { Palette } from '../types.js';\n\n/**\n * Pastel pack — kawaii / cozy wellness companion aesthetic.\n *\n * Reference: Finch, Me+, Alan Mind. Round chubby bodies, big round eyes\n * with white glints, tiny mouths, blushy cheeks, soft pastel plate\n * background. Reads as a digital plush — friendly, calm, expressive.\n *\n * Visual rules (Office method, kawaii content):\n * - Flat render — no 3D radial gradient; clean illustration finish\n * - Soft cream plate bg (#FBF6F0) — warm neutral that lifts every palette\n * - Bolder featureStroke 1.3 — face features read as bold doodled lines\n * - paletteExclusive — base palettes can't sneak in\n * - Bodies stay round/chubby (orb / dumpling / pebble)\n * - Always blushy cheeks — accessory weighted toward blush\n *\n * Style hints:\n * - masc → softer kawaii (sleepy/dot eyes, no ears/halo)\n * - femme → full kawaii (heart/star eyes, ears+halo, blush always)\n * - neutral → balanced cute\n */\nconst palettes: Palette[] = [\n // Cotton candy — soft pink, the most kawaii signal\n { id: 'pastel:cotton-candy', bodyFrom: '#FFB4D4', bodyTo: '#FF7AAB', accent: '#FFF0F6', ink: '#5E1C40', blush: '#FFC6DC' },\n // Butter — warm pastel yellow\n { id: 'pastel:butter', bodyFrom: '#FFE07F', bodyTo: '#E6B12E', accent: '#FFFBE6', ink: '#5C4810', blush: '#FFE5A0' },\n // Mint cream — soft green\n { id: 'pastel:mint-cream', bodyFrom: '#A8E9C8', bodyTo: '#5BC499', accent: '#EFFEF5', ink: '#194433', blush: '#C2EED4' },\n // Lavender — gentle purple\n { id: 'pastel:lavender', bodyFrom: '#C8B5F0', bodyTo: '#9275D4', accent: '#F6F0FE', ink: '#321F58', blush: '#D8C6F0' },\n // Peach bloom — warm coral peach\n { id: 'pastel:peach-bloom', bodyFrom: '#FFC1A0', bodyTo: '#F08F6A', accent: '#FFF1E8', ink: '#6E2F12', blush: '#FFC6AC' },\n // Sky drop — pastel baby blue\n { id: 'pastel:sky-drop', bodyFrom: '#A8D9F5', bodyTo: '#6BB1E0', accent: '#EFF8FE', ink: '#15324A', blush: '#BCDDF0' },\n];\n\nexport const pastelPack: Pack = {\n id: 'pastel',\n name: 'Pastel',\n description: 'Kawaii cozy companion. Round chubby bodies, big eyes, blushy cheeks, soft cream plate. Finch-like.',\n emoji: '🌸',\n palettes,\n paletteExclusive: true,\n flat: true,\n bgColor: '#FBF6F0', // warm cream plate\n featureStroke: 1.3,\n picks: {\n body: ['dumpling', 'orb', 'pebble'],\n // Big expressive eyes — wide/round read as kawaii, sleepy/wink soften it.\n // Drop oval (too anime) + cross (too aggressive) for cohesion.\n eyes: ['round', 'wide', 'sleepy', 'wink', 'heart', 'star'],\n // Tiny mouths — smile/dot/tongue. No grin/awe (too loud).\n mouth: ['smile', 'dot', 'tongue', 'smirk'],\n antenna: ['none', 'classic', 'curl'],\n // Blush weighted heavy — every pastel avatar gets blushy by default\n accessory: ['blush', 'blush', 'blush', 'freckles', 'sparkle', 'none'],\n // Round ears / headband / halo / tuft give character variety\n topper: ['none', 'roundEars', 'ears', 'headband', 'halo', 'tuft'],\n background: ['solid'],\n // Outfit stays minimal — collar gives \"shirt\" peek\n outfit: ['none', 'collar', 'sunflower', 'necklace'],\n },\n styleHints: {\n // 'masc' → softer kawaii: minimal toppers, dot/sleepy eyes\n masc: {\n eyes: ['round', 'sleepy', 'wink'],\n accessory: ['blush', 'freckles', 'none'],\n topper: ['none', 'tuft', 'cap'],\n outfit: ['none', 'collar'],\n },\n // 'femme' → full kawaii: heart/star eyes, ears+halo, sparkles\n femme: {\n eyes: ['heart', 'star', 'wide'],\n accessory: ['blush', 'sparkle'],\n topper: ['roundEars', 'ears', 'halo', 'headband'],\n outfit: ['none', 'sunflower', 'necklace'],\n },\n // 'neutral' → balanced\n neutral: {\n eyes: ['round', 'wide', 'sleepy'],\n accessory: ['blush', 'freckles'],\n topper: ['none', 'roundEars', 'tuft'],\n outfit: ['none', 'collar'],\n },\n },\n};\n","import type { Pack } from './types.js';\nimport type { Palette } from '../types.js';\n\n/**\n * Neon pack — cyberpunk / esports / synthwave aesthetic.\n *\n * Reference: Stadium Live, Opal crystal glow, cyberpunk UI. Bright neon\n * bodies floating on a near-black plate with a soft outer glow halo —\n * reads as illuminated signage / gaming PFP.\n *\n * Visual rules:\n * - Flat render — no 3D gloss; clean illustration\n * - Near-black plate (#0A0A14) — body brightness pops against it\n * - Glow halo behind body — palette-tinted, soft Gaussian blur\n * - Bold featureStroke 1.5 — sharp face lines on the bright body\n * - paletteExclusive — keep base muted palettes out\n * - Sharp body silhouettes (tall, wisp, taro)\n * - Intense expressions (star, wide, cross, grin, tooth)\n * - Edgy toppers (horn, horns, antlers, spike antenna)\n *\n * Style hints:\n * - masc → aggressive (cross eyes, horns, spike antenna, eyepatch)\n * - femme → glamour (star eyes, sparkle, halo, tuft)\n * - neutral → balanced edgy\n */\nconst palettes: Palette[] = [\n // Hot pink — synthwave signature\n { id: 'neon:pink', bodyFrom: '#FF6FD8', bodyTo: '#D6168C', accent: '#FFE5F5', ink: '#1F0214', blush: '#FFB3DD' },\n // Acid lime — radioactive green\n { id: 'neon:lime', bodyFrom: '#D9FF3D', bodyTo: '#5FB800', accent: '#F5FFD0', ink: '#0F1500', blush: '#E5FF8A' },\n // Electric cyan — Tron blue\n { id: 'neon:cyan', bodyFrom: '#4DEFFF', bodyTo: '#0099C9', accent: '#D6FBFF', ink: '#00141C', blush: '#A5EEFA' },\n // Sodium — bright street-lamp yellow-orange\n { id: 'neon:sodium', bodyFrom: '#FFEC4D', bodyTo: '#E59700', accent: '#FFFADB', ink: '#221400', blush: '#FFE082' },\n // Magenta violet — saturated purple\n { id: 'neon:violet', bodyFrom: '#C66DFF', bodyTo: '#6B14D6', accent: '#EFDDFF', ink: '#0F0024', blush: '#D8B0FF' },\n // Plasma orange-red — fiery\n { id: 'neon:plasma', bodyFrom: '#FF6A3D', bodyTo: '#C42500', accent: '#FFD9CC', ink: '#1F0500', blush: '#FFA98A' },\n];\n\nexport const neonPack: Pack = {\n id: 'neon',\n name: 'Neon',\n description: 'Cyberpunk gaming PFP. Vivid neon bodies on a dark plate with soft glow halo. Sharp + intense.',\n emoji: '⚡',\n palettes,\n paletteExclusive: true,\n flat: true,\n bgColor: '#0A0A14', // deep night plate\n featureStroke: 1.5,\n glow: true,\n picks: {\n body: ['tall', 'wisp', 'taro'],\n eyes: ['star', 'wide', 'cross', 'dot'],\n mouth: ['grin', 'awe', 'tooth', 'smirk'],\n antenna: ['spike', 'double', 'none'],\n accessory: ['sparkle', 'glasses', 'eyepatch', 'none'],\n topper: ['none', 'antlers', 'horn', 'horns', 'tuft', 'cap'],\n background: ['solid'],\n outfit: ['none', 'scarf', 'necklace'],\n },\n styleHints: {\n // 'masc' → aggressive: cross eyes, horns, spike antenna, eyepatch\n masc: {\n accessory: ['eyepatch', 'glasses', 'none'],\n topper: ['horns', 'horn', 'antlers'],\n outfit: ['none'],\n },\n // 'femme' → glamour: sparkle, halo, soft tuft\n femme: {\n accessory: ['sparkle', 'glasses'],\n topper: ['tuft', 'halo'],\n outfit: ['necklace', 'scarf', 'none'],\n },\n // 'neutral' → balanced edgy\n neutral: {\n accessory: ['glasses', 'sparkle', 'none'],\n topper: ['none', 'cap', 'tuft'],\n outfit: ['none'],\n },\n },\n};\n","import type { Pack } from './types.js';\nimport type { Palette } from '../types.js';\n\n/**\n * Mono pack — editorial / minimalist / Twitter-PFP aesthetic.\n *\n * Reference: Timepage silhouette, Character AI dark, IFTTT minimal,\n * Mindvalley. Strip away decoration: a clean grayscale orb on a warm\n * near-white plate, with the lightest possible face. Reads as editorial\n * design system / serious portfolio / \"designer Twitter\" avatar.\n *\n * Visual rules:\n * - Flat render (no 3D gloss)\n * - Warm near-white plate (#FAFAF8) for soft editorial feel\n * - THIN featureStroke (0.85) — delicate face lines, not bold\n * - paletteExclusive — keep colored base palettes out\n * - Single body shape (orb) — pure silhouette\n * - No antenna / topper / accessory by default — minimal\n * - Dot eyes only, flat/dot mouth — the lightest face possible\n *\n * Style hints:\n * - masc → bare (just dots, no decoration)\n * - femme → mole or freckles (one subtle accent)\n * - neutral → glasses option\n */\nconst palettes: Palette[] = [\n // Obsidian — near-black body, WHITE face features for contrast\n { id: 'mono:obsidian', bodyFrom: '#2A2A2A', bodyTo: '#0A0A0A', accent: '#FAFAFA', ink: '#F2F2F2', blush: '#5A5A5A' },\n // Graphite — dark warm grey body, light face\n { id: 'mono:graphite', bodyFrom: '#4A4A4A', bodyTo: '#222222', accent: '#F4F4F4', ink: '#EBEBEB', blush: '#7A7A7A' },\n // Slate — mid-grey body, dark face (good contrast either way; going dark for editorial)\n { id: 'mono:slate', bodyFrom: '#8E8E8E', bodyTo: '#5A5A5A', accent: '#F8F8F8', ink: '#0A0A0A', blush: '#A8A8A8' },\n // Silver — mid-light grey, dark face\n { id: 'mono:silver', bodyFrom: '#B8B8B8', bodyTo: '#888888', accent: '#FCFCFC', ink: '#1A1A1A', blush: '#D0D0D0' },\n // Fog — palest grey, dark face\n { id: 'mono:fog', bodyFrom: '#E0E0E0', bodyTo: '#B0B0B0', accent: '#FFFFFF', ink: '#2A2A2A', blush: '#EDEDED' },\n // Ash — warm sand-grey, dark face with brown hint\n { id: 'mono:ash', bodyFrom: '#A39A8E', bodyTo: '#6A6055', accent: '#F8F4EF', ink: '#1A1612', blush: '#B8AFA5' },\n];\n\nexport const monoPack: Pack = {\n id: 'mono',\n name: 'Mono',\n description: 'Editorial minimal. Clean grayscale silhouette on warm white plate, thin lines, no decoration.',\n emoji: '🖤',\n palettes,\n paletteExclusive: true,\n flat: true,\n bgColor: '#FAFAF8', // warm near-white plate\n featureStroke: 1.15, // subtle but visible (vs Office 1.35, Neon 1.5)\n picks: {\n body: ['squircle'],\n eyes: ['dot'],\n mouth: ['flat', 'dot'],\n antenna: ['none'],\n accessory: ['none', 'none', 'mole', 'glasses', 'freckles'],\n topper: ['none'],\n background: ['solid'],\n outfit: ['none'],\n },\n styleHints: {\n // 'masc' → bare silhouette, nothing\n masc: {\n accessory: ['none'],\n outfit: ['none'],\n topper: ['none'],\n },\n // 'femme' → one subtle accent (mole or freckles)\n femme: {\n accessory: ['mole', 'freckles'],\n outfit: ['none'],\n topper: ['none'],\n },\n // 'neutral' → glasses option\n neutral: {\n accessory: ['none', 'glasses'],\n outfit: ['none'],\n topper: ['none'],\n },\n },\n};\n","import type { Pack } from './types.js';\nimport type { Palette } from '../types.js';\n\n/**\n * Earth pack — wellness / meditation / nature companion aesthetic.\n *\n * Reference: Headspace (warm orange blob, sleepy eyes), Calm (warm cream\n * gradients), Open, Alan Mind, Ten Percent Happier. Soft round bodies in\n * earthy tones, sleepy meditative faces, leaf/halo toppers, warm cream\n * plate. Reads as calm digital companion, not corporate or playful.\n *\n * Visual rules:\n * - Flat render — no 3D gloss\n * - Warm cream plate (#FBF6EE) — neutral that lifts earth tones\n * - Moderate featureStroke 1.2 — visible but soft\n * - paletteExclusive — base palettes can't intrude\n * - Round soft bodies (orb, dumpling, pebble)\n * - Sleepy/dot eyes — meditative, eyes-closed default\n * - Smile/flat/dot mouths — calm, no loud expressions\n * - Leaf, halo, headband toppers — organic + zen\n * - Blush weighted heavy — warm health glow\n *\n * Style hints:\n * - masc → minimal earth: dot eyes, no topper, no accessory\n * - femme → wellness teacher: sleepy + leaf/halo + blush + sparkle\n * - neutral → balanced calm\n */\nconst palettes: Palette[] = [\n // Sage — calm soft green\n { id: 'earth:sage', bodyFrom: '#A8C49A', bodyTo: '#6D8E60', accent: '#F2F7EA', ink: '#1F2E18', blush: '#C8D7B4' },\n // Clay — terracotta warmth\n { id: 'earth:clay', bodyFrom: '#D49072', bodyTo: '#9C4F2E', accent: '#FBEBDD', ink: '#3D1A0B', blush: '#E5BCA5' },\n // Sand — warm beige\n { id: 'earth:sand', bodyFrom: '#E1CC9F', bodyTo: '#A88B5A', accent: '#FFF5E0', ink: '#4A3818', blush: '#EBD8B0' },\n // Moss — deeper forest green\n { id: 'earth:moss', bodyFrom: '#82A570', bodyTo: '#3F6038', accent: '#EAF4DC', ink: '#0D1F08', blush: '#B9D2A1' },\n // Terracotta — fiery clay, more saturated\n { id: 'earth:terracotta', bodyFrom: '#D87555', bodyTo: '#A53F22', accent: '#FFE5D8', ink: '#380F02', blush: '#EBA188' },\n // Mushroom — warm dusty mauve-brown\n { id: 'earth:mushroom', bodyFrom: '#B59B8A', bodyTo: '#7D6353', accent: '#F4ECE3', ink: '#2C1C13', blush: '#C6B0A0' },\n];\n\nexport const earthPack: Pack = {\n id: 'earth',\n name: 'Earth',\n description: 'Wellness companion. Warm earthy palettes, soft round body, sleepy meditative face, leaf + halo toppers.',\n emoji: '🌿',\n palettes,\n paletteExclusive: true,\n flat: true,\n bgColor: '#FBF6EE', // warm cream plate\n featureStroke: 1.2,\n picks: {\n body: ['orb', 'dumpling', 'pebble'],\n eyes: ['sleepy', 'sleepy', 'dot'],\n mouth: ['smile', 'dot', 'flat'],\n antenna: ['none'],\n accessory: ['blush', 'blush', 'freckles', 'mole', 'sparkle', 'none'],\n topper: ['none', 'leaf', 'halo', 'headband', 'tuft'],\n background: ['solid'],\n outfit: ['none', 'collar', 'scarf', 'necklace'],\n },\n styleHints: {\n // 'masc' → minimal earth: dot eyes, no topper, no accessory\n masc: {\n accessory: ['none', 'freckles', 'mole'],\n topper: ['none', 'tuft'],\n outfit: ['none', 'collar'],\n },\n // 'femme' → wellness teacher: sleepy + leaf/halo + blush + sparkle\n femme: {\n accessory: ['blush', 'sparkle'],\n topper: ['leaf', 'halo', 'headband'],\n outfit: ['none', 'scarf', 'necklace'],\n },\n // 'neutral' → balanced calm\n neutral: {\n accessory: ['blush', 'freckles'],\n topper: ['none', 'leaf', 'tuft'],\n outfit: ['none', 'collar'],\n },\n },\n};\n","/**\n * Built-in pack registry.\n *\n * Each pack is its own file so future SVG part data + palette tweaks can be\n * authored in isolation. Adding a new pack = drop a file here + import +\n * export it from this module.\n *\n * Packs ship empty for Day 1 of the pack infrastructure work — palettes +\n * parts are added in follow-up commits. The registry exists so the wiring\n * (selectAvatar, plugin tabs, license gating) can be tested end-to-end\n * before any premium art lands.\n */\n\nimport type { Pack, PackRegistry } from './types.js';\nimport { officePack } from './office.js';\nimport { officeBrightPack } from './office-bright.js';\nimport { halloweenPack } from './halloween.js';\nimport { pastelPack } from './pastel.js';\nimport { neonPack } from './neon.js';\nimport { monoPack } from './mono.js';\nimport { earthPack } from './earth.js';\n\nexport type { Pack, PackRegistry } from './types.js';\n\nexport const BUILT_IN_PACKS: Pack[] = [\n officePack,\n officeBrightPack,\n halloweenPack,\n pastelPack,\n neonPack,\n monoPack,\n earthPack,\n];\n\nexport const PACK_REGISTRY: PackRegistry = Object.fromEntries(\n BUILT_IN_PACKS.map((p) => [p.id, p]),\n);\n\n/** Resolve a list of pack ids to Pack objects, skipping unknown ids. */\nexport function resolvePacks(ids: readonly string[] | undefined): Pack[] {\n if (!ids || ids.length === 0) return [];\n const seen = new Set<string>();\n const result: Pack[] = [];\n for (const id of ids) {\n if (seen.has(id)) continue;\n const pack = PACK_REGISTRY[id];\n if (pack) {\n seen.add(id);\n result.push(pack);\n }\n }\n return result;\n}\n","import { createRng } from './prng.js';\nimport {\n ACCESSORY_IDS,\n ANTENNA_IDS,\n BACKGROUND_IDS,\n BODY_IDS,\n EYE_IDS,\n MOUTH_IDS,\n PALETTES,\n PALETTE_BY_ID,\n TOPPER_IDS,\n} from './parts/index.js';\nimport { resolvePacks } from './packs/index.js';\nimport type { Pack, PackPicks, StylePartSubset } from './packs/types.js';\nimport type {\n AvatarOptions,\n AvatarSpec,\n BackgroundId,\n EyeStyleId,\n MoodId,\n MouthStyleId,\n OutfitId,\n Palette,\n StyleHint,\n} from './types.js';\n\n/**\n * Mood → curated eye + mouth pair. When `AvatarOptions.mood` is set, these\n * override seed-derived picks (bypassing pack constraints) to give the same\n * seed multiple expressions while keeping body/palette/topper/etc identical.\n */\nconst MOOD_EYES: Record<Exclude<MoodId, 'neutral'>, EyeStyleId> = {\n happy: 'wide',\n serious: 'squint',\n sleepy: 'sleepy',\n wink: 'wink',\n};\nconst MOOD_MOUTH: Record<Exclude<MoodId, 'neutral'>, MouthStyleId> = {\n happy: 'smile',\n serious: 'flat',\n sleepy: 'dot',\n wink: 'smirk',\n};\n\n/**\n * Apply a style-hint subset filter to a pool. Looks across enabled packs for\n * the first declared subset matching `hint` + `partKey`. Intersection avoids\n * empty results (falls back to original pool if no surviving candidates).\n *\n * Determinism preserved: same seed + same hint = same downstream pick.\n */\nfunction applyStyleHint<T extends string>(\n pool: readonly T[],\n packs: readonly Pack[],\n hint: StyleHint,\n partKey: keyof StylePartSubset,\n): readonly T[] {\n for (const pack of packs) {\n const subset = pack.styleHints?.[hint]?.[partKey] as readonly T[] | undefined;\n if (subset && subset.length > 0) {\n const narrowed = pool.filter((id) => subset.includes(id));\n if (narrowed.length > 0) return narrowed;\n }\n }\n return pool;\n}\n\n/**\n * Resolve the selection pool for a single part across enabled packs.\n *\n * - No pack has a pick → return base pool unchanged\n * - One or more packs constrain → take the INTERSECTION (must satisfy all)\n * - Intersection empty → fall back to the UNION so we never blank-render\n *\n * Pack constraints are AUTHORITATIVE — they can introduce ids that aren't in\n * the base pool (e.g. pack-only body shapes like Office's 'squircle'). The\n * type system enforces that ids are still valid renderable variants.\n */\nfunction resolvePartPool<T extends string>(\n basePool: readonly T[],\n packs: readonly Pack[],\n partKey: keyof PackPicks,\n): readonly T[] {\n const constraints = packs\n .map((p) => p.picks?.[partKey] as readonly T[] | undefined)\n .filter((list): list is readonly T[] => Array.isArray(list) && list.length > 0);\n if (constraints.length === 0) return basePool;\n // Intersection across all pack constraints. Don't filter against basePool —\n // packs can legitimately introduce new variants.\n let pool: readonly T[] = constraints[0]!;\n for (let i = 1; i < constraints.length; i++) {\n pool = pool.filter((id) => constraints[i]!.includes(id));\n }\n if (pool.length > 0) return pool;\n // Empty intersection → union fallback so we never blank-render.\n const seen = new Set<T>();\n const union: T[] = [];\n for (const list of constraints) {\n for (const id of list) {\n if (!seen.has(id)) { seen.add(id); union.push(id); }\n }\n }\n return union.length > 0 ? union : basePool;\n}\n\n/**\n * Seed → AvatarSpec.\n *\n * The PRNG is drawn in a fixed order so that adding new parts later doesn't\n * shift existing seeds' selections. Append new picks at the end of this\n * function; never insert in the middle.\n */\nexport function selectAvatar(seed: string, options: AvatarOptions = {}): AvatarSpec {\n const rng = createRng(seed);\n\n // Resolve enabled packs (silently skips unknown ids).\n const enabledPacks = resolvePacks(options.packs);\n\n // Build the palette pool: base palettes + any palettes contributed by\n // enabled packs. Stable ordering: base first, then packs in the order they\n // were requested. Same seed + same pack ids = same pick.\n const packPalettes: Palette[] = [];\n let exclusivePackPalettes: Palette[] | null = null;\n for (const pack of enabledPacks) {\n if (pack.palettes && pack.palettes.length > 0) {\n packPalettes.push(...pack.palettes);\n // Track palettes from exclusive packs separately — when any pack opts\n // into exclusivity we restrict the pool to only those packs' palettes.\n if (pack.paletteExclusive) {\n exclusivePackPalettes = exclusivePackPalettes ?? [];\n exclusivePackPalettes.push(...pack.palettes);\n }\n }\n }\n const palettePool: readonly Palette[] = exclusivePackPalettes\n ? exclusivePackPalettes\n : packPalettes.length > 0\n ? [...PALETTES, ...packPalettes]\n : PALETTES;\n\n // Palette priority: explicit palette object > paletteId lookup > seed-random\n // from the (possibly extended) pool.\n const paletteByIdLookup = options.paletteId\n ? PALETTE_BY_ID[options.paletteId] ??\n packPalettes.find((p) => p.id === options.paletteId)\n : undefined;\n const paletteOverride = options.palette ?? paletteByIdLookup;\n const palette = paletteOverride ?? rng.pick(palettePool);\n\n // Resolve per-part pools honoring pack picks (intersection of constraints).\n const bodyPool = resolvePartPool(BODY_IDS, enabledPacks, 'body');\n const eyesPool = resolvePartPool(EYE_IDS, enabledPacks, 'eyes');\n const mouthPool = resolvePartPool(MOUTH_IDS, enabledPacks, 'mouth');\n const antennaPool = resolvePartPool(ANTENNA_IDS, enabledPacks, 'antenna');\n let accessoryPool = resolvePartPool(ACCESSORY_IDS, enabledPacks, 'accessory');\n const backgroundPool = resolvePartPool(BACKGROUND_IDS, enabledPacks, 'background');\n let topperPool = resolvePartPool(TOPPER_IDS, enabledPacks, 'topper');\n\n // Style hint — narrow accessory + topper pools (outfit applied later) to\n // the subset declared by enabled packs for the requested style. Packs\n // without a declaration for that style ignore the hint.\n const styleHint = options.style;\n if (styleHint) {\n accessoryPool = applyStyleHint(accessoryPool, enabledPacks, styleHint, 'accessory');\n topperPool = applyStyleHint(topperPool, enabledPacks, styleHint, 'topper');\n }\n\n const body = rng.pick(bodyPool);\n const eyesPicked = rng.pick(eyesPool);\n const mouthPicked = rng.pick(mouthPool);\n const antenna = rng.pick(antennaPool);\n const accessory = rng.pick(accessoryPool);\n\n // Mood overlay — overrides seed-derived eyes + mouth with a curated pair.\n // Bypasses pack pick constraints by design: the mood IS the override.\n // Same seed + mood = byte-identical render across re-runs.\n const mood = options.mood;\n const eyes = mood && mood !== 'neutral' ? MOOD_EYES[mood] : eyesPicked;\n const mouth = mood && mood !== 'neutral' ? MOOD_MOUTH[mood] : mouthPicked;\n\n let background: BackgroundId;\n if (typeof options.background === 'string') {\n background = options.background;\n } else if (options.background && typeof options.background === 'object') {\n background = 'solid';\n } else {\n background = rng.pick(backgroundPool);\n }\n\n // Topper drawn last so existing seeds keep their other parts identical.\n const topperRaw = rng.pick(topperPool);\n // If antenna already mounts something on the apex, suppress topper to avoid\n // visual collision — keeps silhouettes legible.\n const topper = antenna !== 'none' && topperRaw !== 'none' && topperRaw !== 'leaf'\n ? 'none'\n : topperRaw;\n\n // Continuous tweaks — appended to the RNG stream so existing seeds keep the\n // selections above unchanged when these were introduced.\n const hueShift = Math.round(rng.range(-30, 30));\n const bodyScale = Number(rng.range(0.92, 1.08).toFixed(3));\n const eyeGapShift = Number(rng.range(-2, 2).toFixed(2));\n const mouthCurveScale = Number(rng.range(0.85, 1.15).toFixed(3));\n const antennaTilt = Math.round(rng.range(-8, 8));\n\n // Outfit: by default not drawn from seed (keeps base avatars plain-chested).\n // Packs can opt in by listing outfit picks — that signals the pack wants\n // every seed to wear that outfit family.\n const outfitConstraints = enabledPacks\n .map((p) => p.picks?.outfit)\n .filter((list): list is readonly OutfitId[] => Array.isArray(list) && list.length > 0);\n let outfit: OutfitId = 'none';\n if (outfitConstraints.length > 0) {\n // Intersect all pack outfit lists.\n let pool: readonly OutfitId[] = outfitConstraints[0]!;\n for (let i = 1; i < outfitConstraints.length; i++) {\n pool = pool.filter((id) => outfitConstraints[i]!.includes(id));\n }\n // Empty intersection → union fallback (avoid blank outfit drop).\n if (pool.length === 0) {\n const seen = new Set<OutfitId>();\n const union: OutfitId[] = [];\n for (const list of outfitConstraints) {\n for (const id of list) {\n if (!seen.has(id)) { seen.add(id); union.push(id); }\n }\n }\n pool = union;\n }\n // Narrow by style hint if requested + a pack declares it.\n if (styleHint) {\n pool = applyStyleHint(pool, enabledPacks, styleHint, 'outfit');\n }\n outfit = pool.length > 0 ? rng.pick(pool) : 'none';\n }\n\n // Style flags from enabled packs — last-write-wins for collisions.\n let flat: boolean | undefined;\n let bgColor: string | undefined;\n let featureStroke: number | undefined;\n let glow: boolean | undefined;\n for (const pack of enabledPacks) {\n if (pack.flat) flat = true;\n if (pack.bgColor) bgColor = pack.bgColor;\n if (pack.featureStroke) featureStroke = pack.featureStroke;\n if (pack.glow) glow = true;\n }\n\n return {\n seed, palette, body, eyes, mouth, antenna, accessory, background, topper,\n outfit,\n hueShift, bodyScale, eyeGapShift, mouthCurveScale, antennaTilt,\n ...(flat ? { flat: true } : {}),\n ...(bgColor ? { bgColor } : {}),\n ...(featureStroke ? { featureStroke } : {}),\n ...(glow ? { glow: true } : {}),\n };\n}\n","import type { AvatarSpec } from './types.js';\nimport { createRng } from './prng.js';\n\n/**\n * Emits a <style> block scoped via a per-avatar class wrapper. The renderer\n * wraps animated content in `<g class=\"n-<id>\">`; CSS rules below target\n * descendants of that class so multiple avatars in the same SVG document\n * (e.g. a /group call) don't share blink/float timing.\n *\n * Delays are seeded so a grid desyncs naturally.\n *\n * Respects prefers-reduced-motion: animations collapse to a single keyframe.\n */\nexport function renderAnimationStyle(spec: AvatarSpec, scopeClass: string): string {\n const rng = createRng(`anim:${spec.seed}`);\n const floatDelay = (rng.next() * 2).toFixed(2);\n const blinkDelay = (rng.next() * 5).toFixed(2);\n const pulseDelay = (rng.next() * 1.5).toFixed(2);\n const twinkleDelay = (rng.next() * 1.8).toFixed(2);\n const swayDelay = (rng.next() * 2.4).toFixed(2);\n\n return `<style>\n .${scopeClass} .body { animation: n-float 3.4s ease-in-out infinite; animation-delay: ${floatDelay}s; transform-origin: 50px 80px; transform-box: view-box; }\n .${scopeClass} .eyes { animation: n-blink 5.4s ease-in-out infinite; animation-delay: ${blinkDelay}s; transform-origin: 50px 52px; transform-box: view-box; }\n .${scopeClass} .antenna { animation: n-sway 3.6s ease-in-out infinite; animation-delay: ${swayDelay}s; transform-origin: 50% 100%; transform-box: fill-box; }\n .${scopeClass} .spark { animation: n-pulse 1.9s ease-in-out infinite; animation-delay: ${pulseDelay}s; transform-origin: center; transform-box: fill-box; }\n .${scopeClass} .sparkle { animation: n-twinkle 2.2s ease-in-out infinite; animation-delay: ${twinkleDelay}s; transform-origin: center; transform-box: fill-box; }\n @keyframes n-float {\n 0%, 100% { transform: translateY(0) rotate(0deg) scale(1, 1); }\n 25% { transform: translateY(-2px) rotate(-1.6deg) scale(1.025, 0.975); }\n 50% { transform: translateY(-4.5px) rotate(0deg) scale(0.985, 1.025); }\n 75% { transform: translateY(-2px) rotate(1.6deg) scale(1.025, 0.975); }\n }\n @keyframes n-blink {\n 0%, 85%, 91%, 100% { transform: scaleY(1); }\n 87%, 89%, 93%, 95% { transform: scaleY(0.06); }\n }\n @keyframes n-sway {\n 0%, 100% { transform: rotate(0deg); }\n 25% { transform: rotate(-5deg); }\n 75% { transform: rotate(5deg); }\n }\n @keyframes n-pulse {\n 0%, 100% { opacity: 0.55; transform: scale(1); }\n 50% { opacity: 1; transform: scale(1.32); }\n }\n @keyframes n-twinkle {\n 0%, 100% { opacity: 0.3; transform: rotate(0deg) scale(0.85); }\n 50% { opacity: 1; transform: rotate(180deg) scale(1.12); }\n }\n @media (prefers-reduced-motion: reduce) {\n .${scopeClass} .body, .${scopeClass} .eyes, .${scopeClass} .antenna, .${scopeClass} .spark, .${scopeClass} .sparkle { animation: none; }\n }\n </style>`;\n}\n","import {\n renderAccessory,\n renderAntenna,\n renderBackground,\n renderBody,\n renderBodyDefs,\n renderEyes,\n renderMouth,\n renderTopper,\n renderOutfit,\n} from './parts/index.js';\nimport { ANCHORS, type FaceAnchor } from './parts/anchor.js';\nimport { renderAnimationStyle } from './animate.js';\nimport type { AvatarOptions, AvatarSpec } from './types.js';\n\n/**\n * AvatarSpec → SVG string.\n *\n * Output is a self-contained <svg> element. Gradient + filter ids are\n * namespaced with a hash of the seed so multiple Navii avatars can coexist\n * on the same page without id collisions. When `options.animated` is true,\n * an inline <style> block is emitted with seeded delays so a grid desyncs\n * naturally.\n *\n * Continuous params (hueShift, bodyScale, eyeGapShift, mouthCurveScale,\n * antennaTilt) are applied here so each avatar reads as an individual,\n * not a stamped-out combination of discrete picks.\n *\n * For composing multiple avatars into one SVG (groups), use `renderAvatarInner`\n * which omits the outer <svg> wrapper.\n */\nexport function renderAvatar(spec: AvatarSpec, options: AvatarOptions = {}): string {\n const size = options.size ?? 96;\n const titleAttrs = options.title\n ? ` role=\"img\" aria-label=\"${escapeXml(options.title)}\"`\n : ' aria-hidden=\"true\"';\n\n return [\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\" width=\"${size}\" height=\"${size}\"${titleAttrs}>`,\n options.title ? `<title>${escapeXml(options.title)}</title>` : '',\n renderAvatarInner(spec, options),\n `</svg>`,\n ].join('');\n}\n\nexport function renderAvatarInner(spec: AvatarSpec, options: AvatarOptions = {}): string {\n const animated = options.animated === true;\n const id = stableId(spec.seed);\n const scopeClass = `n-${id}`;\n const gradId = `navii-grad-${id}`;\n const hueId = `navii-hue-${id}`;\n const bgOverride = typeof options.background === 'object' ? options.background.color : undefined;\n\n const baseAnchor = ANCHORS[spec.body];\n const anchor: FaceAnchor = {\n ...baseAnchor,\n eyeOffset: baseAnchor.eyeOffset + (spec.eyeGapShift ?? 0),\n };\n\n const strokeMul = spec.featureStroke ?? 1;\n const antennaSvg = renderAntenna(spec.antenna, anchor, spec.palette);\n const accessorySvg = renderAccessory(spec.accessory, spec.palette, anchor, { strokeMul });\n\n const flat = spec.flat === true;\n const glow = spec.glow === true;\n const glowId = `navii-glow-${id}`;\n const bodyMarkup = renderBody(spec.body, spec.palette, gradId, { flat });\n // Flat-mode bodies (e.g. full-bleed Office squircle) ignore the seeded\n // bodyScale so they don't clip out of the viewport or pull in from edges.\n const effectiveBodyScale = flat ? 1 : (spec.bodyScale ?? 1);\n const bodyTransform = transformBody(effectiveBodyScale, anchor);\n const bodyFilter = spec.hueShift && spec.hueShift !== 0 ? ` filter=\"url(#${hueId})\"` : '';\n const bodyWrapped = `<g${bodyTransform}${bodyFilter}><g class=\"body\">${bodyMarkup}</g></g>`;\n\n // Glow layer — duplicate body path, blurred + brightened, painted BEHIND the\n // sharp body. Creates the cyberpunk halo for Neon. Uses palette.bodyFrom as\n // the glow color so it picks up each palette's signature hue.\n const glowLayer = glow\n ? `<g${bodyTransform} filter=\"url(#${glowId})\" opacity=\"0.85\"><g class=\"body-glow\">${bodyMarkup.replace(/fill=\"url\\(#[^\"]+\\)\"/g, `fill=\"${spec.palette.bodyFrom}\"`)}</g></g>`\n : '';\n\n const antennaWrapped = antennaSvg\n ? `<g${transformAntenna(spec.antennaTilt ?? 0, anchor)}><g class=\"antenna\">${antennaSvg}</g></g>`\n : '';\n\n const tileBg = resolveTileBg(options.tileBg, spec.palette);\n const tileCircle = tileBg ? `<circle cx=\"50\" cy=\"50\" r=\"50\" fill=\"${tileBg}\" />` : '';\n\n const outfitSvg = renderOutfit(spec.outfit ?? 'none', anchor, spec.palette);\n\n // Pack-level opaque plate overrides the seeded background entirely. Used by\n // Office to force a pure-white ID-badge backdrop regardless of seed.\n const packPlate = spec.bgColor\n ? `<rect x=\"0\" y=\"0\" width=\"100\" height=\"100\" fill=\"${spec.bgColor}\" />`\n : '';\n const backgroundMarkup = spec.bgColor\n ? '' // pack plate replaces the seeded background\n : renderBackground(spec.background, spec.palette, bgOverride);\n\n const parts = [\n tileCircle,\n packPlate,\n backgroundMarkup,\n glowLayer,\n bodyWrapped,\n // outfit sits on the body but below the face, so face features stay readable\n outfitSvg,\n renderTopper(spec.topper, anchor, spec.palette),\n wrap('eyes', renderEyes(spec.eyes, spec.palette, anchor, { strokeMul })),\n renderMouth(spec.mouth, spec.palette, anchor, spec.mouthCurveScale ?? 1, { strokeMul }),\n antennaWrapped,\n accessorySvg && spec.accessory === 'sparkle'\n ? wrap('sparkle', accessorySvg)\n : accessorySvg,\n ].join('');\n\n const defs = [\n renderBodyDefs(spec.body, spec.palette, gradId, { flat }),\n spec.hueShift && spec.hueShift !== 0\n ? `<filter id=\"${hueId}\" color-interpolation-filters=\"sRGB\"><feColorMatrix type=\"hueRotate\" values=\"${spec.hueShift}\" /></filter>`\n : '',\n glow\n ? `<filter id=\"${glowId}\" x=\"-30%\" y=\"-30%\" width=\"160%\" height=\"160%\"><feGaussianBlur stdDeviation=\"4\" /></filter>`\n : '',\n ].join('');\n\n return [\n `<defs>${defs}</defs>`,\n animated ? renderAnimationStyle(spec, scopeClass) : '',\n animated ? `<g class=\"${scopeClass}\">${parts}</g>` : parts,\n ].join('');\n}\n\nfunction resolveTileBg(raw: string | undefined, palette: { accent: string; bodyFrom: string }): string | undefined {\n if (!raw) return undefined;\n if (raw === 'auto') return palette.accent;\n return raw;\n}\n\nfunction transformBody(scale: number, anchor: FaceAnchor): string {\n if (Math.abs(scale - 1) < 0.001) return '';\n // Scale around the body's ground point so the figure doesn't drift up/down.\n return ` transform=\"translate(${anchor.cx} ${anchor.groundY}) scale(${scale}) translate(${-anchor.cx} ${-anchor.groundY})\"`;\n}\n\nfunction transformAntenna(deg: number, anchor: FaceAnchor): string {\n if (deg === 0) return '';\n return ` transform=\"rotate(${deg} ${anchor.topperX} ${anchor.topperY + 2})\"`;\n}\n\nfunction wrap(cls: string, inner: string): string {\n if (!inner) return inner;\n return `<g class=\"${cls}\">${inner}</g>`;\n}\n\nfunction stableId(seed: string): string {\n let h = 5381;\n for (let i = 0; i < seed.length; i++) h = ((h << 5) + h + seed.charCodeAt(i)) | 0;\n return (h >>> 0).toString(36);\n}\n\nfunction escapeXml(s: string): string {\n return s\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n}\n","import { renderAvatarInner } from './render.js';\nimport { selectAvatar } from './select.js';\nimport type { AvatarOptions } from './types.js';\n\nexport interface GroupOptions extends AvatarOptions {\n /** Per-avatar size in px. Default 64. */\n size?: number;\n /** Fraction of size each tile overlaps the previous one. 0 = no overlap, 0.6 = heavy stack. Default 0.3. */\n overlap?: number;\n /** Max tiles to render. Extra seeds collapse into a \"+N\" counter tile. Default = all seeds. */\n max?: number;\n /** Background color for the \"+N\" counter tile. */\n counterFill?: string;\n /** Text color for the \"+N\" counter tile. */\n counterInk?: string;\n /** Optional ring around each tile (border). Default: white-ish for visual separation when overlapping. */\n ring?: string;\n /** Solid (or near-solid) fill behind each avatar inside the clip — prevents underlying avatars showing through gaps when tiles overlap. Default `#ffffff`. Use `'transparent'` to skip. */\n tileBg?: string;\n}\n\n/**\n * Renders N seeded avatars in a horizontal overlapping stack, with an optional\n * \"+N\" counter tile when `max` is exceeded.\n *\n * Each avatar is placed in its own 100x100 viewBox via nested <svg> so the\n * existing renderer is reused without changes. A circular clip per tile\n * crops to a disc — typical avatar UI.\n */\nexport function renderGroup(seeds: string[], options: GroupOptions = {}): string {\n if (!Array.isArray(seeds) || seeds.length === 0) {\n throw new Error('navii: renderGroup requires at least one seed');\n }\n const size = options.size ?? 64;\n const overlap = clamp(options.overlap ?? 0.3, 0, 0.7);\n const max = options.max ?? seeds.length;\n const ring = options.ring ?? '#ffffff';\n const tileBg = options.tileBg ?? '#ffffff';\n const counterFill = options.counterFill ?? '#E5E7EB';\n const counterInk = options.counterInk ?? '#374151';\n\n const visibleSeeds = seeds.slice(0, Math.max(0, max - (seeds.length > max ? 1 : 0)));\n const overflow = seeds.length - visibleSeeds.length;\n const tileCount = visibleSeeds.length + (overflow > 0 ? 1 : 0);\n\n const step = size * (1 - overlap);\n const totalWidth = tileCount > 0 ? step * (tileCount - 1) + size : 0;\n\n // Per-tile clip + ring share generic ids since each is scoped inside its own\n // nested <svg>, isolating ids per tile.\n const tiles = visibleSeeds.map((seed, i) => {\n const x = i * step;\n const spec = selectAvatar(seed, options);\n const bgCircle = tileBg !== 'transparent'\n ? `<circle cx=\"50\" cy=\"50\" r=\"50\" fill=\"${tileBg}\" />`\n : '';\n return `<svg x=\"${x}\" y=\"0\" width=\"${size}\" height=\"${size}\" viewBox=\"0 0 100 100\" overflow=\"visible\">\n <defs><clipPath id=\"navii-clip\"><circle cx=\"50\" cy=\"50\" r=\"50\" /></clipPath></defs>\n <g clip-path=\"url(#navii-clip)\">${bgCircle}${renderAvatarInner(spec, options)}</g>\n <circle cx=\"50\" cy=\"50\" r=\"49\" fill=\"none\" stroke=\"${ring}\" stroke-width=\"2\" />\n </svg>`;\n });\n\n if (overflow > 0) {\n const x = visibleSeeds.length * step;\n tiles.push(`<svg x=\"${x}\" y=\"0\" width=\"${size}\" height=\"${size}\" viewBox=\"0 0 100 100\" overflow=\"visible\">\n <circle cx=\"50\" cy=\"50\" r=\"50\" fill=\"${counterFill}\" />\n <text x=\"50\" y=\"50\" text-anchor=\"middle\" dominant-baseline=\"central\" font-family=\"-apple-system, system-ui, sans-serif\" font-weight=\"600\" font-size=\"34\" fill=\"${counterInk}\">+${overflow}</text>\n <circle cx=\"50\" cy=\"50\" r=\"49\" fill=\"none\" stroke=\"${ring}\" stroke-width=\"2\" />\n </svg>`);\n }\n\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${totalWidth} ${size}\" width=\"${totalWidth}\" height=\"${size}\" aria-hidden=\"true\">${tiles.join('')}</svg>`;\n}\n\nfunction clamp(n: number, lo: number, hi: number): number {\n return Math.max(lo, Math.min(hi, n));\n}\n","/**\n * Seed helper — composes the most stable identifier from a user-shaped\n * object into a single string for `createAvatar`.\n *\n * Priority: `id` → `email` → `name + createdAt` → `name` alone.\n *\n * The whole point: stop devs accidentally passing a display name. Names\n * collide; ids and emails don't. When only a name is available, composing\n * it with `createdAt` makes the result globally unique while remaining\n * stable across renders (assuming `createdAt` is set once at signup).\n */\n\nexport interface SeedFields {\n /** Stable primary key (database id, UUID, OAuth sub). Best choice. */\n id?: string | number | null | undefined;\n /** Email. Stable + unique. Good fallback when id isn't available client-side. */\n email?: string | null | undefined;\n /** Display name. Collision-prone — only acceptable composed with `createdAt`. */\n name?: string | null | undefined;\n /** Account creation time. Combined with `name` to bake uniqueness in at signup. */\n createdAt?: string | number | Date | null | undefined;\n}\n\n/**\n * Compose a stable seed string from the most unique field available.\n *\n * @example\n * ```ts\n * const s = seed({ id: user.id, email: user.email, name: user.name });\n * createAvatar(s);\n * ```\n *\n * @example If only a name exists, pass `createdAt` to avoid collisions:\n * ```ts\n * seed({ name: 'Alice', createdAt: user.createdAt });\n * // → \"Alice|1700000000000\"\n * ```\n *\n * @throws if no usable field is provided.\n */\nexport function seed(fields: SeedFields): string {\n if (fields.id !== null && fields.id !== undefined && String(fields.id).length > 0) {\n return String(fields.id);\n }\n if (fields.email && fields.email.length > 0) {\n return fields.email;\n }\n if (fields.name && fields.name.length > 0) {\n if (fields.createdAt !== null && fields.createdAt !== undefined) {\n const ts = fields.createdAt instanceof Date\n ? fields.createdAt.getTime()\n : typeof fields.createdAt === 'number'\n ? fields.createdAt\n : Date.parse(fields.createdAt as string);\n if (Number.isFinite(ts)) return `${fields.name}|${ts}`;\n return `${fields.name}|${fields.createdAt}`;\n }\n return fields.name;\n }\n throw new Error('navii: seed() requires at least one of { id, email, name }');\n}\n","import { PALETTES, PALETTE_BY_ID } from './parts/palette.js';\nimport { renderAvatar } from './render.js';\nimport type {\n AccessoryId,\n AntennaStyleId,\n AvatarOptions,\n AvatarSpec,\n BackgroundId,\n BodyShapeId,\n EyeStyleId,\n MouthStyleId,\n OutfitId,\n TopperId,\n} from './types.js';\n\n/**\n * Direct construction of an avatar from explicit part choices — no seed.\n *\n * Use when you need a SPECIFIC mascot rather than a deterministic one\n * derived from a user id. Common uses: brand mascots, logo marks, fixed\n * tests, designer curation, gallery hero shots.\n *\n * Any field left unspecified falls back to its first variant (mostly the\n * neutral / \"none\" option). Continuous params default to 0 / 1 (no tweak).\n */\nexport interface BuildSpec {\n palette?: string;\n body?: BodyShapeId;\n eyes?: EyeStyleId;\n mouth?: MouthStyleId;\n antenna?: AntennaStyleId;\n accessory?: AccessoryId;\n background?: BackgroundId;\n topper?: TopperId;\n outfit?: OutfitId;\n hueShift?: number;\n bodyScale?: number;\n eyeGapShift?: number;\n mouthCurveScale?: number;\n antennaTilt?: number;\n}\n\n/**\n * Build an SVG avatar from explicit part choices.\n *\n * @example\n * ```ts\n * const svg = build({\n * body: 'tall',\n * eyes: 'star',\n * mouth: 'grin',\n * palette: 'violet',\n * topper: 'crown',\n * }, { size: 192 });\n * ```\n *\n * Pass `AvatarOptions` (size, title, animated, tileBg) as the second arg —\n * same shape as `createAvatar`'s options.\n */\nexport function build(spec: BuildSpec = {}, options: AvatarOptions = {}): string {\n // `options.palette` (Palette object) wins over `spec.palette` (id). Lets\n // callers inject brand palettes or any runtime-built palette without\n // registering it in the global lookup. Falls back to spec.palette id, then\n // to PALETTES[0] for a sensible default.\n const palette =\n options.palette ??\n (spec.palette ? (PALETTE_BY_ID[spec.palette] ?? PALETTES[0]!) : PALETTES[0]!);\n\n const resolved: AvatarSpec = {\n seed: '__build__',\n palette,\n body: spec.body ?? 'orb',\n eyes: spec.eyes ?? 'round',\n mouth: spec.mouth ?? 'smile',\n antenna: spec.antenna ?? 'none',\n accessory: spec.accessory ?? 'none',\n background: spec.background ?? 'none',\n topper: spec.topper ?? 'none',\n outfit: spec.outfit ?? 'none',\n hueShift: spec.hueShift ?? 0,\n bodyScale: spec.bodyScale ?? 1,\n eyeGapShift: spec.eyeGapShift ?? 0,\n mouthCurveScale: spec.mouthCurveScale ?? 1,\n antennaTilt: spec.antennaTilt ?? 0,\n };\n\n return renderAvatar(resolved, options);\n}\n","export * from './types.js';\nexport { createRng, cyrb53 } from './prng.js';\nexport { selectAvatar } from './select.js';\nexport { renderAvatar, renderAvatarInner } from './render.js';\nexport { renderGroup, type GroupOptions } from './group.js';\nexport { seed, type SeedFields } from './seed.js';\nexport { build, type BuildSpec } from './build.js';\nexport {\n BUILT_IN_PACKS,\n PACK_REGISTRY,\n resolvePacks,\n type Pack,\n type PackRegistry,\n} from './packs/index.js';\n\nimport { selectAvatar } from './select.js';\nimport { renderAvatar } from './render.js';\nimport { renderGroup } from './group.js';\nimport { seed } from './seed.js';\nimport { build } from './build.js';\nimport type { AvatarOptions } from './types.js';\n\n/**\n * Render a deterministic mascot avatar from a seed.\n *\n * Same seed in → same SVG out, byte-identical, forever.\n *\n * @param seed Stable unique identifier per user. Recommended order: `user.id`\n * → UUID → `user.email`. **Avoid display names** — two users called \"Alice\"\n * would get the same avatar. **Never pass `Date.now()`** or any value that\n * changes between renders; the avatar would change every refresh.\n * See {@link seed} for a helper that picks the right field automatically.\n *\n * @param options.size Output size in px. Default 96. Range 16–1024.\n * @param options.paletteId Force a color family (e.g. `'mint'`).\n * @param options.background `'none' | 'solid' | 'ring'` or `{ color }`.\n * @param options.tileBg Opaque disc behind the avatar. Color or `'auto'`.\n * @param options.title Accessible label (sets `<title>` + `aria-label`).\n * @param options.animated Emit idle motion (float, blink, sway, twinkle).\n *\n * @returns Self-contained `<svg>` string. Safe to embed via `<img src=\"data:image/svg+xml;...\">`\n * or to insert into the DOM directly.\n *\n * @example\n * ```ts\n * const svg = createAvatar(user.id, { size: 96, animated: true });\n * ```\n */\nexport function createAvatar(seed: string, options: AvatarOptions = {}): string {\n if (typeof seed !== 'string' || seed.length === 0) {\n throw new Error('navii: seed must be a non-empty string');\n }\n return renderAvatar(selectAvatar(seed, options), options);\n}\n\n/**\n * Generate a random avatar without supplying a seed.\n *\n * Picks a fresh UUID seed via `crypto.randomUUID()` (or a `Math.random()`\n * fallback when WebCrypto is unavailable) and renders the avatar. The seed\n * is returned alongside the SVG so callers can **persist it** — e.g. save\n * to the user's profile so future renders are stable.\n *\n * Use for: \"spin again\" UX, dev/demo seeding, lazy onboarding flows where\n * the user gets an avatar before picking one.\n *\n * Each call returns a different avatar — DO NOT call inline in a render\n * function or the avatar will change every re-render. Stabilize with a\n * `useState`/`useMemo` init or persist the returned seed:\n *\n * @example\n * ```ts\n * const { svg, seed } = Navii.random({ size: 96 });\n * saveToProfile(user.id, { naviiSeed: seed });\n * ```\n *\n * @example React\n * ```tsx\n * const [random] = useState(() => Navii.random());\n * return <Navii seed={random.seed} />;\n * ```\n */\nexport function random(options: AvatarOptions = {}): { svg: string; seed: string } {\n const seed = randomSeed();\n return { svg: createAvatar(seed, options), seed };\n}\n\nfunction randomSeed(): string {\n const c = globalThis.crypto;\n if (c && typeof c.randomUUID === 'function') return c.randomUUID();\n return (\n Math.random().toString(36).slice(2) +\n Math.random().toString(36).slice(2)\n );\n}\n\n/**\n * Convenience namespace — bundles every public function under one import.\n *\n * @example\n * ```ts\n * import { Navii } from '@usenavii/core';\n *\n * Navii.create(user.id);\n * Navii.seed({ id: user.id, email: user.email });\n * Navii.build({ body: 'tall', eyes: 'star', palette: 'violet' });\n * Navii.group([user1.id, user2.id, user3.id]);\n * ```\n */\nexport const Navii = {\n create: createAvatar,\n random,\n render: renderAvatar,\n select: selectAvatar,\n group: renderGroup,\n seed,\n build,\n} as const;\n"]}