{
  "$schema": "https://ensembl3.shop/agents.schema.json",
  "version": "2.0.0",
  "publisher": {
    "name": "Ensembl3 Studio",
    "url": "https://ensembl3.shop",
    "contact": "hello@ensembl3.shop",
    "location": "Montréal, Canada"
  },
  "description": "Machine-readable catalog of the twenty Ensembl3 brand agents — hand-drawn SVG characters with per-character animations, each mapped to a UI surface (hero, 404, loading, empty state, error, success, onboarding, testimonial, tooltip, etc.). Each agent is a React component embedded directly in the site; no image files needed.",
  "agents": [
    { "name": "Mossy", "role": "Hero",        "trait": "the greeter",    "color": "lime",     "capability": "Waves you in at the top of the page. The agent every visitor meets first." },
    { "name": "Wail",  "role": "404",         "trait": "the lost one",   "color": "magenta",  "capability": "Apologises for the page you couldn't find. Sheds one slow tear." },
    { "name": "Buzz",  "role": "Loading",     "trait": "the courier",    "color": "sun",      "capability": "Bobs while requests resolve. Antennae wiggle on long fetches." },
    { "name": "Pim",   "role": "Empty state", "trait": "the wanderer",   "color": "electric", "capability": "Holds the spot when there's nothing to show yet. Eyes drift gently left to right." },
    { "name": "Chomp", "role": "Newsletter",  "trait": "the enthusiast", "color": "magenta",  "capability": "Bites into your inbox monthly. Wings flap with mild enthusiasm." },
    { "name": "Stilt", "role": "Footer",      "trait": "the doorman",    "color": "lilac",    "capability": "Stands tall at the bottom of the page. Waves you out." },
    { "name": "Grizz", "role": "Error",       "trait": "the grump",      "color": "magenta",  "capability": "Frowns at the broken thing. Tentacles in a state of frustration." },
    { "name": "Wink",  "role": "Success",     "trait": "the cheerer",    "color": "lime",     "capability": "One big eye, one big approval. Blinks happily after a save." },
    { "name": "Floof", "role": "Onboarding",  "trait": "the host",       "color": "electric", "capability": "Welcomes new arrivals. Bunny ears flop as you click through." },
    { "name": "Octy",  "role": "Testimonial", "trait": "the quoter",     "color": "sun",      "capability": "Repeats what people said, with six tentacles' worth of emphasis." },
    { "name": "Nub",   "role": "Tooltip",     "trait": "the explainer",  "color": "lilac",    "capability": "Wears a cap, talks softly. Drops the line you needed to read." },
    { "name": "Snooz", "role": "Inactive",    "trait": "the sleeper",    "color": "lilac",    "capability": "Catches Zs while you're away. Wakes when you move the mouse." },
    { "name": "Horn",  "role": "Cookie",      "trait": "the negotiator", "color": "sun",      "capability": "Three eyes, one ask. Picks the consent options he likes." },
    { "name": "Nix",   "role": "Promo",       "trait": "the trickster",  "color": "magenta",  "capability": "Sneaks the discount codes out an hour early. No questions asked." },
    { "name": "Spidr", "role": "Search",      "trait": "the seeker",     "color": "electric", "capability": "Indexes everything. Six legs creep over the document corpus." },
    { "name": "Mite",  "role": "Chat",        "trait": "the listener",   "color": "electric", "capability": "Polite ears, three eyes. Fetches a human if the question's bigger than him." },
    { "name": "Spry",  "role": "Toast",       "trait": "the toast",      "color": "lime",     "capability": "Pops up, says it briefly, leaves. The good kind of notification." },
    { "name": "Klaw",  "role": "Bug report",  "trait": "the debugger",   "color": "magenta",  "capability": "Pincers grab the stack trace and shake the answer loose." },
    { "name": "Bleb",  "role": "Signup",      "trait": "the bubbler",    "color": "lilac",    "capability": "Speckled blob, gentle smile. Holds your account creation form." },
    { "name": "Cyk",   "role": "2FA",         "trait": "the gatekeeper", "color": "lilac",    "capability": "One big eye watching the door. Counts six digits then lets you in." }
  ],
  "implementation": {
    "format": "Inline React SVG components",
    "source_file": "src/lib/monsters.tsx",
    "filter": "Animated turbulence + displacement (boiling-line effect, per-instance seed)",
    "animations": [
      "m-breathe (whole-body subtle scale, 3.4s)",
      "m-blink (eye scale, 5.2s)",
      "m-wave (arm rotate, 2.6s)",
      "m-bob (vertical translate, 2.2s)",
      "m-antenna-l / m-antenna-r (antenna wiggle, 1.4s)",
      "m-flap (wing rotate, 0.6s)",
      "m-ear-l / m-ear-r (bunny ear flop, 3.1s)",
      "m-tear (droplet fall, 3.6s)",
      "m-tentacle (limb sway, 2.4s, staggered)",
      "m-pim-look (Pim-specific eye drift, 5.6s)",
      "m-snooz-z (Snooz Z float-up, 2.4s)"
    ],
    "reduced_motion": "All animations disabled under prefers-reduced-motion: reduce."
  }
}
