{"release_id":"01a1d3e6-b298-0000-4de0-7e9f9f560d9d","chunk_id":"01a1d3e6-b475-7811-820d-6a72ba26499f","file":"169.B0iZAW52.mjs","mappings":"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","names":["clanCard","$$anchor","k","$.noop","highlight","rank","cover","$.derived","getClanCoverUrl","st","clanStatus","a","b","c","split","fill","a_1","root_1","div","img","root_2","$.template_effect","$.set_attribute","$$render","consequent","span","root_3","consequent_1","span_1","$.sibling","node_1","div_1","div_2","ClanEmblem","node_2","div_3","div_4","mark","text_3","span_2","div_5","div_6","span_3","div_7","span_4","span_5","text_8","span_6","span_7","$0","styles","$1","$.get","$.set_text","text_2","text_6","text_7","text_9","styles_1","$.set_style","tint","$$args","remember","inviteBlock","title","accent","body","cta","div_8","root_4","div_9","div_10","span_8","text_10","p_1","consequent_2","button","div_11","root_6","$.each","$$props","al","i","span_9","root_7","getAvatarUrl","DuelAvatar","node_5","styles_2","consequent_3","inviteCopied","$.delegated","shareInvite","MIN_LEN","DEBOUNCE_MS","RECENT_KEY","RECENT_MAX","query","$.state","results","$.proxy","loading","limited","tab","recent","input","$.user_effect","$.set","untrack","page","normalized","active","settled","people","clans","empty","timer","inflight","syncUrl","q","url","replaceState","run","ctrl","res","next","err","onInput","clear","useRecent","term","readRecent","v","x","writeRecent","list","r","onSubmit","e","INVITE_TEXT","onWindowKey","t","onMount","text","n","FALLBACK","id","h","main","root","form","div_12","input_1","$.child","$.remove_input_defaults","$$value","node_6","span_10","root_8","consequent_4","button_1","root_9","kbd","root_10","consequent_5","alternate","div_13","root_11","button_2","button_3","span_11","button_4","span_12","classes_1","classes_2","classes_3","consequent_6","div_14","root_12","div_15","root_13","node_11","span_13","root_14","button_5","button_6","button_7","consequent_7","section","root_15","div_16","album","AlbumRichCard","consequent_8","section_1","root_17","div_17","consequent_9","div_18","root_19","div_19","root_20","node_15","div_20","root_21","section_2","root_22","div_21","button_8","root_23","consequent_13","div_22","consequent_14","section_3","root_25","div_23","button_9","root_26","consequent_15","div_24","p","a_2","root_27","span_14","node_20","span_15","span_16","span_17","mark_1","text_20","UserBadge","node_21","span_18","span_19","span_20","root_28","text_24","consequent_16","text_23","consequent_17","classes_4","$.set_class","consequent_11","consequent_12","alternate_1","consequent_10","classes","$.event"],"sources":["../../../../../../src/routes/search/+page.svelte"],"sourcesContent":["<script lang=\"ts\">\n\timport { onMount, untrack } from 'svelte';\n\timport { page } from '$app/state';\n\timport { replaceState } from '$app/navigation';\n\timport { getAvatarUrl } from '$lib/avatar';\n\timport { getClanCoverUrl } from '$lib/clan-avatar';\n\timport ClanEmblem from '$lib/components/clan/ClanEmblem.svelte';\n\timport DuelAvatar from '$lib/components/duel/DuelAvatar.svelte';\n\timport UserBadge from '$lib/components/UserBadge.svelte';\n\timport AlbumRichCard from '$lib/components/album/AlbumRichCard.svelte';\n\timport type { SearchResults, ClanHit } from '$lib/types/search';\n\n\tlet { data } = $props();\n\n\tconst MIN_LEN = 2;\n\tconst DEBOUNCE_MS = 180;\n\tconst RECENT_KEY = 'search:recent';\n\tconst RECENT_MAX = 6;\n\n\tlet query = $state('');\n\tlet results = $state<SearchResults>({ q: '', people: [], clans: [] });\n\tlet loading = $state(false);\n\t// The server throttles bursts of unique queries (429) — say so instead of\n\t// leaving stale results dimmed on screen.\n\tlet limited = $state(false);\n\tlet tab = $state<'all' | 'people' | 'clans'>('all');\n\tlet recent = $state<string[]>([]);\n\tlet input: HTMLInputElement | undefined = $state();\n\n\t// Resync from the server load (first paint, or a link to /search?q=… while\n\t// already here) — local state seeded from `data` would otherwise freeze.\n\t// The URL read is untracked: syncUrl()'s shallow replaceState must not write\n\t// the (trimmed) param back over what the viewer is still typing.\n\t$effect(() => {\n\t\tresults = data.results;\n\t\tquery = untrack(() => page.url.searchParams.get('q') ?? '');\n\t});\n\n\tconst normalized = $derived(query.trim().replace(/\\s+/g, ' ').toLowerCase());\n\tconst active = $derived(normalized.length >= MIN_LEN);\n\t// Results belong to the text on screen only once they catch up with it.\n\tconst settled = $derived(results.q === normalized);\n\tconst people = $derived(tab === 'all' ? results.people.slice(0, 8) : results.people);\n\tconst clans = $derived(tab === 'all' ? results.clans.slice(0, 3) : results.clans);\n\tconst empty = $derived(active && settled && !results.people.length && !results.clans.length);\n\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tlet inflight: AbortController | undefined;\n\n\tfunction syncUrl(q: string) {\n\t\tconst url = new URL(page.url);\n\t\tif (q) url.searchParams.set('q', q);\n\t\telse url.searchParams.delete('q');\n\t\t// Shallow: keeps ?q= shareable without re-running the page load.\n\t\treplaceState(url, {});\n\t}\n\n\tasync function run(q: string) {\n\t\tinflight?.abort();\n\t\tconst ctrl = new AbortController();\n\t\tinflight = ctrl;\n\t\tloading = true;\n\t\ttry {\n\t\t\tconst res = await fetch(`/api/search?q=${encodeURIComponent(q)}`, { signal: ctrl.signal });\n\t\t\tif (res.status === 429) {\n\t\t\t\tif (inflight === ctrl) limited = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!res.ok) throw new Error(String(res.status));\n\t\t\tconst next = (await res.json()) as SearchResults;\n\t\t\tif (inflight === ctrl) {\n\t\t\t\tresults = next;\n\t\t\t\tlimited = false;\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif ((err as Error).name !== 'AbortError') console.error('[search] failed', err);\n\t\t} finally {\n\t\t\tif (inflight === ctrl) loading = false;\n\t\t}\n\t}\n\n\tfunction onInput() {\n\t\tclearTimeout(timer);\n\t\tconst q = query.trim();\n\t\tif (q.replace(/\\s+/g, ' ').length < MIN_LEN) {\n\t\t\tinflight?.abort();\n\t\t\tloading = false;\n\t\t\tresults = { q: '', people: [], clans: [] };\n\t\t\tsyncUrl('');\n\t\t\treturn;\n\t\t}\n\t\ttimer = setTimeout(() => {\n\t\t\tsyncUrl(q);\n\t\t\tvoid run(q);\n\t\t}, DEBOUNCE_MS);\n\t}\n\n\tfunction clear() {\n\t\tquery = '';\n\t\tonInput();\n\t\tinput?.focus();\n\t}\n\n\tfunction useRecent(term: string) {\n\t\tquery = term;\n\t\tclearTimeout(timer);\n\t\tsyncUrl(term);\n\t\tvoid run(term);\n\t}\n\n\tfunction readRecent(): string[] {\n\t\ttry {\n\t\t\tconst v = JSON.parse(localStorage.getItem(RECENT_KEY) ?? '[]');\n\t\t\treturn Array.isArray(v) ? v.filter((x) => typeof x === 'string').slice(0, RECENT_MAX) : [];\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tfunction writeRecent(list: string[]) {\n\t\trecent = list;\n\t\ttry {\n\t\t\tlocalStorage.setItem(RECENT_KEY, JSON.stringify(list));\n\t\t} catch {\n\t\t\t/* private mode / blocked storage — recent is a nicety */\n\t\t}\n\t}\n\n\tfunction remember() {\n\t\tconst term = query.trim();\n\t\tif (term.length < MIN_LEN) return;\n\t\twriteRecent([term, ...recent.filter((r) => r.toLowerCase() !== term.toLowerCase())].slice(0, RECENT_MAX));\n\t}\n\n\tfunction onSubmit(e: SubmitEvent) {\n\t\te.preventDefault();\n\t\tremember();\n\t\tinput?.blur();\n\t}\n\n\t// Invite: the link comes from the load (see +page.server.ts) so share() runs\n\t// synchronously in the click — iOS Safari drops user activation across an\n\t// await. Native share sheet where there is one, else copy to clipboard.\n\tconst INVITE_TEXT = \"i'm on ratemyd, come find me\";\n\tlet inviteCopied = $state(false);\n\tfunction shareInvite() {\n\t\tconst url = data.inviteUrl;\n\t\tif (typeof navigator !== 'undefined' && typeof navigator.share === 'function') {\n\t\t\tnavigator.share({ title: 'ratemyd', text: INVITE_TEXT, url }).catch(() => {});\n\t\t\treturn;\n\t\t}\n\t\tnavigator.clipboard\n\t\t\t?.writeText(`${INVITE_TEXT}: ${url}`)\n\t\t\t.then(() => {\n\t\t\t\tinviteCopied = true;\n\t\t\t\tsetTimeout(() => (inviteCopied = false), 2000);\n\t\t\t})\n\t\t\t.catch(() => {});\n\t}\n\n\t// \"/\" jumps to the search field from anywhere on the page.\n\tfunction onWindowKey(e: KeyboardEvent) {\n\t\tif (e.key !== '/' || e.metaKey || e.ctrlKey || e.altKey) return;\n\t\tconst t = e.target as HTMLElement | null;\n\t\tif (t && (t.isContentEditable || /^(INPUT|TEXTAREA|SELECT)$/.test(t.tagName))) return;\n\t\te.preventDefault();\n\t\tinput?.focus();\n\t}\n\n\tonMount(() => {\n\t\trecent = readRecent();\n\t\tif (!query) input?.focus();\n\t\treturn () => {\n\t\t\tclearTimeout(timer);\n\t\t\tinflight?.abort();\n\t\t};\n\t});\n\n\t/** [before, match, after] for highlighting the typed text inside a name. */\n\tfunction split(text: string): [string, string, string] {\n\t\tconst i = normalized ? text.toLowerCase().indexOf(normalized.replace(/^\\[|\\]$/g, '')) : -1;\n\t\tif (i < 0) return ['', '', text];\n\t\tconst n = normalized.replace(/^\\[|\\]$/g, '').length;\n\t\treturn [text.slice(0, i), text.slice(i, i + n), text.slice(i + n)];\n\t}\n\n\tconst FALLBACK = ['#0e7490', '#9f1239', '#4338ca', '#b45309', '#6d28d9', '#15803d', '#3f3f46'];\n\tfunction tint(id: string): string {\n\t\tlet h = 0;\n\t\tfor (let i = 0; i < id.length; i++) h = (h * 31 + id.charCodeAt(i)) >>> 0;\n\t\treturn FALLBACK[h % FALLBACK.length];\n\t}\n\n\tfunction clanStatus(c: ClanHit): { label: string; kind: 'open' | 'apply' | 'full' } {\n\t\tif (c.memberCap > 0 && c.memberCount >= c.memberCap) return { label: 'full', kind: 'full' };\n\t\tif (c.joinPolicy === 'open') return { label: 'open', kind: 'open' };\n\t\treturn { label: c.joinPolicy === 'invite' ? 'invite only' : 'apply', kind: 'apply' };\n\t}\n</script>\n\n{#snippet clanCard(k: ClanHit, highlight: boolean, rank: number | null)}\n\t{@const cover = getClanCoverUrl(k.coverPath)}\n\t{@const st = clanStatus(k)}\n\t{@const [a, b, c] = highlight ? split(k.name) : ['', '', k.name]}\n\t{@const fill = k.memberCap > 0 ? Math.min(100, Math.round((k.memberCount / k.memberCap) * 100)) : 0}\n\t<a class=\"clan-card\" href=\"/k/{encodeURIComponent(k.tag)}\" onclick={highlight ? remember : undefined}>\n\t\t<div class=\"cover\" style:background-color={tint(k.tag)}>\n\t\t\t{#if cover}<img src={cover} alt=\"\" loading=\"lazy\" decoding=\"async\" />{/if}\n\t\t\t{#if rank}<span class=\"rank\">#{rank}</span>{/if}\n\t\t\t<span class=\"status {st.kind}\">{st.label}</span>\n\t\t</div>\n\t\t<div class=\"clan-body\">\n\t\t\t<div class=\"emblem-ring\"><ClanEmblem tag={k.tag} avatarPath={k.avatarPath} size={60} link={false} /></div>\n\t\t\t<div class=\"clan-head\">\n\t\t\t\t<div class=\"clan-nm\">{a}<mark>{b}</mark>{c}</div>\n\t\t\t\t<span class=\"clan-tag\">#{k.tag}</span>\n\t\t\t</div>\n\t\t\t<div class=\"clan-stats\">\n\t\t\t\t<div class=\"stat\">\n\t\t\t\t\t<span class=\"stat-num\">{k.level}</span>\n\t\t\t\t\t<span class=\"stat-lbl\">level</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"stat stat-grow\">\n\t\t\t\t\t<span class=\"stat-num\">{k.memberCount}<span class=\"stat-of\">/{k.memberCap}</span></span>\n\t\t\t\t\t<span class=\"stat-lbl\">members</span>\n\t\t\t\t\t<span class=\"cap\" aria-hidden=\"true\"><span class=\"cap-fill\" style:width=\"{fill}%\"></span></span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</a>\n{/snippet}\n\n{#snippet inviteBlock(title: string, accent: string, body: string, cta: string)}\n\t<div class=\"invite\">\n\t\t<div class=\"invite-copy\">\n\t\t\t<div class=\"invite-title\">{title} <span>{accent}</span></div>\n\t\t\t<p>{body}{#if data.inviteEarns} you get 2 tokens for every friend who joins.{/if}</p>\n\t\t\t<button type=\"button\" class=\"invite-btn\" onclick={shareInvite}>\n\t\t\t\t<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M4 12v7a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-7M16 6l-4-4-4 4M12 2v13\" /></svg>\n\t\t\t\t{inviteCopied ? 'link copied' : cta}\n\t\t\t</button>\n\t\t</div>\n\t\t{#if data.albums.length}\n\t\t\t<div class=\"invite-faces\" aria-hidden=\"true\">\n\t\t\t\t{#each data.albums.slice(0, 5) as al, i (al.id)}\n\t\t\t\t\t<span class=\"face\" style:z-index={10 - i}>\n\t\t\t\t\t\t<DuelAvatar nickname={al.creator.nickname} avatarUrl={getAvatarUrl(al.creator.avatarPath)} size={52} link={false} />\n\t\t\t\t\t</span>\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t{/if}\n\t</div>\n{/snippet}\n\n<svelte:window onkeydown={onWindowKey} />\n\n<main class=\"dir-page search\" class:is-active={active}>\n\t<header class=\"hero-wrap\">\n\t\t<div class=\"eyebrow\">search</div>\n\t\t<h1 class=\"hero\">find anyone.<br /><span>any clan.</span></h1>\n\t\t<p class=\"lede\">look people up by nickname, clans by name or tag.</p>\n\t</header>\n\n\t<form class=\"bar-wrap\" role=\"search\" onsubmit={onSubmit}>\n\t\t<label for=\"search-q\" class=\"sr-only\">Search people and clans</label>\n\t\t<div class=\"bar\">\n\t\t\t<svg class=\"bar-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n\t\t\t\t<circle cx=\"11\" cy=\"11\" r=\"7\" />\n\t\t\t\t<path d=\"M20 20l-3.5-3.5\" />\n\t\t\t</svg>\n\t\t\t<input\n\t\t\t\tid=\"search-q\"\n\t\t\t\tbind:this={input}\n\t\t\t\tbind:value={query}\n\t\t\t\toninput={onInput}\n\t\t\t\ttype=\"search\"\n\t\t\t\tplaceholder=\"nickname, clan name or tag\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t\tautocapitalize=\"off\"\n\t\t\t\tspellcheck=\"false\"\n\t\t\t\tenterkeyhint=\"search\"\n\t\t\t\tmaxlength=\"40\"\n\t\t\t/>\n\t\t\t{#if loading}<span class=\"spinner\" aria-hidden=\"true\"></span>{/if}\n\t\t\t{#if query}\n\t\t\t\t<button type=\"button\" class=\"clear\" aria-label=\"Clear search\" onclick={clear}>\n\t\t\t\t\t<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M6 6l12 12M18 6L6 18\" /></svg>\n\t\t\t\t</button>\n\t\t\t{:else}\n\t\t\t\t<kbd class=\"kbd\" aria-hidden=\"true\">/</kbd>\n\t\t\t{/if}\n\t\t</div>\n\n\t\t{#if active}\n\t\t\t<div class=\"tabs\" role=\"tablist\" aria-label=\"Result type\">\n\t\t\t\t<button type=\"button\" role=\"tab\" aria-selected={tab === 'all'} class:on={tab === 'all'} onclick={() => (tab = 'all')}>all</button>\n\t\t\t\t<button type=\"button\" role=\"tab\" aria-selected={tab === 'people'} class:on={tab === 'people'} onclick={() => (tab = 'people')}>\n\t\t\t\t\tpeople <span class=\"count\">{results.people.length}</span>\n\t\t\t\t</button>\n\t\t\t\t<button type=\"button\" role=\"tab\" aria-selected={tab === 'clans'} class:on={tab === 'clans'} onclick={() => (tab = 'clans')}>\n\t\t\t\t\tclans <span class=\"count\">{results.clans.length}</span>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t{/if}\n\t</form>\n\n\t{#if !active}\n\t\t<div class=\"idle\">\n\t\t\t{#if recent.length}\n\t\t\t\t<div class=\"recent\">\n\t\t\t\t\t<span class=\"recent-lbl\">recent</span>\n\t\t\t\t\t{#each recent as term (term)}\n\t\t\t\t\t\t<span class=\"recent-chip\">\n\t\t\t\t\t\t\t<button type=\"button\" class=\"recent-term\" onclick={() => useRecent(term)}>{term}</button>\n\t\t\t\t\t\t\t<button type=\"button\" class=\"recent-x\" aria-label=\"Remove {term} from recent\" onclick={() => writeRecent(recent.filter((r) => r !== term))}>\n\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M6 6l12 12M18 6L6 18\" /></svg>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t{/each}\n\t\t\t\t\t<button type=\"button\" class=\"link\" onclick={() => writeRecent([])}>clear</button>\n\t\t\t\t</div>\n\t\t\t{/if}\n\n\t\t\t{#if data.albums.length}\n\t\t\t\t<section>\n\t\t\t\t\t<div class=\"sec-row\">\n\t\t\t\t\t\t<h2 class=\"sec-big\">hot <span class=\"fx\">albums</span></h2>\n\t\t\t\t\t\t<a class=\"link-arrow\" href=\"/albums\">browse all\n\t\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12h14M13 6l6 6-6 6\" /></svg>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"album-grid\">\n\t\t\t\t\t\t{#each data.albums as album, i (album.id)}\n\t\t\t\t\t\t\t<AlbumRichCard {album} eager={i < 4} class=\"album-cell\" />\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</div>\n\t\t\t\t</section>\n\t\t\t{/if}\n\n\t\t\t{#if data.topClans.length}\n\t\t\t\t<section>\n\t\t\t\t\t<div class=\"sec-row\">\n\t\t\t\t\t\t<h2 class=\"sec-big\">top <span class=\"vi\">clans</span></h2>\n\t\t\t\t\t\t<a class=\"link-arrow\" href=\"/k\">all clans\n\t\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12h14M13 6l6 6-6 6\" /></svg>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"clan-grid\">\n\t\t\t\t\t\t{#each data.topClans as k, i (k.id)}\n\t\t\t\t\t\t\t{@render clanCard(k, false, i + 1)}\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</div>\n\t\t\t\t</section>\n\t\t\t{/if}\n\n\t\t\t{@render inviteBlock('bring your', 'crew.', 'friend not on here yet? send them your link.', 'invite a friend')}\n\t\t</div>\n\t{:else if limited}\n\t\t<div class=\"empty\">\n\t\t\t<div class=\"empty-title\">easy there.</div>\n\t\t\t<p>too many searches in a row. give it a few seconds and try again.</p>\n\t\t</div>\n\t{:else if empty}\n\t\t<div class=\"results\">\n\t\t\t{@render inviteBlock(`no one called “${query.trim()}”`, 'yet.', \"check the spelling, or if they're a friend who isn't on here, send them your link.\", 'invite them')}\n\t\t</div>\n\t{:else}\n\t\t<div class=\"results\" class:stale={!settled}>\n\t\t\t{#if tab !== 'people' && clans.length}\n\t\t\t\t<section>\n\t\t\t\t\t<div class=\"sec-row\">\n\t\t\t\t\t\t<h2 class=\"sec\">clans</h2>\n\t\t\t\t\t\t{#if tab === 'all' && results.clans.length > clans.length}\n\t\t\t\t\t\t\t<button type=\"button\" class=\"link\" onclick={() => (tab = 'clans')}>see all {results.clans.length}</button>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"clan-grid\">\n\t\t\t\t\t\t{#each clans as k (k.id)}\n\t\t\t\t\t\t\t{@render clanCard(k, true, null)}\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</div>\n\t\t\t\t</section>\n\t\t\t{/if}\n\n\t\t\t{#if tab !== 'clans' && people.length}\n\t\t\t\t<section>\n\t\t\t\t\t<div class=\"sec-row\">\n\t\t\t\t\t\t<h2 class=\"sec\">people</h2>\n\t\t\t\t\t\t{#if tab === 'all' && results.people.length > people.length}\n\t\t\t\t\t\t\t<button type=\"button\" class=\"link\" onclick={() => (tab = 'people')}>see all {results.people.length}</button>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"people-grid\">\n\t\t\t\t\t\t{#each people as p (p.id)}\n\t\t\t\t\t\t\t{@const [a, b, c] = split(p.nickname)}\n\t\t\t\t\t\t\t<a class=\"person\" href=\"/u/{encodeURIComponent(p.nickname)}\" onclick={remember}>\n\t\t\t\t\t\t\t\t<span class=\"av-ring\">\n\t\t\t\t\t\t\t\t\t<DuelAvatar nickname={p.nickname} avatarUrl={getAvatarUrl(p.avatarPath)} size={52} link={false} />\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span class=\"person-body\">\n\t\t\t\t\t\t\t\t\t<span class=\"person-nm\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"nick\">{a}<mark>{b}</mark>{c}</span>\n\t\t\t\t\t\t\t\t\t\t<UserBadge\n\t\t\t\t\t\t\t\t\t\t\tverified={p.isVerified}\n\t\t\t\t\t\t\t\t\t\t\trater={p.isRater}\n\t\t\t\t\t\t\t\t\t\t\tcreator={p.isCreator}\n\t\t\t\t\t\t\t\t\t\t\tsubscriber={p.isSubscriber}\n\t\t\t\t\t\t\t\t\t\t\tadmin={p.isAdmin}\n\t\t\t\t\t\t\t\t\t\t\ttopRater={p.isTopRater}\n\t\t\t\t\t\t\t\t\t\t\tambassador={p.isAmbassador}\n\t\t\t\t\t\t\t\t\t\t\tsize={14}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<span class=\"chips\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"chip neutral\">lvl {p.level}</span>\n\t\t\t\t\t\t\t\t\t\t{#if p.clanTag}<span class=\"chip\">#{p.clanTag}</span>{/if}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span class=\"go\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\"><path d=\"M9 5l7 7-7 7\" /></svg>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</div>\n\t\t\t\t</section>\n\t\t\t{/if}\n\t\t</div>\n\t{/if}\n</main>\n\n<style>\n\t/* Same shell as the other module landings (/k, /tod): clears the fixed navbar. */\n\t.dir-page { max-width: 1080px; margin: 0 auto; padding: 84px 18px 120px; }\n\t@media (min-width: 768px) { .dir-page { padding: 110px 20px 120px; } }\n\t.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }\n\n\t.eyebrow { font-family: var(--font-display); font-size: 11px; font-weight: 800; letter-spacing: 0.22em; text-transform: uppercase; color: var(--color-coral); }\n\t.hero { font-family: var(--font-display); font-size: clamp(2.6rem, 8vw, 3.6rem); font-weight: 900; letter-spacing: -0.04em; line-height: 0.9; margin: 8px 0 0; }\n\t.hero span { color: var(--color-coral); }\n\t.lede { color: var(--color-muted); font-size: 14px; line-height: 1.5; margin: 14px 0 0; }\n\n\t/* Search bar */\n\t.bar-wrap { display: flex; flex-direction: column; gap: 14px; margin-top: 28px; }\n\t.bar { height: 60px; display: flex; align-items: center; gap: 12px; padding: 0 12px 0 20px; border-radius: 18px; background: var(--color-surface); border: 1px solid var(--color-border); box-shadow: 0 14px 40px rgba(0, 0, 0, 0.4); transition: border-color 0.15s; }\n\t.bar:focus-within { border-color: #444; }\n\t.bar-icon { width: 20px; height: 20px; flex-shrink: 0; fill: none; stroke: var(--color-muted); stroke-width: 2; stroke-linecap: round; }\n\t/* The forms plugin styles [type=search] (white-ish box, blue focus ring);\n\t   the bar itself is the field here, so the input is bare. */\n\t.bar input,\n\t.bar input:focus { flex: 1; min-width: 0; height: 100%; padding: 0; border: 0; outline: none; box-shadow: none; background: transparent; color: var(--color-text); font-family: var(--font-body); font-size: 17px; font-weight: 500; -webkit-appearance: none; appearance: none; }\n\t.bar input::placeholder { color: #6b6b6b; }\n\t.bar input::-webkit-search-cancel-button { display: none; }\n\t.kbd { display: none; }\n\t@media (hover: hover) and (pointer: fine) {\n\t\t.kbd { display: grid; place-items: center; width: 26px; height: 26px; border-radius: 7px; background: #1f1f1f; border: 1px solid #2e2e2e; color: var(--color-muted); font-family: var(--font-display); font-size: 12px; font-weight: 700; }\n\t}\n\t.clear { width: 38px; height: 38px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; border: 0; border-radius: 11px; background: #222; color: #bdbdbd; cursor: pointer; }\n\t.clear svg, .recent-x svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 2.4; stroke-linecap: round; }\n\t.spinner { width: 16px; height: 16px; flex-shrink: 0; border-radius: 50%; border: 2px solid #333; border-top-color: var(--color-muted); animation: spin 0.7s linear infinite; }\n\t@keyframes spin { to { transform: rotate(360deg); } }\n\n\t.tabs { display: flex; gap: 6px; flex-wrap: wrap; }\n\t.tabs button { display: inline-flex; align-items: center; gap: 6px; height: 34px; padding: 0 14px; border-radius: 10px; background: var(--color-surface); border: 1px solid var(--color-border); color: var(--color-muted); font-family: var(--font-display); font-size: 12px; font-weight: 800; letter-spacing: 0.06em; text-transform: uppercase; cursor: pointer; }\n\t.tabs button:hover { color: var(--color-text); }\n\t.tabs button.on { background: var(--color-text); border-color: var(--color-text); color: #0c0c0c; }\n\t.count { font-variant-numeric: tabular-nums; opacity: 0.6; }\n\n\t/* Section heads */\n\t.sec-row { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin-bottom: 16px; }\n\t.sec { margin: 0; font-size: 11px; font-weight: 800; letter-spacing: 0.18em; text-transform: uppercase; color: var(--color-muted); }\n\t.sec-big { margin: 0; font-family: var(--font-display); font-size: 22px; font-weight: 900; letter-spacing: -0.02em; }\n\t.sec-big .fx { color: var(--color-fuchsia); }\n\t.sec-big .vi { color: var(--color-violet); }\n\t.link { border: 0; background: none; padding: 4px 0; color: var(--color-muted); font-family: var(--font-body); font-size: 12px; font-weight: 600; text-decoration: none; cursor: pointer; }\n\t.link:hover { color: var(--color-text); }\n\t.link-arrow { display: inline-flex; align-items: center; gap: 4px; color: var(--color-muted); font-family: var(--font-display); font-size: 12px; font-weight: 800; text-decoration: none; }\n\t.link-arrow:hover { color: var(--color-text); }\n\t.link-arrow svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round; }\n\tmark { background: none; color: var(--color-text); }\n\n\t.idle, .results { display: flex; flex-direction: column; gap: 44px; margin-top: 36px; }\n\t.results { transition: opacity 0.12s; }\n\t.results.stale { opacity: 0.5; }\n\n\t/* Recent: one quiet line under the bar */\n\t.recent { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: -16px; }\n\t.recent-lbl { font-size: 11px; font-weight: 800; letter-spacing: 0.18em; text-transform: uppercase; color: var(--color-muted); margin-right: 4px; }\n\t.recent-chip { display: inline-flex; align-items: center; border-radius: 999px; background: var(--color-surface); border: 1px solid var(--color-border); }\n\t.recent-term { min-height: 34px; padding: 0 2px 0 14px; border: 0; background: none; color: var(--color-text); font-family: var(--font-body); font-size: 13px; font-weight: 600; cursor: pointer; }\n\t.recent-x { width: 32px; height: 34px; display: flex; align-items: center; justify-content: center; border: 0; background: none; color: #5a5a5a; cursor: pointer; }\n\t.recent-x:hover { color: var(--color-text); }\n\n\t/* Albums: the feed's own card, 4 in one row on desktop, a swipe rail below that */\n\t.album-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }\n\t@media (max-width: 859px) {\n\t\t.album-grid { display: flex; overflow-x: auto; gap: 12px; margin: 0 -18px; padding: 0 18px 4px; scroll-snap-type: x mandatory; scrollbar-width: none; }\n\t\t.album-grid::-webkit-scrollbar { display: none; }\n\t\t.album-grid :global(.album-cell) { flex: 0 0 78%; scroll-snap-align: center; }\n\t}\n\n\t/* Clan cards */\n\t.clan-grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: 14px; }\n\t@media (min-width: 640px) { .clan-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }\n\t@media (min-width: 960px) { .clan-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }\n\t.clan-card { display: flex; flex-direction: column; overflow: hidden; border-radius: 20px; background: var(--color-surface); border: 1px solid var(--color-border); color: inherit; text-decoration: none; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.35); transition: border-color 0.15s, transform 0.2s ease; }\n\t.clan-card:hover { border-color: #3a3a3a; transform: translateY(-3px); }\n\t.cover { position: relative; height: 136px; overflow: hidden; }\n\t.cover img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform 0.4s ease; }\n\t.clan-card:hover .cover img { transform: scale(1.04); }\n\t/* Neutral scrim into the card body: legible pills on top, seamless edge below. */\n\t.cover::after { content: ''; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0, 0, 0, 0.35) 0%, rgba(0, 0, 0, 0) 38%, rgba(20, 20, 20, 0.92) 100%); pointer-events: none; }\n\t.rank, .status { position: absolute; top: 12px; z-index: 1; padding: 5px 10px; border-radius: 9px; font-family: var(--font-display); font-size: 11px; font-weight: 900; letter-spacing: 0.06em; }\n\t.rank { left: 12px; background: rgba(12, 12, 12, 0.8); color: var(--color-text); font-variant-numeric: tabular-nums; }\n\t.status { right: 12px; text-transform: uppercase; }\n\t.status.open { background: var(--color-violet); color: #fff; }\n\t.status.apply { background: rgba(12, 12, 12, 0.8); color: var(--color-text); }\n\t.status.full { background: rgba(12, 12, 12, 0.8); color: var(--color-muted); }\n\t.clan-body { position: relative; padding: 0 18px 18px; }\n\t.emblem-ring { width: 68px; height: 68px; margin-top: -40px; border-radius: 50%; background: var(--color-surface); display: grid; place-items: center; position: relative; z-index: 1; box-shadow: 0 6px 16px rgba(0, 0, 0, 0.4); }\n\t.clan-head { display: flex; align-items: baseline; gap: 8px; min-width: 0; margin-top: 10px; }\n\t.clan-nm { font-family: var(--font-display); font-size: 19px; font-weight: 900; letter-spacing: -0.02em; color: var(--color-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n\t.idle .clan-nm, .clan-nm mark { color: var(--color-text); }\n\t.clan-tag { flex-shrink: 0; font-size: 12px; font-weight: 700; color: var(--color-muted); }\n\t.clan-stats { display: flex; gap: 22px; margin-top: 14px; }\n\t.stat { display: flex; flex-direction: column; gap: 2px; min-width: 0; }\n\t.stat-grow { flex: 1; }\n\t.stat-num { font-family: var(--font-display); font-size: 17px; font-weight: 900; font-variant-numeric: tabular-nums; }\n\t.stat-of { color: var(--color-muted); font-weight: 700; }\n\t.stat-lbl { font-size: 10px; font-weight: 800; letter-spacing: 0.14em; text-transform: uppercase; color: var(--color-muted); }\n\t.cap { display: block; height: 4px; margin-top: 6px; border-radius: 99px; background: #262626; overflow: hidden; }\n\t.cap-fill { display: block; height: 100%; border-radius: 99px; background: var(--color-violet); }\n\n\t/* People cards */\n\t.people-grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: 10px; }\n\t@media (min-width: 760px) { .people-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }\n\t.person { display: flex; align-items: center; gap: 14px; padding: 14px 14px 14px 16px; border-radius: 18px; background: var(--color-surface); border: 1px solid var(--color-border); color: inherit; text-decoration: none; transition: border-color 0.15s, transform 0.2s ease; }\n\t.person:hover { border-color: #3a3a3a; transform: translateY(-2px); }\n\t.av-ring { flex-shrink: 0; display: grid; place-items: center; padding: 2px; border-radius: 50%; background: #2a2a2a; }\n\t.person-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 6px; }\n\t.person-nm { display: flex; align-items: center; gap: 6px; min-width: 0; font-family: var(--font-display); font-size: 16px; font-weight: 900; letter-spacing: -0.01em; }\n\t.nick { color: var(--color-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n\t.chips { display: flex; gap: 6px; }\n\t.chip { padding: 3px 8px; border-radius: 6px; background: var(--color-violet-light); color: var(--color-violet); font-size: 11px; font-weight: 800; }\n\t.chip.neutral { background: #1f1f1f; color: #cfcfcf; }\n\t.go { flex-shrink: 0; width: 34px; height: 34px; display: grid; place-items: center; border-radius: 50%; background: #1c1c1c; color: var(--color-muted); transition: background-color 0.15s, color 0.15s; }\n\t.go svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }\n\t.person:hover .go { background: var(--color-text); color: #0c0c0c; }\n\n\t/* Invite banner: hero-style headline, solid coral CTA, creators' faces. */\n\t.invite { display: flex; align-items: center; justify-content: space-between; gap: 24px; padding: 28px 30px; border-radius: 22px; background: var(--color-surface); border: 1px solid var(--color-border); box-shadow: 0 14px 40px rgba(0, 0, 0, 0.35); }\n\t.invite-title { font-family: var(--font-display); font-size: clamp(1.7rem, 4vw, 2.3rem); font-weight: 900; letter-spacing: -0.04em; line-height: 0.95; overflow-wrap: anywhere; }\n\t.invite-title span { color: var(--color-coral); }\n\t.invite p { margin: 12px 0 0; max-width: 460px; font-size: 14px; line-height: 1.5; color: var(--color-muted); }\n\t.invite-btn { display: inline-flex; align-items: center; gap: 8px; margin-top: 20px; min-height: 44px; padding: 0 20px; border: 0; border-radius: 13px; background: var(--color-coral); color: #fff; font-family: var(--font-display); font-size: 14px; font-weight: 800; cursor: pointer; transition: background-color 0.15s; }\n\t.invite-btn:hover { background: var(--color-coral-dark); }\n\t.invite-btn svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }\n\t.invite-faces { display: flex; flex-shrink: 0; padding-left: 14px; }\n\t.face { margin-left: -14px; border-radius: 50%; box-shadow: 0 0 0 3px var(--color-surface); display: inline-flex; }\n\n\t.empty { border: 1px solid var(--color-border); background: color-mix(in srgb, var(--color-surface) 40%, transparent); border-radius: 14px; padding: 36px 24px; text-align: center; }\n\t.empty-title { font-family: var(--font-display); font-size: 20px; font-weight: 800; }\n\t.empty p { margin: 6px 0 0; font-size: 13px; color: var(--color-muted); }\n\n\t@media (max-width: 767px) {\n\t\t/* Typing on a phone: drop the hero so results start above the keyboard. */\n\t\t.search.is-active .hero-wrap { display: none; }\n\t\t.search.is-active .bar-wrap { margin-top: 0; }\n\t\t.idle, .results { gap: 32px; margin-top: 24px; }\n\t\t.sec-big { font-size: 19px; }\n\t\t.invite { flex-direction: column; align-items: flex-start; padding: 22px; }\n\t\t.invite-faces { order: -1; }\n\t}\n</style>\n"],"version":3}