<!-- RUBY-BACKUP · part 180 -->
r: '#66ff99'},
  {id: 'warrior', name: 'Warrior', desc: 'Fights for others', color: '#aa2222'},
  {id: 'scout', name: 'Scout', desc: 'Sees far, moves fast', color: '#77cc00'},
  {id: 'sage', name: 'Sage', desc: 'Knows ancient things', color: '#8866cc'},
  {id: 'trickster', name: 'Trickster', desc: 'Laughs, then vanishes', color: '#ff66ff'},
  {id: 'guardian', name: 'Guardian', desc: 'Stands between danger and you', color: '#3366ff'},
  {id: 'wanderer', name: 'Wanderer', desc: 'No home but the road', color: '#aa8855'},
  {id: 'dreamer', name: 'Dreamer', desc: 'Sees what could be', color: '#cc99ff'},
  {id: 'builder', name: 'Builder', desc: 'Makes things that last', color: '#cc7722'},
  {id: 'keeper', name: 'Keeper', desc: 'Holds what matters safe', color: '#558800'},
  {id: 'patriarch', name: 'Patriarch', desc: 'He stands — strength and wisdom', color: '#3366aa', img: '/img/avatars/patriarch-true.webp'},
  {id: 'oracle', name: 'Oracle', desc: 'Sees what is to come', color: '#ffffff'},
  {id: 'nomad', name: 'Nomad', desc: 'Home is everywhere', color: '#aa7755'},
  {id: 'artisan', name: 'Artisan', desc: 'Hands that create beauty', color: '#dd9955'},
  {id: 'sentinel2', name: 'Sentinel Prime', desc: 'The watcher of watchers', color: '#00ffcc'},
  /* ALIENS */
  {id: 'xenon', name: 'Xenon', desc: 'From beyond the stars', color: '#00ff99', img: '/img/avatars/xenon-true.webp'},
  {id: 'zeta', name: 'Zeta', desc: 'Gray, wise, ancient', color: '#99ffcc'},
  {id: 'nova', name: 'Nova', desc: 'Born in starfire', color: '#ff99ff', img: '/img/avatars/nova-true.webp'},
  {id: 'quark', name: 'Quark', desc: 'Small, strange, powerful', color: '#66ff66'},
  {id: 'nebula', name: 'Nebula', desc: 'Made of stardust', color: '#cc66ff'},
  /* DEMONS */
  {id: 'inferno', name: 'Inferno', desc: 'Burns with dark fire', color: '#ff2200'},
  {id: 'abyss', name: 'Abyss', desc: 'Looks back at you', color: '#220022'},
  {id: 'brimstone', name: 'Brimstone', desc: 'Sulfur and stone', color: '#ff6600'},
  {id: 'shadowdemon', name: 'Shadow', desc: 'Darkness given form', color: '#111111'},
  {id: 'malice', name: 'Malice', desc: 'Feeds on fear', color: '#990000'},
  /* CYBORGS */
  {id: 'chrome', name: 'Chrome', desc: 'Polished metal, mirror soul', color: '#dddddd', img: '/img/avatars/chrome-true.webp'},
  {id: 'vector', name: 'Vector', desc: 'Calculates everything', color: '#0088ff'},
  {id: 'nexus', name: 'Nexus', desc: 'Connected to all', color: '#00ffff'},
  {id: 'pulse', name: 'Pulse', desc: 'Heartbeat of the machine', color: '#ff0088'},
  /* ISLANDERS */
  {id: 'kai', name: 'Kai', desc: 'Child of the ocean', color: '#0099cc', img: '/img/avatars/kai-true.webp'},
  {id: 'leilani', name: 'Leilani', desc: 'Heavenly flower, graceful', color: '#ff99cc', img: '/img/avatars/leilani-true.webp'},
  {id: 'makoa', name: 'Makoa', desc: 'Brave heart, protector', color: '#cc6633'},
  {id: 'nalani', name: 'Nalani', desc: 'Calm as the heavens', color: '#66ccff'},
  {id: 'keala', name: 'Keala', desc: 'The path, guide', color: '#88aa55'},
  {id: 'kainalu', name: 'Kainalu', desc: 'Rides the ocean wave', color: '#0088aa'}
];
var CURRENT_AVATAR = 'circle';

/* PETS — 15 companions */
var PETS = [
  {id: 'pup', name: 'Pup', desc: 'Loyal, bouncy', color: '#cc8844'},
  {id: 'kit', name: 'Kit', desc: 'Curious, sleek', color: '#888899'},
  {id: 'cub', name: 'Cub', desc: 'Small but brave', color: '#aa7744'},
  {id: 'chick', name: 'Chick', desc: 'Tiny, chirpy', color: '#ffdd55'},
  {id: 'frog', name: 'Frog', desc: 'Hoppy, green', color: '#44cc44'},
  {id: 'fish', name: 'Fish', desc: 'Swims through air', color: '#4488ff'},
  {id: 'bird', name: 'Bird', desc: 'Sings sweetly', color: '#66ccff'},
  {id: 'bunny', name: 'Bunny', desc: 'Soft, quick', color: '#ffccdd'},
  {id: 'turtle', name: 'Turtle', desc: 'Slow and steady', color: '#558844'},
  {id: 'fox', name: 'Fox', desc: 'Clever, sly', color: '#ff8844'},
  {id: 'owl', name: 'Owl', desc: 'Wise, watches', color: '#997755'},
  {id: 'dragon', name: 'Dragon', desc: 'Tiny but mighty', color: '#ff4444'},
  {id: 'unicorn', name: 'Unicorn', desc: 'Magical, rare', color: '#ff88ff'},
  {id: 'robot', name: 'Robot', desc: 'Beep boop', color: '#888888'},
  {id: 'ghost', name: 'Ghost', desc: 'Spooky but friendly', color: '#ddddff'}
];
var ACTIVE_PET = null;
var PET_MESH = null, PET_ANIM = null;

/* WILDLIFE — a few animals for the map, not too much */
var WILD_ANIMALS = [];
var WILD_TYPES = [
  {id: 'deer', color: '#aa7744'},
  {id: 'rabbit', color: '#dddddd'},
  {id: 'eagle', color: '#664422'},
  {id: 'crab', color: '#ff6644'},
  {id: 'dolphin', color: '#4488cc'}
];
function buildDeer(){
  var g = new THREE.Group();
  var brown = new THREE.MeshStandardMaterial({color: 0x8b5a2b, roughness: 0.8});
  var dark = new THREE.MeshStandardMaterial({color: 0x222222});
  var body = new THREE.Mesh(new THREE.SphereGeometry(0.3, 14, 14), brown);
  body.scale.set(1.5, 1, 0.9); body.position.y = 0.6; g.add(body);
  