{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "oneko",
  "title": "Oneko",
  "author": "dhrv <https://oneko.dhrv.pw>",
  "description": "Pixel cat for React with 12 skins, keep-out zones, favorite spots, pause and nap controls, adjustable bubbles, sounds, and configurable motion.",
  "dependencies": [],
  "registryDependencies": [],
  "files": [
    {
      "path": "components/laser-cursor.tsx",
      "content": "\"use client\";\n\nimport { useEffect } from \"react\";\nimport { mountLaserCursor } from \"@/lib/oneko/laser-cursor-dom\";\n\nexport function LaserCursor({ zIndex }: { zIndex: number }) {\n  useEffect(() => mountLaserCursor(zIndex), [zIndex]);\n  return null;\n}\n",
      "type": "registry:component"
    },
    {
      "path": "components/oneko.tsx",
      "content": "\"use client\";\n\n/**\n * Playground implementation — the classic “cat follows the cursor” idea comes from\n * oneko.js (MIT): https://github.com/adryd325/oneko.js/\n */\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { LaserCursor } from \"@/components/laser-cursor\";\nimport { useCatAnimation } from \"@/hooks/use-cat-animation\";\nimport { useOnekoPropsSync } from \"@/hooks/use-oneko-props-sync\";\nimport {\n  BUBBLE_COOLDOWN_FRAMES,\n  BUBBLE_DISPLAY_FRAMES,\n  DEFAULT_ANIMATION_SPEED,\n  DEFAULT_BUBBLE_CHANCE,\n  DEFAULT_FOLLOW_DISTANCE,\n  DEFAULT_IDLE_THRESHOLD_MS,\n  DEFAULT_OPACITY,\n  DEFAULT_ROTATION_AMOUNT,\n  DEFAULT_SCALE,\n  DEFAULT_SPEED,\n  DEFAULT_VOLUME,\n  DEFAULT_Z_INDEX,\n  FREERUN_CHANCE,\n  FREERUN_DURATION,\n} from \"@/lib/oneko/constants\";\nimport { createInitialCatState } from \"@/lib/oneko/initial-state\";\nimport type { CatActivityState, CatLiveState, OnekoProps } from \"@/lib/oneko/types\";\n\nexport type { CatActivityState, CatLiveState, OnekoProps };\nexport type { OnekoSkin } from \"@/lib/oneko/skins\";\nexport type { OnekoZone } from \"@/lib/oneko/zones\";\n\nexport default function Oneko({\n  paused = false,\n  followCursor = true,\n  sleepEnabled = true,\n  bubblePlacement = \"auto\",\n  bubbleScale = 1,\n  soundBasePath = \"/cat-sounds\",\n  storageKey = \"oneko\",\n  zones,\n  zoneAttractionChance,\n  zoneAttractionDuration,\n  skin = \"classic\",\n  persistPosition = true,\n  /** One below max so fixed UI can sit above the cat. */\n  zIndex = DEFAULT_Z_INDEX,\n  initialPos,\n  speed = DEFAULT_SPEED,\n  scale = DEFAULT_SCALE,\n  opacity = DEFAULT_OPACITY,\n  rotationAmount = DEFAULT_ROTATION_AMOUNT,\n  idleThreshold = DEFAULT_IDLE_THRESHOLD_MS,\n  meow = true,\n  onStateChange,\n  freerunChance = FREERUN_CHANCE,\n  freerunDuration = FREERUN_DURATION,\n  bubbleEnabled = true,\n  bubbleDisplayFrames = BUBBLE_DISPLAY_FRAMES,\n  bubbleCooldown = BUBBLE_COOLDOWN_FRAMES,\n  hueRotate = 0,\n  liveStateRef,\n  bubbleChance = DEFAULT_BUBBLE_CHANCE,\n  followDistance = DEFAULT_FOLLOW_DISTANCE,\n  animationSpeed = DEFAULT_ANIMATION_SPEED,\n  bubbleText = \"\",\n  volume = DEFAULT_VOLUME,\n  laserPointer = false,\n}: OnekoProps) {\n  const elRef = useRef<HTMLDivElement | null>(null);\n  const lastStateRef = useRef<CatActivityState>(\"idle\");\n  const onStateChangeRef = useRef(onStateChange);\n\n  useEffect(() => {\n    onStateChangeRef.current = onStateChange;\n  }, [onStateChange]);\n\n  const config = {\n    paused,\n    followCursor,\n    sleepEnabled,\n    bubblePlacement,\n    bubbleScale,\n    soundBasePath,\n    zones,\n    zoneAttractionChance,\n    zoneAttractionDuration,\n    speed,\n    scale,\n    opacity,\n    rotationAmount,\n    idleThreshold,\n    freerunChance,\n    freerunDuration,\n    bubbleEnabled,\n    bubbleDisplayFrames,\n    bubbleCooldown,\n    bubbleChance,\n    followDistance,\n    animationSpeed,\n    bubbleText,\n    meow,\n    volume,\n    laserPointer: laserPointer && followCursor && !paused,\n  };\n\n  const [initialState] = useState(() => createInitialCatState({ initialPos, ...config }));\n  const stateRef = useRef(initialState);\n\n  useCatAnimation({\n    stateRef,\n    elRef,\n    lastStateRef,\n    onStateChangeRef,\n    liveStateRef,\n    persistPosition,\n    storageKey,\n    zIndex,\n  });\n  useOnekoPropsSync(stateRef, elRef, {\n    ...config,\n    hueRotate,\n    skin,\n  });\n\n  return config.laserPointer ? <LaserCursor zIndex={zIndex} /> : null;\n}\n",
      "type": "registry:component"
    },
    {
      "path": "docs/skins.md",
      "content": "# Pixel-art skins\n\nOneko includes 12 unmodified sprite sheets. Each is a 256 × 128 PNG with an 8 × 4 grid of\n32-pixel frames, using the animation layout of [adryd325/oneko.js](https://github.com/adryd325/oneko.js).\n\nThe sheets were sourced from [oneko-swift](https://github.com/oneko-swift/oneko-swift/tree/8cc42f0689c009ec53561d5022597fccd7469337/Resources)\nat revision `8cc42f0689c009ec53561d5022597fccd7469337`. Artwork belongs to its original creators;\nthis project's MIT code license does not relicense the sprite art.\n\n| Skin ID                                                             | Credit / original source                                                                                                  |\n| ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |\n| `classic`                                                           | Masayuki Koba's original X11 oneko, via [adryd325/oneko.js](https://github.com/adryd325/oneko.js)                         |\n| `tora`                                                              | Original X11 bitmaps from [tie/oneko](https://github.com/tie/oneko), assembled with cat transparency masks by oneko-swift |\n| `catppuccin`                                                        | [k01e-01/catppuccineko](https://github.com/k01e-01/catppuccineko), MIT, using Catppuccin colors                           |\n| `maia`, `vaporwave`                                                 | [kyrie25/spicetify-oneko](https://github.com/kyrie25/spicetify-oneko)                                                     |\n| `black`, `gray`, `calico`, `ghost`, `silver`, `spirit`, `valentine` | Community art from the [Oneko Source Database](https://github.com/tallypaws/oneko_db), as credited by oneko-swift         |\n\nSee the upstream [credits](https://github.com/oneko-swift/oneko-swift#credits) for provenance.\n\n## Use a skin\n\n```tsx\n<Oneko skin=\"calico\" meow={false} />\n```\n\nChanging `skin` swaps the coat in place without resetting the cat's position or activity. Unknown\nskin IDs fall back to `classic`. `hueRotate` remains available for tinting; selecting a coat in the\nplayground clears the tint to show the original art.\n\n`lib/oneko/skins.ts` is the typed catalog. `lib/oneko/skin-sheets.json` contains the original PNG bytes\nas data URLs, so the component and its previews work without third-party image requests. Sites with\na Content Security Policy should allow `data:` in `img-src`. No smoothing, recoloring, or resampling\nis applied to the bundled art.\n\nTo add a coat, preserve the original file and attribution, add its data URL and catalog entry, then\nrun `pnpm test` and `pnpm run registry:build`. The skin tests decode every sheet and check that every\nanimation frame contains visible pixels.\n",
      "type": "registry:file",
      "target": "docs/oneko-skins.md"
    },
    {
      "path": "hooks/use-cat-animation.ts",
      "content": "\"use client\";\n\nimport { useEffect } from \"react\";\nimport { startCatAnimation } from \"@/lib/oneko/start-cat-animation\";\nimport type { CatActivityState, CatLiveState, CatRuntimeState } from \"@/lib/oneko/types\";\n\nexport function useCatAnimation({\n  stateRef,\n  elRef,\n  lastStateRef,\n  onStateChangeRef,\n  liveStateRef,\n  persistPosition,\n  storageKey,\n  zIndex,\n}: {\n  stateRef: { current: CatRuntimeState };\n  elRef: { current: HTMLDivElement | null };\n  lastStateRef: { current: CatActivityState };\n  onStateChangeRef: { current: ((state: CatActivityState) => void) | undefined };\n  liveStateRef?: { current: CatLiveState };\n  persistPosition: boolean;\n  storageKey: string;\n  zIndex: number;\n}) {\n  useEffect(() => {\n    if (typeof window === \"undefined\") {\n      return;\n    }\n\n    const prefersReduced =\n      window.matchMedia?.(\"(prefers-reduced-motion: reduce)\")?.matches ?? false;\n    if (prefersReduced) {\n      return;\n    }\n\n    return startCatAnimation({\n      stateRef,\n      elRef,\n      lastStateRef,\n      onStateChangeRef,\n      liveStateRef,\n      persistPosition,\n      storageKey,\n      zIndex,\n    });\n  }, [\n    stateRef,\n    elRef,\n    lastStateRef,\n    onStateChangeRef,\n    persistPosition,\n    storageKey,\n    zIndex,\n    liveStateRef,\n  ]);\n}\n",
      "type": "registry:hook"
    },
    {
      "path": "hooks/use-oneko-props-sync.ts",
      "content": "import { useEffect } from \"react\";\nimport { applyRuntimeConfig, type CatRuntimeConfig } from \"@/lib/oneko/runtime-config\";\nimport { getSkinSource, type OnekoSkin } from \"@/lib/oneko/skins\";\nimport type { CatRuntimeState } from \"@/lib/oneko/types\";\n\ntype SyncableProps = CatRuntimeConfig & { hueRotate: number; skin: OnekoSkin };\n\nexport function useOnekoPropsSync(\n  stateRef: { current: CatRuntimeState },\n  elRef: { current: HTMLDivElement | null },\n  props: SyncableProps,\n) {\n  // Reapply after a render, including when the animation DOM is remounted.\n  useEffect(() => {\n    const state = stateRef.current;\n    applyRuntimeConfig(state, props);\n    const el = elRef.current;\n    if (!el) return;\n    el.style.transform = `scale(${props.scale}) rotate(${state.currentRotation}deg)`;\n    el.style.opacity = String(props.opacity);\n    el.style.filter = props.hueRotate ? `hue-rotate(${props.hueRotate}deg)` : \"\";\n    el.style.backgroundImage = `url(\"${getSkinSource(props.skin)}\")`;\n  });\n}\n",
      "type": "registry:hook"
    },
    {
      "path": "lib/oneko/animation-loop.ts",
      "content": "import type { CatRuntimeState } from \"./types\";\n\n/** The sprite has ten frames per second; no need to wake on every screen refresh. */\nexport function startAnimationLoop(\n  stateRef: { current: CatRuntimeState },\n  frame: () => void,\n): () => void {\n  let timer: ReturnType<typeof setInterval> | undefined;\n  const syncVisibility = () => {\n    clearInterval(timer);\n    timer = undefined;\n    if (document.hidden) return;\n    timer = setInterval(() => {\n      if (!stateRef.current.paused && !stateRef.current.pausedCfg) frame();\n    }, 100);\n  };\n  document.addEventListener(\"visibilitychange\", syncVisibility);\n  syncVisibility();\n  return () => {\n    clearInterval(timer);\n    document.removeEventListener(\"visibilitychange\", syncVisibility);\n  };\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/animation/activity.ts",
      "content": "import type { CatActivityState, CatRuntimeState } from \"../types\";\nimport type { CatAnimationDeps } from \"./deps\";\n\nexport function getActivityLabel(deps: CatAnimationDeps): CatActivityState {\n  const s = deps.stateRef.current;\n  if (s.freerunMode) {\n    return \"freerun\";\n  }\n  if (s.idleAnimation === \"sleeping\") {\n    return \"sleeping\";\n  }\n  if (s.idleAnimation) {\n    return s.idleAnimation;\n  }\n  if (s.idleTime > 0) {\n    return \"idle\";\n  }\n  return \"moving\";\n}\n\nexport function getBubbleStatus(s: CatRuntimeState) {\n  if (s.bubbleVisible) {\n    return \"showing\";\n  }\n  if (s.bubbleCooldown > 0) {\n    return `cd ${s.bubbleCooldown}f`;\n  }\n  return \"ready\";\n}\n\nexport function playSound(deps: CatAnimationDeps, pool: string[]) {\n  const s = deps.stateRef.current;\n  if (!s.enableMeow || s.soundCooldown > 0 || pool.length === 0) return;\n  const url = pool[Math.floor(Math.random() * pool.length)];\n  const filename = url.slice(url.lastIndexOf(\"/\") + 1);\n  const audio = new Audio(`${s.soundBasePathCfg}/${filename}`);\n  audio.volume = s.soundVolumeCfg;\n  s.soundCooldown = 20;\n  audio.play().catch(() => {\n    s.soundCooldown = 0;\n  });\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/animation/bubbles.ts",
      "content": "import {\n  ALERT_MESSAGES,\n  CIRCLE_LOOP_MESSAGES,\n  IDLE_MESSAGES,\n  MOUSE_LOOP_WINDING_TRIGGER,\n  MOVING_MESSAGES,\n  SCRATCHING_MESSAGES,\n  SLEEPING_MESSAGES,\n  TILE,\n  TIRED_MESSAGES,\n  WALL_SCRATCH_MESSAGES,\n} from \"../constants\";\nimport type { CatAnimationDeps } from \"./deps\";\n\nexport function pickFromPool(deps: CatAnimationDeps, pool: string[]) {\n  const s = deps.stateRef.current;\n  let idx = Math.floor(Math.random() * pool.length);\n  if (idx === s.lastBubbleMsg) {\n    idx = (idx + 1) % pool.length;\n  }\n  s.lastBubbleMsg = idx;\n  return pool[idx];\n}\n\nfunction messageForIdleAnimation(deps: CatAnimationDeps): string | undefined {\n  const s = deps.stateRef.current;\n\n  if (s.idleAnimation === \"sleeping\") {\n    return pickFromPool(deps, SLEEPING_MESSAGES);\n  }\n  if (s.customBubbleText) {\n    return s.customBubbleText;\n  }\n  if (s.idleAnimation === \"tired\") {\n    return pickFromPool(deps, TIRED_MESSAGES);\n  }\n  if (s.idleAnimation === \"scratchSelf\") {\n    return pickFromPool(deps, SCRATCHING_MESSAGES);\n  }\n  if (s.idleAnimation === \"alert\") {\n    return pickFromPool(deps, ALERT_MESSAGES);\n  }\n  if (s.idleAnimation?.startsWith(\"scratchWall\")) {\n    return pickFromPool(deps, WALL_SCRATCH_MESSAGES);\n  }\n\n  return undefined;\n}\n\nfunction messageForActivity(deps: CatAnimationDeps): string {\n  const s = deps.stateRef.current;\n  const idleAnimationMessage = messageForIdleAnimation(deps);\n  if (idleAnimationMessage) {\n    return idleAnimationMessage;\n  }\n  if (s.idleTime > 0) {\n    return pickFromPool(deps, IDLE_MESSAGES);\n  }\n  if (Math.abs(s.mouseCircleWinding) >= MOUSE_LOOP_WINDING_TRIGGER) {\n    return pickFromPool(deps, CIRCLE_LOOP_MESSAGES);\n  }\n  return pickFromPool(deps, MOVING_MESSAGES);\n}\n\nfunction pickBubbleMessage(deps: CatAnimationDeps) {\n  return messageForActivity(deps);\n}\n\nexport function showBubble(deps: CatAnimationDeps) {\n  const s = deps.stateRef.current;\n  s.bubbleVisible = true;\n  s.bubbleTimer = s.bubbleDisplayFramesCfg;\n  deps.bubbleTextEl.textContent = pickBubbleMessage(deps);\n  deps.bubbleEl.style.opacity = \"1\";\n}\n\nexport function hideBubble(deps: CatAnimationDeps) {\n  const s = deps.stateRef.current;\n  s.bubbleVisible = false;\n  deps.bubbleEl.style.opacity = \"0\";\n  s.bubbleCooldown = s.bubbleCooldownFramesCfg;\n}\n\nfunction applyBubblePlacement(deps: CatAnimationDeps, showBelow: boolean) {\n  deps.bubbleEl.style.transformOrigin = \"top center\";\n  deps.bubbleEl.style.flexDirection = showBelow ? \"column-reverse\" : \"column\";\n  deps.bubbleTail.style.cssText = showBelow\n    ? \"transform:scaleY(-1);margin-top:0;margin-bottom:-2px;\"\n    : \"transform:none;margin-top:-2px;margin-bottom:0;\";\n}\n\nfunction positionBubble(deps: CatAnimationDeps) {\n  const s = deps.stateRef.current;\n  const catX = Math.floor(s.nekoPosX);\n  const catY = Math.floor(s.nekoPosY);\n  const vw = window.innerWidth;\n  const vh = window.innerHeight;\n  const bubbleW = deps.bubbleEl.offsetWidth || deps.bubbleTextEl.offsetWidth || 100;\n  const bubbleH = deps.bubbleEl.offsetHeight || 34;\n  const bubbleScale = s.scale * s.bubbleScaleCfg;\n  const margin = 6;\n  const halfCat = (TILE * s.scale) / 2;\n\n  const aboveY = Math.floor(catY - halfCat - 8 - bubbleH * bubbleScale);\n  const belowY = Math.floor(catY + halfCat + 8);\n  const showBelow =\n    s.bubblePlacementCfg === \"below\" ||\n    (s.bubblePlacementCfg === \"auto\" && aboveY < margin && catY < vh / 2);\n  const top = Math.max(\n    margin,\n    Math.min(vh - margin - bubbleH * bubbleScale, showBelow ? belowY : aboveY),\n  );\n  deps.bubbleEl.style.top = `${Math.round(top)}px`;\n  deps.bubbleEl.style.transform = `translateX(-50%) scale(${bubbleScale})`;\n  applyBubblePlacement(deps, showBelow);\n\n  const halfBubble = (bubbleW * bubbleScale) / 2;\n  let left = catX;\n  if (halfBubble * 2 > vw - margin * 2) {\n    left = vw / 2;\n  } else if (catX - halfBubble < margin) {\n    left = margin + halfBubble;\n  } else if (catX + halfBubble > vw - margin) {\n    left = vw - margin - halfBubble;\n  }\n  deps.bubbleEl.style.left = `${Math.round(left)}px`;\n}\n\nfunction tickVisibleBubble(deps: CatAnimationDeps) {\n  const s = deps.stateRef.current;\n  s.bubbleTimer -= 1;\n  if (s.bubbleTimer <= 0) {\n    hideBubble(deps);\n  }\n}\n\nfunction tickBubbleCooldown(deps: CatAnimationDeps) {\n  deps.stateRef.current.bubbleCooldown -= 1;\n}\n\nfunction shouldTriggerBubble(deps: CatAnimationDeps): boolean {\n  const s = deps.stateRef.current;\n  const idleFrameThreshold = Math.max(1, Math.round(s.idleThresholdMs / 100));\n  const idleRate = s.bubbleChanceCfg * 0.16;\n  const moveRate = s.bubbleChanceCfg * 0.01;\n  const loopW = Math.abs(s.mouseCircleWinding);\n  const loopComplaining = s.idleTime === 0 && loopW >= MOUSE_LOOP_WINDING_TRIGGER;\n  const moveRateBoost = loopComplaining ? 4.2 : 1;\n\n  if (s.idleTime > idleFrameThreshold && Math.random() < idleRate) {\n    return true;\n  }\n  return s.idleTime === 0 && Math.random() < moveRate * moveRateBoost;\n}\n\nexport function updateBubble(deps: CatAnimationDeps) {\n  const s = deps.stateRef.current;\n  if (!s.bubbleEnabledCfg) {\n    if (s.bubbleVisible) {\n      hideBubble(deps);\n    }\n    return;\n  }\n\n  positionBubble(deps);\n\n  if (s.bubbleVisible) {\n    tickVisibleBubble(deps);\n    return;\n  }\n\n  if (s.bubbleCooldown > 0) {\n    tickBubbleCooldown(deps);\n    return;\n  }\n\n  if (shouldTriggerBubble(deps)) {\n    showBubble(deps);\n  }\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/animation/debug-render.ts",
      "content": "import { CELL_SIZE, debugColor } from \"../constants\";\nimport type { ObstacleRect, PathPoint } from \"../types\";\nimport { getActivityLabel, getBubbleStatus } from \"./activity\";\nimport type { CatAnimationDeps } from \"./deps\";\n\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\nfunction clearSVGGroup(deps: CatAnimationDeps, id: string) {\n  const group = deps.debugSVG.querySelector(`#${id}`);\n  if (group) {\n    group.innerHTML = \"\";\n  }\n}\n\nfunction updateBlockedCells(deps: CatAnimationDeps, grid: Uint8Array, cols: number, rows: number) {\n  const group = deps.debugSVG.querySelector(\"#oneko-blocked\");\n  if (!group) {\n    return;\n  }\n  group.innerHTML = \"\";\n  for (let r = 0; r < rows; r++) {\n    for (let c = 0; c < cols; c++) {\n      if (grid[r * cols + c] === 1) {\n        const rect = document.createElementNS(SVG_NS, \"rect\");\n        rect.setAttribute(\"x\", String(c * CELL_SIZE + 0.5));\n        rect.setAttribute(\"y\", String(r * CELL_SIZE + 0.5));\n        rect.setAttribute(\"width\", String(CELL_SIZE - 1));\n        rect.setAttribute(\"height\", String(CELL_SIZE - 1));\n        rect.setAttribute(\"fill\", \"none\");\n        rect.setAttribute(\"stroke\", debugColor.dangerSoft);\n        rect.setAttribute(\"stroke-width\", \"0.5\");\n        group.appendChild(rect);\n      }\n    }\n  }\n}\n\nfunction updateObstacleOutlines(deps: CatAnimationDeps, rects: ObstacleRect[]) {\n  const group = deps.debugSVG.querySelector(\"#oneko-obstacles\");\n  if (!group) {\n    return;\n  }\n  group.innerHTML = \"\";\n  for (const r of rects) {\n    const rect = document.createElementNS(SVG_NS, \"rect\");\n    rect.setAttribute(\"x\", String(r.left));\n    rect.setAttribute(\"y\", String(r.top));\n    rect.setAttribute(\"width\", String(r.right - r.left));\n    rect.setAttribute(\"height\", String(r.bottom - r.top));\n    rect.setAttribute(\"fill\", \"none\");\n    rect.setAttribute(\"stroke\", debugColor.dangerSoft);\n    rect.setAttribute(\"stroke-width\", \"0.5\");\n    rect.setAttribute(\"stroke-dasharray\", \"3 3\");\n    group.appendChild(rect);\n  }\n}\n\nfunction updateDebugPath(deps: CatAnimationDeps, path: PathPoint[], catX: number, catY: number) {\n  const group = deps.debugSVG.querySelector(\"#oneko-path\");\n  if (!group) {\n    return;\n  }\n  group.innerHTML = \"\";\n  if (path.length === 0) {\n    return;\n  }\n\n  const points = `${catX},${catY} ${path.map((p) => `${p.x},${p.y}`).join(\" \")}`;\n  const line = document.createElementNS(SVG_NS, \"polyline\");\n  line.setAttribute(\"points\", points);\n  line.setAttribute(\"fill\", \"none\");\n  line.setAttribute(\"stroke\", debugColor.trail);\n  line.setAttribute(\"stroke-width\", \"1.5\");\n  line.style.transition = \"all 0.15s ease\";\n  group.appendChild(line);\n\n  for (const pt of path) {\n    const dot = document.createElementNS(SVG_NS, \"circle\");\n    dot.setAttribute(\"cx\", String(pt.x));\n    dot.setAttribute(\"cy\", String(pt.y));\n    dot.setAttribute(\"r\", \"2\");\n    dot.setAttribute(\"fill\", debugColor.trailDot);\n    group.appendChild(dot);\n  }\n}\n\nfunction updateDebugHUD(deps: CatAnimationDeps) {\n  const s = deps.stateRef.current;\n  const activity = getActivityLabel(deps);\n  const stateColor = s.freerunMode ? debugColor.danger : debugColor.accent;\n  const td = \"padding:1px 0;\";\n  const labelTd = `${td}font-weight:bold;color:${debugColor.panelSubtle};padding-right:12px;`;\n  const valueTd = `${td}text-align:right;`;\n  const row = (label: string, value: string, color?: string) => {\n    const valStyle = color ? `${valueTd}color:${color}` : valueTd;\n    return `<tr><td style=\"${labelTd}\">${label}</td><td style=\"${valStyle}\">${value}</td></tr>`;\n  };\n\n  const speed = Math.hypot(s.nekoVelX, s.nekoVelY);\n  const distToMouse = Math.hypot(s.mousePosX - s.nekoPosX, s.mousePosY - s.nekoPosY);\n\n  deps.debugHUD.innerHTML = `<table style=\"border-collapse:collapse;width:100%\">${[\n    row(\"state\", activity, stateColor),\n    row(\"pos\", `${Math.round(s.nekoPosX)}, ${Math.round(s.nekoPosY)}`),\n    row(\"vel\", `${s.nekoVelX.toFixed(1)}, ${s.nekoVelY.toFixed(1)}`),\n    row(\"speed\", speed.toFixed(1)),\n    row(\"target\", `${Math.round(s.mousePosX)}, ${Math.round(s.mousePosY)}`),\n    row(\"dist\", `${Math.round(distToMouse)}px`),\n    row(\"idle\", `${s.idleTime}f`),\n    row(\"frame\", `${s.frameCount}`),\n    row(\"trail\", `${s.currentPath.length} pts`),\n    row(\"step\", `${s.pathWaypointIdx}/${s.currentPath.length}`),\n    row(\"obstacles\", `${s.obstacleRects.length}`),\n    row(\"grid\", `${s.gridCols} x ${s.gridRows}`),\n    row(\"freerun\", s.freerunMode ? `${s.freerunTimer}f left` : \"off\"),\n    row(\"bubble\", getBubbleStatus(s)),\n  ].join(\"\")}</table>`;\n}\n\nexport function createDebugRenderer(deps: CatAnimationDeps) {\n  let lastBlockedGrid: Uint8Array | null = null;\n\n  const renderDebug = () => {\n    const s = deps.stateRef.current;\n    if (s.grid !== lastBlockedGrid) {\n      lastBlockedGrid = s.grid;\n      if (s.grid) {\n        updateBlockedCells(deps, s.grid, s.gridCols, s.gridRows);\n      } else {\n        clearSVGGroup(deps, \"oneko-blocked\");\n      }\n      updateObstacleOutlines(deps, s.obstacleRects);\n    }\n    updateDebugPath(deps, s.currentPath, s.nekoPosX, s.nekoPosY);\n    updateDebugHUD(deps);\n  };\n\n  const maybeRenderDebug = () => {\n    if (deps.stateRef.current.debugMode) {\n      renderDebug();\n    }\n  };\n\n  return { renderDebug, maybeRenderDebug };\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/animation/deps.ts",
      "content": "import type { CatActivityState, CatLiveState, CatRuntimeState } from \"../types\";\n\nexport interface CatAnimationDeps {\n  stateRef: { current: CatRuntimeState };\n  el: HTMLDivElement;\n  bubbleEl: HTMLDivElement;\n  bubbleTextEl: HTMLDivElement;\n  bubbleTail: HTMLDivElement;\n  debugSVG: SVGSVGElement;\n  debugHUD: HTMLDivElement;\n  lastStateRef: { current: CatActivityState };\n  onStateChangeRef: { current: ((state: CatActivityState) => void) | undefined };\n  liveStateRef?: { current: CatLiveState };\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/animation/frame.ts",
      "content": "import { refreshZones, updateZoneTarget } from \"../zone-runtime\";\nimport { createDebugRenderer } from \"./debug-render\";\nimport type { CatAnimationDeps } from \"./deps\";\nimport { tickLiveState } from \"./frame/tick-live-state\";\nimport { tickMovement } from \"./frame/tick-movement\";\nimport { tickPrelude } from \"./frame/tick-prelude\";\nimport { tickSounds } from \"./frame/tick-sounds\";\n\nexport function createFrameLoop(deps: CatAnimationDeps) {\n  const { maybeRenderDebug } = createDebugRenderer(deps);\n\n  const frame = () => {\n    const s = deps.stateRef.current;\n    if (s.pausedCfg) return;\n    if (!refreshZones(deps)) return;\n    tickPrelude(s);\n    updateZoneTarget(s, window.innerWidth, window.innerHeight);\n    const dist = Math.hypot(s.mousePosX - s.nekoPosX, s.mousePosY - s.nekoPosY);\n    tickMovement(deps, dist);\n    maybeRenderDebug();\n    const currentState = tickSounds(deps);\n    tickLiveState(deps, dist, currentState);\n  };\n\n  return frame;\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/animation/frame/interrupt-idle.ts",
      "content": "import type { CatRuntimeState } from \"../../types\";\n\nexport function interruptIdleIfChasing(s: CatRuntimeState, dist: number) {\n  if (s.idleAnimation && dist > 32 && !s.stateLocked && !s.noFollow) {\n    s.idleAnimation = null;\n    s.idleAnimationFrame = 0;\n    s.idleTime = 0;\n  }\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/animation/frame/tick-laser.ts",
      "content": "import { LASER_CATCH_POOL } from \"../../constants\";\nimport { playSound } from \"../activity\";\nimport type { CatAnimationDeps } from \"../deps\";\n\nexport function tickLaser(deps: CatAnimationDeps, dist: number) {\n  const s = deps.stateRef.current;\n  if (!s.laserPointerCfg) {\n    return;\n  }\n\n  const close = dist < s.followDistanceCfg + 4;\n  if (close && !s.laserCaught) {\n    s.laserCaught = true;\n    playSound(deps, LASER_CATCH_POOL);\n  } else if (!close && dist > s.followDistanceCfg + 24) {\n    s.laserCaught = false;\n  }\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/animation/frame/tick-live-state.ts",
      "content": "import type { CatActivityState } from \"../../types\";\nimport type { CatAnimationDeps } from \"../deps\";\n\nexport function tickLiveState(\n  deps: CatAnimationDeps,\n  dist: number,\n  currentState: CatActivityState,\n) {\n  if (!deps.liveStateRef?.current) {\n    return;\n  }\n\n  const s = deps.stateRef.current;\n  const ls = deps.liveStateRef.current;\n  ls.state = currentState;\n  ls.posX = s.nekoPosX;\n  ls.posY = s.nekoPosY;\n  ls.velMag = Math.hypot(s.nekoVelX, s.nekoVelY);\n  ls.idleTime = s.idleTime;\n  ls.distToMouse = dist;\n  ls.frameCount = s.frameCount;\n  ls.freerunActive = s.freerunMode;\n  ls.freerunTimer = s.freerunTimer;\n  ls.bubbleVisible = s.bubbleVisible;\n  ls.pathLength = s.currentPath.length;\n  ls.obstacleCount = s.obstacleRects.length;\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/animation/frame/tick-movement.ts",
      "content": "import { updateBubble } from \"../bubbles\";\nimport type { CatAnimationDeps } from \"../deps\";\nimport { recalcPathIfNeeded, refreshGridIfNeeded } from \"../grid\";\nimport { freezeLockedState, updateIdleAnimation } from \"../idle\";\nimport { followPath } from \"../movement\";\nimport { interruptIdleIfChasing } from \"./interrupt-idle\";\nimport { tickLaser } from \"./tick-laser\";\n\nexport function tickMovement(deps: CatAnimationDeps, dist: number) {\n  const s = deps.stateRef.current;\n  refreshGridIfNeeded(deps);\n  const target = s.zoneState.movementTarget;\n  const targetDistance = Math.hypot(target.x - s.nekoPosX, target.y - s.nekoPosY);\n  interruptIdleIfChasing(s, targetDistance);\n  recalcPathIfNeeded(deps);\n  updateBubble(deps);\n  tickLaser(deps, dist);\n\n  if (!updateIdleAnimation(deps) && !freezeLockedState(deps)) {\n    followPath(deps, targetDistance);\n  }\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/animation/frame/tick-prelude.ts",
      "content": "import { MOUSE_LOOP_WINDING_DECAY } from \"../../constants\";\nimport type { CatRuntimeState } from \"../../types\";\n\nexport function tickPrelude(s: CatRuntimeState) {\n  s.frameCount += 1;\n  s.mouseCircleWinding *= MOUSE_LOOP_WINDING_DECAY;\n  if (Math.abs(s.mouseCircleWinding) < 0.35) {\n    s.mouseCircleWinding = 0;\n    s.loopPrevAngle = null;\n  }\n  s.soundCooldown = Math.max(0, s.soundCooldown - 1);\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/animation/frame/tick-sounds.ts",
      "content": "import { SOUND_POOLS } from \"../../constants\";\nimport type { CatActivityState } from \"../../types\";\nimport { getActivityLabel, playSound } from \"../activity\";\nimport type { CatAnimationDeps } from \"../deps\";\n\nfunction tickAmbientSounds(deps: CatAnimationDeps, currentState: CatActivityState) {\n  const s = deps.stateRef.current;\n  const { idleTime, frameCount } = s;\n\n  if (currentState === \"idle\" && idleTime > 0 && idleTime % 60 === 0) {\n    playSound(deps, SOUND_POOLS.idle);\n  } else if (currentState === \"sleeping\" && frameCount % 100 === 0) {\n    playSound(deps, SOUND_POOLS.sleeping);\n  } else if (currentState === \"moving\" && frameCount % 80 === 0) {\n    playSound(deps, SOUND_POOLS.moving);\n  }\n}\n\nexport function tickSounds(deps: CatAnimationDeps): CatActivityState {\n  const currentState = getActivityLabel(deps);\n\n  if (currentState !== deps.lastStateRef.current) {\n    deps.lastStateRef.current = currentState;\n    deps.onStateChangeRef.current?.(currentState);\n    const pool = SOUND_POOLS[currentState];\n    if (pool) {\n      playSound(deps, pool);\n    }\n  }\n\n  tickAmbientSounds(deps, currentState);\n  return currentState;\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/animation/grid.ts",
      "content": "import {\n  CELL_SIZE,\n  OBSTACLE_INTERVAL,\n  PATH_RECALC_INTERVAL,\n  PATH_RECALC_MOUSE_CELLS,\n} from \"../constants\";\nimport { buildGrid, collectObstacles } from \"../pathfinding\";\nimport type { CatAnimationDeps } from \"./deps\";\nimport { recalculatePath } from \"./movement\";\n\nexport function refreshGridIfNeeded(deps: CatAnimationDeps) {\n  const s = deps.stateRef.current;\n  if (s.frameCount - s.lastObstacleRefresh < OBSTACLE_INTERVAL) {\n    return;\n  }\n  const softObstacles = collectObstacles().filter(\n    (rect) =>\n      !s.zoneState.favorites.some(\n        ({ rect: favorite }) =>\n          rect.left >= favorite.left &&\n          rect.right <= favorite.right &&\n          rect.top >= favorite.top &&\n          rect.bottom <= favorite.bottom,\n      ),\n  );\n  s.obstacleRects = [...softObstacles, ...s.zoneState.blocked];\n  s.lastObstacleRefresh = s.frameCount;\n  s.gridCols = Math.ceil(window.innerWidth / CELL_SIZE);\n  s.gridRows = Math.ceil(window.innerHeight / CELL_SIZE);\n  s.grid = buildGrid(s.obstacleRects, s.gridCols, s.gridRows);\n  s.lastPathRecalcFrame = -PATH_RECALC_INTERVAL;\n}\n\nexport function recalcPathIfNeeded(deps: CatAnimationDeps) {\n  const s = deps.stateRef.current;\n  const mouseCol = Math.floor(s.zoneState.movementTarget.x / CELL_SIZE);\n  const mouseRow = Math.floor(s.zoneState.movementTarget.y / CELL_SIZE);\n  const mouseMoved =\n    Math.abs(mouseCol - s.lastPathTargetCol) > PATH_RECALC_MOUSE_CELLS ||\n    Math.abs(mouseRow - s.lastPathTargetRow) > PATH_RECALC_MOUSE_CELLS;\n  if (s.frameCount - s.lastPathRecalcFrame >= PATH_RECALC_INTERVAL || mouseMoved) {\n    recalculatePath(deps);\n  }\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/animation/idle.ts",
      "content": "import { defaultSpriteSets, IDLE_ANIMATION_DURATIONS, SLEEPING_MESSAGES } from \"../constants\";\nimport type { CatRuntimeState, IdleActivityState } from \"../types\";\nimport { pickFromPool } from \"./bubbles\";\nimport type { CatAnimationDeps } from \"./deps\";\nimport { clearRotation, setSprite } from \"./sprites\";\n\nfunction idleFrameThreshold(s: CatRuntimeState) {\n  return Math.max(1, Math.round(s.idleThresholdMs / 100));\n}\n\nfunction wallScratchAnimations(s: CatRuntimeState): IdleActivityState[] {\n  return [\n    s.nekoPosX <= 18 && \"scratchWallW\",\n    s.nekoPosX >= window.innerWidth - 18 && \"scratchWallE\",\n    s.nekoPosY <= 18 && \"scratchWallN\",\n    s.nekoPosY >= window.innerHeight - 18 && \"scratchWallS\",\n  ].filter(Boolean) as IdleActivityState[];\n}\n\nfunction pickRandomIdleAnimation(s: CatRuntimeState): IdleActivityState {\n  const available: IdleActivityState[] = [\n    \"scratchSelf\",\n    ...(s.sleepEnabledCfg ? [\"tired\" as const] : []),\n    ...wallScratchAnimations(s),\n  ];\n  return available[Math.floor(Math.random() * available.length)];\n}\n\nfunction startSleepingAnimation(deps: CatAnimationDeps) {\n  const s = deps.stateRef.current;\n  s.idleAnimation = \"sleeping\";\n  if (s.bubbleVisible) {\n    deps.bubbleTextEl.textContent = pickFromPool(deps, SLEEPING_MESSAGES);\n  }\n}\n\nexport function maybeStartIdleAnimation(deps: CatAnimationDeps) {\n  const s = deps.stateRef.current;\n  const threshold = idleFrameThreshold(s);\n  if (s.idleAnimation != null || s.idleTime < threshold || Math.random() >= 0.1) {\n    return;\n  }\n\n  s.idleAnimationFrame = 0;\n  if (s.sleepEnabledCfg && s.idleTime > threshold * 3) {\n    startSleepingAnimation(deps);\n    return;\n  }\n\n  s.idleAnimation = pickRandomIdleAnimation(s);\n}\n\nfunction computeIdleSpriteIndex(\n  animName: IdleActivityState,\n  frame: number,\n  animationSpeed: number,\n): number {\n  const sprites = defaultSpriteSets[animName as keyof typeof defaultSpriteSets];\n  const baseDuration = IDLE_ANIMATION_DURATIONS[animName] ?? (sprites ? sprites.length * 8 : 8);\n  const duration = Math.max(1, Math.round(baseDuration / animationSpeed));\n  const frameCount = sprites?.length || 1;\n  const framesPerSprite = Math.max(1, Math.floor(duration / frameCount));\n  return Math.floor(frame / framesPerSprite) % frameCount;\n}\n\nfunction getIdleAnimationDuration(animName: IdleActivityState, animationSpeed: number): number {\n  const sprites = defaultSpriteSets[animName as keyof typeof defaultSpriteSets];\n  const baseDuration = IDLE_ANIMATION_DURATIONS[animName] ?? (sprites ? sprites.length * 8 : 8);\n  return Math.max(1, Math.round(baseDuration / animationSpeed));\n}\n\nfunction resetOrLoopIdleAnimation(\n  s: CatRuntimeState,\n  animName: IdleActivityState,\n  duration: number,\n) {\n  if (s.idleAnimationFrame < duration || animName === \"sleeping\") {\n    return;\n  }\n\n  if (s.stateLocked || s.noFollow) {\n    s.idleAnimationFrame = 0;\n    return;\n  }\n\n  s.idleAnimation = null;\n  s.idleAnimationFrame = 0;\n}\n\nexport function updateIdleAnimation(deps: CatAnimationDeps) {\n  const s = deps.stateRef.current;\n  if (!s.sleepEnabledCfg && (s.idleAnimation === \"sleeping\" || s.idleAnimation === \"tired\")) {\n    s.idleAnimation = null;\n    s.idleAnimationFrame = 0;\n    s.idleTime = 0;\n  }\n  if (!s.idleAnimation) {\n    return false;\n  }\n\n  const animName = s.idleAnimation;\n  const spriteIndex = computeIdleSpriteIndex(animName, s.idleAnimationFrame, s.animationSpeedCfg);\n  setSprite(deps, animName, spriteIndex);\n  clearRotation(deps);\n  s.idleAnimationFrame += 1;\n  resetOrLoopIdleAnimation(s, animName, getIdleAnimationDuration(animName, s.animationSpeedCfg));\n  return true;\n}\n\nexport function freezeLockedState(deps: CatAnimationDeps) {\n  const s = deps.stateRef.current;\n  if (!(s.stateLocked || s.noFollow) || (s.freerunMode && !s.noFollow)) {\n    return false;\n  }\n\n  s.nekoVelX *= 0.5;\n  s.nekoVelY *= 0.5;\n  s.idleTime = Math.max(s.idleTime, 1);\n  setSprite(deps, \"idle\", s.frameCount);\n  clearRotation(deps);\n  return true;\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/animation/mouse.ts",
      "content": "import { MOUSE_LOOP_MIN_STEP, MOUSE_LOOP_WINDING_CAP } from \"../constants\";\nimport type { CatAnimationDeps } from \"./deps\";\n\nexport function createMouseMoveHandler(deps: CatAnimationDeps) {\n  return (ev: MouseEvent) => {\n    const mx = ev.clientX;\n    const my = ev.clientY;\n    const s = deps.stateRef.current;\n    const px = s.mousePosX;\n    const py = s.mousePosY;\n    const dx = mx - px;\n    const dy = my - py;\n    const dist = Math.hypot(dx, dy);\n    if (dist >= MOUSE_LOOP_MIN_STEP) {\n      const ang = Math.atan2(dy, dx);\n      if (s.loopPrevAngle !== null) {\n        let d = ang - s.loopPrevAngle;\n        while (d > Math.PI) {\n          d -= 2 * Math.PI;\n        }\n        while (d < -Math.PI) {\n          d += 2 * Math.PI;\n        }\n        s.mouseCircleWinding += d;\n        if (s.mouseCircleWinding > MOUSE_LOOP_WINDING_CAP) {\n          s.mouseCircleWinding = MOUSE_LOOP_WINDING_CAP;\n        } else if (s.mouseCircleWinding < -MOUSE_LOOP_WINDING_CAP) {\n          s.mouseCircleWinding = -MOUSE_LOOP_WINDING_CAP;\n        }\n      }\n      s.loopPrevAngle = ang;\n    }\n    s.mousePosX = mx;\n    s.mousePosY = my;\n  };\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/animation/movement.ts",
      "content": "import { constrainZoneMovement } from \"../zones\";\nimport {\n  CELL_SIZE,\n  FREERUN_MESSAGES,\n  MAX_VEL_FACTOR,\n  STEER_LERP,\n  TILE,\n  WAYPOINT_REACH_DIST,\n} from \"../constants\";\nimport { findRoute, nearestWalkable, worldToCell } from \"../pathfinding\";\nimport type { CatAnimationDeps } from \"./deps\";\nimport { maybeStartIdleAnimation } from \"./idle\";\nimport { clearRotation, directionFromDelta, setSprite } from \"./sprites\";\n\nexport function recalculatePath(deps: CatAnimationDeps): void {\n  const s = deps.stateRef.current;\n  const { grid, gridCols: cols, gridRows: rows } = s;\n  if (!grid || cols === 0 || rows === 0) {\n    s.currentPath = [];\n    return;\n  }\n\n  const catCell = nearestWalkable(\n    worldToCell(s.nekoPosX, s.nekoPosY, cols, rows),\n    grid,\n    cols,\n    rows,\n  );\n  const mouseCell = nearestWalkable(\n    worldToCell(s.zoneState.movementTarget.x, s.zoneState.movementTarget.y, cols, rows),\n    grid,\n    cols,\n    rows,\n  );\n\n  s.currentPath = findRoute(catCell, mouseCell, grid, cols, rows);\n  s.pathWaypointIdx = 0;\n  s.lastPathRecalcFrame = s.frameCount;\n  s.lastPathTargetCol = Math.floor(s.zoneState.movementTarget.x / CELL_SIZE);\n  s.lastPathTargetRow = Math.floor(s.zoneState.movementTarget.y / CELL_SIZE);\n}\n\nfunction getNextWaypointTarget(deps: CatAnimationDeps) {\n  const s = deps.stateRef.current;\n  const { currentPath: path } = s;\n  if (path.length === 0) {\n    return { x: s.zoneState.movementTarget.x, y: s.zoneState.movementTarget.y };\n  }\n  while (s.pathWaypointIdx < path.length - 1) {\n    const wp = path[s.pathWaypointIdx];\n    if (Math.hypot(wp.x - s.nekoPosX, wp.y - s.nekoPosY) < WAYPOINT_REACH_DIST) {\n      s.pathWaypointIdx++;\n    } else {\n      break;\n    }\n  }\n  return path[s.pathWaypointIdx];\n}\n\nfunction moveToward(deps: CatAnimationDeps, targetX: number, targetY: number) {\n  const s = deps.stateRef.current;\n  const dx = targetX - s.nekoPosX;\n  const dy = targetY - s.nekoPosY;\n  const dist = Math.hypot(dx, dy);\n  if (dist < 1) {\n    s.nekoVelX *= 0.5;\n    s.nekoVelY *= 0.5;\n    return;\n  }\n  const currentSpeed = s.currentSpeed;\n  s.nekoVelX += ((dx / dist) * currentSpeed - s.nekoVelX) * STEER_LERP;\n  s.nekoVelY += ((dy / dist) * currentSpeed - s.nekoVelY) * STEER_LERP;\n  const velMag = Math.hypot(s.nekoVelX, s.nekoVelY);\n  const maxVel = currentSpeed * MAX_VEL_FACTOR;\n  const clampedMag = Math.min(velMag, maxVel);\n  if (velMag > maxVel) {\n    s.nekoVelX = (s.nekoVelX / velMag) * maxVel;\n    s.nekoVelY = (s.nekoVelY / velMag) * maxVel;\n  }\n  const from = { x: s.nekoPosX, y: s.nekoPosY };\n  const proposed = {\n    x: Math.max(16, Math.min(window.innerWidth - 16, s.nekoPosX + s.nekoVelX)),\n    y: Math.max(16, Math.min(window.innerHeight - 16, s.nekoPosY + s.nekoVelY)),\n  };\n  const safe = constrainZoneMovement(from, proposed, s.zoneState.blocked);\n  if (safe.x !== proposed.x || safe.y !== proposed.y) {\n    s.nekoVelX = 0;\n    s.nekoVelY = 0;\n  }\n  if (safe.x === from.x && safe.y === from.y && (safe.x !== proposed.x || safe.y !== proposed.y)) {\n    restNearCursor(deps);\n    return;\n  }\n  s.nekoPosX = safe.x;\n  s.nekoPosY = safe.y;\n  s.nekoPosX = Math.max(16, Math.min(window.innerWidth - 16, s.nekoPosX));\n  s.nekoPosY = Math.max(16, Math.min(window.innerHeight - 16, s.nekoPosY));\n  deps.el.style.left = `${Math.floor(s.nekoPosX - TILE / 2)}px`;\n  deps.el.style.top = `${Math.floor(s.nekoPosY - TILE / 2)}px`;\n  const dir = directionFromDelta(s.nekoVelX, s.nekoVelY) ?? \"idle\";\n  setSprite(deps, dir, s.frameCount);\n  if (clampedMag > 0.5 && s.rotationAmount > 0) {\n    const velAngle = Math.atan2(s.nekoVelY, s.nekoVelX) * (180 / Math.PI);\n    s.currentRotation = (velAngle / 180) * s.rotationAmount;\n  } else {\n    s.currentRotation = 0;\n  }\n  deps.el.style.transform = `scale(${s.scale}) rotate(${s.currentRotation}deg)`;\n  s.idleTime = 0;\n}\n\nfunction pickFreerunMessage(deps: CatAnimationDeps) {\n  const s = deps.stateRef.current;\n  let idx = Math.floor(Math.random() * FREERUN_MESSAGES.length);\n  if (idx === s.lastFreerunMsg) {\n    idx = (idx + 1) % FREERUN_MESSAGES.length;\n  }\n  s.lastFreerunMsg = idx;\n  return FREERUN_MESSAGES[idx];\n}\n\nfunction enterFreerun(deps: CatAnimationDeps) {\n  const s = deps.stateRef.current;\n  s.freerunMode = true;\n  s.freerunTimer = s.freerunDurationCfg;\n  s.bubbleVisible = true;\n  s.bubbleTimer = s.freerunDurationCfg;\n  s.bubbleCooldown = 0;\n  deps.bubbleTextEl.textContent = pickFreerunMessage(deps);\n  deps.bubbleEl.style.opacity = \"1\";\n}\n\nfunction tickFreerun(deps: CatAnimationDeps) {\n  const s = deps.stateRef.current;\n  s.freerunTimer -= 1;\n  if (s.freerunTimer <= 0) {\n    const keepAlive = s.stateLocked;\n    s.freerunMode = keepAlive;\n    if (keepAlive) {\n      s.freerunTimer = s.freerunDurationCfg;\n    }\n  }\n  moveToward(deps, s.zoneState.movementTarget.x, s.zoneState.movementTarget.y);\n}\n\nfunction restNearCursor(deps: CatAnimationDeps) {\n  const s = deps.stateRef.current;\n  setSprite(deps, \"idle\", s.frameCount);\n  clearRotation(deps);\n  s.nekoVelX *= 0.5;\n  s.nekoVelY *= 0.5;\n  s.idleTime += 1;\n  if (!(s.stateLocked || s.noFollow)) {\n    s.freerunMode = false;\n  }\n  maybeStartIdleAnimation(deps);\n}\n\nfunction chaseCursor(deps: CatAnimationDeps) {\n  const s = deps.stateRef.current;\n  if (s.freerunMode) {\n    tickFreerun(deps);\n    return;\n  }\n  if (!s.noFollow && Math.random() < s.freerunChanceCfg) {\n    enterFreerun(deps);\n    moveToward(deps, s.zoneState.movementTarget.x, s.zoneState.movementTarget.y);\n    return;\n  }\n  const target = getNextWaypointTarget(deps);\n  moveToward(deps, target.x, target.y);\n}\n\nexport function followPath(deps: CatAnimationDeps, overallDist: number) {\n  const s = deps.stateRef.current;\n  const lastWaypoint = s.currentPath.at(-1);\n  const reachedPathEnd =\n    !s.freerunMode &&\n    lastWaypoint &&\n    s.pathWaypointIdx === s.currentPath.length - 1 &&\n    Math.hypot(lastWaypoint.x - s.nekoPosX, lastWaypoint.y - s.nekoPosY) < s.followDistanceCfg;\n  if (overallDist < s.followDistanceCfg || reachedPathEnd) {\n    restNearCursor(deps);\n    return;\n  }\n  chaseCursor(deps);\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/animation/sprites.ts",
      "content": "import { defaultSpriteSets, DIRECTION_RANGES, TILE } from \"../constants\";\nimport type { CatAnimationDeps } from \"./deps\";\n\nexport function setSprite(\n  deps: CatAnimationDeps,\n  name: keyof typeof defaultSpriteSets | string,\n  frame: number,\n) {\n  const sprites = defaultSpriteSets[name as keyof typeof defaultSpriteSets];\n  if (!sprites?.length) {\n    return;\n  }\n  const sprite = sprites[frame % sprites.length];\n  deps.el.style.backgroundPosition = `${sprite[0] * TILE}px ${sprite[1] * TILE}px`;\n}\n\nfunction getDirectionFromAngle(angle: number): string {\n  if (angle >= 157.5 || angle < -157.5) {\n    return \"W\";\n  }\n  for (const range of DIRECTION_RANGES) {\n    if (angle >= range.min && angle < range.max) {\n      return range.dir;\n    }\n  }\n  return \"E\";\n}\n\nexport function directionFromDelta(dx: number, dy: number) {\n  if (Math.abs(dx) < 1 && Math.abs(dy) < 1) {\n    return null;\n  }\n  return getDirectionFromAngle(Math.atan2(dy, dx) * (180 / Math.PI));\n}\n\nexport function clearRotation(deps: CatAnimationDeps) {\n  const s = deps.stateRef.current;\n  if (s.currentRotation !== 0) {\n    s.currentRotation = 0;\n    deps.el.style.transform = `scale(${s.scale}) rotate(0deg)`;\n  }\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/constants.ts",
      "content": "import type { CatActivityState } from \"./types\";\n\nexport const TILE = 32;\nexport const DEFAULT_Z_INDEX = 2_147_483_646;\n\n// Movement config\nexport const STEER_LERP = 0.3;\nexport const MAX_VEL_FACTOR = 1.5;\n\n// Obstacle config\nexport const OBSTACLE_INTERVAL = 30;\nexport const MIN_OBSTACLE_AREA = 500;\nexport const OBSTACLE_SELECTOR =\n  \"h1,h2,h3,h4,h5,h6,p,blockquote,a,button,img,svg,picture,video,nav,header,label,[role='button'],[data-oneko-obstacle]\";\n\n// Grid / route config\nexport const CELL_SIZE = 16;\nexport const SPRITE_RADIUS = 8;\nexport const PATH_RECALC_INTERVAL = 10;\nexport const PATH_RECALC_MOUSE_CELLS = 2;\nexport const WAYPOINT_REACH_DIST = CELL_SIZE;\n\n// Chat bubble config\nexport const BUBBLE_DISPLAY_FRAMES = 180;\nexport const BUBBLE_COOLDOWN_FRAMES = 120;\n/** Pixels between mouse samples before we treat movement as a new heading */\nexport const MOUSE_LOOP_MIN_STEP = 5;\n/** Total radians of cursor-heading spin to count as “going in circles” */\nexport const MOUSE_LOOP_WINDING_TRIGGER = 6.2;\n/** Soft cap so winding doesn’t run away (about two full spins) */\nexport const MOUSE_LOOP_WINDING_CAP = 13;\n/** Per logic frame decay so old spinning fades out */\nexport const MOUSE_LOOP_WINDING_DECAY = 0.96;\n\nexport const IDLE_MESSAGES = [\n  \"I am a curious cat Myra\",\n  \"waiting is an art form\",\n  \"pixels are just tiny warm squares\",\n  \"I see the cursor. I simply do not care\",\n  \"404: motivation not found\",\n  \"contemplating the void...\",\n  \"this spot is mine now\",\n  \"do not disturb. cat at work\",\n  \"I could move. but why\",\n  \"every pixel is a potential nap spot\",\n  \"hooman scroll too much\",\n  \"loading personality... 12%\",\n  \"technically I'm working\",\n  \"I'm not staring. I'm supervising\",\n  \"existential crisis in 3... 2...\",\n  \"local cat does nothing, is perfect\",\n  \"this is my emotional support pixel\",\n  \"I have opinions about your CSS\",\n  \"the internet is my territory\",\n  \"your scroll speed is offensive\",\n  \"have you tried turning it off and on again\",\n  \"I don't do mornings. or afternoons\",\n  \"this viewport could use more cat\",\n  \"meow means meow\",\n  \"I live here now. deal with it\",\n  \"my attention span is... oh look a pixel\",\n  \"human. hooman. same thing. irrelevant.\",\n  \"running on 1% battery and pure spite\",\n  \"I accept tribute in the form of attention\",\n];\nexport const MOVING_MESSAGES = [\n  \"stalking the cursor like it's prey\",\n  \"tiny hunter, big ambitions\",\n  \"tail up, confidence higher\",\n  \"pat pat pat — stealth engaged\",\n  \"whiskers first, questions later\",\n  \"almost caught it... almost\",\n  \"following my favorite hooman\",\n  \"zoomies (polite edition)\",\n  \"this carpet has excellent traction\",\n  \"ear twitch: target acquired\",\n  \"main character energy, four paws\",\n  \"excuse me, I'm busy chasing vibes\",\n  \"the dot moved, I moved — it's science\",\n  \"low crouch, high drama\",\n  \"slink mode: activated\",\n  \"padding along with purpose\",\n  \"if I fits, I sprints\",\n  \"practicing my runway walk\",\n  \"big stretch, bigger chase\",\n  \"focused. fluffy. unstoppable.\",\n  \"trotting toward mild chaos\",\n  \"pounce trajectory: instinct only\",\n  \"hunting the invisible red dot\",\n  \"catch me if you can (you can't)\",\n  \"left paw, right paw, repeat\",\n  \"look at me go!\",\n  \"I'm not lost, I'm exploring\",\n  \"on my way... eventually\",\n  \"they call it wandering, I call it art\",\n  \"my paws are doing their best\",\n];\nexport const CIRCLE_LOOP_MESSAGES = [\n  \"dizzy hooman detected\",\n  \"are we training for the Olympics\",\n  \"this is not a merry-go-round\",\n  \"pick a direction. any direction.\",\n  \"my inner ear is offended\",\n  \"stop orbiting me like a moon\",\n  \"you're making the room spin\",\n  \"that's enough circles for one day\",\n  \"I'm getting motion sickness up here\",\n  \"chasing your own tail much?\",\n  \"whiskers say: please stop the loop\",\n  \"clockwise, counter… pick one forever\",\n  \"the cursor is not a hula hoop\",\n  \"I can't settle on a nap with this chaos\",\n  \"tiny circles, big drama\",\n  \"you're stressing the carpet out\",\n  \"I'm a cat not a centrifuge\",\n  \"round and round we do NOT go\",\n  \"save some spins for the washing machine\",\n  \"my brain is doing donuts too now\",\n  \"vertical tail = concerned\",\n  \"this is a desk not a racetrack\",\n  \"I need a ginger snap for my tummy\",\n  \"hooman.exe has entered spin cycle\",\n  \"one lap was cute. this is a lot.\",\n  \"the red dot retired. you replaced it.\",\n];\nexport const SLEEPING_MESSAGES = [\n  \"zzz...\",\n  \"five more minutes...\",\n  \"dreaming of fish\",\n  \"according to my calculations... nap time\",\n  \"nap.exe has stopped working\",\n  \"the mouse will wait. it always does\",\n  \"sleep is the best superpower\",\n  \"do not wake the cat\",\n  \"currently offline\",\n  \"battery at 2%\",\n  \"in a meeting (with my pillow)\",\n  \"auto-reply: gone fishing (in my dreams)\",\n  \"shhh... genius at rest\",\n  \"consciousness is overrated\",\n  \"nap-driven development\",\n  \"out of office until further notice\",\n  \"REM cycle in progress\",\n  \"do not disturb sign: activated\",\n  \"napping is my cardio\",\n  \"subconscious loading...\",\n  \"snore.wav playing\",\n  \"zoning out professionally\",\n  \"dreams: 100%, productivity: 0%\",\n  \"powered off. goodbye.\",\n  \"the pillow is winning\",\n];\nexport const SCRATCHING_MESSAGES = [\n  \"itchy spot right here\",\n  \"don't judge me\",\n  \"self-care is important\",\n  \"spa day!\",\n  \"found a speck... on me\",\n  \"adjusting the floof distribution\",\n  \"something tickled under the fur\",\n  \"scratching away a whole Tuesday\",\n  \"exfoliating like a pro\",\n  \"this is a feature not a bug\",\n];\nexport const TIRED_MESSAGES = [\n  \"I need a mass break\",\n  \"running on vibes and caffeine\",\n  \"can someone carry me\",\n  \"this is exhausting\",\n  \"why is the cursor so far\",\n  \"legs.exe needs an update\",\n  \"low power mode activated\",\n  \"I'm too pretty for this\",\n  \"yawn... where was I going\",\n  \"energy level: potato\",\n];\nexport const WALL_SCRATCH_MESSAGES = [\n  \"this wall has it coming\",\n  \"redecorating!\",\n  \"abstract art in progress\",\n  \"your walls needed texture\",\n  \"sharpening my claws for later\",\n  \"leaving my mark on this windowsill\",\n  \"vandalism? I call it expression\",\n  \"the wall started it\",\n  \"claiming this territory\",\n  \"I do my best work on walls\",\n];\nexport const ALERT_MESSAGES = [\n  \"what was that?!\",\n  \"I heard something!\",\n  \"ears: activated\",\n  \"threat level: probably nothing\",\n  \"investigating...\",\n  \"something moved!\",\n  \"on high alert!\",\n  \"defense mode engaged\",\n  \"my spidey senses are tingling\",\n  \"I swear I saw something\",\n];\n\nexport const FREERUN_MESSAGES = [\n  \"I don't follow rules ya silly hooman\",\n  \"corners are optional in my book\",\n  \"watch me ignore the floor plan\",\n  \"obstacles? you mean decorations?\",\n  \"rules are for dogs\",\n  \"I go where I please\",\n  \"your furniture layout is a suggestion\",\n  \"try to stop me hooman\",\n  \"boundaries are a social construct\",\n  \"I am the monarch of this room\",\n  \"shortcut time!\",\n  \"physics is optional... probably\",\n  \"forbidden spots taste better\",\n  \"you can't out-sneak a cat\",\n  \"slipping through impossible gaps\",\n  \"walls are just vertical carpets\",\n  \"catch me if you can\",\n  \"ghost mode: highly unsneaky\",\n  \"free roam, full drama\",\n];\nexport const FREERUN_CHANCE = 0.06;\nexport const FREERUN_DURATION = 40;\nexport const DEFAULT_SPEED = 10;\nexport const DEFAULT_SCALE = 1;\nexport const DEFAULT_OPACITY = 1;\nexport const DEFAULT_ROTATION_AMOUNT = 15;\nexport const DEFAULT_IDLE_THRESHOLD_MS = 1000;\nexport const DEFAULT_VOLUME = 0.5;\nexport const DEFAULT_BUBBLE_CHANCE = 0.5;\nexport const DEFAULT_FOLLOW_DISTANCE = 20;\nexport const DEFAULT_ANIMATION_SPEED = 1;\n\n// Played once when the cat catches the laser dot\nexport const LASER_CATCH_POOL = [\"/cat-sounds/Cat_eat1.ogg\", \"/cat-sounds/Cat_eat2.ogg\"];\n\n// Sound pools keyed by activity label\nconst HISS_POOL = [\n  \"/cat-sounds/Cat_hiss1.ogg\",\n  \"/cat-sounds/Cat_hiss2.ogg\",\n  \"/cat-sounds/Cat_hiss3.ogg\",\n];\nexport const SOUND_POOLS: Record<CatActivityState, string[]> = {\n  idle: [\n    \"/cat-sounds/Cat_idle1.ogg\",\n    \"/cat-sounds/Cat_idle2.ogg\",\n    \"/cat-sounds/Cat_idle3.ogg\",\n    \"/cat-sounds/Cat_idle4.ogg\",\n  ],\n  moving: [\n    \"/cat-sounds/Cat_baby_ambient1.ogg\",\n    \"/cat-sounds/Cat_baby_ambient2.ogg\",\n    \"/cat-sounds/Cat_baby_ambient3.ogg\",\n    \"/cat-sounds/Cat_baby_ambient4.ogg\",\n    \"/cat-sounds/Cat_baby_ambient5.ogg\",\n    \"/cat-sounds/Cat_baby_ambient6.ogg\",\n    \"/cat-sounds/Cat_baby_ambient7.ogg\",\n  ],\n  sleeping: [\"/cat-sounds/Cat_purr1.ogg\", \"/cat-sounds/Cat_purr2.ogg\", \"/cat-sounds/Cat_purr3.ogg\"],\n  scratchSelf: [\"/cat-sounds/Cat_beg1.ogg\", \"/cat-sounds/Cat_beg2.ogg\", \"/cat-sounds/Cat_beg3.ogg\"],\n  scratchWallN: HISS_POOL,\n  scratchWallS: HISS_POOL,\n  scratchWallE: HISS_POOL,\n  scratchWallW: HISS_POOL,\n  tired: [\"/cat-sounds/Cat_purreow1.ogg\", \"/cat-sounds/Cat_purreow2.ogg\"],\n  freerun: [\n    \"/cat-sounds/Cat_royal_ambient1.ogg\",\n    \"/cat-sounds/Cat_royal_ambient2.ogg\",\n    \"/cat-sounds/Cat_royal_ambient3.ogg\",\n    \"/cat-sounds/Cat_royal_ambient4.ogg\",\n    \"/cat-sounds/Cat_royal_ambient5.ogg\",\n    \"/cat-sounds/Cat_royal_ambient6.ogg\",\n  ],\n  alert: [\n    \"/cat-sounds/Stray_cat_idle1.ogg\",\n    \"/cat-sounds/Stray_cat_idle2.ogg\",\n    \"/cat-sounds/Stray_cat_idle3.ogg\",\n    \"/cat-sounds/Stray_cat_idle4.ogg\",\n  ],\n};\n\n// Konami code\nexport const KONAMI_SEQUENCE = [\n  \"ArrowUp\",\n  \"ArrowUp\",\n  \"ArrowDown\",\n  \"ArrowDown\",\n  \"ArrowLeft\",\n  \"ArrowRight\",\n  \"ArrowLeft\",\n  \"ArrowRight\",\n  \"KeyB\",\n  \"KeyA\",\n];\nexport const KONAMI_TARGET = KONAMI_SEQUENCE.join(\",\");\n\n// Direction table — module-level so it's not re-allocated every frame\nexport const DIRECTION_RANGES = [\n  { min: -22.5, max: 22.5, dir: \"E\" },\n  { min: 22.5, max: 67.5, dir: \"SE\" },\n  { min: 67.5, max: 112.5, dir: \"S\" },\n  { min: 112.5, max: 157.5, dir: \"SW\" },\n  { min: -157.5, max: -112.5, dir: \"NW\" },\n  { min: -112.5, max: -67.5, dir: \"N\" },\n  { min: -67.5, max: -22.5, dir: \"NE\" },\n] as const;\n\n// 8-directional neighbor offsets: [rowDelta, colDelta, movementCost]\nexport const NEIGHBOR_OFFSETS: [number, number, number][] = [\n  [-1, 0, 1.0],\n  [1, 0, 1.0],\n  [0, -1, 1.0],\n  [0, 1, 1.0],\n  [-1, -1, Math.SQRT2],\n  [-1, 1, Math.SQRT2],\n  [1, -1, Math.SQRT2],\n  [1, 1, Math.SQRT2],\n];\n\nexport const defaultSpriteSets = {\n  idle: [[-3, -3]],\n  alert: [[-7, -3]],\n  scratchSelf: [\n    [-5, 0],\n    [-6, 0],\n    [-7, 0],\n  ],\n  scratchWallN: [\n    [0, 0],\n    [0, -1],\n  ],\n  scratchWallS: [\n    [-7, -1],\n    [-6, -2],\n  ],\n  scratchWallE: [\n    [-2, -2],\n    [-2, -3],\n  ],\n  scratchWallW: [\n    [-4, 0],\n    [-4, -1],\n  ],\n  tired: [[-3, -2]],\n  sleeping: [\n    [-2, 0],\n    [-2, -1],\n  ],\n  N: [\n    [-1, -2],\n    [-1, -3],\n  ],\n  NE: [\n    [0, -2],\n    [0, -3],\n  ],\n  E: [\n    [-3, 0],\n    [-3, -1],\n  ],\n  SE: [\n    [-5, -1],\n    [-5, -2],\n  ],\n  S: [\n    [-6, -3],\n    [-7, -2],\n  ],\n  SW: [\n    [-5, -3],\n    [-6, -1],\n  ],\n  W: [\n    [-4, -2],\n    [-4, -3],\n  ],\n  NW: [\n    [-1, 0],\n    [-1, -1],\n  ],\n} as const;\n\nexport const IDLE_ANIMATION_DURATIONS: Record<string, number> = {\n  sleeping: 80,\n  scratchSelf: 24,\n  tired: 40,\n  scratchWallN: 24,\n  scratchWallS: 24,\n  scratchWallE: 24,\n  scratchWallW: 24,\n};\n\n// Static colour tokens for the debug overlay. Hoisted to module scope so the\n// object isn't reallocated every time the animation effect mounts/re-runs.\nexport const debugColor = {\n  panelBg: \"color-mix(in srgb, var(--background) 88%, transparent)\",\n  panelBorder: \"color-mix(in srgb, var(--border) 70%, transparent)\",\n  panelText: \"var(--foreground)\",\n  panelSubtle: \"var(--muted-foreground)\",\n  controlBg: \"color-mix(in srgb, var(--muted) 72%, transparent)\",\n  controlBorder: \"var(--border)\",\n  accent: \"var(--ring)\",\n  accentStrong: \"var(--primary)\",\n  danger: \"var(--destructive)\",\n  dangerSoft: \"color-mix(in srgb, var(--destructive) 30%, transparent)\",\n  trail: \"color-mix(in srgb, var(--ring) 60%, transparent)\",\n  trailDot: \"color-mix(in srgb, var(--ring) 76%, transparent)\",\n  gridStroke: \"color-mix(in srgb, var(--muted-foreground) 18%, transparent)\",\n};\n\nexport const DEFAULT_POSITION = {\n  x: typeof window !== \"undefined\" ? window.innerWidth / 2 : 512,\n  y: typeof window !== \"undefined\" ? window.innerHeight / 2 : 384,\n};\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/debug-controls/bubble.ts",
      "content": "import { debugColor } from \"../constants\";\nimport type { CatRuntimeState } from \"../types\";\nimport { makeBtn, makeRow, sectionLabel } from \"./ui\";\n\nexport function appendBubbleSection(\n  body: HTMLElement,\n  stateRef: { current: CatRuntimeState },\n  bubbleEl: HTMLDivElement,\n  bubbleTextEl: HTMLDivElement,\n  showBubble: () => void,\n  hideBubble: () => void,\n  bubbleDisplayFrames: number,\n) {\n  body.appendChild(sectionLabel(\"bubble\"));\n\n  const showBubbleBtn = makeBtn(\"show\", () => showBubble());\n  const hideBubbleBtn = makeBtn(\"hide\", () => hideBubble());\n  body.appendChild(makeRow(showBubbleBtn, hideBubbleBtn));\n\n  const bubbleInput = document.createElement(\"input\");\n  bubbleInput.type = \"text\";\n  bubbleInput.placeholder = \"custom text...\";\n  bubbleInput.style.cssText = [\n    `background:${debugColor.controlBg}`,\n    `border:1px solid ${debugColor.controlBorder}`,\n    `color:${debugColor.panelText}`,\n    \"border-radius:4px\",\n    \"padding:2px 6px\",\n    \"font-family:inherit\",\n    \"font-size:11px\",\n    \"flex:1\",\n    \"min-width:0\",\n  ].join(\";\");\n\n  const setTextBtn = makeBtn(\"set\", () => {\n    if (bubbleInput.value.trim()) {\n      bubbleTextEl.textContent = bubbleInput.value.trim();\n      stateRef.current.bubbleVisible = true;\n      stateRef.current.bubbleTimer = bubbleDisplayFrames;\n      bubbleEl.style.opacity = \"1\";\n    }\n  });\n\n  body.appendChild(makeRow(bubbleInput, setTextBtn));\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/debug-controls/force-state.ts",
      "content": "import { debugColor } from \"../constants\";\nimport type { CatActivityState, CatRuntimeState, IdleActivityState } from \"../types\";\nimport { makeBtn, makeRow, sectionLabel, selectStyle } from \"./ui\";\n\nconst ALL_STATES = [\n  \"moving\",\n  \"idle\",\n  \"sleeping\",\n  \"scratchSelf\",\n  \"tired\",\n  \"alert\",\n  \"scratchWallN\",\n  \"scratchWallS\",\n  \"scratchWallE\",\n  \"scratchWallW\",\n  \"freerun\",\n] as const;\n\nfunction applyForcedState(s: CatRuntimeState, chosen: CatActivityState, locked: boolean) {\n  s.idleAnimation = null;\n  s.idleAnimationFrame = 0;\n  s.freerunMode = false;\n  s.freerunTimer = 0;\n\n  if (chosen === \"moving\") {\n    s.idleTime = 0;\n    s.stateLocked = locked;\n    return;\n  }\n\n  if (chosen === \"idle\") {\n    s.idleTime = 200;\n    s.stateLocked = locked;\n    return;\n  }\n\n  if (chosen === \"freerun\") {\n    s.freerunMode = true;\n    s.freerunTimer = 600;\n    s.stateLocked = locked;\n    return;\n  }\n\n  s.idleTime = 200;\n  s.idleAnimation = chosen as IdleActivityState;\n  s.idleAnimationFrame = 0;\n  s.stateLocked = locked;\n}\n\nexport function appendForceStateSection(body: HTMLElement, stateRef: { current: CatRuntimeState }) {\n  body.appendChild(sectionLabel(\"force state\"));\n\n  const stateSelect = document.createElement(\"select\");\n  stateSelect.style.cssText = selectStyle;\n  for (const name of ALL_STATES) {\n    const opt = document.createElement(\"option\");\n    opt.value = name;\n    opt.textContent = name;\n    stateSelect.appendChild(opt);\n  }\n\n  const lockChk = document.createElement(\"input\");\n  lockChk.type = \"checkbox\";\n  lockChk.title = \"lock state (prevent auto-reset)\";\n  lockChk.style.cssText = `cursor:pointer;accent-color:${debugColor.accent};`;\n  lockChk.addEventListener(\"change\", () => {\n    stateRef.current.stateLocked = lockChk.checked;\n  });\n\n  const lockLbl = document.createElement(\"label\");\n  lockLbl.title = \"lock state\";\n  lockLbl.style.cssText = `display:flex;align-items:center;gap:3px;cursor:pointer;font-size:10px;color:${debugColor.accent};white-space:nowrap;`;\n  lockLbl.appendChild(lockChk);\n  lockLbl.append(\"lock\");\n\n  body.appendChild(makeRow(stateSelect));\n\n  const forceStateBtn = makeBtn(\"apply\", () => {\n    applyForcedState(stateRef.current, stateSelect.value as CatActivityState, lockChk.checked);\n  });\n\n  body.appendChild(makeRow(forceStateBtn, lockLbl));\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/debug-controls/index.ts",
      "content": "import { debugColor } from \"../constants\";\nimport type { CatRuntimeState } from \"../types\";\nimport { appendBubbleSection } from \"./bubble\";\nimport { appendForceStateSection } from \"./force-state\";\nimport { appendPlaybackSection } from \"./playback\";\nimport { appendPositionSection } from \"./position\";\nimport { appendSpeedSection } from \"./speed\";\nimport { BASE_STYLE } from \"./ui\";\n\nexport interface DebugControlsParams {\n  stateRef: { current: CatRuntimeState };\n  el: HTMLDivElement;\n  bubbleEl: HTMLDivElement;\n  bubbleTextEl: HTMLDivElement;\n  frame: () => void;\n  showBubble: () => void;\n  hideBubble: () => void;\n  bubbleDisplayFrames: number;\n}\n\nexport function createDebugControls({\n  stateRef,\n  el,\n  bubbleEl,\n  bubbleTextEl,\n  frame,\n  showBubble,\n  hideBubble,\n  bubbleDisplayFrames,\n}: DebugControlsParams): HTMLDivElement {\n  const panel = document.createElement(\"div\");\n  panel.setAttribute(\"aria-hidden\", \"true\");\n  panel.style.cssText = \"user-select:none;pointer-events:auto;\";\n\n  const header = document.createElement(\"div\");\n  header.style.cssText = `${BASE_STYLE};padding:6px 14px;cursor:pointer;display:flex;align-items:center;justify-content:space-between;`;\n\n  const headerTitle = document.createElement(\"span\");\n  headerTitle.textContent = \"controls\";\n  headerTitle.style.cssText = `font-weight:bold;font-size:10px;letter-spacing:0.05em;text-transform:uppercase;color:${debugColor.panelSubtle};`;\n\n  const chevron = document.createElement(\"span\");\n  chevron.textContent = \"▾\";\n  chevron.style.cssText = `font-size:10px;color:${debugColor.panelSubtle};`;\n\n  header.appendChild(headerTitle);\n  header.appendChild(chevron);\n  panel.appendChild(header);\n\n  const body = document.createElement(\"div\");\n  body.style.cssText = `${BASE_STYLE};padding:6px 14px 10px;margin-top:4px;`;\n  panel.appendChild(body);\n\n  let collapsed = false;\n  header.addEventListener(\"click\", () => {\n    collapsed = !collapsed;\n    body.style.display = collapsed ? \"none\" : \"block\";\n    chevron.textContent = collapsed ? \"▸\" : \"▾\";\n  });\n\n  appendPlaybackSection(body, stateRef, frame);\n  appendForceStateSection(body, stateRef);\n  appendBubbleSection(\n    body,\n    stateRef,\n    bubbleEl,\n    bubbleTextEl,\n    showBubble,\n    hideBubble,\n    bubbleDisplayFrames,\n  );\n  appendPositionSection(body, stateRef, el);\n  appendSpeedSection(body, stateRef);\n\n  return panel;\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/debug-controls/playback.ts",
      "content": "import { debugColor } from \"../constants\";\nimport type { CatRuntimeState } from \"../types\";\nimport { makeBtn, makeRow, sectionLabel } from \"./ui\";\n\nexport function appendPlaybackSection(\n  body: HTMLElement,\n  stateRef: { current: CatRuntimeState },\n  frame: () => void,\n) {\n  body.appendChild(sectionLabel(\"playback\"));\n\n  const pauseBtn = makeBtn(\"⏸ pause\", () => {\n    stateRef.current.paused = !stateRef.current.paused;\n    pauseBtn.textContent = stateRef.current.paused ? \"▶ play\" : \"⏸ pause\";\n    stepBtn.style.opacity = stateRef.current.paused ? \"1\" : \"0.3\";\n    stepBtn.style.pointerEvents = stateRef.current.paused ? \"auto\" : \"none\";\n  });\n\n  const stepBtn = makeBtn(\"→ step\", () => {\n    if (stateRef.current.paused) {\n      frame();\n    }\n  });\n  stepBtn.style.opacity = \"0.3\";\n  stepBtn.style.pointerEvents = \"none\";\n\n  body.appendChild(makeRow(pauseBtn, stepBtn));\n\n  const followBtn = makeBtn(\"⛶ stop following\", () => {\n    stateRef.current.noFollow = !stateRef.current.noFollow;\n    const on = stateRef.current.noFollow;\n    if (on) {\n      stateRef.current.freerunMode = false;\n      stateRef.current.freerunTimer = 0;\n    }\n    followBtn.textContent = on ? \"⛶ resume following\" : \"⛶ stop following\";\n    followBtn.style.color = on ? debugColor.accentStrong : debugColor.panelText;\n  });\n  followBtn.style.width = \"100%\";\n  body.appendChild(makeRow(followBtn));\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/debug-controls/position.ts",
      "content": "import { debugColor, TILE } from \"../constants\";\nimport type { CatRuntimeState } from \"../types\";\nimport { makeBtn, makeRow, sectionLabel } from \"./ui\";\n\nfunction syncCatElementPosition(el: HTMLDivElement, s: CatRuntimeState) {\n  el.style.left = `${s.nekoPosX - TILE / 2}px`;\n  el.style.top = `${s.nekoPosY - TILE / 2}px`;\n}\n\nfunction makePosSlider(\n  axis: \"X\" | \"Y\",\n  el: HTMLDivElement,\n  stateRef: { current: CatRuntimeState },\n  getMax: () => number,\n  getVal: () => number,\n  setVal: (v: number) => void,\n) {\n  const lbl = document.createElement(\"span\");\n  lbl.textContent = axis;\n  lbl.style.cssText = `min-width:10px;color:${debugColor.panelSubtle};font-size:10px;font-weight:bold;`;\n\n  const valLbl = document.createElement(\"span\");\n  valLbl.style.cssText = \"min-width:28px;text-align:right;font-size:10px;\";\n\n  const slider = document.createElement(\"input\");\n  slider.type = \"range\";\n  slider.min = \"16\";\n  slider.style.cssText = `flex:1;cursor:pointer;accent-color:${debugColor.accent};`;\n\n  const sync = () => {\n    slider.max = String(Math.round(getMax()));\n    slider.value = String(Math.round(getVal()));\n    valLbl.textContent = String(Math.round(getVal()));\n  };\n  sync();\n\n  slider.addEventListener(\"mousedown\", sync);\n  slider.addEventListener(\"input\", () => {\n    const v = Number(slider.value);\n    valLbl.textContent = String(v);\n    setVal(v);\n    syncCatElementPosition(el, stateRef.current);\n  });\n\n  return makeRow(lbl, slider, valLbl);\n}\n\nexport function appendPositionSection(\n  body: HTMLElement,\n  stateRef: { current: CatRuntimeState },\n  el: HTMLDivElement,\n) {\n  body.appendChild(sectionLabel(\"position\"));\n\n  const teleportCenterBtn = makeBtn(\"→ center\", () => {\n    stateRef.current.nekoPosX = window.innerWidth / 2;\n    stateRef.current.nekoPosY = window.innerHeight / 2;\n    syncCatElementPosition(el, stateRef.current);\n  });\n\n  const teleportMouseBtn = makeBtn(\"→ cursor\", () => {\n    const s = stateRef.current;\n    s.nekoPosX = s.mousePosX;\n    s.nekoPosY = s.mousePosY;\n    syncCatElementPosition(el, s);\n  });\n\n  body.appendChild(makeRow(teleportCenterBtn, teleportMouseBtn));\n\n  body.appendChild(\n    makePosSlider(\n      \"X\",\n      el,\n      stateRef,\n      () => window.innerWidth,\n      () => stateRef.current.nekoPosX,\n      (v) => {\n        stateRef.current.nekoPosX = v;\n      },\n    ),\n  );\n  body.appendChild(\n    makePosSlider(\n      \"Y\",\n      el,\n      stateRef,\n      () => window.innerHeight,\n      () => stateRef.current.nekoPosY,\n      (v) => {\n        stateRef.current.nekoPosY = v;\n      },\n    ),\n  );\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/debug-controls/speed.ts",
      "content": "import { debugColor } from \"../constants\";\nimport type { CatRuntimeState } from \"../types\";\nimport { makeRow, sectionLabel } from \"./ui\";\n\nexport function appendSpeedSection(body: HTMLElement, stateRef: { current: CatRuntimeState }) {\n  body.appendChild(sectionLabel(\"speed\"));\n\n  const speedLabel = document.createElement(\"span\");\n  speedLabel.textContent = String(stateRef.current.currentSpeed);\n  speedLabel.style.cssText = \"min-width:20px;text-align:right;\";\n\n  const speedSlider = document.createElement(\"input\");\n  speedSlider.type = \"range\";\n  speedSlider.min = \"1\";\n  speedSlider.max = \"40\";\n  speedSlider.value = String(stateRef.current.currentSpeed);\n  speedSlider.style.cssText = `flex:1;cursor:pointer;accent-color:${debugColor.accent};`;\n  speedSlider.addEventListener(\"input\", () => {\n    const val = Number(speedSlider.value);\n    speedLabel.textContent = String(val);\n    stateRef.current.currentSpeed = val;\n  });\n\n  body.appendChild(makeRow(speedSlider, speedLabel));\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/debug-controls/ui.ts",
      "content": "import { debugColor } from \"../constants\";\n\nexport const BASE_STYLE = [\n  \"font-family:var(--font-mono), monospace\",\n  \"font-size:11px\",\n  \"line-height:1.6\",\n  \"border-radius:6px\",\n  `background:${debugColor.panelBg}`,\n  `border:1px solid ${debugColor.panelBorder}`,\n  `color:${debugColor.panelText}`,\n  \"width:190px\",\n].join(\";\");\n\nconst btnStyle = [\n  `background:${debugColor.controlBg}`,\n  `border:1px solid ${debugColor.controlBorder}`,\n  `color:${debugColor.panelText}`,\n  \"border-radius:4px\",\n  \"padding:2px 8px\",\n  \"font-family:inherit\",\n  \"font-size:11px\",\n  \"cursor:pointer\",\n].join(\";\");\n\nexport const selectStyle = [\n  `background:${debugColor.controlBg}`,\n  `border:1px solid ${debugColor.controlBorder}`,\n  `color:${debugColor.panelText}`,\n  \"border-radius:4px\",\n  \"padding:2px 4px\",\n  \"font-family:inherit\",\n  \"font-size:11px\",\n  \"cursor:pointer\",\n  \"flex:1\",\n].join(\";\");\n\nexport function sectionLabel(text: string) {\n  const d = document.createElement(\"div\");\n  d.textContent = text;\n  d.style.cssText = `color:${debugColor.panelSubtle};font-weight:bold;margin-top:8px;margin-bottom:3px;font-size:10px;letter-spacing:0.05em;text-transform:uppercase;`;\n  return d;\n}\n\nexport function makeRow(...children: HTMLElement[]) {\n  const r = document.createElement(\"div\");\n  r.style.cssText = \"display:flex;gap:4px;align-items:center;margin-bottom:3px;\";\n  for (const c of children) {\n    r.appendChild(c);\n  }\n  return r;\n}\n\nexport function makeBtn(label: string, onClick: () => void) {\n  const btn = document.createElement(\"button\");\n  btn.textContent = label;\n  btn.style.cssText = btnStyle;\n  btn.addEventListener(\"click\", onClick);\n  return btn;\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/dom.ts",
      "content": "import { CELL_SIZE, debugColor, TILE } from \"./constants\";\nimport type { CatRuntimeState } from \"./types\";\n\nexport interface BubbleElements {\n  wrapper: HTMLDivElement;\n  textEl: HTMLDivElement;\n  tailWrap: HTMLDivElement;\n}\n\nexport function createCatElement(state: CatRuntimeState, zIndex: number): HTMLDivElement {\n  const el = document.createElement(\"div\");\n  el.id = \"oneko-react\";\n  el.setAttribute(\"aria-hidden\", \"true\");\n  el.style.cssText = [\n    `width:${TILE}px`,\n    `height:${TILE}px`,\n    \"position:fixed\",\n    \"pointer-events:none\",\n    \"image-rendering:pixelated\",\n    `left:${state.nekoPosX - TILE / 2}px`,\n    `top:${state.nekoPosY - TILE / 2}px`,\n    `z-index:${zIndex}`,\n    \"background-repeat:no-repeat\",\n    \"background-size:256px 128px\",\n    \"transform:scale(1)\",\n    \"opacity:1\",\n  ].join(\";\");\n  return el;\n}\n\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\nexport function createDebugSVG(zIndex: number): SVGSVGElement {\n  const svg = document.createElementNS(SVG_NS, \"svg\");\n  svg.setAttribute(\"aria-hidden\", \"true\");\n  svg.style.cssText = [\n    \"position:fixed\",\n    \"top:0\",\n    \"left:0\",\n    \"width:100vw\",\n    \"height:100vh\",\n    \"pointer-events:none\",\n    `z-index:${zIndex - 1}`,\n    \"display:none\",\n  ].join(\";\");\n\n  const defs = document.createElementNS(SVG_NS, \"defs\");\n  const pattern = document.createElementNS(SVG_NS, \"pattern\");\n  pattern.id = \"oneko-grid\";\n  pattern.setAttribute(\"width\", String(CELL_SIZE));\n  pattern.setAttribute(\"height\", String(CELL_SIZE));\n  pattern.setAttribute(\"patternUnits\", \"userSpaceOnUse\");\n  const patternRect = document.createElementNS(SVG_NS, \"rect\");\n  patternRect.setAttribute(\"width\", String(CELL_SIZE));\n  patternRect.setAttribute(\"height\", String(CELL_SIZE));\n  patternRect.setAttribute(\"fill\", \"none\");\n  patternRect.setAttribute(\"stroke\", debugColor.gridStroke);\n  patternRect.setAttribute(\"stroke-width\", \"0.5\");\n  pattern.appendChild(patternRect);\n  defs.appendChild(pattern);\n  svg.appendChild(defs);\n\n  const gridBg = document.createElementNS(SVG_NS, \"rect\");\n  gridBg.setAttribute(\"width\", \"100%\");\n  gridBg.setAttribute(\"height\", \"100%\");\n  gridBg.setAttribute(\"fill\", \"url(#oneko-grid)\");\n  svg.appendChild(gridBg);\n\n  const blockedGroup = document.createElementNS(SVG_NS, \"g\");\n  blockedGroup.id = \"oneko-blocked\";\n  svg.appendChild(blockedGroup);\n\n  const obstacleGroup = document.createElementNS(SVG_NS, \"g\");\n  obstacleGroup.id = \"oneko-obstacles\";\n  svg.appendChild(obstacleGroup);\n\n  const pathGroup = document.createElementNS(SVG_NS, \"g\");\n  pathGroup.id = \"oneko-path\";\n  svg.appendChild(pathGroup);\n\n  return svg;\n}\n\nexport function createBubble(zIndex: number): BubbleElements {\n  const wrapper = document.createElement(\"div\");\n  wrapper.setAttribute(\"aria-hidden\", \"true\");\n  wrapper.style.cssText = [\n    \"position:fixed\",\n    \"pointer-events:none\",\n    `z-index:${zIndex}`,\n    \"opacity:0\",\n    \"transition:opacity 0.2s ease-out\",\n    \"transform:translateX(-50%)\",\n    \"display:flex\",\n    \"flex-direction:column\",\n    \"align-items:center\",\n    \"outline:none\",\n  ].join(\";\");\n\n  const bubble = document.createElement(\"div\");\n  bubble.style.cssText = [\n    \"padding:4px 8px\",\n    \"border-radius:8px\",\n    \"box-sizing:border-box\",\n    \"font-size:9px\",\n    \"line-height:1.25\",\n    \"font-weight:500\",\n    \"font-family:var(--font-geist-pixel-square), monospace\",\n    \"color:var(--foreground)\",\n    \"background-color:var(--background)\",\n    \"border:1px solid var(--border)\",\n    \"max-width:150px\",\n    \"width:max-content\",\n    \"white-space:normal\",\n    \"word-break:break-word\",\n    \"outline:none\",\n  ].join(\";\");\n  wrapper.appendChild(bubble);\n\n  const tailWrap = document.createElement(\"div\");\n  tailWrap.style.cssText = \"position:relative;line-height:0;flex-shrink:0;outline:none;\";\n\n  const tailSvg = document.createElementNS(SVG_NS, \"svg\");\n  tailSvg.setAttribute(\"width\", \"12\");\n  tailSvg.setAttribute(\"height\", \"7\");\n  tailSvg.setAttribute(\"viewBox\", \"0 0 12 7\");\n  tailSvg.setAttribute(\"overflow\", \"visible\");\n  tailSvg.style.cssText = \"display:block;outline:none;\";\n\n  const tailPath = document.createElementNS(SVG_NS, \"path\");\n  tailPath.setAttribute(\"d\", \"M 6 7 L 1.5 1.5 L 10.5 1.5 Z\");\n  tailPath.setAttribute(\"fill\", \"var(--background)\");\n  tailPath.setAttribute(\"stroke\", \"var(--border)\");\n  tailPath.setAttribute(\"stroke-width\", \"1\");\n  tailPath.setAttribute(\"stroke-linejoin\", \"miter\");\n  tailPath.setAttribute(\"stroke-linecap\", \"butt\");\n  tailPath.setAttribute(\"stroke-miterlimit\", \"2\");\n  tailPath.style.paintOrder = \"stroke fill\";\n  tailSvg.appendChild(tailPath);\n  tailWrap.appendChild(tailSvg);\n\n  wrapper.appendChild(tailWrap);\n\n  return { wrapper, textEl: bubble, tailWrap };\n}\n\nexport function createDebugHUD(): HTMLDivElement {\n  const hud = document.createElement(\"div\");\n  hud.setAttribute(\"aria-hidden\", \"true\");\n  hud.style.cssText = [\n    \"pointer-events:none\",\n    \"font-family:var(--font-mono), monospace\",\n    \"font-size:11px\",\n    \"line-height:1.6\",\n    \"padding:10px 14px\",\n    \"border-radius:6px\",\n    `background-color:${debugColor.panelBg}`,\n    `border:1px solid ${debugColor.panelBorder}`,\n    `color:${debugColor.panelText}`,\n    \"width:190px\",\n  ].join(\";\");\n  return hud;\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/initial-state.ts",
      "content": "import { createZoneState } from \"./zone-runtime\";\nimport { DEFAULT_POSITION, OBSTACLE_INTERVAL, PATH_RECALC_INTERVAL } from \"./constants\";\nimport {\n  applyRuntimeConfig,\n  defaultRuntimeConfigState,\n  type CatRuntimeConfig,\n} from \"./runtime-config\";\nimport type { CatRuntimeState, IdleActivityState } from \"./types\";\n\nexport type InitialCatStateOptions = CatRuntimeConfig & {\n  initialPos?: { x: number; y: number };\n};\n\nexport function createInitialCatState(options: InitialCatStateOptions): CatRuntimeState {\n  const startX = options.initialPos?.x ?? DEFAULT_POSITION.x;\n  const startY = options.initialPos?.y ?? DEFAULT_POSITION.y;\n\n  const state: CatRuntimeState = {\n    zoneState: createZoneState(),\n    nekoPosX: startX,\n    nekoPosY: startY,\n    nekoVelX: 0,\n    nekoVelY: 0,\n    mousePosX: startX,\n    mousePosY: startY,\n    frameCount: 0,\n    idleTime: 0,\n    idleAnimation: null as IdleActivityState | null,\n    idleAnimationFrame: 0,\n    obstacleRects: [],\n    lastObstacleRefresh: -OBSTACLE_INTERVAL,\n    grid: null,\n    gridCols: 0,\n    gridRows: 0,\n    currentPath: [],\n    pathWaypointIdx: 0,\n    lastPathRecalcFrame: -PATH_RECALC_INTERVAL,\n    lastPathTargetCol: -1,\n    lastPathTargetRow: -1,\n    debugMode: false,\n    paused: false,\n    stateLocked: false,\n    noFollow: false,\n    ...defaultRuntimeConfigState(),\n    loopPrevAngle: null,\n    mouseCircleWinding: 0,\n    freerunMode: false,\n    freerunTimer: 0,\n    lastFreerunMsg: -1,\n  };\n\n  applyRuntimeConfig(state, options);\n  return state;\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/konami.ts",
      "content": "import { KONAMI_SEQUENCE, KONAMI_TARGET } from \"./constants\";\nimport type { CatRuntimeState } from \"./types\";\n\nexport function createKonamiHandler(\n  stateRef: { current: CatRuntimeState },\n  debugSVG: SVGSVGElement,\n  debugWrapper: HTMLDivElement,\n): (e: KeyboardEvent) => void {\n  const konamiBuffer: string[] = [];\n\n  return (e: KeyboardEvent) => {\n    konamiBuffer.push(e.code);\n    if (konamiBuffer.length > KONAMI_SEQUENCE.length) {\n      konamiBuffer.shift();\n    }\n    if (konamiBuffer.join(\",\") !== KONAMI_TARGET) {\n      return;\n    }\n\n    stateRef.current.debugMode = !stateRef.current.debugMode;\n    if (stateRef.current.debugMode) {\n      debugSVG.style.display = \"block\";\n      debugWrapper.style.display = \"flex\";\n      return;\n    }\n\n    debugSVG.style.display = \"none\";\n    debugWrapper.style.display = \"none\";\n    stateRef.current.paused = false;\n    stateRef.current.stateLocked = false;\n    stateRef.current.noFollow = false;\n  };\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/laser-cursor-dom.ts",
      "content": "const DOT_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 7 7\" shape-rendering=\"crispEdges\" aria-hidden=\"true\" focusable=\"false\" style=\"display:block;width:100%;height:100%\"><rect x=\"3\" y=\"0\" width=\"1\" height=\"1\" fill=\"var(--destructive)\"/><rect x=\"2\" y=\"1\" width=\"3\" height=\"1\" fill=\"var(--destructive)\"/><rect x=\"1\" y=\"2\" width=\"5\" height=\"1\" fill=\"var(--destructive)\"/><rect x=\"0\" y=\"3\" width=\"7\" height=\"1\" fill=\"var(--destructive)\"/><rect x=\"1\" y=\"4\" width=\"5\" height=\"1\" fill=\"var(--destructive)\"/><rect x=\"2\" y=\"5\" width=\"3\" height=\"1\" fill=\"var(--destructive)\"/><rect x=\"3\" y=\"6\" width=\"1\" height=\"1\" fill=\"var(--destructive)\"/><rect x=\"2\" y=\"2\" width=\"1\" height=\"1\" fill=\"var(--accent)\"/></svg>`;\n\nconst LASER_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 22 5\" shape-rendering=\"crispEdges\" aria-hidden=\"true\" focusable=\"false\" style=\"display:block;width:100%;height:100%\"><rect x=\"2\" y=\"0\" width=\"16\" height=\"1\" fill=\"var(--destructive)\"/><rect x=\"1\" y=\"1\" width=\"18\" height=\"1\" fill=\"var(--destructive)\"/><rect x=\"0\" y=\"2\" width=\"20\" height=\"1\" fill=\"var(--destructive)\"/><rect x=\"1\" y=\"3\" width=\"18\" height=\"1\" fill=\"var(--destructive)\"/><rect x=\"2\" y=\"4\" width=\"16\" height=\"1\" fill=\"var(--destructive)\"/><rect x=\"11\" y=\"1\" width=\"1\" height=\"1\" fill=\"var(--primary-foreground)\"/><rect x=\"13\" y=\"1\" width=\"1\" height=\"1\" fill=\"var(--primary-foreground)\"/><rect x=\"15\" y=\"1\" width=\"1\" height=\"1\" fill=\"var(--primary-foreground)\"/><rect x=\"11\" y=\"2\" width=\"1\" height=\"1\" fill=\"var(--primary-foreground)\"/><rect x=\"13\" y=\"2\" width=\"1\" height=\"1\" fill=\"var(--primary-foreground)\"/><rect x=\"15\" y=\"2\" width=\"1\" height=\"1\" fill=\"var(--primary-foreground)\"/><rect x=\"11\" y=\"3\" width=\"1\" height=\"1\" fill=\"var(--primary-foreground)\"/><rect x=\"13\" y=\"3\" width=\"1\" height=\"1\" fill=\"var(--primary-foreground)\"/><rect x=\"15\" y=\"3\" width=\"1\" height=\"1\" fill=\"var(--primary-foreground)\"/><rect x=\"4\" y=\"0\" width=\"3\" height=\"1\" fill=\"var(--primary)\"/><rect x=\"4\" y=\"1\" width=\"3\" height=\"1\" fill=\"var(--primary)\"/><rect x=\"18\" y=\"1\" width=\"3\" height=\"1\" fill=\"var(--accent)\"/><rect x=\"18\" y=\"2\" width=\"3\" height=\"1\" fill=\"var(--accent)\"/><rect x=\"18\" y=\"3\" width=\"3\" height=\"1\" fill=\"var(--accent)\"/></svg>`;\n\nconst DOT_SIZE = 9;\nconst LASER_W = 88;\nconst LASER_H = 20;\nconst ANCHOR_INSET = 10;\nconst TRAIL_LEN = 22;\n\nfunction makeDot(zIndex: number, size: number, opacity: number, glow: boolean) {\n  const d = document.createElement(\"div\");\n  d.setAttribute(\"aria-hidden\", \"true\");\n  d.style.cssText = [\n    \"position:fixed\",\n    `width:${size}px`,\n    `height:${size}px`,\n    \"pointer-events:none\",\n    `z-index:${zIndex}`,\n    \"left:0\",\n    \"top:0\",\n    \"image-rendering:pixelated\",\n    `opacity:${opacity}`,\n    \"transform:translate(-50%,-50%) translate(-100px,-100px)\",\n    glow\n      ? \"filter:drop-shadow(0 0 4px var(--destructive)) drop-shadow(0 0 12px color-mix(in srgb, var(--destructive) 55%, transparent))\"\n      : \"\",\n  ].join(\";\");\n  d.innerHTML = DOT_SVG;\n  return d;\n}\n\nfunction createTrail(zIndex: number) {\n  const trail: HTMLDivElement[] = [];\n  for (let i = 1; i <= TRAIL_LEN; i++) {\n    const t = i / (TRAIL_LEN + 1);\n    const size = Math.max(2, DOT_SIZE * (1 - t * 0.85));\n    const opacity = 0.55 * (1 - t);\n    trail.push(makeDot(zIndex, size, opacity, false));\n  }\n  return trail;\n}\n\nfunction createLaserBody(zIndex: number) {\n  const laser = document.createElement(\"div\");\n  laser.setAttribute(\"aria-hidden\", \"true\");\n  laser.style.cssText = [\n    \"position:fixed\",\n    `width:${LASER_W}px`,\n    `height:${LASER_H}px`,\n    \"pointer-events:none\",\n    `z-index:${zIndex}`,\n    \"left:0\",\n    \"top:0\",\n    \"image-rendering:pixelated\",\n    \"transform-origin:100% 50%\",\n    \"filter:drop-shadow(0 0 6px color-mix(in srgb, var(--destructive) 45%, transparent))\",\n    \"will-change:transform\",\n  ].join(\";\");\n  laser.innerHTML = LASER_SVG;\n  return laser;\n}\n\nexport function mountLaserCursor(zIndex: number): () => void {\n  const dot = makeDot(zIndex, DOT_SIZE, 1, true);\n  const trail = createTrail(zIndex);\n  const laser = createLaserBody(zIndex);\n\n  document.body.appendChild(laser);\n  for (const t of trail) {\n    document.body.appendChild(t);\n  }\n  document.body.appendChild(dot);\n  document.body.style.cursor = \"none\";\n\n  let pointerX = window.innerWidth / 2;\n  let pointerY = window.innerHeight / 2;\n\n  const history: { x: number; y: number }[] = [];\n  for (let i = 0; i <= TRAIL_LEN; i++) {\n    history.push({ x: pointerX, y: pointerY });\n  }\n\n  const positionLaser = () => {\n    const anchorX = ANCHOR_INSET + LASER_W;\n    const anchorY = ANCHOR_INSET + LASER_H / 2;\n    const dx = pointerX - anchorX;\n    const dy = pointerY - anchorY;\n    const angle = (Math.atan2(dy, dx) * 180) / Math.PI + 180;\n    laser.style.transform = `translate(${ANCHOR_INSET}px, ${ANCHOR_INSET}px) rotate(${angle}deg)`;\n  };\n\n  let rafId = 0;\n  const tick = () => {\n    history.unshift({ x: pointerX, y: pointerY });\n    if (history.length > TRAIL_LEN + 1) {\n      history.pop();\n    }\n    const d0 = history[0];\n    dot.style.transform = `translate(-50%,-50%) translate(${d0.x}px, ${d0.y}px)`;\n    for (let i = 0; i < trail.length; i++) {\n      const p = history[i + 1] ?? history[history.length - 1];\n      trail[i].style.transform = `translate(-50%,-50%) translate(${p.x}px, ${p.y}px)`;\n    }\n    rafId = window.requestAnimationFrame(tick);\n  };\n\n  const onMove = (e: MouseEvent) => {\n    pointerX = e.clientX;\n    pointerY = e.clientY;\n    positionLaser();\n  };\n\n  positionLaser();\n  rafId = window.requestAnimationFrame(tick);\n\n  document.addEventListener(\"mousemove\", onMove);\n  window.addEventListener(\"resize\", positionLaser);\n  window.addEventListener(\"scroll\", positionLaser, { passive: true });\n\n  return () => {\n    window.cancelAnimationFrame(rafId);\n    document.removeEventListener(\"mousemove\", onMove);\n    window.removeEventListener(\"resize\", positionLaser);\n    window.removeEventListener(\"scroll\", positionLaser);\n    if (dot.parentNode) {\n      dot.parentNode.removeChild(dot);\n    }\n    for (const t of trail) {\n      if (t.parentNode) {\n        t.parentNode.removeChild(t);\n      }\n    }\n    if (laser.parentNode) {\n      laser.parentNode.removeChild(laser);\n    }\n    document.body.style.cursor = \"\";\n  };\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/obstacle-filters.ts",
      "content": "import { MIN_OBSTACLE_AREA } from \"./constants\";\nimport type { ObstacleRect } from \"./types\";\n\ntype RectLike = {\n  left: number;\n  top: number;\n  right: number;\n  bottom: number;\n  width: number;\n  height: number;\n};\n\nexport function shouldIncludeObstacleRect(\n  rect: RectLike,\n  viewportWidth: number,\n  viewportHeight: number,\n): boolean {\n  if (rect.width * rect.height < MIN_OBSTACLE_AREA) {\n    return false;\n  }\n  if (rect.right < 0 || rect.bottom < 0 || rect.left > viewportWidth || rect.top > viewportHeight) {\n    return false;\n  }\n  if (rect.width > viewportWidth * 0.85 && rect.height > viewportHeight * 0.5) {\n    return false;\n  }\n  return true;\n}\n\nexport function toObstacleRect(rect: RectLike): ObstacleRect {\n  return { left: rect.left, top: rect.top, right: rect.right, bottom: rect.bottom };\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/pathfinding.ts",
      "content": "import { CELL_SIZE, NEIGHBOR_OFFSETS, OBSTACLE_SELECTOR, SPRITE_RADIUS } from \"./constants\";\nimport { shouldIncludeObstacleRect, toObstacleRect } from \"./obstacle-filters\";\nimport type { ObstacleRect, PathPoint } from \"./types\";\n\n// Flat index of the neighbor at (r+dr, c+dc), or -1 if it falls outside the grid.\nfunction neighborIndex(\n  r: number,\n  c: number,\n  dr: number,\n  dc: number,\n  rows: number,\n  cols: number,\n): number {\n  const nr = r + dr;\n  const nc = c + dc;\n  if (nr < 0 || nr >= rows || nc < 0 || nc >= cols) return -1;\n  return nr * cols + nc;\n}\n\nexport function collectObstacles(): ObstacleRect[] {\n  const vw = window.innerWidth;\n  const vh = window.innerHeight;\n  const rects: ObstacleRect[] = [];\n\n  for (const node of document.querySelectorAll(OBSTACLE_SELECTOR)) {\n    if (node.closest('[data-oneko-zone=\"attract\"]')) continue;\n    const r = node.getBoundingClientRect();\n    if (shouldIncludeObstacleRect(r, vw, vh)) {\n      rects.push(toObstacleRect(r));\n    }\n  }\n\n  return rects;\n}\n\nexport function buildGrid(rects: ObstacleRect[], cols: number, rows: number): Uint8Array {\n  const grid = new Uint8Array(cols * rows);\n\n  for (const rect of rects) {\n    const c0 = Math.max(0, Math.floor((rect.left - SPRITE_RADIUS) / CELL_SIZE));\n    const c1 = Math.min(cols - 1, Math.ceil((rect.right + SPRITE_RADIUS) / CELL_SIZE));\n    const r0 = Math.max(0, Math.floor((rect.top - SPRITE_RADIUS) / CELL_SIZE));\n    const r1 = Math.min(rows - 1, Math.ceil((rect.bottom + SPRITE_RADIUS) / CELL_SIZE));\n\n    for (let row = r0; row <= r1; row++) {\n      for (let col = c0; col <= c1; col++) {\n        grid[row * cols + col] = 1;\n      }\n    }\n  }\n\n  return grid;\n}\n\nexport function worldToCell(worldX: number, worldY: number, cols: number, rows: number): number {\n  const col = Math.max(0, Math.min(cols - 1, Math.floor(worldX / CELL_SIZE)));\n  const row = Math.max(0, Math.min(rows - 1, Math.floor(worldY / CELL_SIZE)));\n  return row * cols + col;\n}\n\nfunction cellToWorld(idx: number, cols: number): PathPoint {\n  return {\n    x: ((idx % cols) + 0.5) * CELL_SIZE,\n    y: (Math.floor(idx / cols) + 0.5) * CELL_SIZE,\n  };\n}\n\nexport function nearestWalkable(\n  startIdx: number,\n  grid: Uint8Array,\n  cols: number,\n  rows: number,\n): number {\n  if (grid[startIdx] === 0) {\n    return startIdx;\n  }\n\n  const visited = new Uint8Array(grid.length);\n  const queue: number[] = [startIdx];\n  visited[startIdx] = 1;\n  let head = 0;\n\n  while (head < queue.length) {\n    const idx = queue[head++];\n    const r = Math.floor(idx / cols);\n    const c = idx % cols;\n\n    for (const [dr, dc] of NEIGHBOR_OFFSETS) {\n      const nIdx = neighborIndex(r, c, dr, dc, rows, cols);\n      if (nIdx === -1 || visited[nIdx]) {\n        continue;\n      }\n      visited[nIdx] = 1;\n      if (grid[nIdx] === 0) {\n        return nIdx;\n      }\n      queue.push(nIdx);\n    }\n  }\n\n  return startIdx;\n}\n\nfunction heapBubble(data: [number, number][], i: number): void {\n  let idx = i;\n  while (idx > 0) {\n    const parent = Math.floor((idx - 1) / 2);\n    if (data[parent][0] <= data[idx][0]) {\n      break;\n    }\n    const tmp = data[parent];\n    data[parent] = data[idx];\n    data[idx] = tmp;\n    idx = parent;\n  }\n}\n\nfunction heapSink(data: [number, number][], i: number): void {\n  const n = data.length;\n  let idx = i;\n\n  for (let step = 0; step < n; step++) {\n    let smallest = idx;\n    const left = 2 * idx + 1;\n    const right = 2 * idx + 2;\n    if (left < n && data[left][0] < data[smallest][0]) {\n      smallest = left;\n    }\n    if (right < n && data[right][0] < data[smallest][0]) {\n      smallest = right;\n    }\n    if (smallest === idx) {\n      break;\n    }\n    const tmp = data[smallest];\n    data[smallest] = data[idx];\n    data[idx] = tmp;\n    idx = smallest;\n  }\n}\n\nfunction smoothPath(rawPath: number[], cols: number): PathPoint[] {\n  const points = rawPath.map((idx) => cellToWorld(idx, cols));\n  if (points.length <= 2) {\n    return points;\n  }\n\n  const result: PathPoint[] = [points[0]];\n\n  for (let i = 1; i < points.length - 1; i++) {\n    const prev = result.at(-1) as PathPoint;\n    const cur = points[i];\n    const next = points[i + 1];\n    const cross = (cur.x - prev.x) * (next.y - cur.y) - (cur.y - prev.y) * (next.x - cur.x);\n    if (Math.abs(cross) > 1e-6) {\n      result.push(cur);\n    }\n  }\n\n  result.push(points.at(-1) as PathPoint);\n  return result;\n}\n\nfunction relaxNeighbors(\n  idx: number,\n  cols: number,\n  rows: number,\n  grid: Uint8Array,\n  dist: Float64Array,\n  prev: Int32Array,\n  heap: [number, number][],\n) {\n  const r = Math.floor(idx / cols);\n  const c = idx % cols;\n\n  for (const [dr, dc, edgeCost] of NEIGHBOR_OFFSETS) {\n    const nIdx = neighborIndex(r, c, dr, dc, rows, cols);\n    if (nIdx === -1 || grid[nIdx] === 1) {\n      continue;\n    }\n    if (dr !== 0 && dc !== 0 && (grid[r * cols + c + dc] || grid[(r + dr) * cols + c])) continue;\n    const newDist = dist[idx] + edgeCost;\n    if (newDist < dist[nIdx]) {\n      dist[nIdx] = newDist;\n      prev[nIdx] = idx;\n      heap.push([newDist, nIdx]);\n      heapBubble(heap, heap.length - 1);\n    }\n  }\n}\n\nfunction searchRoute(\n  startIdx: number,\n  goalIdx: number,\n  grid: Uint8Array,\n  cols: number,\n  rows: number,\n): Int32Array | null {\n  const dist = new Float64Array(grid.length).fill(Number.POSITIVE_INFINITY);\n  const prev = new Int32Array(grid.length).fill(-1);\n  const heap: [number, number][] = [];\n\n  dist[startIdx] = 0;\n  heap.push([0, startIdx]);\n\n  while (heap.length > 0) {\n    const top = heap.at(0) as [number, number];\n    const last = heap.at(-1) as [number, number];\n    heap[0] = last;\n    heap.pop();\n    heapSink(heap, 0);\n\n    const [cost, idx] = top;\n    if (idx === goalIdx) {\n      break;\n    }\n    if (cost > dist[idx]) {\n      continue;\n    }\n\n    relaxNeighbors(idx, cols, rows, grid, dist, prev, heap);\n  }\n\n  return Number.isFinite(dist[goalIdx]) ? prev : null;\n}\n\nfunction reconstructCellPath(prev: Int32Array, goalIdx: number): number[] {\n  const rawPath: number[] = [];\n  let cur = goalIdx;\n  while (cur !== -1) {\n    rawPath.push(cur);\n    cur = prev[cur];\n  }\n  rawPath.reverse();\n  return rawPath;\n}\n\nexport function findRoute(\n  startIdx: number,\n  goalIdx: number,\n  grid: Uint8Array,\n  cols: number,\n  rows: number,\n): PathPoint[] {\n  if (startIdx === goalIdx) {\n    return [cellToWorld(startIdx, cols)];\n  }\n\n  const prev = searchRoute(startIdx, goalIdx, grid, cols, rows);\n  if (!prev) {\n    return [];\n  }\n\n  return smoothPath(reconstructCellPath(prev, goalIdx), cols);\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/persistence.ts",
      "content": "import { TILE } from \"./constants\";\nimport type { CatRuntimeState } from \"./types\";\n\nexport function loadPersistedCatState(\n  stateRef: { current: CatRuntimeState },\n  el: HTMLDivElement,\n  storageKey = \"oneko\",\n): void {\n  let parsed: Record<string, unknown> | null = null;\n  try {\n    const raw = window.localStorage.getItem(storageKey);\n    parsed = raw ? JSON.parse(raw) : null;\n  } catch {\n    parsed = null;\n  }\n\n  if (!parsed) {\n    return;\n  }\n\n  const apply = <K extends keyof CatRuntimeState>(key: K, value: unknown) => {\n    if (value !== undefined && value !== null) {\n      stateRef.current[key] = value as CatRuntimeState[K];\n    }\n  };\n\n  apply(\"nekoPosX\", parsed.nekoPosX);\n  apply(\"nekoPosY\", parsed.nekoPosY);\n  apply(\"mousePosX\", parsed.mousePosX);\n  apply(\"mousePosY\", parsed.mousePosY);\n  apply(\"frameCount\", parsed.frameCount);\n  apply(\"idleTime\", parsed.idleTime);\n  apply(\"idleAnimation\", parsed.idleAnimation);\n  apply(\"idleAnimationFrame\", parsed.idleAnimationFrame);\n\n  if (parsed.bgPos) {\n    el.style.backgroundPosition = parsed.bgPos as string;\n  }\n\n  const s0 = stateRef.current;\n  el.style.left = `${s0.nekoPosX - TILE / 2}px`;\n  el.style.top = `${s0.nekoPosY - TILE / 2}px`;\n}\n\nexport function createPersistHandler(\n  stateRef: { current: CatRuntimeState },\n  el: HTMLDivElement,\n  storageKey = \"oneko\",\n): () => void {\n  return () => {\n    try {\n      const s = stateRef.current;\n      window.localStorage.setItem(\n        storageKey,\n        JSON.stringify({\n          nekoPosX: s.nekoPosX,\n          nekoPosY: s.nekoPosY,\n          mousePosX: s.mousePosX,\n          mousePosY: s.mousePosY,\n          frameCount: s.frameCount,\n          idleTime: s.idleTime,\n          idleAnimation: s.idleAnimation,\n          idleAnimationFrame: s.idleAnimationFrame,\n          bgPos: el.style.backgroundPosition,\n        }),\n      );\n    } catch {\n      // ignore\n    }\n  };\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/runtime-config.ts",
      "content": "import { EMPTY_ZONES } from \"./zone-runtime\";\nimport type { OnekoZone } from \"./zones\";\nimport type { CatRuntimeState, OnekoProps } from \"./types\";\n\ntype RuntimeConfigStateFields = Pick<\n  CatRuntimeState,\n  | \"pausedCfg\"\n  | \"followCursorCfg\"\n  | \"sleepEnabledCfg\"\n  | \"bubblePlacementCfg\"\n  | \"bubbleScaleCfg\"\n  | \"soundBasePathCfg\"\n  | \"currentSpeed\"\n  | \"scale\"\n  | \"opacity\"\n  | \"rotationAmount\"\n  | \"idleThresholdMs\"\n  | \"freerunChanceCfg\"\n  | \"freerunDurationCfg\"\n  | \"bubbleEnabledCfg\"\n  | \"bubbleDisplayFramesCfg\"\n  | \"bubbleCooldownFramesCfg\"\n  | \"bubbleChanceCfg\"\n  | \"followDistanceCfg\"\n  | \"animationSpeedCfg\"\n  | \"customBubbleText\"\n  | \"currentRotation\"\n  | \"enableMeow\"\n  | \"soundVolumeCfg\"\n  | \"soundCooldown\"\n  | \"bubbleTimer\"\n  | \"bubbleCooldown\"\n  | \"bubbleVisible\"\n  | \"lastBubbleMsg\"\n  | \"laserPointerCfg\"\n  | \"laserCaught\"\n>;\n\nexport function defaultRuntimeConfigState(): RuntimeConfigStateFields {\n  return {\n    pausedCfg: false,\n    followCursorCfg: true,\n    sleepEnabledCfg: true,\n    bubblePlacementCfg: \"auto\",\n    bubbleScaleCfg: 1,\n    soundBasePathCfg: \"/cat-sounds\",\n    currentSpeed: 0,\n    scale: 1,\n    opacity: 1,\n    rotationAmount: 0,\n    idleThresholdMs: 0,\n    freerunChanceCfg: 0,\n    freerunDurationCfg: 0,\n    bubbleEnabledCfg: true,\n    bubbleDisplayFramesCfg: 0,\n    bubbleCooldownFramesCfg: 0,\n    bubbleChanceCfg: 0,\n    followDistanceCfg: 0,\n    animationSpeedCfg: 1,\n    customBubbleText: \"\",\n    currentRotation: 0,\n    enableMeow: true,\n    soundVolumeCfg: 0,\n    soundCooldown: 0,\n    bubbleTimer: 0,\n    bubbleCooldown: 0,\n    bubbleVisible: false,\n    lastBubbleMsg: -1,\n    laserPointerCfg: false,\n    laserCaught: false,\n  };\n}\n\nexport type CatRuntimeConfig = Pick<\n  OnekoProps,\n  \"paused\" | \"followCursor\" | \"sleepEnabled\" | \"bubblePlacement\" | \"bubbleScale\" | \"soundBasePath\"\n> & {\n  zones?: readonly OnekoZone[];\n  zoneAttractionChance?: number;\n  zoneAttractionDuration?: number;\n  speed: number;\n  scale: number;\n  opacity: number;\n  rotationAmount: number;\n  idleThreshold: number;\n  freerunChance: number;\n  freerunDuration: number;\n  bubbleEnabled: boolean;\n  bubbleDisplayFrames: number;\n  bubbleCooldown: number;\n  bubbleChance: number;\n  followDistance: number;\n  animationSpeed: number;\n  bubbleText: string;\n  meow: boolean;\n  volume: number;\n  laserPointer: boolean;\n};\n\nexport function applyRuntimeConfig(state: CatRuntimeState, config: CatRuntimeConfig): void {\n  state.pausedCfg = config.paused ?? false;\n  state.followCursorCfg = config.followCursor ?? true;\n  state.sleepEnabledCfg = config.sleepEnabled ?? true;\n  state.bubblePlacementCfg =\n    config.bubblePlacement === \"above\" || config.bubblePlacement === \"below\"\n      ? config.bubblePlacement\n      : \"auto\";\n  state.bubbleScaleCfg = Number.isFinite(config.bubbleScale)\n    ? Math.max(0.5, Math.min(2, config.bubbleScale!))\n    : 1;\n  state.soundBasePathCfg = (config.soundBasePath ?? \"/cat-sounds\").replace(/\\/+$/, \"\");\n  if (!state.followCursorCfg) {\n    state.freerunMode = false;\n    state.freerunTimer = 0;\n    state.currentPath = [];\n    state.pathWaypointIdx = 0;\n    state.nekoVelX = 0;\n    state.nekoVelY = 0;\n  }\n  state.zoneState.definitions = config.zones ?? EMPTY_ZONES;\n  state.zoneState.chance = Number.isFinite(config.zoneAttractionChance)\n    ? Math.max(0, Math.min(1, config.zoneAttractionChance!))\n    : 0.3;\n  state.zoneState.duration = Number.isFinite(config.zoneAttractionDuration)\n    ? Math.max(1, Math.min(600, Math.round(config.zoneAttractionDuration! / 100)))\n    : 40;\n  state.currentSpeed = config.speed;\n  state.scale = config.scale;\n  state.opacity = config.opacity;\n  state.rotationAmount = config.rotationAmount;\n  state.idleThresholdMs = config.idleThreshold;\n  state.freerunChanceCfg = config.freerunChance;\n  state.freerunDurationCfg = config.freerunDuration;\n  state.bubbleEnabledCfg = config.bubbleEnabled;\n  state.bubbleDisplayFramesCfg = config.bubbleDisplayFrames;\n  state.bubbleCooldownFramesCfg = config.bubbleCooldown;\n  state.bubbleChanceCfg = config.bubbleChance;\n  state.followDistanceCfg = config.followDistance;\n  state.animationSpeedCfg = config.animationSpeed;\n  state.customBubbleText = config.bubbleText;\n  state.enableMeow = config.meow;\n  state.soundVolumeCfg = config.volume;\n  state.laserPointerCfg = config.laserPointer;\n  if (!config.laserPointer) {\n    state.laserCaught = false;\n  }\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/skin-sheets.json",
      "content": "{\n  \"classic\": \"data:image/png;base64,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\",\n  \"black\": \"data:image/png;base64,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\",\n  \"gray\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAACACAYAAADktbcKAAAAxHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBbDsMgDPvnFDtCEqc8jkNXJu0GO/5CCVOpZgknOGBCQvu8X+HRIaxBt5RjiZEMWrRItSTTQD2ZSU+eYOdFD/MOiUmwiLHN0W9NnRcb4mrZdjV6emFfC0XdP9+M/CH0jsSSw42KG0FGgd2gjm9RLDldv7A3WpHHCp2QTu+fyX2vyaZ3bCZCpIFBxoCOBtAXAmovGAuyHWREy9Vi15N3YgP5N6eJ8AXkiVkc/yYySAAAAYRpQ0NQSUNDIHByb2ZpbGUAAHicfZE9SMNAHMVfU6VSqg52EOmQoTrZRaU4lioWwUJpK7TqYHLpFzQxJCkujoJrwcGPxaqDi7OuDq6CIPgB4uripOgiJf4vKbSI8eC4H+/uPe7eAUKrzlSzLwGommVkU0mxUFwRA68IIoIhRBGXmKmncwt5eI6ve/j4ehfjWd7n/hyDSslkgE8kTjDdsIjXieObls55nzjMqpJCfE48adAFiR+5Lrv8xrnisMAzw0Y+O0ccJhYrPSz3MKsaKvEMcVRRNcoXCi4rnLc4q/UG69yTvzBU0pZzXKcZQQqLSCMDETIaqKEOCzFaNVJMZGk/6eEfc/wZcsnkqoGRYx4bUCE5fvA/+N2tWZ6ecpNCSaD/xbY/xoHALtBu2vb3sW23TwD/M3Cldf0bLWD2k/RmV4seAcPbwMV1V5P3gMsdYPRJlwzJkfw0hXIZeD+jbyoCI7dAcNXtrbOP0wcgT10t3QAHh8BEhbLXPN490Nvbv2c6/f0AHhJy61VOwkYAAA12aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjBiZjU2ODZkLWQ3ZmMtNDk4ZS04YzJhLWQ3NzFkNWMyOGI5NyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowNzFkMGRmNS04ODNjLTQ5OGEtOWE5MS0xNzUxN2M3MmIzZjgiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplYTU0NjFiNi03MWI3LTQ1NTMtODhmMS0wYjVjNWNlMDliMjIiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJXaW5kb3dzIgogICBHSU1QOlRpbWVTdGFtcD0iMTY5ODUwNDA3OTkwNzIzNyIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjM0IgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMzoxMDoyOFQxNjo0MToxNyswMjowMCIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjM6MTA6MjhUMTY6NDE6MTcrMDI6MDAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo5OTkwM2U4Yi1iMTViLTQ1MDUtYTRjOC1jZTc1M2Q1MWE2YWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoV2luZG93cykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjMtMTAtMjhUMTY6NDE6MTkiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+eC29xAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+cKHA4pE12MgiMAACAASURBVHgB7X2Ncty4zqzPLb/3Jk/+XTaNppsQSIKSZjzeHVXJAPHTaICUPHaS3Y+P/PV/JRQ3L9Vh49pLxr/l75oA9pF7+buYv9mmJ/D/kpH/9+fPnw/c5XofiuTQfnvYe79/+w6u+WdfACMkfpcYvRToH+Vn7MQYyQzGO+bkBN4vgZOD+yVp/0vwDB9uOxgt3a/NkcFvGIFSP3monXUgqRf/1Tpa4tm6zveRfaBOhM/63tfN3mbtY549q3e9r0/gs30Y7XM4uxkQE9pBcA8d/Z1kzA0Hxn7s+OcLv7T15+/frhYXVotLykxvjP1J2c23EHkE79FDjr7pg47adR3NVGyP4Ij62Qscn8mBM3pmzWgW9kz8gS/isvIfMNM/AmDzeQD+/PnnAESbxh2C8gYOvNT8+3W7h1/rUKfMl3nJyNb7TezaCyaBpwfoEC7zvZvjodbE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\",\n  \"calico\": \"data:image/png;base64,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\",\n  \"tora\": \"data:image/png;base64,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\",\n  \"catppuccin\": \"data:image/png;base64,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\",\n  \"ghost\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAACACAYAAADktbcKAAAAw3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBbDsMgDPvnFDtCEqc8jkPXTtoNdvwFCFOpZikmOGBCwvl5v8KjQViDbinHEiMZtGiRakmmgdqZSTtPsPOih3mHxCTYirHN0W9NnRcb4mrZdjV6emFfC0XdP9+M/CG0jsSSw42KG0FGgd2gjm9RLDldv7CftCKPCI2QuvfP5L7XZNM7NhMhcoJBxoCOBtACAbUVjAXZDjKi5doVQvRObCD/5jQRvuQJWRnxRXjfAAABhGlDQ1BJQ0MgcHJvZmlsZQAAeJx9kT1Iw0AcxV9TpVKqDnYQ6ZChOtlFpTiWKhbBQmkrtOpgcukXNDEkKS6OgmvBwY/FqoOLs64OroIg+AHi6uKk6CIl/i8ptIjx4Lgf7+497t4BQqvOVLMvAaiaZWRTSbFQXBEDrwgigiFEEZeYqadzC3l4jq97+Ph6F+NZ3uf+HINKyWSATyROMN2wiNeJ45uWznmfOMyqkkJ8Tjxp0AWJH7kuu/zGueKwwDPDRj47RxwmFis9LPcwqxoq8QxxVFE1yhcKLiuctzir9Qbr3JO/MFTSlnNcpxlBCotIIwMRMhqooQ4LMVo1UkxkaT/p4R9z/BlyyeSqgZFjHhtQITl+8D/43a1Znp5yk0JJoP/Ftj/GgcAu0G7a9vexbbdPAP8zcKV1/RstYPaT9GZXix4Bw9vAxXVXk/eAyx1g9EmXDMmR/DSFchl4P6NvKgIjt0Bw1e2ts4/TByBPXS3dAAeHwESFstc83j3Q29u/Zzr9/QAeEnLrVU7CRgAADXZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6OGE1YWQ2MjktYmIwYi00MDYxLWE4ZGItNTE2NDExNWE3OTlhIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjEwYmNjMmQzLWZjMzAtNDUxNC04ZjA2LWNlYWQwMjdkZTZjNSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjNiN2Q2NzIxLTg3MDktNDBmZS1hOTliLWY3MjkzMzI1YzZmYSIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IldpbmRvd3MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNjk4NTA0MDEyNjQwNDgyIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzQiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDIzOjEwOjI4VDE2OjQwOjA2KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMzoxMDoyOFQxNjo0MDowNiswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmZhZjQ5OTlmLTY1YmQtNGQ5MS05OTNmLWU2MzQ0MWIxNzA1MSIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChXaW5kb3dzKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMy0xMC0yOFQxNjo0MDoxMiIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz7mtiLfAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5wocDigMyZ++lwAAIABJREFUeAHtnb2vbtl91w/DDI6RTTQS1kRKghwUjIUUipCGBuqgEIWChs4SMoW70KD8AXShcxErkjuaFOHFUupEQjQORZBQcFASBSwlSiTLsYUzDIw5n33P55nv+Z219l5r7/2cc+/4WdK+a63f+r2/7f283Ofc3Q2Or33h17/PJfp/+OJ/vKyBua+z+Lf5zfJAjfebpf1N21EPvDWCSDL8+d//O3dc2QRGaG84b64HbvF+c2M3qvnbo4hvffcv7j781A9d0N/64P8+agYfXk7OXWw1nJ/76j/5S+dKvHFLDyxN4O7Xv3/zc3rl47PefAKgAL/7U3/zkcXC/vSf/sM7Ls5tCM6PCHZukAN/nz6Yf+Srv3H3zS/9wiITuVsNYqfoZyNDf69rCt3jJ5o+18fBz9f07XPy3orj1nnVdfPu6Wt6Cf/35//GssynAQAkCuOv/u4f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\",\n  \"silver\": \"data:image/png;base64,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\",\n  \"spirit\": \"data:image/png;base64,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\",\n  \"valentine\": \"data:image/png;base64,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\",\n  \"maia\": \"data:image/png;base64,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\",\n  \"vaporwave\": \"data:image/png;base64,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\"\n}\n",
      "type": "registry:lib",
      "target": "lib/oneko/skin-sheets.json"
    },
    {
      "path": "lib/oneko/skins.ts",
      "content": "import sheets from \"./skin-sheets.json\";\n\nexport type OnekoSkin = keyof typeof sheets;\n\n/** Original, unmodified pixel art. See docs/skins.md for provenance and credits. */\nexport const ONEKO_SKINS = [\n  { id: \"classic\", name: \"Classic\", description: \"The little cat that started it all\" },\n  { id: \"black\", name: \"Black\", description: \"A tiny midnight shadow\" },\n  { id: \"gray\", name: \"Gray\", description: \"Soft fur, softer footsteps\" },\n  { id: \"calico\", name: \"Calico\", description: \"A patchwork of mischief\" },\n  { id: \"tora\", name: \"Tora\", description: \"A little tiger at heart\" },\n  { id: \"catppuccin\", name: \"Catppuccin\", description: \"A warm cup of cat\" },\n  { id: \"ghost\", name: \"Ghost\", description: \"A pleasantly spooky companion\" },\n  { id: \"silver\", name: \"Silver\", description: \"Moonlight on little paws\" },\n  { id: \"spirit\", name: \"Spirit\", description: \"A curious little daydream\" },\n  { id: \"valentine\", name: \"Valentine\", description: \"Wears a heart on every paw\" },\n  { id: \"maia\", name: \"Maia\", description: \"Small paws, big personality\" },\n  { id: \"vaporwave\", name: \"Vaporwave\", description: \"Dreaming in pink and purple\" },\n] as const satisfies ReadonlyArray<{ id: OnekoSkin; name: string; description: string }>;\n\nexport function isOnekoSkin(value: unknown): value is OnekoSkin {\n  return typeof value === \"string\" && Object.hasOwn(sheets, value);\n}\n\nexport function getSkinSource(skin: OnekoSkin = \"classic\"): string {\n  return sheets[isOnekoSkin(skin) ? skin : \"classic\"];\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/start-cat-animation.ts",
      "content": "import { refreshZones } from \"./zone-runtime\";\nimport { hideBubble, showBubble } from \"./animation/bubbles\";\nimport { createFrameLoop } from \"./animation/frame\";\nimport { createMouseMoveHandler } from \"./animation/mouse\";\nimport { startAnimationLoop } from \"./animation-loop\";\nimport { BUBBLE_DISPLAY_FRAMES, OBSTACLE_INTERVAL, PATH_RECALC_INTERVAL } from \"./constants\";\nimport { createDebugControls } from \"./debug-controls/index\";\nimport { createBubble, createCatElement, createDebugHUD, createDebugSVG } from \"./dom\";\nimport { createKonamiHandler } from \"./konami\";\nimport { createPersistHandler, loadPersistedCatState } from \"./persistence\";\nimport { teardownCatAnimation } from \"./teardown\";\nimport type { CatActivityState, CatLiveState, CatRuntimeState } from \"./types\";\n\nexport interface StartCatAnimationOptions {\n  stateRef: { current: CatRuntimeState };\n  elRef: { current: HTMLDivElement | null };\n  lastStateRef: { current: CatActivityState };\n  onStateChangeRef: { current: ((state: CatActivityState) => void) | undefined };\n  liveStateRef?: { current: CatLiveState };\n  persistPosition: boolean;\n  storageKey?: string;\n  zIndex: number;\n}\n\nfunction createDebugWrapper(\n  zIndex: number,\n  debugHUD: HTMLDivElement,\n  debugControls: HTMLDivElement,\n) {\n  const debugWrapper = document.createElement(\"div\");\n  debugWrapper.setAttribute(\"aria-hidden\", \"true\");\n  debugWrapper.style.cssText = [\n    \"position:fixed\",\n    \"top:10px\",\n    \"left:10px\",\n    `z-index:${zIndex}`,\n    \"display:none\",\n    \"flex-direction:column\",\n    \"gap:6px\",\n    \"pointer-events:none\",\n  ].join(\";\");\n  debugWrapper.appendChild(debugHUD);\n  debugWrapper.appendChild(debugControls);\n  return debugWrapper;\n}\n\nexport function startCatAnimation({\n  stateRef,\n  elRef,\n  lastStateRef,\n  onStateChangeRef,\n  liveStateRef,\n  persistPosition,\n  storageKey = \"oneko\",\n  zIndex,\n}: StartCatAnimationOptions): () => void {\n  const el = createCatElement(stateRef.current, zIndex);\n  elRef.current = el;\n  const debugSVG = createDebugSVG(zIndex);\n  const debugHUD = createDebugHUD();\n  const { wrapper: bubbleEl, textEl: bubbleTextEl, tailWrap: bubbleTail } = createBubble(zIndex);\n\n  const deps = {\n    stateRef,\n    el,\n    bubbleEl,\n    bubbleTextEl,\n    bubbleTail,\n    debugSVG,\n    debugHUD,\n    lastStateRef,\n    onStateChangeRef,\n    liveStateRef,\n  };\n\n  const frame = createFrameLoop(deps);\n  const debugControls = createDebugControls({\n    stateRef,\n    el,\n    bubbleEl,\n    bubbleTextEl,\n    frame,\n    showBubble: () => showBubble(deps),\n    hideBubble: () => hideBubble(deps),\n    bubbleDisplayFrames: BUBBLE_DISPLAY_FRAMES,\n  });\n  const debugWrapper = createDebugWrapper(zIndex, debugHUD, debugControls);\n\n  if (persistPosition) {\n    loadPersistedCatState(stateRef, el, storageKey);\n  }\n\n  refreshZones(deps);\n\n  document.body.appendChild(debugSVG);\n  document.body.appendChild(debugWrapper);\n  document.body.appendChild(el);\n  document.body.appendChild(bubbleEl);\n\n  const onMouseMove = createMouseMoveHandler(deps);\n  document.addEventListener(\"mousemove\", onMouseMove);\n  const onPointerDown = (event: PointerEvent) => {\n    if (event.pointerType !== \"touch\") return;\n    if (\n      event.target instanceof Element &&\n      event.target.closest(\"button,a,input,select,textarea,label,summary,[role='button']\")\n    )\n      return;\n    onMouseMove(event);\n  };\n  document.addEventListener(\"pointerdown\", onPointerDown);\n\n  const invalidateObstacles = () => {\n    stateRef.current.lastObstacleRefresh = -OBSTACLE_INTERVAL;\n    stateRef.current.lastPathRecalcFrame = -PATH_RECALC_INTERVAL;\n  };\n  window.addEventListener(\"scroll\", invalidateObstacles, { passive: true });\n  window.addEventListener(\"resize\", invalidateObstacles, { passive: true });\n\n  const onBeforeUnload = persistPosition ? createPersistHandler(stateRef, el, storageKey) : null;\n  if (onBeforeUnload) {\n    window.addEventListener(\"beforeunload\", onBeforeUnload);\n  }\n\n  const onKeyDown = createKonamiHandler(stateRef, debugSVG, debugWrapper);\n  document.addEventListener(\"keydown\", onKeyDown);\n\n  const stopAnimationLoop = startAnimationLoop(stateRef, frame);\n\n  return () =>\n    teardownCatAnimation(\n      { el, debugSVG, debugWrapper, bubbleEl },\n      {\n        onMouseMove,\n        onPointerDown,\n        onKeyDown,\n        invalidateObstacles,\n        onBeforeUnload,\n        stopAnimationLoop,\n      },\n    );\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/teardown.ts",
      "content": "type CatAnimationElements = {\n  el: HTMLDivElement;\n  debugSVG: SVGSVGElement;\n  debugWrapper: HTMLDivElement;\n  bubbleEl: HTMLDivElement;\n};\n\ntype CatAnimationListeners = {\n  onMouseMove: (ev: MouseEvent) => void;\n  onPointerDown: (event: PointerEvent) => void;\n  onKeyDown: (e: KeyboardEvent) => void;\n  invalidateObstacles: () => void;\n  onBeforeUnload: (() => void) | null;\n  stopAnimationLoop: () => void;\n};\n\nexport function teardownCatAnimation(\n  { el, debugSVG, debugWrapper, bubbleEl }: CatAnimationElements,\n  {\n    onMouseMove,\n    onPointerDown,\n    onKeyDown,\n    invalidateObstacles,\n    onBeforeUnload,\n    stopAnimationLoop,\n  }: CatAnimationListeners,\n) {\n  document.removeEventListener(\"mousemove\", onMouseMove);\n  document.removeEventListener(\"pointerdown\", onPointerDown);\n  document.removeEventListener(\"keydown\", onKeyDown);\n  window.removeEventListener(\"scroll\", invalidateObstacles);\n  window.removeEventListener(\"resize\", invalidateObstacles);\n  if (onBeforeUnload) {\n    window.removeEventListener(\"beforeunload\", onBeforeUnload);\n  }\n  stopAnimationLoop();\n\n  for (const node of [el, debugSVG, debugWrapper, bubbleEl]) {\n    if (node.parentNode) {\n      node.parentNode.removeChild(node);\n    }\n  }\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/types.ts",
      "content": "import type { OnekoZone } from \"./zones\";\nimport type { ZoneRuntimeState } from \"./zone-runtime\";\nimport type { OnekoSkin } from \"./skins\";\n\nexport type CatActivityState =\n  | \"idle\"\n  | \"moving\"\n  | \"sleeping\"\n  | \"scratchSelf\"\n  | \"tired\"\n  | \"alert\"\n  | \"scratchWallN\"\n  | \"scratchWallS\"\n  | \"scratchWallE\"\n  | \"scratchWallW\"\n  | \"freerun\";\n\nexport type IdleActivityState = Exclude<CatActivityState, \"idle\" | \"moving\" | \"freerun\">;\n\nexport interface CatLiveState {\n  state: CatActivityState;\n  posX: number;\n  posY: number;\n  velMag: number;\n  idleTime: number;\n  distToMouse: number;\n  frameCount: number;\n  freerunActive: boolean;\n  freerunTimer: number;\n  bubbleVisible: boolean;\n  pathLength: number;\n  obstacleCount: number;\n}\n\nexport interface OnekoProps {\n  /** Freeze animation in place without unmounting. Default false. */\n  paused?: boolean;\n  /** Chase the pointer and visit favorite spots. False keeps the cat resting in place. Default true. */\n  followCursor?: boolean;\n  /** Allow the cat to nap while idle. Default true. */\n  sleepEnabled?: boolean;\n  /** Preferred bubble side; auto chooses the side with room. Default auto. */\n  bubblePlacement?: \"auto\" | \"above\" | \"below\";\n  /** Bubble size multiplier, in addition to scale (0.5–2). Default 1. */\n  bubbleScale?: number;\n  /** Directory URL for the optional .ogg sounds. Default /cat-sounds. */\n  soundBasePath?: string;\n  /** localStorage key for position persistence. Default oneko. */\n  storageKey?: string;\n  /** Strict keep-out areas and occasional favorite spots. DOM data-oneko-zone attributes also work. */\n  zones?: readonly OnekoZone[];\n  /** Chance to visit a favorite at each five-second check (0–1). Default 0.3. */\n  zoneAttractionChance?: number;\n  /** Time spent pursuing a favorite, in milliseconds. Default 4000. */\n  zoneAttractionDuration?: number;\n  /** Built-in pixel-art skin. Default classic. */\n  skin?: OnekoSkin;\n  persistPosition?: boolean;\n  zIndex?: number;\n  initialPos?: { x: number; y: number };\n  speed?: number;\n  scale?: number;\n  opacity?: number;\n  rotationAmount?: number;\n  idleThreshold?: number;\n  meow?: boolean;\n  onStateChange?: (state: CatActivityState) => void;\n  /** Probability per frame cat enters freerun mode (0–1). Default 0.06 */\n  freerunChance?: number;\n  /** Duration of freerun in frames. Default 40 */\n  freerunDuration?: number;\n  /** Whether chat bubbles are enabled. Default true */\n  bubbleEnabled?: boolean;\n  /** How many frames a bubble stays visible. Default 180 */\n  bubbleDisplayFrames?: number;\n  /** Cooldown frames between bubbles. Default 120 */\n  bubbleCooldown?: number;\n  /** CSS hue-rotate degrees (0–360). Default 0 */\n  hueRotate?: number;\n  /** Mutable ref that oneko writes live state to every frame */\n  liveStateRef?: { current: CatLiveState };\n  /** Bubble trigger probability while idle (0–1). Default 0.5 */\n  bubbleChance?: number;\n  /** Distance in px at which cat stops chasing cursor. Default 20 */\n  followDistance?: number;\n  /** Multiplier for idle animation speed (0.5–2). Default 1 */\n  animationSpeed?: number;\n  /** Custom text injected into the idle bubble message pool */\n  bubbleText?: string;\n  /** Sound volume (0–1). Default 0.5 */\n  volume?: number;\n  /** Show a red laser dot in place of the system cursor. Default false */\n  laserPointer?: boolean;\n}\n\nexport interface ObstacleRect {\n  left: number;\n  top: number;\n  right: number;\n  bottom: number;\n}\n\nexport interface PathPoint {\n  x: number;\n  y: number;\n}\n\nexport interface CatRuntimeState {\n  zoneState: ZoneRuntimeState;\n  nekoPosX: number;\n  nekoPosY: number;\n  nekoVelX: number;\n  nekoVelY: number;\n  mousePosX: number;\n  mousePosY: number;\n  frameCount: number;\n  idleTime: number;\n  idleAnimation: IdleActivityState | null;\n  idleAnimationFrame: number;\n  obstacleRects: ObstacleRect[];\n  lastObstacleRefresh: number;\n  grid: Uint8Array | null;\n  gridCols: number;\n  gridRows: number;\n  currentPath: PathPoint[];\n  pathWaypointIdx: number;\n  lastPathRecalcFrame: number;\n  lastPathTargetCol: number;\n  lastPathTargetRow: number;\n  debugMode: boolean;\n  paused: boolean;\n  pausedCfg: boolean;\n  followCursorCfg: boolean;\n  sleepEnabledCfg: boolean;\n  bubblePlacementCfg: NonNullable<OnekoProps[\"bubblePlacement\"]>;\n  bubbleScaleCfg: number;\n  soundBasePathCfg: string;\n  stateLocked: boolean;\n  noFollow: boolean;\n  currentSpeed: number;\n  scale: number;\n  opacity: number;\n  rotationAmount: number;\n  idleThresholdMs: number;\n  freerunChanceCfg: number;\n  freerunDurationCfg: number;\n  bubbleEnabledCfg: boolean;\n  bubbleDisplayFramesCfg: number;\n  bubbleCooldownFramesCfg: number;\n  bubbleChanceCfg: number;\n  followDistanceCfg: number;\n  animationSpeedCfg: number;\n  customBubbleText: string;\n  currentRotation: number;\n  enableMeow: boolean;\n  soundVolumeCfg: number;\n  soundCooldown: number;\n  bubbleTimer: number;\n  bubbleCooldown: number;\n  bubbleVisible: boolean;\n  lastBubbleMsg: number;\n  loopPrevAngle: number | null;\n  mouseCircleWinding: number;\n  freerunMode: boolean;\n  freerunTimer: number;\n  lastFreerunMsg: number;\n  laserPointerCfg: boolean;\n  laserCaught: boolean;\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/zone-runtime.ts",
      "content": "import { OBSTACLE_INTERVAL, PATH_RECALC_INTERVAL, TILE } from \"./constants\";\nimport {\n  catZoneRadius,\n  collectZones,\n  containsPoint,\n  expandRect,\n  nearestSafePoint,\n  type OnekoZone,\n  type ResolvedZone,\n} from \"./zones\";\nimport type { CatRuntimeState, ObstacleRect, PathPoint } from \"./types\";\nimport type { CatAnimationDeps } from \"./animation/deps\";\n\nexport const EMPTY_ZONES: readonly OnekoZone[] = [];\nexport type ZoneRuntimeState = {\n  definitions: readonly OnekoZone[];\n  blocked: ObstacleRect[];\n  favorites: ResolvedZone[];\n  signature: string;\n  targetId: string | null;\n  visitFrames: number;\n  cooldownFrames: number;\n  chance: number;\n  duration: number;\n  movementTarget: PathPoint;\n};\n\nexport function createZoneState(): ZoneRuntimeState {\n  return {\n    definitions: EMPTY_ZONES,\n    blocked: [],\n    favorites: [],\n    signature: \"\",\n    targetId: null,\n    visitFrames: 0,\n    cooldownFrames: 50,\n    chance: 0.3,\n    duration: 40,\n    movementTarget: { x: 0, y: 0 },\n  };\n}\n\nexport function refreshZones(deps: CatAnimationDeps): boolean {\n  const s = deps.stateRef.current,\n    zones = s.zoneState;\n  const resolved = collectZones(zones.definitions);\n  const radius = catZoneRadius(s.scale);\n  const signature = JSON.stringify([resolved, radius]);\n  if (signature !== zones.signature) {\n    zones.signature = signature;\n    zones.blocked = resolved\n      .filter((zone) => zone.type === \"avoid\")\n      .map((zone) => expandRect(zone.rect, radius));\n    zones.favorites = resolved.filter((zone) => zone.type === \"attract\");\n    s.lastObstacleRefresh = -OBSTACLE_INTERVAL;\n    s.lastPathRecalcFrame = -PATH_RECALC_INTERVAL;\n  }\n  if (!zones.blocked.length) {\n    deps.el.style.visibility = \"\";\n    deps.bubbleEl.style.visibility = \"\";\n    return true;\n  }\n  const safe = nearestSafePoint(\n    { x: s.nekoPosX, y: s.nekoPosY },\n    zones.blocked,\n    window.innerWidth,\n    window.innerHeight,\n    radius,\n  );\n  deps.el.style.visibility = safe ? \"\" : \"hidden\";\n  deps.bubbleEl.style.visibility = safe ? \"\" : \"hidden\";\n  if (!safe) {\n    s.nekoVelX = 0;\n    s.nekoVelY = 0;\n    return false;\n  }\n  if (safe.x !== s.nekoPosX || safe.y !== s.nekoPosY) {\n    s.nekoPosX = safe.x;\n    s.nekoPosY = safe.y;\n    s.nekoVelX = 0;\n    s.nekoVelY = 0;\n    deps.el.style.left = `${safe.x - TILE / 2}px`;\n    deps.el.style.top = `${safe.y - TILE / 2}px`;\n    s.lastPathRecalcFrame = -PATH_RECALC_INTERVAL;\n  }\n  return true;\n}\n\n/** Favorites are sampled every five seconds, with a quiet gap after each visit. */\nexport function updateZoneTarget(\n  s: CatRuntimeState,\n  width: number,\n  height: number,\n  random = Math.random,\n): void {\n  const zones = s.zoneState;\n  const oldId = zones.targetId;\n  const radius = catZoneRadius(s.scale);\n  const favorites = zones.favorites.filter((zone) => {\n    const point = {\n      x: (zone.rect.left + zone.rect.right) / 2,\n      y: (zone.rect.top + zone.rect.bottom) / 2,\n    };\n    return (\n      point.x >= radius &&\n      point.x <= width - radius &&\n      point.y >= radius &&\n      point.y <= height - radius &&\n      !zones.blocked.some((rect) => containsPoint(rect, point))\n    );\n  });\n  // The laser toy and explicit debug controls keep priority over occasional visits.\n  if (\n    !s.followCursorCfg ||\n    s.laserPointerCfg ||\n    s.noFollow ||\n    s.stateLocked ||\n    zones.chance === 0\n  ) {\n    zones.targetId = null;\n    zones.visitFrames = 0;\n    zones.cooldownFrames = 50;\n  } else if (zones.targetId) {\n    zones.visitFrames--;\n    if (zones.visitFrames <= 0 || !favorites.some((zone) => zone.id === zones.targetId)) {\n      zones.targetId = null;\n      zones.cooldownFrames = 80;\n    }\n  } else if (--zones.cooldownFrames <= 0) {\n    zones.cooldownFrames = 50;\n    if (favorites.length && random() < zones.chance) {\n      const index = Math.min(favorites.length - 1, Math.floor(random() * favorites.length));\n      zones.targetId = favorites[index].id;\n      zones.visitFrames = zones.duration;\n    }\n  }\n  const favorite = favorites.find((zone) => zone.id === zones.targetId);\n  const desired = !s.followCursorCfg\n    ? { x: s.nekoPosX, y: s.nekoPosY }\n    : favorite\n      ? {\n          x: (favorite.rect.left + favorite.rect.right) / 2,\n          y: (favorite.rect.top + favorite.rect.bottom) / 2,\n        }\n      : { x: s.mousePosX, y: s.mousePosY };\n  zones.movementTarget = zones.blocked.length\n    ? (nearestSafePoint(desired, zones.blocked, width, height, radius) ?? {\n        x: s.nekoPosX,\n        y: s.nekoPosY,\n      })\n    : desired;\n  if (oldId !== zones.targetId) s.lastPathRecalcFrame = -PATH_RECALC_INTERVAL;\n}\n",
      "type": "registry:lib"
    },
    {
      "path": "lib/oneko/zones.ts",
      "content": "import { TILE } from \"./constants\";\nimport type { ObstacleRect, PathPoint } from \"./types\";\n\nexport type OnekoZone = {\n  id: string;\n  type: \"avoid\" | \"attract\";\n  /** CSS selector. All matching visible elements become zones. */\n  selector?: string;\n  /** Fixed viewport coordinates in CSS pixels; selector takes precedence. */\n  rect?: ObstacleRect;\n  /** Extra space outside a keep-out zone, in pixels. */\n  padding?: number;\n};\n\nexport type ResolvedZone = { id: string; type: OnekoZone[\"type\"]; rect: ObstacleRect };\n\nexport function isValidRect(rect: ObstacleRect): boolean {\n  return (\n    Object.values(rect).every(Number.isFinite) && rect.right > rect.left && rect.bottom > rect.top\n  );\n}\n\nexport function expandRect(rect: ObstacleRect, padding: number): ObstacleRect {\n  return {\n    left: rect.left - padding,\n    top: rect.top - padding,\n    right: rect.right + padding,\n    bottom: rect.bottom + padding,\n  };\n}\n\nexport function containsPoint(rect: ObstacleRect, point: PathPoint): boolean {\n  return point.x > rect.left && point.x < rect.right && point.y > rect.top && point.y < rect.bottom;\n}\n\n/** Conservative radius also protects the corners when a scaled cat tilts. */\nexport function catZoneRadius(scale: number): number {\n  return (TILE / 2) * Math.max(0.1, Number.isFinite(scale) ? scale : 1) * Math.SQRT2 + 1;\n}\n\nconst elementIds = new WeakMap<Element, number>();\nlet nextElementId = 0;\nfunction zoneElementId(element: Element): number {\n  if (!elementIds.has(element)) elementIds.set(element, ++nextElementId);\n  return elementIds.get(element)!;\n}\n\nexport function collectZones(zones: readonly OnekoZone[]): ResolvedZone[] {\n  const result: ResolvedZone[] = [];\n  const add = (id: string, type: OnekoZone[\"type\"], rect: ObstacleRect, padding = 0) => {\n    if (!isValidRect(rect)) return;\n    const extra = Number.isFinite(padding) ? Math.max(0, padding) : 0;\n    result.push({ id, type, rect: expandRect(rect, type === \"avoid\" ? extra : 0) });\n  };\n  const addElement = (id: string, type: OnekoZone[\"type\"], element: Element, padding = 0) => {\n    const style = getComputedStyle(element);\n    if (style.visibility === \"hidden\" || style.display === \"none\") return;\n    const { left, top, right, bottom } = element.getBoundingClientRect();\n    add(id, type, { left, top, right, bottom }, padding);\n  };\n  for (const zone of zones) {\n    if (zone.type !== \"avoid\" && zone.type !== \"attract\") continue;\n    if (zone.selector) {\n      try {\n        document\n          .querySelectorAll(zone.selector)\n          .forEach((element) =>\n            addElement(`${zone.id}:${zoneElementId(element)}`, zone.type, element, zone.padding),\n          );\n      } catch {\n        /* A stale or invalid selector must not stop the cat. */\n      }\n    } else if (zone.rect) add(zone.id, zone.type, zone.rect, zone.padding);\n  }\n  document\n    .querySelectorAll('[data-oneko-zone=\"avoid\"], [data-oneko-zone=\"attract\"]')\n    .forEach((element) => {\n      addElement(\n        `data-zone:${zoneElementId(element)}`,\n        element.getAttribute(\"data-oneko-zone\") as OnekoZone[\"type\"],\n        element,\n      );\n    });\n  return result;\n}\n\n/** Find a safe center even when zones overlap or appear around a resting cat. */\nexport function nearestSafePoint(\n  point: PathPoint,\n  blocked: ObstacleRect[],\n  width: number,\n  height: number,\n  margin: number,\n): PathPoint | null {\n  if (width < margin * 2 || height < margin * 2) return null;\n  const clampX = (x: number) => Math.max(margin, Math.min(width - margin, x));\n  const clampY = (y: number) => Math.max(margin, Math.min(height - margin, y));\n  const origin = { x: clampX(point.x), y: clampY(point.y) };\n  if (!blocked.some((rect) => containsPoint(rect, origin))) return origin;\n  const xs = [\n    origin.x,\n    margin,\n    width - margin,\n    ...blocked.flatMap((rect) => [rect.left, rect.right]),\n  ].map(clampX);\n  const ys = [\n    origin.y,\n    margin,\n    height - margin,\n    ...blocked.flatMap((rect) => [rect.top, rect.bottom]),\n  ].map(clampY);\n  let closest: PathPoint | null = null;\n  let distance = Infinity;\n  for (const x of xs)\n    for (const y of ys) {\n      const candidate = { x, y };\n      if (blocked.some((rect) => containsPoint(rect, candidate))) continue;\n      const nextDistance = Math.hypot(x - point.x, y - point.y);\n      if (nextDistance < distance) {\n        distance = nextDistance;\n        closest = candidate;\n      }\n    }\n  return closest;\n}\n\n/** Swept collision: a fast cat cannot jump over a thin forbidden zone between ticks. */\nexport function constrainZoneMovement(\n  from: PathPoint,\n  to: PathPoint,\n  blocked: ObstacleRect[],\n): PathPoint {\n  let limit = 1;\n  const dx = to.x - from.x,\n    dy = to.y - from.y;\n  for (const rect of blocked) {\n    let enter = -Infinity,\n      leave = Infinity;\n    let misses = false;\n    for (const [position, delta, min, max] of [\n      [from.x, dx, rect.left, rect.right],\n      [from.y, dy, rect.top, rect.bottom],\n    ]) {\n      if (Math.abs(delta) < 1e-9) {\n        if (position <= min || position >= max) {\n          misses = true;\n          break;\n        }\n      } else {\n        const a = (min - position) / delta,\n          b = (max - position) / delta;\n        enter = Math.max(enter, Math.min(a, b));\n        leave = Math.min(leave, Math.max(a, b));\n      }\n    }\n    if (!misses && enter < leave && leave > 0 && enter >= 0 && enter < limit)\n      limit = Math.max(0, enter - 0.001);\n  }\n  return { x: from.x + dx * limit, y: from.y + dy * limit };\n}\n",
      "type": "registry:lib"
    }
  ],
  "docs": "Includes the React component, animation hooks, engine, 12 bundled pixel-art skins, and skin credits. Customize paused, followCursor, sleepEnabled, bubblePlacement, and bubbleScale without remounting. Mark elements with data-oneko-zone=\"avoid\" or data-oneko-zone=\"attract\", or pass zones using selectors or viewport rectangles. Render from a client-only entry point. Optional: copy sound files to public/cat-sounds/, set soundBasePath to your sound directory, or set meow={false}. Use storageKey for independent saved positions.",
  "categories": ["visualization", "misc"],
  "type": "registry:component"
}
