{"release_id":"01a1998d-9802-0000-b0f7-33a23307f4ed","chunk_id":"01a1998d-990e-7170-b21d-2274a265218b","file":"CZNaFj-n.mjs","mappings":"wwBAAA,SAkBE,IAAAA,oBAAY,IAAI,EAChBC,eAAO,EAAE,EACTC,eAAO,IAAI,EACXC,kBAAU,MAAM,EAChBC,EAAIC,EAAAC,EAAA,OAAA,EAAG,EAAA,EAGF,MAAAC,EAAOC,EAAA,KAAAF,EAAA,UAAyB,KAAK,KAAI,GAAM,GAAG,EAClDG,UAAmBF,CAAO,EAAC,OAAO,CAAC,EAAE,aAAW,EAGhDG,EAAOF,EAAA,IAAqB,sBACX,GAClB,IAAAG,EAAI,EACC,QAAAC,EAAI,EAAGA,EAACN,EAAA,SAAY,OAAQM,IAAKD,EAAKA,EAAI,GAAEL,EAAA,SAAY,WAAWM,CAAC,IAAO,EAC7E,OAAAD,EAAI,GACZ,CAAC,EAEKE,EAAGL,EAAA,IACJL,EAAO,IAAK,OAAe,IAC3BA,EAAO,IAAK,QAAgB,IAC5BA,EAAO,IAAK,QAAgB,IAEzBO,CAAO,CACd,EACKI,EAAON,EAAA,IAAYL,EAAO,IAAK,SAAO,CAAAG,EAAA,QAAA,EACtCS,EAAQP,EAAA,IAAYL,EAAO,IAAK,QAAQ,EAExCa,EAAOR,EAAA,IAAA,CAAA,CAAAF,EAAA,QAAA,EACPW,QACLb,EAAI,EAAIF,MAAIgB,EAAKF,CAAO,EAAA,MAAS,iCAAkC,MAAS,IAAA,EAEvEG,WAAuB,KAAK,MAAMlB,IAAO,GAAI,CAAA,IAAA,8BAIlD,IAAA,EAAAmB,EAAA,QAAA,IAAAC,EAAAC,EAAA,CAAA,iBAUEC,EAAGC,EAAA,EAAHC,EAAA,IAAAC,EAAAH,QAASvB,EAAS,CAAA,CAAA,MAAlBuB,CAAG,aAEHI,EAAIC,EAAA,MAAJD,EAAI,EAAA,IAAJA,CAAI,cAAiBlB,CAAO,CAAA,CAAA,MAA5BkB,CAAI,WAHD3B,EAAS,EAAA6B,EAAAC,CAAA,EAAAD,EAAAE,EAAA,EAAA,IATdC,EAAA,CAAA,QAAAN,EAAA,EAAA,OAAAR,EACMD,CAAU,CAAA,EADhBgB,EAAAC,EAAA,EAAA,EAAA,wBAAA,KAAAD,EAAA,mBAGqBnB,CAAO,oBACLd,EAAS,qBACVe,CAAQ,IAL9BoB,EAAA,EAAA,WAMgBlC,EAAI,GAAA,EAAA,cAAAiB,EAAaL,CAAG,GAAA,EAAA,gBAAAK,EAAeC,CAAQ,GAAA,EAAA,GAAA,EAN3DO,EAAA,EAAA,aAAAU,CAAA,GAOY,CAAA,IAAAC,EAAE,wBAAuB,CAAI,OAAM9B,CAAO,EAAA,CAAA,GAPtD+B,EAAAC,EAAA,CAAA,SAgBA,IAAAC,EAAAC,EAAA,QAAA,IAAAC,EAAApB,EAAAkB,CAAA,iBASEG,EAAGC,EAAA,EAAHnB,EAAA,IAAAC,EAAAiB,QAAS3C,EAAS,CAAA,CAAA,MAAlB2C,CAAG,aAEHE,EAAIC,EAAA,MAAJD,EAAI,EAAA,IAAJA,CAAI,cAAiBpC,CAAO,CAAA,CAAA,MAA5BoC,CAAI,WAHD7C,EAAS,EAAA6B,EAAAkB,CAAA,EAAAlB,EAAAmB,EAAA,EAAA,IARdhB,EAAAQ,CAAA,SAAAS,EAAAf,EAAAM,EAAA,EAAA,uCAAA,KAAAS,EAAA,mBAEqBnC,CAAO,oBACLd,EAAS,qBACVe,CAAQ,IAJ9BoB,EAAAK,EAAA,WAKgBvC,EAAI,GAAA,EAAA,cAAAiB,EAAaL,CAAG,GAAA,EAAA,gBAAAK,EAAeC,CAAQ,GAAA,EAAA,GAAA,IAL3DmB,EAAAC,EAAAC,CAAA,aAjBGvB,CAAU,EAAAY,EAAAqB,CAAA,EAAArB,EAAAsB,EAAA,EAAA,cAFP","names":["avatarUrl","size","href","variant","link","$.prop","$$props","display","$.derived","initial","autoHue","h","i","hue","isMuted","isAccent","hasNick","linkTarget","$.get","fontSize","root_1","node_1","$.child","img","root_2","$.template_effect","$.set_attribute","span","root_3","$$render","consequent","alternate","$.reset","classes","$.set_class","$.set_style","$0","t","$.append","$$anchor","span_1","root_4","node_2","img_1","root_5","span_2","root_6","consequent_2","alternate_1","classes_1","consequent_1","alternate_2"],"sources":["../../../../../../src/lib/components/duel/DuelAvatar.svelte"],"sourcesContent":["<script lang=\"ts\">\n\timport { t } from '$lib/i18n';\n\ttype Variant = 'auto' | 'blue' | 'coral' | 'muted' | 'accent';\n\n\tinterface Props {\n\t\tnickname: string | null;\n\t\t/** Public CDN URL for the user's avatar — when set, replaces the initials gradient. */\n\t\tavatarUrl?: string | null;\n\t\tsize?: number;\n\t\thref?: string | null;\n\t\t/** Color variant. 'auto' = deterministic from nickname. Use 'blue'/'coral' for role tinting. */\n\t\tvariant?: Variant;\n\t\t/** Render as plain element (no <a>) — use when wrapped in an outer link to avoid nested anchors. */\n\t\tlink?: boolean;\n\t}\n\n\tlet {\n\t\tnickname,\n\t\tavatarUrl = null,\n\t\tsize = 40,\n\t\thref = null,\n\t\tvariant = 'auto',\n\t\tlink = true\n\t}: Props = $props();\n\n\tconst display = $derived((nickname ?? '?').trim() || '?');\n\tconst initial = $derived(display.charAt(0).toUpperCase());\n\n\t// deterministic color from the nickname — only used when variant is 'auto'\n\tconst autoHue = $derived.by(() => {\n\t\tif (!nickname) return 0;\n\t\tlet h = 0;\n\t\tfor (let i = 0; i < nickname.length; i++) h = (h * 31 + nickname.charCodeAt(i)) >>> 0;\n\t\treturn h % 360;\n\t});\n\n\tconst hue = $derived.by(() => {\n\t\tif (variant === 'blue') return 215;\n\t\tif (variant === 'coral') return 350;\n\t\tif (variant === 'muted') return 0;\n\t\t// 'accent' bypasses HSL entirely — see .avatar--accent below.\n\t\treturn autoHue;\n\t});\n\tconst isMuted = $derived(variant === 'muted' || !nickname);\n\tconst isAccent = $derived(variant === 'accent');\n\n\tconst hasNick = $derived(!!nickname);\n\tconst linkTarget = $derived(\n\t\tlink ? (href ?? (hasNick ? `/u/${encodeURIComponent(nickname!)}` : null)) : null\n\t);\n\tconst fontSize = $derived(`${Math.round(size * 0.42)}px`);\n</script>\n\n{#if linkTarget}\n\t<a\n\t\thref={linkTarget}\n\t\tclass=\"avatar\"\n\t\tclass:avatar--muted={isMuted}\n\t\tclass:avatar--photo={!!avatarUrl}\n\t\tclass:avatar--accent={isAccent}\n\t\tstyle=\"--size: {size}px; --hue: {hue}; font-size: {fontSize};\"\n\t\taria-label={t(\"view {name}'s profile\", { name: display })}\n\t>\n\t\t{#if avatarUrl}\n\t\t\t<img src={avatarUrl} alt=\"\" class=\"photo\" />\n\t\t{:else}\n\t\t\t<span class=\"letter\">{initial}</span>\n\t\t{/if}\n\t</a>\n{:else}\n\t<span\n\t\tclass=\"avatar avatar--static\"\n\t\tclass:avatar--muted={isMuted}\n\t\tclass:avatar--photo={!!avatarUrl}\n\t\tclass:avatar--accent={isAccent}\n\t\tstyle=\"--size: {size}px; --hue: {hue}; font-size: {fontSize};\"\n\t\taria-hidden=\"true\"\n\t>\n\t\t{#if avatarUrl}\n\t\t\t<img src={avatarUrl} alt=\"\" class=\"photo\" />\n\t\t{:else}\n\t\t\t<span class=\"letter\">{initial}</span>\n\t\t{/if}\n\t</span>\n{/if}\n\n<style>\n\t.avatar {\n\t\tdisplay: inline-flex; align-items: center; justify-content: center;\n\t\twidth: var(--size); height: var(--size);\n\t\tborder-radius: 50%; overflow: hidden; position: relative;\n\t\tbackground:\n\t\t\tradial-gradient(circle at 30% 20%, hsl(var(--hue), 55%, 32%) 0%, hsl(var(--hue), 50%, 14%) 80%),\n\t\t\thsl(var(--hue), 45%, 16%);\n\t\tborder: 1px solid hsla(var(--hue), 60%, 45%, 0.25);\n\t\tbox-shadow: 0 1px 0 rgba(255,255,255,0.05) inset;\n\t\ttext-decoration: none;\n\t\tflex-shrink: 0;\n\t\ttransition: transform 0.18s, border-color 0.18s;\n\t}\n\t.avatar:hover {\n\t\ttransform: translateY(-1px);\n\t\tborder-color: hsla(var(--hue), 70%, 55%, 0.5);\n\t}\n\t.avatar--static { cursor: default; }\n\t.avatar--static:hover { transform: none; }\n\t.avatar--muted {\n\t\tbackground: linear-gradient(135deg, #1a1a1a, #0c0c0c);\n\t\tborder-color: rgba(255,255,255,0.06);\n\t}\n\n\t.letter {\n\t\tposition: relative; z-index: 1;\n\t\tfont-family: var(--font-display);\n\t\tfont-weight: 900;\n\t\tcolor: hsl(var(--hue), 75%, 82%);\n\t\tletter-spacing: -0.02em;\n\t\tline-height: 1;\n\t}\n\t.avatar--muted .letter { color: rgba(255,255,255,0.25); }\n\n\t.avatar--photo {\n\t\tbackground: var(--color-surface);\n\t\tborder-color: rgba(255,255,255,0.08);\n\t}\n\n\t/* RAT-327: accent variant — bypasses hash-based HSL entirely and paints\n\t * the avatar with the active module color (set by +layout.svelte via\n\t * --accent-color). Used for the \"your story\" placeholder, owner-self\n\t * cards, and anywhere the avatar should read as the page's own. */\n\t.avatar--accent {\n\t\tbackground:\n\t\t\tradial-gradient(circle at 30% 20%, var(--color-accent) 0%, var(--color-accent-dark) 80%),\n\t\t\tvar(--color-accent-dark);\n\t\tborder-color: var(--color-accent);\n\t}\n\t.avatar--accent:hover {\n\t\tborder-color: var(--color-accent);\n\t}\n\t.avatar--accent .letter { color: rgba(255, 255, 255, 0.92); }\n\t.photo {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tobject-fit: cover;\n\t\tdisplay: block;\n\t}\n</style>\n"],"version":3}