/* Character detail page: renders a full profile from ?id= against CHARACTERS/FRUITS. */ (function () { const root = document.getElementById('character-content'); const id = qs('id'); const character = id ? findCharacter(id) : null; if (!character) { root.innerHTML = `
Character not found. Return to the character index.
`; return; } document.title = `${character.name} — One Piece Wiki`; const metaDesc = document.querySelector('meta[name="description"]'); if (metaDesc) metaDesc.setAttribute('content', `${character.name}${character.epithet ? ' "' + character.epithet + '"' : ''} — profile, abilities, and Devil Fruit on the One Piece Wiki.`); const accent = accentFor(character); const fruit = character.devilFruit ? findFruit(character.devilFruit) : null; const fruitRelation = fruit ? fruit.users.find((u) => u.id === character.id) : null; const statRows = [ ['Affiliation', character.affiliation], ['Role', character.role], ['Origin', character.origin], ['Age', character.age ?? 'Unknown'], ['Height', character.height || 'Unknown'], ['Birthday', character.birthday || 'Unknown'], ['Status', character.status || 'Unknown'], ['First Appearance', character.firstAppearance || 'Unknown'], ]; root.innerHTML = `
${characterPortraitSVG(character)}

${escapeHtml(character.affiliation)} · ${escapeHtml(character.role)}

${escapeHtml(character.name)}

${character.epithet ? '"' + escapeHtml(character.epithet) + '"' : ''}

${escapeHtml(character.status || 'Unknown')} ${character.bounty ? formatBounty(character.bounty) : 'Bounty Unknown'} ${fruit ? `${escapeHtml(fruit.category)} User` : ''}
${fruit ? `
${fruitPortraitSVG(fruit)}

${escapeHtml(fruitRelation ? fruitRelation.status : 'Devil Fruit')}

${escapeHtml(fruit.name)}

${escapeHtml(fruit.tagline)}

` : ''}

Biography

${escapeHtml(character.bio)}

Abilities & Haki

    ${character.abilities.map((a) => `
  • ${escapeHtml(a)}
  • `).join('')}
`; })();